diff --git a/.directory b/.directory new file mode 100644 index 00000000..f872e7a4 --- /dev/null +++ b/.directory @@ -0,0 +1,4 @@ +[Dolphin] +Timestamp=2015,4,27,11,15,6 +Version=3 +ViewMode=2 diff --git a/.gitignore b/.gitignore index 2a6b536f..71ad9428 100755 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ _base_d7.tmproj *.sublime-project* node_modules + +.sass-cache diff --git a/materio_base_d7-updated.sql b/materio_base_d7-updated.sql new file mode 100644 index 00000000..9eb7e04f Binary files /dev/null and b/materio_base_d7-updated.sql differ diff --git a/sites/all/.directory b/sites/all/.directory new file mode 100644 index 00000000..46462e04 --- /dev/null +++ b/sites/all/.directory @@ -0,0 +1,4 @@ +[Dolphin] +Timestamp=2015,4,27,12,4,40 +Version=3 +ViewMode=2 diff --git a/sites/all/modules/features/materio_home_v2/materio_home_v2.features.inc b/sites/all/modules/features/materio_home_v2/materio_home_v2.features.inc new file mode 100644 index 00000000..b0cafbdd --- /dev/null +++ b/sites/all/modules/features/materio_home_v2/materio_home_v2.features.inc @@ -0,0 +1,24 @@ + "1"); + } + if ($module == "panels_mini" && $api == "panels_default") { + return array("version" => "1"); + } +} + +/** + * Implements hook_views_api(). + */ +function materio_home_v2_views_api($module = NULL, $api = NULL) { + return array("api" => "3.0"); +} diff --git a/sites/all/modules/features/materio_home_v2/materio_home_v2.features.menu_custom.inc b/sites/all/modules/features/materio_home_v2/materio_home_v2.features.menu_custom.inc new file mode 100644 index 00000000..5ae893c2 --- /dev/null +++ b/sites/all/modules/features/materio_home_v2/materio_home_v2.features.menu_custom.inc @@ -0,0 +1,27 @@ + 'menu-home-v2', + 'title' => 'Menu home v2', + 'description' => '', + 'language' => 'und', + 'i18n_mode' => 5, + ); + // Translatables + // Included for use with string extractors like potx. + t('Menu home v2'); + + + return $menus; +} diff --git a/sites/all/modules/features/materio_home_v2/materio_home_v2.info b/sites/all/modules/features/materio_home_v2/materio_home_v2.info new file mode 100644 index 00000000..1963f033 --- /dev/null +++ b/sites/all/modules/features/materio_home_v2/materio_home_v2.info @@ -0,0 +1,24 @@ +name = Materio home v2 +core = 7.x +package = Materio +dependencies[] = ctools +dependencies[] = entity +dependencies[] = features +dependencies[] = materio_publications +dependencies[] = menu +dependencies[] = page_manager +dependencies[] = panels +dependencies[] = panels_mini +dependencies[] = panels_node +dependencies[] = views +dependencies[] = views_content +features[ctools][] = page_manager:pages_default:1 +features[ctools][] = panels_mini:panels_default:1 +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[menu_custom][] = menu-home-v2 +features[page_manager_pages][] = home_v2 +features[panels_mini][] = news_home_v2 +features[views_view][] = news_home_v2 +features[views_view][] = publication_home_v2 +project path = sites/all/modules/features diff --git a/sites/all/modules/features/materio_home_v2/materio_home_v2.module b/sites/all/modules/features/materio_home_v2/materio_home_v2.module new file mode 100644 index 00000000..744e43b7 --- /dev/null +++ b/sites/all/modules/features/materio_home_v2/materio_home_v2.module @@ -0,0 +1,7 @@ +disabled = FALSE; /* Edit this to true to make a default page disabled initially */ + $page->api_version = 1; + $page->name = 'home_v2'; + $page->task = 'page'; + $page->admin_title = 'Home V2'; + $page->admin_description = ''; + $page->path = 'home'; + $page->access = array( + 'plugins' => array( + 0 => array( + 'name' => 'role', + 'settings' => array( + 'rids' => array( + 0 => 3, + 1 => 4, + ), + ), + 'context' => 'logged-in-user', + 'not' => FALSE, + ), + ), + 'logic' => 'and', + ); + $page->menu = array(); + $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_home_v2__panel_context_2bd92edc-8b2b-42d3-9857-f44f03574847'; + $handler->task = 'page'; + $handler->subtask = 'home_v2'; + $handler->handler = 'panel_context'; + $handler->weight = 0; + $handler->conf = array( + 'title' => 'Panneau', + 'no_blocks' => 0, + 'pipeline' => 'standard', + 'body_classes_to_remove' => '', + 'body_classes_to_add' => '', + 'css_id' => 'homev2', + 'css' => '', + 'contexts' => array(), + 'relationships' => array(), + ); + $display = new panels_display(); + $display->layout = 'onecol'; + $display->layout_settings = array(); + $display->panel_settings = array( + 'style_settings' => array( + 'default' => NULL, + 'middle' => NULL, + ), + ); + $display->cache = array(); + $display->title = ''; + $display->uuid = 'eca54323-0377-4ab0-b40c-69b96c16707a'; + $display->content = array(); + $display->panels = array(); + $pane = new stdClass(); + $pane->pid = 'new-78b5df28-c9fd-4904-8910-aa1b96c60e35'; + $pane->panel = 'middle'; + $pane->type = 'block'; + $pane->subtype = 'menu-menu-home-v2'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'override_title' => 1, + 'override_title_text' => '', + 'override_title_heading' => 'h3', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array(); + $pane->extras = array(); + $pane->position = 0; + $pane->locks = array(); + $pane->uuid = '78b5df28-c9fd-4904-8910-aa1b96c60e35'; + $display->content['new-78b5df28-c9fd-4904-8910-aa1b96c60e35'] = $pane; + $display->panels['middle'][0] = 'new-78b5df28-c9fd-4904-8910-aa1b96c60e35'; + $pane = new stdClass(); + $pane->pid = 'new-c0f80278-c595-4c40-bcec-11063eb6fac5'; + $pane->panel = 'middle'; + $pane->type = 'node'; + $pane->subtype = 'node'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'nid' => '13051', + 'links' => 1, + 'leave_node_title' => 0, + 'identifier' => 'showroom', + 'build_mode' => 'teaser', + 'link_node_title' => 1, + 'override_title' => 0, + 'override_title_text' => '', + 'override_title_heading' => 'h2', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array( + 'css_id' => '', + 'css_class' => 'showroom', + ); + $pane->extras = array(); + $pane->position = 1; + $pane->locks = array(); + $pane->uuid = 'c0f80278-c595-4c40-bcec-11063eb6fac5'; + $display->content['new-c0f80278-c595-4c40-bcec-11063eb6fac5'] = $pane; + $display->panels['middle'][1] = 'new-c0f80278-c595-4c40-bcec-11063eb6fac5'; + $pane = new stdClass(); + $pane->pid = 'new-71badc43-2232-4c2f-b454-e3be80726a22'; + $pane->panel = 'middle'; + $pane->type = 'node'; + $pane->subtype = 'node'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'nid' => '13052', + 'links' => 1, + 'leave_node_title' => 0, + 'identifier' => 'database', + 'build_mode' => 'teaser', + 'link_node_title' => 1, + 'override_title' => 0, + 'override_title_text' => '', + 'override_title_heading' => 'h2', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array( + 'css_id' => '', + 'css_class' => 'bdd', + ); + $pane->extras = array(); + $pane->position = 2; + $pane->locks = array(); + $pane->uuid = '71badc43-2232-4c2f-b454-e3be80726a22'; + $display->content['new-71badc43-2232-4c2f-b454-e3be80726a22'] = $pane; + $display->panels['middle'][2] = 'new-71badc43-2232-4c2f-b454-e3be80726a22'; + $pane = new stdClass(); + $pane->pid = 'new-3b6cc0fd-a06a-403a-841e-404ea57fe234'; + $pane->panel = 'middle'; + $pane->type = 'panels_mini'; + $pane->subtype = 'news_home_v2'; + $pane->shown = TRUE; + $pane->access = 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( + 'css_id' => '', + 'css_class' => 'news-panel', + ); + $pane->extras = array(); + $pane->position = 3; + $pane->locks = array(); + $pane->uuid = '3b6cc0fd-a06a-403a-841e-404ea57fe234'; + $display->content['new-3b6cc0fd-a06a-403a-841e-404ea57fe234'] = $pane; + $display->panels['middle'][3] = 'new-3b6cc0fd-a06a-403a-841e-404ea57fe234'; + $pane = new stdClass(); + $pane->pid = 'new-e5d39cf0-472b-4779-9d31-a1548fe86bc7'; + $pane->panel = 'middle'; + $pane->type = 'node'; + $pane->subtype = 'node'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'nid' => '13053', + 'links' => 1, + 'leave_node_title' => 0, + 'identifier' => 'formations', + 'build_mode' => 'teaser', + 'link_node_title' => 1, + 'override_title' => 0, + 'override_title_text' => '', + 'override_title_heading' => 'h2', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array( + 'css_id' => '', + 'css_class' => 'formations', + ); + $pane->extras = array(); + $pane->position = 4; + $pane->locks = array(); + $pane->uuid = 'e5d39cf0-472b-4779-9d31-a1548fe86bc7'; + $display->content['new-e5d39cf0-472b-4779-9d31-a1548fe86bc7'] = $pane; + $display->panels['middle'][4] = 'new-e5d39cf0-472b-4779-9d31-a1548fe86bc7'; + $pane = new stdClass(); + $pane->pid = 'new-9718c81e-6055-4e4e-a0e5-3796d58c6cbe'; + $pane->panel = 'middle'; + $pane->type = 'node'; + $pane->subtype = 'node'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'nid' => '13054', + 'links' => 1, + 'leave_node_title' => 0, + 'identifier' => 'services', + 'build_mode' => 'teaser', + 'link_node_title' => 1, + 'override_title' => 0, + 'override_title_text' => '', + 'override_title_heading' => 'h2', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array( + 'css_id' => '', + 'css_class' => 'services', + ); + $pane->extras = array(); + $pane->position = 5; + $pane->locks = array(); + $pane->uuid = '9718c81e-6055-4e4e-a0e5-3796d58c6cbe'; + $display->content['new-9718c81e-6055-4e4e-a0e5-3796d58c6cbe'] = $pane; + $display->panels['middle'][5] = 'new-9718c81e-6055-4e4e-a0e5-3796d58c6cbe'; + $pane = new stdClass(); + $pane->pid = 'new-639eb2c7-bf5d-4920-b1bb-c33d8f72a650'; + $pane->panel = 'middle'; + $pane->type = 'views_panes'; + $pane->subtype = 'publication_home_v2-panel_pane_1'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array(); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array( + 'css_id' => '', + 'css_class' => 'publication', + ); + $pane->extras = array(); + $pane->position = 6; + $pane->locks = array(); + $pane->uuid = '639eb2c7-bf5d-4920-b1bb-c33d8f72a650'; + $display->content['new-639eb2c7-bf5d-4920-b1bb-c33d8f72a650'] = $pane; + $display->panels['middle'][6] = 'new-639eb2c7-bf5d-4920-b1bb-c33d8f72a650'; + $display->hide_title = PANELS_TITLE_NONE; + $display->title_pane = '0'; + $handler->conf['display'] = $display; + $page->default_handlers[$handler->name] = $handler; + $pages['home_v2'] = $page; + + return $pages; + +} diff --git a/sites/all/modules/features/materio_home_v2/materio_home_v2.panels_default.inc b/sites/all/modules/features/materio_home_v2/materio_home_v2.panels_default.inc new file mode 100644 index 00000000..6d6f0460 --- /dev/null +++ b/sites/all/modules/features/materio_home_v2/materio_home_v2.panels_default.inc @@ -0,0 +1,107 @@ +disabled = FALSE; /* Edit this to true to make a default mini disabled initially */ + $mini->api_version = 1; + $mini->name = 'news_home_v2'; + $mini->category = 'home v2'; + $mini->admin_title = 'News home v2'; + $mini->admin_description = ''; + $mini->requiredcontexts = array(); + $mini->contexts = array(); + $mini->relationships = array(); + $display = new panels_display(); + $display->layout = 'twocol_stacked'; + $display->layout_settings = array(); + $display->panel_settings = array( + 'style_settings' => array( + 'default' => NULL, + 'top' => NULL, + 'left' => NULL, + 'right' => NULL, + 'bottom' => NULL, + ), + ); + $display->cache = array(); + $display->title = ''; + $display->uuid = '4907c432-fcb2-4512-aa6a-5d96ec209978'; + $display->content = array(); + $display->panels = array(); + $pane = new stdClass(); + $pane->pid = 'new-9cd76d41-bb30-42d9-9209-cdf495d97281'; + $pane->panel = 'bottom'; + $pane->type = 'block'; + $pane->subtype = 'simplenews-6274'; + $pane->shown = TRUE; + $pane->access = 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 = '9cd76d41-bb30-42d9-9209-cdf495d97281'; + $display->content['new-9cd76d41-bb30-42d9-9209-cdf495d97281'] = $pane; + $display->panels['bottom'][0] = 'new-9cd76d41-bb30-42d9-9209-cdf495d97281'; + $pane = new stdClass(); + $pane->pid = 'new-04d42fc5-b2de-441b-aaff-3becac366c74'; + $pane->panel = 'left'; + $pane->type = 'views_panes'; + $pane->subtype = 'news_home_v2-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 = '04d42fc5-b2de-441b-aaff-3becac366c74'; + $display->content['new-04d42fc5-b2de-441b-aaff-3becac366c74'] = $pane; + $display->panels['left'][0] = 'new-04d42fc5-b2de-441b-aaff-3becac366c74'; + $pane = new stdClass(); + $pane->pid = 'new-04d7e982-b05e-4bcd-a24a-8d80b8a4bee2'; + $pane->panel = 'right'; + $pane->type = 'views_panes'; + $pane->subtype = 'news_home_v2-panel_pane_2'; + $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 = '04d7e982-b05e-4bcd-a24a-8d80b8a4bee2'; + $display->content['new-04d7e982-b05e-4bcd-a24a-8d80b8a4bee2'] = $pane; + $display->panels['right'][0] = 'new-04d7e982-b05e-4bcd-a24a-8d80b8a4bee2'; + $display->hide_title = PANELS_TITLE_FIXED; + $display->title_pane = 'new-9cd76d41-bb30-42d9-9209-cdf495d97281'; + $mini->display = $display; + $export['news_home_v2'] = $mini; + + return $export; +} diff --git a/sites/all/modules/features/materio_home_v2/materio_home_v2.views_default.inc b/sites/all/modules/features/materio_home_v2/materio_home_v2.views_default.inc new file mode 100644 index 00000000..cc0160a6 --- /dev/null +++ b/sites/all/modules/features/materio_home_v2/materio_home_v2.views_default.inc @@ -0,0 +1,228 @@ +name = 'news_home_v2'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'news home v2'; + $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'] = 'News'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['use_more_text'] = 'plus'; + $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'] = 'Appliquer'; + $handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Réinitialiser'; + $handler->display->display_options['exposed_form']['options']['exposed_sorts_label'] = 'Trier par'; + $handler->display->display_options['pager']['type'] = 'some'; + $handler->display->display_options['pager']['options']['items_per_page'] = '6'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'entity'; + $handler->display->display_options['row_options']['view_mode'] = 'cardmedium'; + /* Champ: Contenu : Titre */ + $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; + /* Critère de tri: Contenu : Date de publication */ + $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'; + /* Critère de filtrage: Contenu : Publié */ + $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; + /* Critère de filtrage: Contenu : 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( + 'breve' => 'breve', + ); + /* Critère de filtrage: Processus : État actuel */ + $handler->display->display_options['filters']['sid']['id'] = 'sid'; + $handler->display->display_options['filters']['sid']['table'] = 'workflow_node'; + $handler->display->display_options['filters']['sid']['field'] = 'sid'; + $handler->display->display_options['filters']['sid']['value'] = array( + 3 => '3', + ); + + /* Display: News */ + $handler = $view->new_display('panel_pane', 'News', 'panel_pane_1'); + $handler->display->display_options['pane_category']['name'] = 'home v2'; + $handler->display->display_options['pane_category']['weight'] = '0'; + + /* Display: daily */ + $handler = $view->new_display('panel_pane', 'daily', 'panel_pane_2'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'some'; + $handler->display->display_options['pager']['options']['items_per_page'] = '1'; + $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'] = 'entity'; + $handler->display->display_options['row_options']['view_mode'] = 'teaser'; + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Critère de filtrage: Contenu : Publié */ + $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; + /* Critère de filtrage: Contenu : 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( + 'simplenews' => 'simplenews', + ); + /* Critère de filtrage: Processus : État actuel */ + $handler->display->display_options['filters']['sid']['id'] = 'sid'; + $handler->display->display_options['filters']['sid']['table'] = 'workflow_node'; + $handler->display->display_options['filters']['sid']['field'] = 'sid'; + $handler->display->display_options['filters']['sid']['value'] = array( + 3 => '3', + ); + /* Critère de filtrage: Contenu : Newsletter category (field_simplenews_term) */ + $handler->display->display_options['filters']['field_simplenews_term_tid']['id'] = 'field_simplenews_term_tid'; + $handler->display->display_options['filters']['field_simplenews_term_tid']['table'] = 'field_data_field_simplenews_term'; + $handler->display->display_options['filters']['field_simplenews_term_tid']['field'] = 'field_simplenews_term_tid'; + $handler->display->display_options['filters']['field_simplenews_term_tid']['value'] = array( + 6374 => '6374', + ); + $handler->display->display_options['filters']['field_simplenews_term_tid']['type'] = 'select'; + $handler->display->display_options['filters']['field_simplenews_term_tid']['vocabulary'] = 'newsletter'; + /* Critère de filtrage: Parution de lettre d'information : État des envois */ + $handler->display->display_options['filters']['status_1']['id'] = 'status_1'; + $handler->display->display_options['filters']['status_1']['table'] = 'simplenews_newsletter'; + $handler->display->display_options['filters']['status_1']['field'] = 'status'; + $handler->display->display_options['filters']['status_1']['value'] = array( + 2 => '2', + ); + $handler->display->display_options['pane_category']['name'] = 'home v2'; + $handler->display->display_options['pane_category']['weight'] = '0'; + $translatables['news_home_v2'] = array( + t('Master'), + t('News'), + t('plus'), + t('Appliquer'), + t('Réinitialiser'), + t('Trier par'), + t('Asc'), + t('Desc'), + t('home v2'), + t('daily'), + ); + $export['news_home_v2'] = $view; + + $view = new view(); + $view->name = 'publication_home_v2'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'Publication home v2'; + $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'] = 'Publications'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['use_more_text'] = 'plus'; + $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'] = 'Appliquer'; + $handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Réinitialiser'; + $handler->display->display_options['exposed_form']['options']['exposed_sorts_label'] = 'Trier par'; + $handler->display->display_options['pager']['type'] = 'some'; + $handler->display->display_options['pager']['options']['items_per_page'] = '3'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'entity'; + $handler->display->display_options['row_options']['view_mode'] = 'teaser'; + /* Champ: Contenu : Titre */ + $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; + /* Critère de tri: Contenu : Date de publication */ + $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'; + /* Critère de filtrage: Contenu : Publié */ + $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; + /* Critère de filtrage: Contenu : 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( + 'publication' => 'publication', + ); + /* Critère de filtrage: Processus : État actuel */ + $handler->display->display_options['filters']['sid']['id'] = 'sid'; + $handler->display->display_options['filters']['sid']['table'] = 'workflow_node'; + $handler->display->display_options['filters']['sid']['field'] = 'sid'; + $handler->display->display_options['filters']['sid']['value'] = array( + 3 => '3', + ); + + /* Display: Publications */ + $handler = $view->new_display('panel_pane', 'Publications', 'panel_pane_1'); + $handler->display->display_options['pane_category']['name'] = 'Home v2'; + $handler->display->display_options['pane_category']['weight'] = '0'; + $translatables['publication_home_v2'] = array( + t('Master'), + t('Publications'), + t('plus'), + t('Appliquer'), + t('Réinitialiser'), + t('Trier par'), + t('Asc'), + t('Desc'), + t('Home v2'), + ); + $export['publication_home_v2'] = $view; + + return $export; +} diff --git a/sites/all/modules/features/materio_publications/materio_publications.features.field_instance.inc b/sites/all/modules/features/materio_publications/materio_publications.features.field_instance.inc new file mode 100644 index 00000000..eee90b91 --- /dev/null +++ b/sites/all/modules/features/materio_publications/materio_publications.features.field_instance.inc @@ -0,0 +1,93 @@ + 'publication', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'bookmark' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'cardbig' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'cardfull' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'cardmedium' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'cardsmall' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + '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, + 'entity_translation_sync' => FALSE, + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'module' => 'text', + 'settings' => array( + 'rows' => 20, + 'summary_rows' => 5, + ), + 'type' => 'text_textarea_with_summary', + 'weight' => 31, + ), + ); + + // Translatables + // Included for use with string extractors like potx. + t('Body'); + + return $field_instances; +} diff --git a/sites/all/modules/features/materio_publications/materio_publications.features.inc b/sites/all/modules/features/materio_publications/materio_publications.features.inc new file mode 100644 index 00000000..7d52a1d0 --- /dev/null +++ b/sites/all/modules/features/materio_publications/materio_publications.features.inc @@ -0,0 +1,32 @@ + "1"); + } +} + +/** + * Implements hook_node_info(). + */ +function materio_publications_node_info() { + $items = array( + 'publication' => array( + 'name' => t('Publication'), + 'base' => 'node_content', + 'description' => '', + 'has_title' => '1', + 'title_label' => t('Titre'), + 'help' => '', + ), + ); + drupal_alter('node_info', $items); + return $items; +} diff --git a/sites/all/modules/features/materio_publications/materio_publications.features.user_role.inc b/sites/all/modules/features/materio_publications/materio_publications.features.user_role.inc new file mode 100644 index 00000000..ffcdb602 --- /dev/null +++ b/sites/all/modules/features/materio_publications/materio_publications.features.user_role.inc @@ -0,0 +1,26 @@ + 'utilisateur anonyme', + 'weight' => 0, + ); + + // Exported role: utilisateur authentifié. + $roles['utilisateur authentifié'] = array( + 'name' => 'utilisateur authentifié', + 'weight' => 1, + ); + + return $roles; +} diff --git a/sites/all/modules/features/materio_publications/materio_publications.features.workflow_access.inc b/sites/all/modules/features/materio_publications/materio_publications.features.workflow_access.inc new file mode 100644 index 00000000..21f1388a --- /dev/null +++ b/sites/all/modules/features/materio_publications/materio_publications.features.workflow_access.inc @@ -0,0 +1,296 @@ + 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['(creation)']['root'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['(creation)']['workflow_features_author_name'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['(creation)']['utilisateur anonyme'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['utilisateur authentifié'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['Unverified'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['Utilisateur'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['Student'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['Adhérent'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['Premium'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['(creation)']['Contact opérationnel'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé'] = array(); + $workflows['Publication']['Importé']['administrator'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Importé']['root'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Importé']['workflow_features_author_name'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Importé']['utilisateur anonyme'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['utilisateur authentifié'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['Unverified'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['Utilisateur'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['Student'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['Adhérent'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['Premium'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Importé']['Contact opérationnel'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité'] = array(); + $workflows['Publication']['Édité']['Student'] = array( + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['Adhérent'] = array( + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['Premium'] = array( + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['administrator'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Édité']['root'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Édité']['workflow_features_author_name'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Édité']['utilisateur anonyme'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['utilisateur authentifié'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['Unverified'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['Utilisateur'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Édité']['Contact opérationnel'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué'] = array(); + $workflows['Publication']['Masqué']['administrator'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Masqué']['root'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Masqué']['workflow_features_author_name'] = array( + 'grant_view' => 1, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Masqué']['utilisateur anonyme'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['utilisateur authentifié'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['Unverified'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['Utilisateur'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['Student'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['Adhérent'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['Premium'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Masqué']['Contact opérationnel'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié'] = array(); + $workflows['Publication']['Publié']['utilisateur anonyme'] = array( + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['utilisateur authentifié'] = array( + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['Unverified'] = array( + 'grant_view' => 1, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['Utilisateur'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['Student'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['Adhérent'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['Premium'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['Contact opérationnel'] = array( + 'grant_view' => 0, + 'grant_update' => 0, + 'grant_delete' => 0, + ); + $workflows['Publication']['Publié']['administrator'] = array( + 'grant_view' => 0, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Publié']['root'] = array( + 'grant_view' => 0, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + $workflows['Publication']['Publié']['workflow_features_author_name'] = array( + 'grant_view' => 0, + 'grant_update' => 1, + 'grant_delete' => 1, + ); + + return $workflows; +} diff --git a/sites/all/modules/features/materio_publications/materio_publications.info b/sites/all/modules/features/materio_publications/materio_publications.info new file mode 100644 index 00000000..9da7f4a3 --- /dev/null +++ b/sites/all/modules/features/materio_publications/materio_publications.info @@ -0,0 +1,30 @@ +name = Materio publications +core = 7.x +package = Materio +dependencies[] = ctools +dependencies[] = features +dependencies[] = materio_subscriptions +dependencies[] = node +dependencies[] = strongarm +dependencies[] = text +features[ctools][] = strongarm:strongarm:1 +features[features_api][] = api:2 +features[field_instance][] = node-publication-body +features[node][] = publication +features[user_role][] = utilisateur anonyme +features[user_role][] = utilisateur authentifié +features[variable][] = language_content_type_publication +features[variable][] = menu_options_publication +features[variable][] = menu_parent_publication +features[variable][] = node_options_publication +features[variable][] = node_preview_publication +features[variable][] = node_submitted_publication +features[workflow_access][] = Publication +features_exclude[dependencies][workflow_access] = workflow_access +features_exclude[workflow][Publication] = Publication +features_exclude[user_role][Unverified] = Unverified +features_exclude[user_role][Student] = Student +features_exclude[user_role][Contact opérationnel] = Contact opérationnel +features_exclude[user_role][administrator] = administrator +features_exclude[user_role][root] = root +project path = sites/all/modules/features diff --git a/sites/all/modules/features/materio_publications/materio_publications.module b/sites/all/modules/features/materio_publications/materio_publications.module new file mode 100644 index 00000000..17f938fb --- /dev/null +++ b/sites/all/modules/features/materio_publications/materio_publications.module @@ -0,0 +1,7 @@ +disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'language_content_type_publication'; + $strongarm->value = '4'; + $export['language_content_type_publication'] = $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_publication'; + $strongarm->value = array(); + $export['menu_options_publication'] = $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_publication'; + $strongarm->value = 'main-menu:0'; + $export['menu_parent_publication'] = $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_publication'; + $strongarm->value = array( + 0 => 'status', + ); + $export['node_options_publication'] = $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_publication'; + $strongarm->value = '1'; + $export['node_preview_publication'] = $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_publication'; + $strongarm->value = 0; + $export['node_submitted_publication'] = $strongarm; + + return $export; +} diff --git a/sites/all/modules/gui/materiobasemod/js/materio_flag.js b/sites/all/modules/gui/materiobasemod/js/materio_flag.js index f38d966f..ab7548d8 100755 --- a/sites/all/modules/gui/materiobasemod/js/materio_flag.js +++ b/sites/all/modules/gui/materiobasemod/js/materio_flag.js @@ -58,7 +58,7 @@ MaterioFlag = function(){ case 'bookmarks': var name = type; $('h2 .listname', block).attr('name', name).bind('click', onClickShowPreview); - $('').appendTo($('h2', block)).attr('name', name).bind('click', onClickClosePreview); + $('').appendTo($('h2', block)).attr('name', name).bind('click', onClickClosePreview); // $('').appendTo($('h2', block)).bind('click', onClickShowPreview); // if(!readCookie('materiobookmarkspreviewopened')){ // showPreview('bookmarks', block); @@ -75,7 +75,7 @@ MaterioFlag = function(){ var name = $this.attr('class').match(/flag_lists_[^_]+_[0-9]+/); // trace('MaterioFlag :: name', name); - $('').attr('name', name).insertAfter($this).bind('click', onClickShowPreview); + $('').attr('name', name).insertAfter($this).bind('click', onClickShowPreview); }); $('a.edit-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists-nav') @@ -91,7 +91,7 @@ MaterioFlag = function(){ // preview block $('section.flag-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists').each(function(index){ var name = $(this).attr('class').match(/flag_lists_[^_]+_[0-9]+/); - $('').appendTo($('h2.listname', this)).attr('name', name).bind('click', onClickClosePreview); + $('').appendTo($('h2.listname', this)).attr('name', name).bind('click', onClickClosePreview); $('a.open-list', this).bind('click', onClickOpenLink); diff --git a/sites/all/modules/gui/materiobasemod/js/materio_flag.min.js b/sites/all/modules/gui/materiobasemod/js/materio_flag.min.js index ac84b986..974a89b8 100755 --- a/sites/all/modules/gui/materiobasemod/js/materio_flag.min.js +++ b/sites/all/modules/gui/materiobasemod/js/materio_flag.min.js @@ -1,371 +1,371 @@ -// * date 2011/10/19 * - -/** -* misc -*/ - -// ------ TRACE ------ - -function trace(s,o){ - if(window.console && window.console.debug){ - arguments.length === 2 ? window.console.debug(s,o) : window.console.debug(s); - }else if(console && console.log){ - arguments.length === 2 ? console.log(s,o) : console.log(s); - } -}; - -// ------ LOADJSCSSFILE ------ - -function loadjscssfile(filename, filetype){ - if (filetype=="js"){ //if filename is a external JavaScript file - var fileref=document.createElement('script') - fileref.setAttribute("type","text/javascript") - fileref.setAttribute("src", filename) - } - else if (filetype=="css"){ //if filename is an external CSS file - var fileref=document.createElement("link") - fileref.setAttribute("rel", "stylesheet") - fileref.setAttribute("type", "text/css") - fileref.setAttribute("href", filename) - } - if (typeof fileref!="undefined") - document.getElementsByTagName("head")[0].appendChild(fileref) -}; - -// ------ TIMEOUT - -function Timeout(fn, interval) { - var id = setTimeout(fn, interval); - this.cleared = false; - this.clear = function () { - this.cleared = true; - clearTimeout(id); - }; -} - -// ------ HEXTORGB convert hex to rgb color ------ - -function HexToRGB(h){ - if(h.charAt(0)=="#"){ - var coul = h.substring(1,7); - var r = parseInt(coul.substring(0,2),16); - var g = parseInt(coul.substring(2,4),16); - var b = parseInt(coul.substring(4,6),16); - return 'rgb('+r+', '+g+', '+b+')'; - }else{ - return null; - } -} - -// ------ PAIR check if number is pair of impair ------ - -function pair(n){return typeof n=='number'?(n%2==0?true:false):null;} - -// ------ RANDOM ------ - -function random(n1,n2){ - return arguments.length === 1 && typeof n1 === 'number'? Math.random()*n1 : ( arguments.length === 2 && typeof n1 === typeof n2 && typeof n1 === 'number' ? n1 + Math.random()*(n2-n1) : NaN ); -} -function randomInt(n1,n2){ - var rand = arguments.length === 1 && typeof n1 === 'number'? Math.random()*n1 : ( arguments.length === 2 && typeof n1 === typeof n2 && typeof n1 === 'number' ? n1 + Math.random()*(n2-n1) : NaN ); - return parseInt(rand); -} - -// ------ ROUNDED ------ - -function round(n,granularity){ - if(arguments.length == 1){ - n = Math.round(n); - }else{ - granularity = granularity.toString(); - granularity = granularity.replace(/./gi, 0); - granularity = granularity.replace(/^./gi, 1); - granularity = parseInt(granularity); - n = Math.round(n*granularity)/granularity; - } - return n; -} - -// ------ FLOOR ------ - -function floor(n,granularity){ - if(arguments.length == 1){ - n = Math.floor(n); - }else{ - granularity = granularity.toString(); - granularity = granularity.replace(/./gi, 0); - granularity = granularity.replace(/^./gi, 1); - granularity = parseInt(granularity); - n = Math.floor(n*granularity)/granularity; - } - return n; -} - -// ------ CEIL ------ - -function ceil(n,granularity){ - if(arguments.length == 1){ - n = Math.ceil(n); - }else{ - granularity = granularity.toString(); - granularity = granularity.replace(/./gi, 0); - granularity = granularity.replace(/^./gi, 1); - granularity = parseInt(granularity); - n = Math.ceil(n*granularity)/granularity; - } - return n; -} - -/** -* String -*/ - -// ------ TRIM remove multiple, leading or trailing spaces ------ - -String.prototype.trim = function() { - return this.replace(/(^\s*)|(\s*$)/gi,"").replace(/[ ]{2,}/gi," ").replace(/\n /,"\n"); -} - -// ------ remove all accents, for sort() by example ------ - -var Latinise={};Latinise.latin_map={"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x"}; -String.prototype.latinise=function(){return this.replace(/[^A-Za-z0-9\[\] ]/g,function(a){return Latinise.latin_map[a]||a})}; -String.prototype.latinize=String.prototype.latinise; -String.prototype.isLatin=function(){return this==this.latinise()} - -/** -* Array -*/ - -// ------ UNIQUE reduces duplicates ------ - -array_unique = function(ar){ - var r = new Array(); - o:for(var i = 0, n = ar.length; i < n; i++) - { - for(var x = 0, y = r.length; x < y; x++) - { - if(r[x]==ar[i]) - { - continue o; - } - } - r[r.length] = ar[i]; - } - return r; -}; - -// ------ SUBSTRACT substract two array ------ - -array_subtract = function(ara1,ara2) { - var aRes = new Array() ; - for (var i = ara1.length-1; i >= 0; i--) - if(array_contains(ara2,ara1[i])) - aRes.push(ara1[i]); - return aRes ; -} - -/* - SHUFFLE Add a shuffle function to Array object prototype - author: Stephane Roucheray - src: http://sroucheray.org/blog/2009/11/array-sort-should-not-be-used-to-shuffle-an-array/ - found 2011/09/08. -*/ -array_shuffle = function(ar){ - var i = ar.length, j, temp; - if ( i == 0 ) return; - while ( --i ) { - j = Math.floor( Math.random() * ( i + 1 ) ); - temp = ar[i]; - ar[i] = ar[j]; - ar[j] = temp; - } - return ar; -}; - -// ------ CONTAINS ------ - -array_contains = function(ar, obj) { - var i = ar.length; - while (i--) - if (ar[i] === obj) - return true; - return false; -}; - -// ------ REMOVE ------ - -// /!\ Found on the Internet, not sure of efficiency. -// Array.prototype.remove = function(v) { -// var x, _i, _len, _results; -// _results = []; -// for (_i = 0, _len = this.length; _i < _len; _i++) { -// x = this[_i]; -// if (x !== v) { -// _results.push(x); -// } -// } -// return _results; -// }; - -array_remove = function(ar){ - var what, a= arguments, L= a.length, ax; - while(L && ar.length){ - what= a[--L]; - while((ax= ar.indexOf(what))!= -1){ - ar.splice(ax, 1); - } - } - return ar; -}; - -// for IE -// if(!Array.prototype.indexOf){ -// Array.prototype.indexOf= function(what, i){ -// i= i || 0; -// var L= this.length; -// while(i< L){ -// if(this[i]=== what) return i; -// ++i; -// } -// return -1; -// }; -// } - -array_indexOf = function(ar, what, i){ - i= i || 0; - var L= ar.length; - while(i< L){ - if(ar[i]=== what) return i; - ++i; - } - return -1; -}; - -// ------ SUBSTRACT substract two array ------ - -function array_subtract(ara1,ara2) { - var aRes = new Array() ; - for (var i = ara1.length-1; i >= 0; i--) - if( !array_contains(ara1[i],ara2) ) - aRes.push(ara1[i]); - return aRes ; -}; - -/** -* Objects -* -*/ - -// ------ OBJECTSIZE get the length of objects ------ - -function objectSize(o) { - var len = o.length ? --o.length : 0; - for (var k in o) - len++; - return len; -} -// Object.prototype.size = function () { -// // var len = this.length ? --this.length : -1; // POURQUOI NE FONCTIONNE PAS? -// var len = this.length ? --this.length : -2; -// for (var k in this) -// len++; -// return len; -// } - -function objectIsEmpty(obj){ - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) - return false; - } - return true; -}; - -// ------ OBJECTGETKEY get key of index ------ - -function objectGetKey(o,index){ - var i = 0; - for (var k in o){ - if (k === 'length' || !o.hasOwnProperty(k)) - continue; - if(i == index) - return k; - i ++; - } -} -// Object.prototype.getKey = function(index){ -// var i = 0; -// for (var key in this){ -// if (key === 'length' || !this.hasOwnProperty(key)) -// continue; -// if(i == index) -// return key; -// i ++; -// } -// } - -// ------ OBJECTSORT sort object ------ - -function objectSort(o,value) { - var connection = new Array(); - for (var i = objectSize(o) - 1; i >= 0; i--){ - var k = objectGetKey(o,i); - for (var j = objectSize(o[k].wit) - 1; j >= 0; j--){ - var k2 = objectGetKey(o[k].wit,j); - if (k2==value) { - var the_wit = parseFloat(o[k].wit[k2]); - connection.push( {wit:the_wit,nid:k} ); - }; - }; - }; - - connection.sort(function(a,b){ - // return (a.wit - b.wit);//ascending - return (b.wit - a.wit);//descending - }); - - var o_sort = {}; - for (var i = connection.length - 1; i >= 0; i--){ - // o_sort[connection[i].wit+'-'+connection[i].nid] = o[connection[i].nid]; - o_sort[connection[i].nid] = o[connection[i].nid]; - }; - - return o_sort; -} - -/** -* trigo -*/ - -// -------- getElementAngle ---------- -// L'angle 0 correspond au nord (vers le haut) -// Exemple : getElementAngle(posElementX, posElementY, posSourisX, posSourisY) -// Ceci retournera l'angle de l'élément par rapport à la position de la souris - -function getElementAngle(x1, y1, x2, y2) { - var adj = x2 - x1; - var opp = y2 - y1; - - var angle = Math.abs(Math.atan(opp/adj) * 180/Math.PI); - - if (adj > 0 && opp < 0 ) { - angle = 90 - angle; - } - else if (adj >= 0 && opp >= 0) { - angle += 90; - } - else if (adj < 0 && opp >= 0) { - angle = 180 + (90 - angle); - } - else { - angle += 270; - } - - return angle; -} - - - +// * date 2011/10/19 * + +/** +* misc +*/ + +// ------ TRACE ------ + +function trace(s,o){ + if(window.console && window.console.debug){ + arguments.length === 2 ? window.console.debug(s,o) : window.console.debug(s); + }else if(console && console.log){ + arguments.length === 2 ? console.log(s,o) : console.log(s); + } +}; + +// ------ LOADJSCSSFILE ------ + +function loadjscssfile(filename, filetype){ + if (filetype=="js"){ //if filename is a external JavaScript file + var fileref=document.createElement('script') + fileref.setAttribute("type","text/javascript") + fileref.setAttribute("src", filename) + } + else if (filetype=="css"){ //if filename is an external CSS file + var fileref=document.createElement("link") + fileref.setAttribute("rel", "stylesheet") + fileref.setAttribute("type", "text/css") + fileref.setAttribute("href", filename) + } + if (typeof fileref!="undefined") + document.getElementsByTagName("head")[0].appendChild(fileref) +}; + +// ------ TIMEOUT + +function Timeout(fn, interval) { + var id = setTimeout(fn, interval); + this.cleared = false; + this.clear = function () { + this.cleared = true; + clearTimeout(id); + }; +} + +// ------ HEXTORGB convert hex to rgb color ------ + +function HexToRGB(h){ + if(h.charAt(0)=="#"){ + var coul = h.substring(1,7); + var r = parseInt(coul.substring(0,2),16); + var g = parseInt(coul.substring(2,4),16); + var b = parseInt(coul.substring(4,6),16); + return 'rgb('+r+', '+g+', '+b+')'; + }else{ + return null; + } +} + +// ------ PAIR check if number is pair of impair ------ + +function pair(n){return typeof n=='number'?(n%2==0?true:false):null;} + +// ------ RANDOM ------ + +function random(n1,n2){ + return arguments.length === 1 && typeof n1 === 'number'? Math.random()*n1 : ( arguments.length === 2 && typeof n1 === typeof n2 && typeof n1 === 'number' ? n1 + Math.random()*(n2-n1) : NaN ); +} +function randomInt(n1,n2){ + var rand = arguments.length === 1 && typeof n1 === 'number'? Math.random()*n1 : ( arguments.length === 2 && typeof n1 === typeof n2 && typeof n1 === 'number' ? n1 + Math.random()*(n2-n1) : NaN ); + return parseInt(rand); +} + +// ------ ROUNDED ------ + +function round(n,granularity){ + if(arguments.length == 1){ + n = Math.round(n); + }else{ + granularity = granularity.toString(); + granularity = granularity.replace(/./gi, 0); + granularity = granularity.replace(/^./gi, 1); + granularity = parseInt(granularity); + n = Math.round(n*granularity)/granularity; + } + return n; +} + +// ------ FLOOR ------ + +function floor(n,granularity){ + if(arguments.length == 1){ + n = Math.floor(n); + }else{ + granularity = granularity.toString(); + granularity = granularity.replace(/./gi, 0); + granularity = granularity.replace(/^./gi, 1); + granularity = parseInt(granularity); + n = Math.floor(n*granularity)/granularity; + } + return n; +} + +// ------ CEIL ------ + +function ceil(n,granularity){ + if(arguments.length == 1){ + n = Math.ceil(n); + }else{ + granularity = granularity.toString(); + granularity = granularity.replace(/./gi, 0); + granularity = granularity.replace(/^./gi, 1); + granularity = parseInt(granularity); + n = Math.ceil(n*granularity)/granularity; + } + return n; +} + +/** +* String +*/ + +// ------ TRIM remove multiple, leading or trailing spaces ------ + +String.prototype.trim = function() { + return this.replace(/(^\s*)|(\s*$)/gi,"").replace(/[ ]{2,}/gi," ").replace(/\n /,"\n"); +} + +// ------ remove all accents, for sort() by example ------ + +var Latinise={};Latinise.latin_map={"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x"}; +String.prototype.latinise=function(){return this.replace(/[^A-Za-z0-9\[\] ]/g,function(a){return Latinise.latin_map[a]||a})}; +String.prototype.latinize=String.prototype.latinise; +String.prototype.isLatin=function(){return this==this.latinise()} + +/** +* Array +*/ + +// ------ UNIQUE reduces duplicates ------ + +array_unique = function(ar){ + var r = new Array(); + o:for(var i = 0, n = ar.length; i < n; i++) + { + for(var x = 0, y = r.length; x < y; x++) + { + if(r[x]==ar[i]) + { + continue o; + } + } + r[r.length] = ar[i]; + } + return r; +}; + +// ------ SUBSTRACT substract two array ------ + +array_subtract = function(ara1,ara2) { + var aRes = new Array() ; + for (var i = ara1.length-1; i >= 0; i--) + if(array_contains(ara2,ara1[i])) + aRes.push(ara1[i]); + return aRes ; +} + +/* + SHUFFLE Add a shuffle function to Array object prototype + author: Stephane Roucheray + src: http://sroucheray.org/blog/2009/11/array-sort-should-not-be-used-to-shuffle-an-array/ + found 2011/09/08. +*/ +array_shuffle = function(ar){ + var i = ar.length, j, temp; + if ( i == 0 ) return; + while ( --i ) { + j = Math.floor( Math.random() * ( i + 1 ) ); + temp = ar[i]; + ar[i] = ar[j]; + ar[j] = temp; + } + return ar; +}; + +// ------ CONTAINS ------ + +array_contains = function(ar, obj) { + var i = ar.length; + while (i--) + if (ar[i] === obj) + return true; + return false; +}; + +// ------ REMOVE ------ + +// /!\ Found on the Internet, not sure of efficiency. +// Array.prototype.remove = function(v) { +// var x, _i, _len, _results; +// _results = []; +// for (_i = 0, _len = this.length; _i < _len; _i++) { +// x = this[_i]; +// if (x !== v) { +// _results.push(x); +// } +// } +// return _results; +// }; + +array_remove = function(ar){ + var what, a= arguments, L= a.length, ax; + while(L && ar.length){ + what= a[--L]; + while((ax= ar.indexOf(what))!= -1){ + ar.splice(ax, 1); + } + } + return ar; +}; + +// for IE +// if(!Array.prototype.indexOf){ +// Array.prototype.indexOf= function(what, i){ +// i= i || 0; +// var L= this.length; +// while(i< L){ +// if(this[i]=== what) return i; +// ++i; +// } +// return -1; +// }; +// } + +array_indexOf = function(ar, what, i){ + i= i || 0; + var L= ar.length; + while(i< L){ + if(ar[i]=== what) return i; + ++i; + } + return -1; +}; + +// ------ SUBSTRACT substract two array ------ + +function array_subtract(ara1,ara2) { + var aRes = new Array() ; + for (var i = ara1.length-1; i >= 0; i--) + if( !array_contains(ara1[i],ara2) ) + aRes.push(ara1[i]); + return aRes ; +}; + +/** +* Objects +* +*/ + +// ------ OBJECTSIZE get the length of objects ------ + +function objectSize(o) { + var len = o.length ? --o.length : 0; + for (var k in o) + len++; + return len; +} +// Object.prototype.size = function () { +// // var len = this.length ? --this.length : -1; // POURQUOI NE FONCTIONNE PAS? +// var len = this.length ? --this.length : -2; +// for (var k in this) +// len++; +// return len; +// } + +function objectIsEmpty(obj){ + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) + return false; + } + return true; +}; + +// ------ OBJECTGETKEY get key of index ------ + +function objectGetKey(o,index){ + var i = 0; + for (var k in o){ + if (k === 'length' || !o.hasOwnProperty(k)) + continue; + if(i == index) + return k; + i ++; + } +} +// Object.prototype.getKey = function(index){ +// var i = 0; +// for (var key in this){ +// if (key === 'length' || !this.hasOwnProperty(key)) +// continue; +// if(i == index) +// return key; +// i ++; +// } +// } + +// ------ OBJECTSORT sort object ------ + +function objectSort(o,value) { + var connection = new Array(); + for (var i = objectSize(o) - 1; i >= 0; i--){ + var k = objectGetKey(o,i); + for (var j = objectSize(o[k].wit) - 1; j >= 0; j--){ + var k2 = objectGetKey(o[k].wit,j); + if (k2==value) { + var the_wit = parseFloat(o[k].wit[k2]); + connection.push( {wit:the_wit,nid:k} ); + }; + }; + }; + + connection.sort(function(a,b){ + // return (a.wit - b.wit);//ascending + return (b.wit - a.wit);//descending + }); + + var o_sort = {}; + for (var i = connection.length - 1; i >= 0; i--){ + // o_sort[connection[i].wit+'-'+connection[i].nid] = o[connection[i].nid]; + o_sort[connection[i].nid] = o[connection[i].nid]; + }; + + return o_sort; +} + +/** +* trigo +*/ + +// -------- getElementAngle ---------- +// L'angle 0 correspond au nord (vers le haut) +// Exemple : getElementAngle(posElementX, posElementY, posSourisX, posSourisY) +// Ceci retournera l'angle de l'élément par rapport à la position de la souris + +function getElementAngle(x1, y1, x2, y2) { + var adj = x2 - x1; + var opp = y2 - y1; + + var angle = Math.abs(Math.atan(opp/adj) * 180/Math.PI); + + if (adj > 0 && opp < 0 ) { + angle = 90 - angle; + } + else if (adj >= 0 && opp >= 0) { + angle += 90; + } + else if (adj < 0 && opp >= 0) { + angle = 180 + (90 - angle); + } + else { + angle += 270; + } + + return angle; +} + + + // @codekit-prepend "gui.js" @@ -428,7 +428,7 @@ MaterioFlag = function(){ case 'bookmarks': var name = type; $('h2 .listname', block).attr('name', name).bind('click', onClickShowPreview); - $('').appendTo($('h2', block)).attr('name', name).bind('click', onClickClosePreview); + $('').appendTo($('h2', block)).attr('name', name).bind('click', onClickClosePreview); // $('').appendTo($('h2', block)).bind('click', onClickShowPreview); // if(!readCookie('materiobookmarkspreviewopened')){ // showPreview('bookmarks', block); @@ -445,7 +445,7 @@ MaterioFlag = function(){ var name = $this.attr('class').match(/flag_lists_[^_]+_[0-9]+/); // trace('MaterioFlag :: name', name); - $('').attr('name', name).insertAfter($this).bind('click', onClickShowPreview); + $('').attr('name', name).insertAfter($this).bind('click', onClickShowPreview); }); $('a.edit-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists-nav') @@ -461,7 +461,7 @@ MaterioFlag = function(){ // preview block $('section.flag-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists').each(function(index){ var name = $(this).attr('class').match(/flag_lists_[^_]+_[0-9]+/); - $('').appendTo($('h2.listname', this)).attr('name', name).bind('click', onClickClosePreview); + $('').appendTo($('h2.listname', this)).attr('name', name).bind('click', onClickClosePreview); $('a.open-list', this).bind('click', onClickOpenLink); diff --git a/sites/all/modules/gui/materiobasemod/materio_flag.module b/sites/all/modules/gui/materiobasemod/materio_flag.module index 3da5f9fe..a4673dd2 100755 --- a/sites/all/modules/gui/materiobasemod/materio_flag.module +++ b/sites/all/modules/gui/materiobasemod/materio_flag.module @@ -160,7 +160,7 @@ function materio_flag_block_view($delta = '') { } // TODO: put this title generation on a theme function $subject = ''.t('My bookmarks (@len) ', array("@len"=>count($userbookmarks))).''; - $block['subject'] = $subject . l('', 'bookmarks', array('html'=>true, 'attributes' => array('class' => array('open-list')),)); // + $block['subject'] = $subject . l('', 'bookmarks', array('html'=>true, 'attributes' => array('class' => array('open-list')),)); // $block['content'] = theme('materio_flag_mybookmarks_block', array("bookmarks"=>$userbookmarks, "viewmode"=>"bookmark")); }else{ $block['subject'] = t('My bookmarks'); @@ -354,7 +354,7 @@ function materio_flag_get_entity_links($entity, $type, $view_mode = null){ #create new list $link = l( - ' ' . t('New @name', array('@name' => t(variable_get('flag_lists_name', 'list')))) . '', + ' ' . t('New @name', array('@name' => t(variable_get('flag_lists_name', 'list')))) . '', 'flag-lists/add/' . $entity->type, array( 'attributes' => array( @@ -400,7 +400,7 @@ function _materio_flag_get_listpagetitle($flag){ if(flag_lists_is_owner('edit', $flag->fid)){ - $cont .= l('', + $cont .= l('', 'flags/lists/edit/'.$flag->fid, array( 'html'=>true, diff --git a/sites/all/modules/gui/materiobasemod/materio_user.module b/sites/all/modules/gui/materiobasemod/materio_user.module index 7beaace2..863a4c7a 100755 --- a/sites/all/modules/gui/materiobasemod/materio_user.module +++ b/sites/all/modules/gui/materiobasemod/materio_user.module @@ -146,7 +146,7 @@ function materio_user_block_view($delta = '') { break; case 'front_link': $block['subject'] = ''; - $block['content'] = l(''.t('home').'', '', array('html'=>true)); + $block['content'] = l(''.t('home').'', '', array('html'=>true)); break; } return $block; diff --git a/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-block.tpl.php b/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-block.tpl.php index 19a9cbe4..9f6b3f91 100755 --- a/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-block.tpl.php +++ b/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-block.tpl.php @@ -8,7 +8,7 @@ variable_get('flag_lists_name', 'list'))) ;?> - + diff --git a/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-nav-block.tpl.php b/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-nav-block.tpl.php index ded717f9..91af6068 100755 --- a/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-nav-block.tpl.php +++ b/sites/all/modules/gui/materiobasemod/templates/materio-flag-mylists-nav-block.tpl.php @@ -7,7 +7,7 @@ title . '('.count($flag->flaged_content).')', 'lists/'.$flag->fid, array('html'=>true,'attributes'=>array('class'=>array('open-list', $flag->name)))); ?> fid)): ?> ', + print l('', 'flags/lists/edit/'.$flag->fid, array( 'html'=>true, @@ -22,7 +22,7 @@  ' . t('New @name', array('@name' => t(variable_get('flag_lists_name', 'list')))) . '', + ' ' . t('New @name', array('@name' => t(variable_get('flag_lists_name', 'list')))) . '', 'flag-lists/add/materiau', array( 'attributes' => array( diff --git a/sites/all/themes/gui/materiobasetheme/.directory b/sites/all/themes/gui/materiobasetheme/.directory new file mode 100644 index 00000000..ae594b9f --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/.directory @@ -0,0 +1,4 @@ +[Dolphin] +Timestamp=2015,4,27,12,4,51 +Version=3 +ViewMode=1 diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/3c1c54551da211f7e1b6affbc2250004f3895673/gui.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/3c1c54551da211f7e1b6affbc2250004f3895673/gui.scssc new file mode 100644 index 00000000..9d3c4bf6 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/3c1c54551da211f7e1b6affbc2250004f3895673/gui.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/6447a33a896771938803b47b10c827fa3e04cfeb/_functions.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/6447a33a896771938803b47b10c827fa3e04cfeb/_functions.scssc new file mode 100644 index 00000000..31e05658 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/6447a33a896771938803b47b10c827fa3e04cfeb/_functions.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/fonts.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/fonts.scssc new file mode 100644 index 00000000..4678ef9a Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/fonts.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/gui.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/gui.scssc new file mode 100644 index 00000000..4d1a66ed Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/gui.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/layout.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/layout.scssc new file mode 100644 index 00000000..aeefbf83 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/layout.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/misc.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/misc.scssc new file mode 100644 index 00000000..900582ff Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/misc.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/styles.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/styles.scssc new file mode 100644 index 00000000..a448686c Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/717d9e279c4e218b7de53140fde49b287dcd16a4/styles.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_accordion.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_accordion.scssc new file mode 100644 index 00000000..b21cb09f Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_accordion.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_alert-boxes.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_alert-boxes.scssc new file mode 100644 index 00000000..b88ab2cd Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_alert-boxes.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_block-grid.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_block-grid.scssc new file mode 100644 index 00000000..7f5d4e5e Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_block-grid.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_breadcrumbs.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_breadcrumbs.scssc new file mode 100644 index 00000000..208ea819 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_breadcrumbs.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_button-groups.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_button-groups.scssc new file mode 100644 index 00000000..e2d24d82 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_button-groups.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_buttons.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_buttons.scssc new file mode 100644 index 00000000..aa4b4a46 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_buttons.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_clearing.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_clearing.scssc new file mode 100644 index 00000000..9712358f Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_clearing.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_dropdown-buttons.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_dropdown-buttons.scssc new file mode 100644 index 00000000..b79fc72d Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_dropdown-buttons.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_dropdown.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_dropdown.scssc new file mode 100644 index 00000000..7d8b9fd2 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_dropdown.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_flex-video.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_flex-video.scssc new file mode 100644 index 00000000..3087f5dd Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_flex-video.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_forms.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_forms.scssc new file mode 100644 index 00000000..03a15f64 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_forms.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_global.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_global.scssc new file mode 100644 index 00000000..7611213a Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_global.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_grid.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_grid.scssc new file mode 100644 index 00000000..e69c67e8 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_grid.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_icon-bar.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_icon-bar.scssc new file mode 100644 index 00000000..f0ca6d9e Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_icon-bar.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_inline-lists.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_inline-lists.scssc new file mode 100644 index 00000000..20ad0cf1 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_inline-lists.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_joyride.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_joyride.scssc new file mode 100644 index 00000000..7c35f65a Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_joyride.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_keystrokes.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_keystrokes.scssc new file mode 100644 index 00000000..a466c193 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_keystrokes.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_labels.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_labels.scssc new file mode 100644 index 00000000..1aadccbc Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_labels.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_magellan.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_magellan.scssc new file mode 100644 index 00000000..2cfbbe1f Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_magellan.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_offcanvas.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_offcanvas.scssc new file mode 100644 index 00000000..b80be1ed Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_offcanvas.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_orbit.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_orbit.scssc new file mode 100644 index 00000000..cc3424a0 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_orbit.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_pagination.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_pagination.scssc new file mode 100644 index 00000000..e4c658b6 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_pagination.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_panels.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_panels.scssc new file mode 100644 index 00000000..9195e433 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_panels.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_pricing-tables.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_pricing-tables.scssc new file mode 100644 index 00000000..c4582513 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_pricing-tables.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_progress-bars.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_progress-bars.scssc new file mode 100644 index 00000000..c5f2f31e Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_progress-bars.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_range-slider.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_range-slider.scssc new file mode 100644 index 00000000..bec741ec Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_range-slider.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_reveal.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_reveal.scssc new file mode 100644 index 00000000..954f7e02 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_reveal.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_side-nav.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_side-nav.scssc new file mode 100644 index 00000000..85dbc8a1 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_side-nav.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_split-buttons.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_split-buttons.scssc new file mode 100644 index 00000000..a06e2d32 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_split-buttons.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_sub-nav.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_sub-nav.scssc new file mode 100644 index 00000000..ce73708f Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_sub-nav.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_switches.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_switches.scssc new file mode 100644 index 00000000..bd6b7228 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_switches.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tables.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tables.scssc new file mode 100644 index 00000000..216f57cf Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tables.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tabs.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tabs.scssc new file mode 100644 index 00000000..a8edda41 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tabs.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_thumbs.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_thumbs.scssc new file mode 100644 index 00000000..4cf3b0f3 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_thumbs.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tooltips.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tooltips.scssc new file mode 100644 index 00000000..015a7dba Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_tooltips.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_top-bar.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_top-bar.scssc new file mode 100644 index 00000000..ba0230e3 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_top-bar.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_type.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_type.scssc new file mode 100644 index 00000000..5ff8a522 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_type.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_visibility.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_visibility.scssc new file mode 100644 index 00000000..713dbd0e Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/9146e852b0eeb835e9ae48b4a1aae010062288ce/_visibility.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/fb27e8b9d4e322891fe973e3a35a1c7e89c82b95/foundation.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/fb27e8b9d4e322891fe973e3a35a1c7e89c82b95/foundation.scssc new file mode 100644 index 00000000..fdda5b39 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/fb27e8b9d4e322891fe973e3a35a1c7e89c82b95/foundation.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/.sass-cache/fb27e8b9d4e322891fe973e3a35a1c7e89c82b95/normalize.scssc b/sites/all/themes/gui/materiobasetheme/.sass-cache/fb27e8b9d4e322891fe973e3a35a1c7e89c82b95/normalize.scssc new file mode 100644 index 00000000..e2063802 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/.sass-cache/fb27e8b9d4e322891fe973e3a35a1c7e89c82b95/normalize.scssc differ diff --git a/sites/all/themes/gui/materiobasetheme/Gruntfile.js b/sites/all/themes/gui/materiobasetheme/Gruntfile.js new file mode 100644 index 00000000..e3404424 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/Gruntfile.js @@ -0,0 +1,58 @@ +module.exports = function (grunt) { + grunt.initConfig({ + watch: { + compass: { + files: ['scss/styles.scss', 'scss/wysiwyg.scss'], + tasks: ['compass:dev'] + }, + postcss: { + files: ['scss/styles.scss', 'scss/wysiwyg.scss'], + tasks: ['postcss'] + }, + // options: { + // livereload: true, + // }, + }, + compass: { + dev: { + options: { + sassDir: 'scss', + cssDir: 'css', + specify: ['scss/styles.scss', 'scss/wysiwyg.scss'], + imagesPath: 'img', + noLineComments: false, + // outputStyle: 'compressed' + } + } + }, + postcss: { + options: { + processors: [ + require('autoprefixer-core')({ + browsers: ['> 1%'] //, 'ie 8', 'ie 7', 'FirefoxAndroid', 'ExplorerMobile', 'ChromeAndroid' + }).postcss, + ] + }, + dist: { src: 'css/*.css' } + }, + svg2png: { + assets: { + // specify files in array format with multiple src-dest mapping + files: [ + // rasterize all SVG files in "img" and its subdirectories to "img/png" + // { src: ['assets/img/*.svg'], dest: 'assets/img/png/' }, + // rasterize SVG file to same directory + { src: ['img/*.svg'] } + ] + } + } + }); + grunt.loadNpmTasks('grunt-contrib-compass'); + grunt.loadNpmTasks('grunt-contrib-sass'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-postcss'); + grunt.loadNpmTasks('grunt-svg2png'); + + + grunt.registerTask('default', ['svg2png']); +}; \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower.json b/sites/all/themes/gui/materiobasetheme/bower.json new file mode 100644 index 00000000..4c0445d5 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower.json @@ -0,0 +1,23 @@ +{ + "name": "materiobasetheme", + "version": "1.0.0", + "authors": [ + "sarah garcin " + ], + "license": "MIT", + "homepage": "http://materio.com", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "foundation": "~5.5.1", + "history.js": "~1.8.0", + "jquery.columnizer": "~1.6.2", + "jquery.hotkeys": "jeresig/jquery.hotkeys#~0.2.0", + "jquery.lazyload": "~1.9.5" + } +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/.bower.json new file mode 100644 index 00000000..db37d8c5 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/.bower.json @@ -0,0 +1,23 @@ +{ + "name": "fastclick", + "main": "lib/fastclick.js", + "ignore": [ + "**/.*", + "component.json", + "package.json", + "Makefile", + "tests", + "examples" + ], + "homepage": "https://github.com/ftlabs/fastclick", + "version": "1.0.6", + "_release": "1.0.6", + "_resolution": { + "type": "version", + "tag": "v1.0.6", + "commit": "2ac7258407619398005ca720596f0d36ce66a6c8" + }, + "_source": "git://github.com/ftlabs/fastclick.git", + "_target": ">=0.6.11", + "_originalSource": "fastclick" +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/LICENSE b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/LICENSE new file mode 100644 index 00000000..459a20db --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 The Financial Times Ltd. + +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. diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/README.md b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/README.md new file mode 100644 index 00000000..074895dc --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/README.md @@ -0,0 +1,140 @@ +# FastClick # + +FastClick is a simple, easy-to-use library for eliminating the 300ms delay between a physical tap and the firing of a `click` event on mobile browsers. The aim is to make your application feel less laggy and more responsive while avoiding any interference with your current logic. + +FastClick is developed by [FT Labs](http://labs.ft.com/), part of the Financial Times. + +[Explication en français](http://maxime.sh/2013/02/supprimer-le-lag-des-clics-sur-mobile-avec-fastclick/). + +[日本語で説明](https://developer.mozilla.org/ja/docs/Mozilla/Firefox_OS/Apps/Tips_and_techniques#Make_events_immediate)。 + +## Why does the delay exist? ## + +According to [Google](https://developers.google.com/mobile/articles/fast_buttons): + +> ...mobile browsers will wait approximately 300ms from the time that you tap the button to fire the click event. The reason for this is that the browser is waiting to see if you are actually performing a double tap. + +## Compatibility ## + +The library has been deployed as part of the [FT Web App](http://app.ft.com/) and is tried and tested on the following mobile browsers: + +* Mobile Safari on iOS 3 and upwards +* Chrome on iOS 5 and upwards +* Chrome on Android (ICS) +* Opera Mobile 11.5 and upwards +* Android Browser since Android 2 +* PlayBook OS 1 and upwards + +## When it isn't needed ## + +FastClick doesn't attach any listeners on desktop browsers. + +Chrome 32+ on Android with `width=device-width` in the [viewport meta tag](https://developer.mozilla.org/en-US/docs/Mobile/Viewport_meta_tag) doesn't have a 300ms delay, therefore listeners aren't attached. + +```html + +``` + +Same goes for Chrome on Android (all versions) with `user-scalable=no` in the viewport meta tag. But be aware that `user-scalable=no` also disables pinch zooming, which may be an accessibility concern. + +For IE11+, you can use `touch-action: manipulation;` to disable double-tap-to-zoom on certain elements (like links and buttons). For IE10 use `-ms-touch-action: manipulation`. + +## Usage ## + +Include fastclick.js in your JavaScript bundle or add it to your HTML page like this: + +```html + +``` + +The script must be loaded prior to instantiating FastClick on any element of the page. + +To instantiate FastClick on the `body`, which is the recommended method of use: + +```js +if ('addEventListener' in document) { + document.addEventListener('DOMContentLoaded', function() { + FastClick.attach(document.body); + }, false); +} +``` + +Or, if you're using jQuery: + +```js +$(function() { + FastClick.attach(document.body); +}); +``` + +If you're using Browserify or another CommonJS-style module system, the `FastClick.attach` function will be returned when you call `require('fastclick')`. As a result, the easiest way to use FastClick with these loaders is as follows: + +```js +var attachFastClick = require('fastclick'); +attachFastClick(document.body); +``` + +### Minified ### + +Run `make` to build a minified version of FastClick using the Closure Compiler REST API. The minified file is saved to `build/fastclick.min.js` or you can [download a pre-minified version](http://build.origami.ft.com/bundles/js?modules=fastclick). + +Note: the pre-minified version is built using [our build service](http://origami.ft.com/docs/developer-guide/build-service/) which exposes the `FastClick` object through `Origami.fastclick` and will have the Browserify/CommonJS API (see above). + +```js +var attachFastClick = Origami.fastclick; +attachFastClick(document.body); +``` + +### AMD ### + +FastClick has AMD (Asynchronous Module Definition) support. This allows it to be lazy-loaded with an AMD loader, such as [RequireJS](http://requirejs.org/). Note that when using the AMD style require, the full `FastClick` object will be returned, _not_ `FastClick.attach` + +```js +var FastClick = require('fastclick'); +FastClick.attach(document.body, options); +``` + +### Package managers ### + +You can install FastClick using [Component](https://github.com/component/component), [npm](https://npmjs.org/package/fastclick) or [Bower](http://bower.io/). + +For Ruby, there's a third-party gem called [fastclick-rails](http://rubygems.org/gems/fastclick-rails). For .NET there's a [NuGet package](http://nuget.org/packages/FastClick). + +## Advanced ## + +### Ignore certain elements with `needsclick` ### + +Sometimes you need FastClick to ignore certain elements. You can do this easily by adding the `needsclick` class. +```html +Ignored by FastClick +``` + +#### Use case 1: non-synthetic click required #### + +Internally, FastClick uses `document.createEvent` to fire a synthetic `click` event as soon as `touchend` is fired by the browser. It then suppresses the additional `click` event created by the browser after that. In some cases, the non-synthetic `click` event created by the browser is required, as described in the [triggering focus example](http://ftlabs.github.com/fastclick/examples/focus.html). + +This is where the `needsclick` class comes in. Add the class to any element that requires a non-synthetic click. + +#### Use case 2: Twitter Bootstrap 2.2.2 dropdowns #### + +Another example of when to use the `needsclick` class is with dropdowns in Twitter Bootstrap 2.2.2. Bootstrap add its own `touchstart` listener for dropdowns, so you want to tell FastClick to ignore those. If you don't, touch devices will automatically close the dropdown as soon as it is clicked, because both FastClick and Bootstrap execute the synthetic click, one opens the dropdown, the second closes it immediately after. + +```html +Dropdown +``` + +## Examples ## + +FastClick is designed to cope with many different browser oddities. Here are some examples to illustrate this: + +* [basic use](http://ftlabs.github.com/fastclick/examples/layer.html) showing the increase in perceived responsiveness +* [triggering focus](http://ftlabs.github.com/fastclick/examples/focus.html) on an input element from a `click` handler +* [input element](http://ftlabs.github.com/fastclick/examples/input.html) which never receives clicks but gets fast focus + +## Tests ## + +There are no automated tests. The files in `tests/` are manual reduced test cases. We've had a think about how best to test these cases, but they tend to be very browser/device specific and sometimes subjective which means it's not so trivial to test. + +## Credits and collaboration ## + +FastClick is maintained by [Rowan Beentje](http://twitter.com/rowanbeentje), [Matthew Caruana Galizia](http://twitter.com/mcaruanagalizia) and [Matthew Andrews](http://twitter.com/andrewsmatt) at [FT Labs](http://labs.ft.com). All open source code released by FT Labs is licenced under the MIT licence. We welcome comments, feedback and suggestions. Please feel free to raise an issue or pull request. diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/bower.json new file mode 100644 index 00000000..18e1abd4 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/bower.json @@ -0,0 +1,12 @@ +{ + "name": "fastclick", + "main": "lib/fastclick.js", + "ignore": [ + "**/.*", + "component.json", + "package.json", + "Makefile", + "tests", + "examples" + ] +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/lib/fastclick.js b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/lib/fastclick.js new file mode 100644 index 00000000..3af4f9d6 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/fastclick/lib/fastclick.js @@ -0,0 +1,841 @@ +;(function () { + 'use strict'; + + /** + * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. + * + * @codingstandard ftlabs-jsv2 + * @copyright The Financial Times Limited [All Rights Reserved] + * @license MIT License (see LICENSE.txt) + */ + + /*jslint browser:true, node:true*/ + /*global define, Event, Node*/ + + + /** + * Instantiate fast-clicking listeners on the specified layer. + * + * @constructor + * @param {Element} layer The layer to listen on + * @param {Object} [options={}] The options to override the defaults + */ + function FastClick(layer, options) { + var oldOnClick; + + options = options || {}; + + /** + * Whether a click is currently being tracked. + * + * @type boolean + */ + this.trackingClick = false; + + + /** + * Timestamp for when click tracking started. + * + * @type number + */ + this.trackingClickStart = 0; + + + /** + * The element being tracked for a click. + * + * @type EventTarget + */ + this.targetElement = null; + + + /** + * X-coordinate of touch start event. + * + * @type number + */ + this.touchStartX = 0; + + + /** + * Y-coordinate of touch start event. + * + * @type number + */ + this.touchStartY = 0; + + + /** + * ID of the last touch, retrieved from Touch.identifier. + * + * @type number + */ + this.lastTouchIdentifier = 0; + + + /** + * Touchmove boundary, beyond which a click will be cancelled. + * + * @type number + */ + this.touchBoundary = options.touchBoundary || 10; + + + /** + * The FastClick layer. + * + * @type Element + */ + this.layer = layer; + + /** + * The minimum time between tap(touchstart and touchend) events + * + * @type number + */ + this.tapDelay = options.tapDelay || 200; + + /** + * The maximum time for a tap + * + * @type number + */ + this.tapTimeout = options.tapTimeout || 700; + + if (FastClick.notNeeded(layer)) { + return; + } + + // Some old versions of Android don't have Function.prototype.bind + function bind(method, context) { + return function() { return method.apply(context, arguments); }; + } + + + var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel']; + var context = this; + for (var i = 0, l = methods.length; i < l; i++) { + context[methods[i]] = bind(context[methods[i]], context); + } + + // Set up event handlers as required + if (deviceIsAndroid) { + layer.addEventListener('mouseover', this.onMouse, true); + layer.addEventListener('mousedown', this.onMouse, true); + layer.addEventListener('mouseup', this.onMouse, true); + } + + layer.addEventListener('click', this.onClick, true); + layer.addEventListener('touchstart', this.onTouchStart, false); + layer.addEventListener('touchmove', this.onTouchMove, false); + layer.addEventListener('touchend', this.onTouchEnd, false); + layer.addEventListener('touchcancel', this.onTouchCancel, false); + + // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) + // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick + // layer when they are cancelled. + if (!Event.prototype.stopImmediatePropagation) { + layer.removeEventListener = function(type, callback, capture) { + var rmv = Node.prototype.removeEventListener; + if (type === 'click') { + rmv.call(layer, type, callback.hijacked || callback, capture); + } else { + rmv.call(layer, type, callback, capture); + } + }; + + layer.addEventListener = function(type, callback, capture) { + var adv = Node.prototype.addEventListener; + if (type === 'click') { + adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) { + if (!event.propagationStopped) { + callback(event); + } + }), capture); + } else { + adv.call(layer, type, callback, capture); + } + }; + } + + // If a handler is already declared in the element's onclick attribute, it will be fired before + // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and + // adding it as listener. + if (typeof layer.onclick === 'function') { + + // Android browser on at least 3.2 requires a new reference to the function in layer.onclick + // - the old one won't work if passed to addEventListener directly. + oldOnClick = layer.onclick; + layer.addEventListener('click', function(event) { + oldOnClick(event); + }, false); + layer.onclick = null; + } + } + + /** + * Windows Phone 8.1 fakes user agent string to look like Android and iPhone. + * + * @type boolean + */ + var deviceIsWindowsPhone = navigator.userAgent.indexOf("Windows Phone") >= 0; + + /** + * Android requires exceptions. + * + * @type boolean + */ + var deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone; + + + /** + * iOS requires exceptions. + * + * @type boolean + */ + var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone; + + + /** + * iOS 4 requires an exception for select elements. + * + * @type boolean + */ + var deviceIsIOS4 = deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent); + + + /** + * iOS 6.0-7.* requires the target element to be manually derived + * + * @type boolean + */ + var deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\d/).test(navigator.userAgent); + + /** + * BlackBerry requires exceptions. + * + * @type boolean + */ + var deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0; + + /** + * Determine whether a given element requires a native click. + * + * @param {EventTarget|Element} target Target DOM element + * @returns {boolean} Returns true if the element needs a native click + */ + FastClick.prototype.needsClick = function(target) { + switch (target.nodeName.toLowerCase()) { + + // Don't send a synthetic click to disabled inputs (issue #62) + case 'button': + case 'select': + case 'textarea': + if (target.disabled) { + return true; + } + + break; + case 'input': + + // File inputs need real clicks on iOS 6 due to a browser bug (issue #68) + if ((deviceIsIOS && target.type === 'file') || target.disabled) { + return true; + } + + break; + case 'label': + case 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames + case 'video': + return true; + } + + return (/\bneedsclick\b/).test(target.className); + }; + + + /** + * Determine whether a given element requires a call to focus to simulate click into element. + * + * @param {EventTarget|Element} target Target DOM element + * @returns {boolean} Returns true if the element requires a call to focus to simulate native click. + */ + FastClick.prototype.needsFocus = function(target) { + switch (target.nodeName.toLowerCase()) { + case 'textarea': + return true; + case 'select': + return !deviceIsAndroid; + case 'input': + switch (target.type) { + case 'button': + case 'checkbox': + case 'file': + case 'image': + case 'radio': + case 'submit': + return false; + } + + // No point in attempting to focus disabled inputs + return !target.disabled && !target.readOnly; + default: + return (/\bneedsfocus\b/).test(target.className); + } + }; + + + /** + * Send a click event to the specified element. + * + * @param {EventTarget|Element} targetElement + * @param {Event} event + */ + FastClick.prototype.sendClick = function(targetElement, event) { + var clickEvent, touch; + + // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24) + if (document.activeElement && document.activeElement !== targetElement) { + document.activeElement.blur(); + } + + touch = event.changedTouches[0]; + + // Synthesise a click event, with an extra attribute so it can be tracked + clickEvent = document.createEvent('MouseEvents'); + clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); + clickEvent.forwardedTouchEvent = true; + targetElement.dispatchEvent(clickEvent); + }; + + FastClick.prototype.determineEventType = function(targetElement) { + + //Issue #159: Android Chrome Select Box does not open with a synthetic click event + if (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') { + return 'mousedown'; + } + + return 'click'; + }; + + + /** + * @param {EventTarget|Element} targetElement + */ + FastClick.prototype.focus = function(targetElement) { + var length; + + // Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724. + if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') { + length = targetElement.value.length; + targetElement.setSelectionRange(length, length); + } else { + targetElement.focus(); + } + }; + + + /** + * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it. + * + * @param {EventTarget|Element} targetElement + */ + FastClick.prototype.updateScrollParent = function(targetElement) { + var scrollParent, parentElement; + + scrollParent = targetElement.fastClickScrollParent; + + // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the + // target element was moved to another parent. + if (!scrollParent || !scrollParent.contains(targetElement)) { + parentElement = targetElement; + do { + if (parentElement.scrollHeight > parentElement.offsetHeight) { + scrollParent = parentElement; + targetElement.fastClickScrollParent = parentElement; + break; + } + + parentElement = parentElement.parentElement; + } while (parentElement); + } + + // Always update the scroll top tracker if possible. + if (scrollParent) { + scrollParent.fastClickLastScrollTop = scrollParent.scrollTop; + } + }; + + + /** + * @param {EventTarget} targetElement + * @returns {Element|EventTarget} + */ + FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) { + + // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node. + if (eventTarget.nodeType === Node.TEXT_NODE) { + return eventTarget.parentNode; + } + + return eventTarget; + }; + + + /** + * On touch start, record the position and scroll offset. + * + * @param {Event} event + * @returns {boolean} + */ + FastClick.prototype.onTouchStart = function(event) { + var targetElement, touch, selection; + + // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111). + if (event.targetTouches.length > 1) { + return true; + } + + targetElement = this.getTargetElementFromEventTarget(event.target); + touch = event.targetTouches[0]; + + if (deviceIsIOS) { + + // Only trusted events will deselect text on iOS (issue #49) + selection = window.getSelection(); + if (selection.rangeCount && !selection.isCollapsed) { + return true; + } + + if (!deviceIsIOS4) { + + // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23): + // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched + // with the same identifier as the touch event that previously triggered the click that triggered the alert. + // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an + // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform. + // Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string, + // which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long, + // random integers, it's safe to to continue if the identifier is 0 here. + if (touch.identifier && touch.identifier === this.lastTouchIdentifier) { + event.preventDefault(); + return false; + } + + this.lastTouchIdentifier = touch.identifier; + + // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and: + // 1) the user does a fling scroll on the scrollable layer + // 2) the user stops the fling scroll with another tap + // then the event.target of the last 'touchend' event will be the element that was under the user's finger + // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check + // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42). + this.updateScrollParent(targetElement); + } + } + + this.trackingClick = true; + this.trackingClickStart = event.timeStamp; + this.targetElement = targetElement; + + this.touchStartX = touch.pageX; + this.touchStartY = touch.pageY; + + // Prevent phantom clicks on fast double-tap (issue #36) + if ((event.timeStamp - this.lastClickTime) < this.tapDelay) { + event.preventDefault(); + } + + return true; + }; + + + /** + * Based on a touchmove event object, check whether the touch has moved past a boundary since it started. + * + * @param {Event} event + * @returns {boolean} + */ + FastClick.prototype.touchHasMoved = function(event) { + var touch = event.changedTouches[0], boundary = this.touchBoundary; + + if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) { + return true; + } + + return false; + }; + + + /** + * Update the last position. + * + * @param {Event} event + * @returns {boolean} + */ + FastClick.prototype.onTouchMove = function(event) { + if (!this.trackingClick) { + return true; + } + + // If the touch has moved, cancel the click tracking + if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) { + this.trackingClick = false; + this.targetElement = null; + } + + return true; + }; + + + /** + * Attempt to find the labelled control for the given label element. + * + * @param {EventTarget|HTMLLabelElement} labelElement + * @returns {Element|null} + */ + FastClick.prototype.findControl = function(labelElement) { + + // Fast path for newer browsers supporting the HTML5 control attribute + if (labelElement.control !== undefined) { + return labelElement.control; + } + + // All browsers under test that support touch events also support the HTML5 htmlFor attribute + if (labelElement.htmlFor) { + return document.getElementById(labelElement.htmlFor); + } + + // If no for attribute exists, attempt to retrieve the first labellable descendant element + // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label + return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea'); + }; + + + /** + * On touch end, determine whether to send a click event at once. + * + * @param {Event} event + * @returns {boolean} + */ + FastClick.prototype.onTouchEnd = function(event) { + var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement; + + if (!this.trackingClick) { + return true; + } + + // Prevent phantom clicks on fast double-tap (issue #36) + if ((event.timeStamp - this.lastClickTime) < this.tapDelay) { + this.cancelNextClick = true; + return true; + } + + if ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) { + return true; + } + + // Reset to prevent wrong click cancel on input (issue #156). + this.cancelNextClick = false; + + this.lastClickTime = event.timeStamp; + + trackingClickStart = this.trackingClickStart; + this.trackingClick = false; + this.trackingClickStart = 0; + + // On some iOS devices, the targetElement supplied with the event is invalid if the layer + // is performing a transition or scroll, and has to be re-detected manually. Note that + // for this to function correctly, it must be called *after* the event target is checked! + // See issue #57; also filed as rdar://13048589 . + if (deviceIsIOSWithBadTarget) { + touch = event.changedTouches[0]; + + // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null + targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement; + targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent; + } + + targetTagName = targetElement.tagName.toLowerCase(); + if (targetTagName === 'label') { + forElement = this.findControl(targetElement); + if (forElement) { + this.focus(targetElement); + if (deviceIsAndroid) { + return false; + } + + targetElement = forElement; + } + } else if (this.needsFocus(targetElement)) { + + // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through. + // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37). + if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) { + this.targetElement = null; + return false; + } + + this.focus(targetElement); + this.sendClick(targetElement, event); + + // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open. + // Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others) + if (!deviceIsIOS || targetTagName !== 'select') { + this.targetElement = null; + event.preventDefault(); + } + + return false; + } + + if (deviceIsIOS && !deviceIsIOS4) { + + // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled + // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42). + scrollParent = targetElement.fastClickScrollParent; + if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) { + return true; + } + } + + // Prevent the actual click from going though - unless the target node is marked as requiring + // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted. + if (!this.needsClick(targetElement)) { + event.preventDefault(); + this.sendClick(targetElement, event); + } + + return false; + }; + + + /** + * On touch cancel, stop tracking the click. + * + * @returns {void} + */ + FastClick.prototype.onTouchCancel = function() { + this.trackingClick = false; + this.targetElement = null; + }; + + + /** + * Determine mouse events which should be permitted. + * + * @param {Event} event + * @returns {boolean} + */ + FastClick.prototype.onMouse = function(event) { + + // If a target element was never set (because a touch event was never fired) allow the event + if (!this.targetElement) { + return true; + } + + if (event.forwardedTouchEvent) { + return true; + } + + // Programmatically generated events targeting a specific element should be permitted + if (!event.cancelable) { + return true; + } + + // Derive and check the target element to see whether the mouse event needs to be permitted; + // unless explicitly enabled, prevent non-touch click events from triggering actions, + // to prevent ghost/doubleclicks. + if (!this.needsClick(this.targetElement) || this.cancelNextClick) { + + // Prevent any user-added listeners declared on FastClick element from being fired. + if (event.stopImmediatePropagation) { + event.stopImmediatePropagation(); + } else { + + // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) + event.propagationStopped = true; + } + + // Cancel the event + event.stopPropagation(); + event.preventDefault(); + + return false; + } + + // If the mouse event is permitted, return true for the action to go through. + return true; + }; + + + /** + * On actual clicks, determine whether this is a touch-generated click, a click action occurring + * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or + * an actual click which should be permitted. + * + * @param {Event} event + * @returns {boolean} + */ + FastClick.prototype.onClick = function(event) { + var permitted; + + // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early. + if (this.trackingClick) { + this.targetElement = null; + this.trackingClick = false; + return true; + } + + // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target. + if (event.target.type === 'submit' && event.detail === 0) { + return true; + } + + permitted = this.onMouse(event); + + // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through. + if (!permitted) { + this.targetElement = null; + } + + // If clicks are permitted, return true for the action to go through. + return permitted; + }; + + + /** + * Remove all FastClick's event listeners. + * + * @returns {void} + */ + FastClick.prototype.destroy = function() { + var layer = this.layer; + + if (deviceIsAndroid) { + layer.removeEventListener('mouseover', this.onMouse, true); + layer.removeEventListener('mousedown', this.onMouse, true); + layer.removeEventListener('mouseup', this.onMouse, true); + } + + layer.removeEventListener('click', this.onClick, true); + layer.removeEventListener('touchstart', this.onTouchStart, false); + layer.removeEventListener('touchmove', this.onTouchMove, false); + layer.removeEventListener('touchend', this.onTouchEnd, false); + layer.removeEventListener('touchcancel', this.onTouchCancel, false); + }; + + + /** + * Check whether FastClick is needed. + * + * @param {Element} layer The layer to listen on + */ + FastClick.notNeeded = function(layer) { + var metaViewport; + var chromeVersion; + var blackberryVersion; + var firefoxVersion; + + // Devices that don't support touch don't need FastClick + if (typeof window.ontouchstart === 'undefined') { + return true; + } + + // Chrome version - zero for other browsers + chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1]; + + if (chromeVersion) { + + if (deviceIsAndroid) { + metaViewport = document.querySelector('meta[name=viewport]'); + + if (metaViewport) { + // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89) + if (metaViewport.content.indexOf('user-scalable=no') !== -1) { + return true; + } + // Chrome 32 and above with width=device-width or less don't need FastClick + if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) { + return true; + } + } + + // Chrome desktop doesn't need FastClick (issue #15) + } else { + return true; + } + } + + if (deviceIsBlackBerry10) { + blackberryVersion = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/); + + // BlackBerry 10.3+ does not require Fastclick library. + // https://github.com/ftlabs/fastclick/issues/251 + if (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) { + metaViewport = document.querySelector('meta[name=viewport]'); + + if (metaViewport) { + // user-scalable=no eliminates click delay. + if (metaViewport.content.indexOf('user-scalable=no') !== -1) { + return true; + } + // width=device-width (or less than device-width) eliminates click delay. + if (document.documentElement.scrollWidth <= window.outerWidth) { + return true; + } + } + } + } + + // IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97) + if (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') { + return true; + } + + // Firefox version - zero for other browsers + firefoxVersion = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1]; + + if (firefoxVersion >= 27) { + // Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896 + + metaViewport = document.querySelector('meta[name=viewport]'); + if (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) { + return true; + } + } + + // IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version + // http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx + if (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') { + return true; + } + + return false; + }; + + + /** + * Factory method for creating a FastClick object + * + * @param {Element} layer The layer to listen on + * @param {Object} [options={}] The options to override the defaults + */ + FastClick.attach = function(layer, options) { + return new FastClick(layer, options); + }; + + + if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { + + // AMD. Register as an anonymous module. + define(function() { + return FastClick; + }); + } else if (typeof module !== 'undefined' && module.exports) { + module.exports = FastClick.attach; + module.exports.FastClick = FastClick; + } else { + window.FastClick = FastClick; + } +}()); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/.bower.json new file mode 100644 index 00000000..e813ac07 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/.bower.json @@ -0,0 +1,33 @@ +{ + "name": "foundation", + "version": "5.5.1", + "main": [ + "css/foundation.css", + "css/foundation.css.map", + "js/foundation.js" + ], + "ignore": [], + "dependencies": { + "jquery": ">= 2.1.0", + "modernizr": ">= 2.7.2", + "fastclick": ">=0.6.11", + "jquery.cookie": "~1.4.0", + "jquery-placeholder": "~2.0.7" + }, + "devDependencies": { + "jquery.autocomplete": "devbridge/jQuery-Autocomplete#1.2.9", + "lodash": "~2.4.1" + }, + "private": true, + "homepage": "https://github.com/zurb/bower-foundation", + "_release": "5.5.1", + "_resolution": { + "type": "version", + "tag": "5.5.1", + "commit": "bf07a7551bc3e599404d9cb2eb2251a95c1ea782" + }, + "_source": "git://github.com/zurb/bower-foundation.git", + "_target": "~5.5.1", + "_originalSource": "foundation", + "_direct": true +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/bower.json new file mode 100644 index 00000000..1216d082 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/bower.json @@ -0,0 +1,23 @@ +{ + "name": "foundation", + "version": "5.5.1", + "main": [ + "css/foundation.css", + "css/foundation.css.map", + "js/foundation.js" + ], + "ignore": [ + ], + "dependencies": { + "jquery": ">= 2.1.0", + "modernizr": ">= 2.7.2", + "fastclick": ">=0.6.11", + "jquery.cookie": "~1.4.0", + "jquery-placeholder": "~2.0.7" + }, + "devDependencies": { + "jquery.autocomplete": "devbridge/jQuery-Autocomplete#1.2.9", + "lodash": "~2.4.1" + }, + "private": true +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/foundation.css b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/foundation.css new file mode 100644 index 00000000..09179bcd --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/foundation.css @@ -0,0 +1,6155 @@ +meta.foundation-version { + font-family: "/5.5.1/"; } + +meta.foundation-mq-small { + font-family: "/only screen/"; + width: 0; } + +meta.foundation-mq-small-only { + font-family: "/only screen and (max-width: 40em)/"; + width: 0; } + +meta.foundation-mq-medium { + font-family: "/only screen and (min-width:40.063em)/"; + width: 40.063em; } + +meta.foundation-mq-medium-only { + font-family: "/only screen and (min-width:40.063em) and (max-width:64em)/"; + width: 40.063em; } + +meta.foundation-mq-large { + font-family: "/only screen and (min-width:64.063em)/"; + width: 64.063em; } + +meta.foundation-mq-large-only { + font-family: "/only screen and (min-width:64.063em) and (max-width:90em)/"; + width: 64.063em; } + +meta.foundation-mq-xlarge { + font-family: "/only screen and (min-width:90.063em)/"; + width: 90.063em; } + +meta.foundation-mq-xlarge-only { + font-family: "/only screen and (min-width:90.063em) and (max-width:120em)/"; + width: 90.063em; } + +meta.foundation-mq-xxlarge { + font-family: "/only screen and (min-width:120.063em)/"; + width: 120.063em; } + +meta.foundation-data-attribute-namespace { + font-family: false; } + +html, body { + height: 100%; } + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-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, Roboto, Arial, sans-serif; + font-weight: normal; + font-style: normal; + line-height: 1.5; + position: relative; + cursor: auto; } + +a:hover { + cursor: pointer; } + +img { + max-width: 100%; + height: auto; } + +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; } + +.clearfix:before, .clearfix:after { + content: " "; + display: table; } +.clearfix:after { + clear: both; } + +.hide { + display: none; } + +.invisible { + visibility: hidden; } + +.antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +img { + display: inline-block; + vertical-align: middle; } + +textarea { + height: auto; + min-height: 50px; } + +select { + width: 100%; } + +.row { + width: 100%; + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; + max-width: 62.5rem; } + .row:before, .row:after { + content: " "; + display: table; } + .row:after { + clear: both; } + .row.collapse > .column, + .row.collapse > .columns { + padding-left: 0; + padding-right: 0; } + .row.collapse .row { + margin-left: 0; + margin-right: 0; } + .row .row { + width: auto; + margin-left: -0.9375rem; + margin-right: -0.9375rem; + margin-top: 0; + margin-bottom: 0; + max-width: none; } + .row .row:before, .row .row:after { + content: " "; + display: table; } + .row .row:after { + clear: both; } + .row .row.collapse { + width: auto; + margin: 0; + max-width: none; } + .row .row.collapse:before, .row .row.collapse:after { + content: " "; + display: table; } + .row .row.collapse:after { + clear: both; } + +.column, +.columns { + padding-left: 0.9375rem; + padding-right: 0.9375rem; + width: 100%; + float: left; } + +[class*="column"] + [class*="column"]:last-child { + float: right; } + +[class*="column"] + [class*="column"].end { + float: left; } + +@media only screen { + .small-push-0 { + position: relative; + left: 0%; + right: auto; } + + .small-pull-0 { + position: relative; + right: 0%; + left: auto; } + + .small-push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .small-pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .small-push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .small-pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .small-push-3 { + position: relative; + left: 25%; + right: auto; } + + .small-pull-3 { + position: relative; + right: 25%; + left: auto; } + + .small-push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .small-pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .small-push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .small-pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .small-push-6 { + position: relative; + left: 50%; + right: auto; } + + .small-pull-6 { + position: relative; + right: 50%; + left: auto; } + + .small-push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .small-pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .small-push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .small-pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .small-push-9 { + position: relative; + left: 75%; + right: auto; } + + .small-pull-9 { + position: relative; + right: 75%; + left: auto; } + + .small-push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .small-pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .small-push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .small-pull-11 { + position: relative; + right: 91.66667%; + left: auto; } + + .column, + .columns { + position: relative; + padding-left: 0.9375rem; + padding-right: 0.9375rem; + float: left; } + + .small-1 { + width: 8.33333%; } + + .small-2 { + width: 16.66667%; } + + .small-3 { + width: 25%; } + + .small-4 { + width: 33.33333%; } + + .small-5 { + width: 41.66667%; } + + .small-6 { + width: 50%; } + + .small-7 { + width: 58.33333%; } + + .small-8 { + width: 66.66667%; } + + .small-9 { + width: 75%; } + + .small-10 { + width: 83.33333%; } + + .small-11 { + width: 91.66667%; } + + .small-12 { + width: 100%; } + + .small-offset-0 { + margin-left: 0% !important; } + + .small-offset-1 { + margin-left: 8.33333% !important; } + + .small-offset-2 { + margin-left: 16.66667% !important; } + + .small-offset-3 { + margin-left: 25% !important; } + + .small-offset-4 { + margin-left: 33.33333% !important; } + + .small-offset-5 { + margin-left: 41.66667% !important; } + + .small-offset-6 { + margin-left: 50% !important; } + + .small-offset-7 { + margin-left: 58.33333% !important; } + + .small-offset-8 { + margin-left: 66.66667% !important; } + + .small-offset-9 { + margin-left: 75% !important; } + + .small-offset-10 { + margin-left: 83.33333% !important; } + + .small-offset-11 { + margin-left: 91.66667% !important; } + + .small-reset-order { + margin-left: 0; + margin-right: 0; + left: auto; + right: auto; + float: left; } + + .column.small-centered, + .columns.small-centered { + margin-left: auto; + margin-right: auto; + float: none; } + + .column.small-uncentered, + .columns.small-uncentered { + margin-left: 0; + margin-right: 0; + float: left; } + + .column.small-centered:last-child, + .columns.small-centered:last-child { + float: none; } + + .column.small-uncentered:last-child, + .columns.small-uncentered:last-child { + float: left; } + + .column.small-uncentered.opposite, + .columns.small-uncentered.opposite { + float: right; } + + .row.small-collapse > .column, + .row.small-collapse > .columns { + padding-left: 0; + padding-right: 0; } + .row.small-collapse .row { + margin-left: 0; + margin-right: 0; } + .row.small-uncollapse > .column, + .row.small-uncollapse > .columns { + padding-left: 0.9375rem; + padding-right: 0.9375rem; + float: left; } } +@media only screen and (min-width: 40.063em) { + .medium-push-0 { + position: relative; + left: 0%; + right: auto; } + + .medium-pull-0 { + position: relative; + right: 0%; + left: auto; } + + .medium-push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .medium-pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .medium-push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .medium-pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .medium-push-3 { + position: relative; + left: 25%; + right: auto; } + + .medium-pull-3 { + position: relative; + right: 25%; + left: auto; } + + .medium-push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .medium-pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .medium-push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .medium-pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .medium-push-6 { + position: relative; + left: 50%; + right: auto; } + + .medium-pull-6 { + position: relative; + right: 50%; + left: auto; } + + .medium-push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .medium-pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .medium-push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .medium-pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .medium-push-9 { + position: relative; + left: 75%; + right: auto; } + + .medium-pull-9 { + position: relative; + right: 75%; + left: auto; } + + .medium-push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .medium-pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .medium-push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .medium-pull-11 { + position: relative; + right: 91.66667%; + left: auto; } + + .column, + .columns { + position: relative; + padding-left: 0.9375rem; + padding-right: 0.9375rem; + float: left; } + + .medium-1 { + width: 8.33333%; } + + .medium-2 { + width: 16.66667%; } + + .medium-3 { + width: 25%; } + + .medium-4 { + width: 33.33333%; } + + .medium-5 { + width: 41.66667%; } + + .medium-6 { + width: 50%; } + + .medium-7 { + width: 58.33333%; } + + .medium-8 { + width: 66.66667%; } + + .medium-9 { + width: 75%; } + + .medium-10 { + width: 83.33333%; } + + .medium-11 { + width: 91.66667%; } + + .medium-12 { + width: 100%; } + + .medium-offset-0 { + margin-left: 0% !important; } + + .medium-offset-1 { + margin-left: 8.33333% !important; } + + .medium-offset-2 { + margin-left: 16.66667% !important; } + + .medium-offset-3 { + margin-left: 25% !important; } + + .medium-offset-4 { + margin-left: 33.33333% !important; } + + .medium-offset-5 { + margin-left: 41.66667% !important; } + + .medium-offset-6 { + margin-left: 50% !important; } + + .medium-offset-7 { + margin-left: 58.33333% !important; } + + .medium-offset-8 { + margin-left: 66.66667% !important; } + + .medium-offset-9 { + margin-left: 75% !important; } + + .medium-offset-10 { + margin-left: 83.33333% !important; } + + .medium-offset-11 { + margin-left: 91.66667% !important; } + + .medium-reset-order { + margin-left: 0; + margin-right: 0; + left: auto; + right: auto; + float: left; } + + .column.medium-centered, + .columns.medium-centered { + margin-left: auto; + margin-right: auto; + float: none; } + + .column.medium-uncentered, + .columns.medium-uncentered { + margin-left: 0; + margin-right: 0; + float: left; } + + .column.medium-centered:last-child, + .columns.medium-centered:last-child { + float: none; } + + .column.medium-uncentered:last-child, + .columns.medium-uncentered:last-child { + float: left; } + + .column.medium-uncentered.opposite, + .columns.medium-uncentered.opposite { + float: right; } + + .row.medium-collapse > .column, + .row.medium-collapse > .columns { + padding-left: 0; + padding-right: 0; } + .row.medium-collapse .row { + margin-left: 0; + margin-right: 0; } + .row.medium-uncollapse > .column, + .row.medium-uncollapse > .columns { + padding-left: 0.9375rem; + padding-right: 0.9375rem; + float: left; } + + .push-0 { + position: relative; + left: 0%; + right: auto; } + + .pull-0 { + position: relative; + right: 0%; + left: auto; } + + .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; } } +@media only screen and (min-width: 64.063em) { + .large-push-0 { + position: relative; + left: 0%; + right: auto; } + + .large-pull-0 { + position: relative; + right: 0%; + left: auto; } + + .large-push-1 { + position: relative; + left: 8.33333%; + right: auto; } + + .large-pull-1 { + position: relative; + right: 8.33333%; + left: auto; } + + .large-push-2 { + position: relative; + left: 16.66667%; + right: auto; } + + .large-pull-2 { + position: relative; + right: 16.66667%; + left: auto; } + + .large-push-3 { + position: relative; + left: 25%; + right: auto; } + + .large-pull-3 { + position: relative; + right: 25%; + left: auto; } + + .large-push-4 { + position: relative; + left: 33.33333%; + right: auto; } + + .large-pull-4 { + position: relative; + right: 33.33333%; + left: auto; } + + .large-push-5 { + position: relative; + left: 41.66667%; + right: auto; } + + .large-pull-5 { + position: relative; + right: 41.66667%; + left: auto; } + + .large-push-6 { + position: relative; + left: 50%; + right: auto; } + + .large-pull-6 { + position: relative; + right: 50%; + left: auto; } + + .large-push-7 { + position: relative; + left: 58.33333%; + right: auto; } + + .large-pull-7 { + position: relative; + right: 58.33333%; + left: auto; } + + .large-push-8 { + position: relative; + left: 66.66667%; + right: auto; } + + .large-pull-8 { + position: relative; + right: 66.66667%; + left: auto; } + + .large-push-9 { + position: relative; + left: 75%; + right: auto; } + + .large-pull-9 { + position: relative; + right: 75%; + left: auto; } + + .large-push-10 { + position: relative; + left: 83.33333%; + right: auto; } + + .large-pull-10 { + position: relative; + right: 83.33333%; + left: auto; } + + .large-push-11 { + position: relative; + left: 91.66667%; + right: auto; } + + .large-pull-11 { + position: relative; + right: 91.66667%; + left: auto; } + + .column, + .columns { + position: relative; + padding-left: 0.9375rem; + padding-right: 0.9375rem; + float: left; } + + .large-1 { + width: 8.33333%; } + + .large-2 { + width: 16.66667%; } + + .large-3 { + width: 25%; } + + .large-4 { + width: 33.33333%; } + + .large-5 { + width: 41.66667%; } + + .large-6 { + width: 50%; } + + .large-7 { + width: 58.33333%; } + + .large-8 { + width: 66.66667%; } + + .large-9 { + width: 75%; } + + .large-10 { + width: 83.33333%; } + + .large-11 { + width: 91.66667%; } + + .large-12 { + width: 100%; } + + .large-offset-0 { + margin-left: 0% !important; } + + .large-offset-1 { + margin-left: 8.33333% !important; } + + .large-offset-2 { + margin-left: 16.66667% !important; } + + .large-offset-3 { + margin-left: 25% !important; } + + .large-offset-4 { + margin-left: 33.33333% !important; } + + .large-offset-5 { + margin-left: 41.66667% !important; } + + .large-offset-6 { + margin-left: 50% !important; } + + .large-offset-7 { + margin-left: 58.33333% !important; } + + .large-offset-8 { + margin-left: 66.66667% !important; } + + .large-offset-9 { + margin-left: 75% !important; } + + .large-offset-10 { + margin-left: 83.33333% !important; } + + .large-offset-11 { + margin-left: 91.66667% !important; } + + .large-reset-order { + margin-left: 0; + margin-right: 0; + left: auto; + right: auto; + float: left; } + + .column.large-centered, + .columns.large-centered { + margin-left: auto; + margin-right: auto; + float: none; } + + .column.large-uncentered, + .columns.large-uncentered { + margin-left: 0; + margin-right: 0; + float: left; } + + .column.large-centered:last-child, + .columns.large-centered:last-child { + float: none; } + + .column.large-uncentered:last-child, + .columns.large-uncentered:last-child { + float: left; } + + .column.large-uncentered.opposite, + .columns.large-uncentered.opposite { + float: right; } + + .row.large-collapse > .column, + .row.large-collapse > .columns { + padding-left: 0; + padding-right: 0; } + .row.large-collapse .row { + margin-left: 0; + margin-right: 0; } + .row.large-uncollapse > .column, + .row.large-uncollapse > .columns { + padding-left: 0.9375rem; + padding-right: 0.9375rem; + float: left; } + + .push-0 { + position: relative; + left: 0%; + right: auto; } + + .pull-0 { + position: relative; + right: 0%; + left: auto; } + + .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; } } +.accordion { + margin-bottom: 0; } + .accordion:before, .accordion:after { + content: " "; + display: table; } + .accordion:after { + clear: both; } + .accordion .accordion-navigation, .accordion dd { + display: block; + margin-bottom: 0 !important; } + .accordion .accordion-navigation.active > a, .accordion dd.active > a { + background: #e8e8e8; } + .accordion .accordion-navigation > a, .accordion dd > a { + background: #EFEFEF; + color: #222222; + padding: 1rem; + display: block; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-size: 1rem; } + .accordion .accordion-navigation > a:hover, .accordion dd > a:hover { + background: #e3e3e3; } + .accordion .accordion-navigation > .content, .accordion dd > .content { + display: none; + padding: 0.9375rem; } + .accordion .accordion-navigation > .content.active, .accordion dd > .content.active { + display: block; + background: #FFFFFF; } + +.alert-box { + border-style: solid; + border-width: 1px; + display: block; + font-weight: normal; + margin-bottom: 1.25rem; + position: relative; + padding: 0.875rem 1.5rem 0.875rem 0.875rem; + font-size: 0.8125rem; + transition: opacity 300ms ease-out; + background-color: #008CBA; + border-color: #0078a0; + color: #FFFFFF; } + .alert-box .close { + font-size: 1.375rem; + padding: 0 6px 4px; + line-height: .9; + position: absolute; + top: 50%; + margin-top: -0.6875rem; + right: 0.25rem; + color: #333333; + opacity: 0.3; + background: inherit; } + .alert-box .close:hover, .alert-box .close:focus { + opacity: 0.5; } + .alert-box.radius { + border-radius: 3px; } + .alert-box.round { + border-radius: 1000px; } + .alert-box.success { + background-color: #43AC6A; + border-color: #3a945b; + color: #FFFFFF; } + .alert-box.alert { + background-color: #f04124; + border-color: #de2d0f; + color: #FFFFFF; } + .alert-box.secondary { + background-color: #e7e7e7; + border-color: #c7c7c7; + color: #4f4f4f; } + .alert-box.warning { + background-color: #f08a24; + border-color: #de770f; + color: #FFFFFF; } + .alert-box.info { + background-color: #a0d3e8; + border-color: #74bfdd; + color: #4f4f4f; } + .alert-box.alert-close { + opacity: 0; } + +[class*="block-grid-"] { + display: block; + padding: 0; + margin: 0 -0.625rem; } + [class*="block-grid-"]:before, [class*="block-grid-"]:after { + content: " "; + display: table; } + [class*="block-grid-"]:after { + clear: both; } + [class*="block-grid-"] > li { + display: block; + height: auto; + float: left; + padding: 0 0.625rem 1.25rem; } + +@media only screen { + .small-block-grid-1 > li { + width: 100%; + list-style: none; } + .small-block-grid-1 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; } + + .small-block-grid-2 > li { + width: 50%; + list-style: none; } + .small-block-grid-2 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; } + + .small-block-grid-3 > li { + width: 33.33333%; + list-style: none; } + .small-block-grid-3 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; } + + .small-block-grid-4 > li { + width: 25%; + list-style: none; } + .small-block-grid-4 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; } + + .small-block-grid-5 > li { + width: 20%; + list-style: none; } + .small-block-grid-5 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; } + + .small-block-grid-6 > li { + width: 16.66667%; + list-style: none; } + .small-block-grid-6 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; } + + .small-block-grid-7 > li { + width: 14.28571%; + list-style: none; } + .small-block-grid-7 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; } + + .small-block-grid-8 > li { + width: 12.5%; + list-style: none; } + .small-block-grid-8 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; } + + .small-block-grid-9 > li { + width: 11.11111%; + list-style: none; } + .small-block-grid-9 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; } + + .small-block-grid-10 > li { + width: 10%; + list-style: none; } + .small-block-grid-10 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; } + + .small-block-grid-11 > li { + width: 9.09091%; + list-style: none; } + .small-block-grid-11 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; } + + .small-block-grid-12 > li { + width: 8.33333%; + list-style: none; } + .small-block-grid-12 > li:nth-of-type(1n) { + clear: none; } + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; } } +@media only screen and (min-width: 40.063em) { + .medium-block-grid-1 > li { + width: 100%; + list-style: none; } + .medium-block-grid-1 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; } + + .medium-block-grid-2 > li { + width: 50%; + list-style: none; } + .medium-block-grid-2 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; } + + .medium-block-grid-3 > li { + width: 33.33333%; + list-style: none; } + .medium-block-grid-3 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; } + + .medium-block-grid-4 > li { + width: 25%; + list-style: none; } + .medium-block-grid-4 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; } + + .medium-block-grid-5 > li { + width: 20%; + list-style: none; } + .medium-block-grid-5 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; } + + .medium-block-grid-6 > li { + width: 16.66667%; + list-style: none; } + .medium-block-grid-6 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; } + + .medium-block-grid-7 > li { + width: 14.28571%; + list-style: none; } + .medium-block-grid-7 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; } + + .medium-block-grid-8 > li { + width: 12.5%; + list-style: none; } + .medium-block-grid-8 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; } + + .medium-block-grid-9 > li { + width: 11.11111%; + list-style: none; } + .medium-block-grid-9 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; } + + .medium-block-grid-10 > li { + width: 10%; + list-style: none; } + .medium-block-grid-10 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; } + + .medium-block-grid-11 > li { + width: 9.09091%; + list-style: none; } + .medium-block-grid-11 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; } + + .medium-block-grid-12 > li { + width: 8.33333%; + list-style: none; } + .medium-block-grid-12 > li:nth-of-type(1n) { + clear: none; } + .medium-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; } } +@media only screen and (min-width: 64.063em) { + .large-block-grid-1 > li { + width: 100%; + list-style: none; } + .large-block-grid-1 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; } + + .large-block-grid-2 > li { + width: 50%; + list-style: none; } + .large-block-grid-2 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; } + + .large-block-grid-3 > li { + width: 33.33333%; + list-style: none; } + .large-block-grid-3 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; } + + .large-block-grid-4 > li { + width: 25%; + list-style: none; } + .large-block-grid-4 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; } + + .large-block-grid-5 > li { + width: 20%; + list-style: none; } + .large-block-grid-5 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; } + + .large-block-grid-6 > li { + width: 16.66667%; + list-style: none; } + .large-block-grid-6 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; } + + .large-block-grid-7 > li { + width: 14.28571%; + list-style: none; } + .large-block-grid-7 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; } + + .large-block-grid-8 > li { + width: 12.5%; + list-style: none; } + .large-block-grid-8 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; } + + .large-block-grid-9 > li { + width: 11.11111%; + list-style: none; } + .large-block-grid-9 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; } + + .large-block-grid-10 > li { + width: 10%; + list-style: none; } + .large-block-grid-10 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; } + + .large-block-grid-11 > li { + width: 9.09091%; + list-style: none; } + .large-block-grid-11 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; } + + .large-block-grid-12 > li { + width: 8.33333%; + list-style: none; } + .large-block-grid-12 > li:nth-of-type(1n) { + clear: none; } + .large-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; } } +.breadcrumbs { + display: block; + padding: 0.5625rem 0.875rem 0.5625rem; + overflow: hidden; + margin-left: 0; + list-style: none; + border-style: solid; + border-width: 1px; + background-color: #f4f4f4; + border-color: gainsboro; + border-radius: 3px; } + .breadcrumbs > * { + margin: 0; + float: left; + font-size: 0.6875rem; + line-height: 0.6875rem; + text-transform: uppercase; + color: #008CBA; } + .breadcrumbs > *:hover a, .breadcrumbs > *:focus a { + text-decoration: underline; } + .breadcrumbs > * a { + color: #008CBA; } + .breadcrumbs > *.current { + cursor: default; + color: #333333; } + .breadcrumbs > *.current a { + cursor: default; + color: #333333; } + .breadcrumbs > *.current:hover, .breadcrumbs > *.current:hover a, .breadcrumbs > *.current:focus, .breadcrumbs > *.current:focus a { + text-decoration: none; } + .breadcrumbs > *.unavailable { + color: #999999; } + .breadcrumbs > *.unavailable a { + color: #999999; } + .breadcrumbs > *.unavailable:hover, .breadcrumbs > *.unavailable:hover a, .breadcrumbs > *.unavailable:focus, + .breadcrumbs > *.unavailable a:focus { + text-decoration: none; + color: #999999; + cursor: not-allowed; } + .breadcrumbs > *:before { + content: "/"; + color: #AAAAAA; + margin: 0 0.75rem; + position: relative; + top: 1px; } + .breadcrumbs > *:first-child:before { + content: " "; + margin: 0; } + +/* Accessibility - hides the forward slash */ +[aria-label="breadcrumbs"] [aria-hidden="true"]:after { + content: "/"; } + +button, .button { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 1rem; + padding-right: 2rem; + padding-bottom: 1.0625rem; + padding-left: 2rem; + font-size: 1rem; + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; + transition: background-color 300ms ease-out; } + button:hover, button:focus, .button:hover, .button:focus { + background-color: #007095; } + button:hover, button:focus, .button:hover, .button:focus { + color: #FFFFFF; } + button.secondary, .button.secondary { + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; } + button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + background-color: #b9b9b9; } + button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + color: #333333; } + button.success, .button.success { + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; } + button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + background-color: #368a55; } + button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + color: #FFFFFF; } + button.alert, .button.alert { + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; } + button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + background-color: #cf2a0e; } + button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + color: #FFFFFF; } + button.warning, .button.warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: #FFFFFF; } + button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { + background-color: #cf6e0e; } + button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { + color: #FFFFFF; } + button.info, .button.info { + background-color: #a0d3e8; + border-color: #61b6d9; + color: #333333; } + button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { + background-color: #61b6d9; } + button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { + color: #FFFFFF; } + button.large, .button.large { + padding-top: 1.125rem; + padding-right: 2.25rem; + padding-bottom: 1.1875rem; + padding-left: 2.25rem; + font-size: 1.25rem; } + button.small, .button.small { + padding-top: 0.875rem; + padding-right: 1.75rem; + padding-bottom: 0.9375rem; + padding-left: 1.75rem; + font-size: 0.8125rem; } + button.tiny, .button.tiny { + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; } + button.expand, .button.expand { + padding-right: 0; + padding-left: 0; + width: 100%; } + button.left-align, .button.left-align { + text-align: left; + text-indent: 0.75rem; } + button.right-align, .button.right-align { + text-align: right; + padding-right: 0.75rem; } + button.radius, .button.radius { + border-radius: 3px; } + button.round, .button.round { + border-radius: 1000px; } + button.disabled, button[disabled], .button.disabled, .button[disabled] { + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + 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: #007095; } + 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: #FFFFFF; } + 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: #008CBA; } + button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, .button[disabled].secondary { + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; + cursor: default; + opacity: 0.7; + 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: #b9b9b9; } + 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: #333333; } + 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: #e7e7e7; } + button.disabled.success, button[disabled].success, .button.disabled.success, .button[disabled].success { + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + 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: #368a55; } + 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: #FFFFFF; } + 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: #43AC6A; } + button.disabled.alert, button[disabled].alert, .button.disabled.alert, .button[disabled].alert { + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + 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: #cf2a0e; } + 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: #FFFFFF; } + 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: #f04124; } + button.disabled.warning, button[disabled].warning, .button.disabled.warning, .button[disabled].warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #cf6e0e; } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + color: #FFFFFF; } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #f08a24; } + button.disabled.info, button[disabled].info, .button.disabled.info, .button[disabled].info { + background-color: #a0d3e8; + border-color: #61b6d9; + color: #333333; + cursor: default; + opacity: 0.7; + box-shadow: none; } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + background-color: #61b6d9; } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + color: #FFFFFF; } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + background-color: #a0d3e8; } + +button::-moz-focus-inner { + border: 0; + padding: 0; } + +@media only screen and (min-width: 40.063em) { + button, .button { + display: inline-block; } } +.button-group { + list-style: none; + margin: 0; + left: 0; } + .button-group:before, .button-group:after { + content: " "; + display: table; } + .button-group:after { + clear: both; } + .button-group.even-2 li { + margin: 0 -2px; + display: inline-block; + width: 50%; } + .button-group.even-2 li > button, .button-group.even-2 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-2 li:first-child button, .button-group.even-2 li:first-child .button { + border-left: 0; } + .button-group.even-2 li button, .button-group.even-2 li .button { + width: 100%; } + .button-group.even-3 li { + margin: 0 -2px; + display: inline-block; + width: 33.33333%; } + .button-group.even-3 li > button, .button-group.even-3 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-3 li:first-child button, .button-group.even-3 li:first-child .button { + border-left: 0; } + .button-group.even-3 li button, .button-group.even-3 li .button { + width: 100%; } + .button-group.even-4 li { + margin: 0 -2px; + display: inline-block; + width: 25%; } + .button-group.even-4 li > button, .button-group.even-4 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-4 li:first-child button, .button-group.even-4 li:first-child .button { + border-left: 0; } + .button-group.even-4 li button, .button-group.even-4 li .button { + width: 100%; } + .button-group.even-5 li { + margin: 0 -2px; + display: inline-block; + width: 20%; } + .button-group.even-5 li > button, .button-group.even-5 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-5 li:first-child button, .button-group.even-5 li:first-child .button { + border-left: 0; } + .button-group.even-5 li button, .button-group.even-5 li .button { + width: 100%; } + .button-group.even-6 li { + margin: 0 -2px; + display: inline-block; + width: 16.66667%; } + .button-group.even-6 li > button, .button-group.even-6 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-6 li:first-child button, .button-group.even-6 li:first-child .button { + border-left: 0; } + .button-group.even-6 li button, .button-group.even-6 li .button { + width: 100%; } + .button-group.even-7 li { + margin: 0 -2px; + display: inline-block; + width: 14.28571%; } + .button-group.even-7 li > button, .button-group.even-7 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-7 li:first-child button, .button-group.even-7 li:first-child .button { + border-left: 0; } + .button-group.even-7 li button, .button-group.even-7 li .button { + width: 100%; } + .button-group.even-8 li { + margin: 0 -2px; + display: inline-block; + width: 12.5%; } + .button-group.even-8 li > button, .button-group.even-8 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.even-8 li:first-child button, .button-group.even-8 li:first-child .button { + border-left: 0; } + .button-group.even-8 li button, .button-group.even-8 li .button { + width: 100%; } + .button-group > li { + margin: 0 -2px; + display: inline-block; } + .button-group > li > button, .button-group > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group > li:first-child button, .button-group > li:first-child .button { + border-left: 0; } + .button-group.stack > li { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; + float: none; } + .button-group.stack > li > button, .button-group.stack > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.stack > li:first-child button, .button-group.stack > li:first-child .button { + border-left: 0; } + .button-group.stack > li > button, .button-group.stack > li .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; } + .button-group.stack > li > button { + width: 100%; } + .button-group.stack > li:first-child button, .button-group.stack > li:first-child .button { + border-top: 0; } + .button-group.stack-for-small > li { + margin: 0 -2px; + display: inline-block; } + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-left: 0; } + @media only screen and (max-width: 40em) { + .button-group.stack-for-small > li { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; } + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-left: 0; } + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; } + .button-group.stack-for-small > li > button { + width: 100%; } + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-top: 0; } } + .button-group.radius > * { + margin: 0 -2px; + display: inline-block; } + .button-group.radius > * > button, .button-group.radius > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius > *:first-child button, .button-group.radius > *:first-child .button { + border-left: 0; } + .button-group.radius > *, .button-group.radius > * > a, .button-group.radius > * > button, .button-group.radius > * > .button { + border-radius: 0; } + .button-group.radius > *:first-child, .button-group.radius > *:first-child > a, .button-group.radius > *:first-child > button, .button-group.radius > *:first-child > .button { + -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 { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } + .button-group.radius.stack > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; } + .button-group.radius.stack > * > button, .button-group.radius.stack > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius.stack > *:first-child button, .button-group.radius.stack > *:first-child .button { + border-left: 0; } + .button-group.radius.stack > * > button, .button-group.radius.stack > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; } + .button-group.radius.stack > * > button { + width: 100%; } + .button-group.radius.stack > *:first-child button, .button-group.radius.stack > *:first-child .button { + border-top: 0; } + .button-group.radius.stack > *, .button-group.radius.stack > * > a, .button-group.radius.stack > * > button, .button-group.radius.stack > * > .button { + border-radius: 0; } + .button-group.radius.stack > *:first-child, .button-group.radius.stack > *:first-child > a, .button-group.radius.stack > *:first-child > button, .button-group.radius.stack > *:first-child > .button { + -webkit-top-left-radius: 3px; + -webkit-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .button-group.radius.stack > *:last-child, .button-group.radius.stack > *:last-child > a, .button-group.radius.stack > *:last-child > button, .button-group.radius.stack > *:last-child > .button { + -webkit-bottom-left-radius: 3px; + -webkit-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } + @media only screen and (min-width: 40.063em) { + .button-group.radius.stack-for-small > * { + margin: 0 -2px; + display: inline-block; } + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.radius.stack-for-small > *, .button-group.radius.stack-for-small > * > a, .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * > .button { + border-radius: 0; } + .button-group.radius.stack-for-small > *:first-child, .button-group.radius.stack-for-small > *:first-child > a, .button-group.radius.stack-for-small > *:first-child > button, .button-group.radius.stack-for-small > *:first-child > .button { + -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.stack-for-small > *:last-child, .button-group.radius.stack-for-small > *:last-child > a, .button-group.radius.stack-for-small > *:last-child > button, .button-group.radius.stack-for-small > *:last-child > .button { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } } + @media only screen and (max-width: 40em) { + .button-group.radius.stack-for-small > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; } + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; } + .button-group.radius.stack-for-small > * > button { + width: 100%; } + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-top: 0; } + .button-group.radius.stack-for-small > *, .button-group.radius.stack-for-small > * > a, .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * > .button { + border-radius: 0; } + .button-group.radius.stack-for-small > *:first-child, .button-group.radius.stack-for-small > *:first-child > a, .button-group.radius.stack-for-small > *:first-child > button, .button-group.radius.stack-for-small > *:first-child > .button { + -webkit-top-left-radius: 3px; + -webkit-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .button-group.radius.stack-for-small > *:last-child, .button-group.radius.stack-for-small > *:last-child > a, .button-group.radius.stack-for-small > *:last-child > button, .button-group.radius.stack-for-small > *:last-child > .button { + -webkit-bottom-left-radius: 3px; + -webkit-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } } + .button-group.round > * { + margin: 0 -2px; + display: inline-block; } + .button-group.round > * > button, .button-group.round > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round > *:first-child button, .button-group.round > *:first-child .button { + border-left: 0; } + .button-group.round > *, .button-group.round > * > a, .button-group.round > * > button, .button-group.round > * > .button { + border-radius: 0; } + .button-group.round > *:first-child, .button-group.round > *:first-child > a, .button-group.round > *:first-child > button, .button-group.round > *:first-child > .button { + -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 { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } + .button-group.round.stack > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; } + .button-group.round.stack > * > button, .button-group.round.stack > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round.stack > *:first-child button, .button-group.round.stack > *:first-child .button { + border-left: 0; } + .button-group.round.stack > * > button, .button-group.round.stack > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; } + .button-group.round.stack > * > button { + width: 100%; } + .button-group.round.stack > *:first-child button, .button-group.round.stack > *:first-child .button { + border-top: 0; } + .button-group.round.stack > *, .button-group.round.stack > * > a, .button-group.round.stack > * > button, .button-group.round.stack > * > .button { + border-radius: 0; } + .button-group.round.stack > *:first-child, .button-group.round.stack > *:first-child > a, .button-group.round.stack > *:first-child > button, .button-group.round.stack > *:first-child > .button { + -webkit-top-left-radius: 1rem; + -webkit-top-right-radius: 1rem; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; } + .button-group.round.stack > *:last-child, .button-group.round.stack > *:last-child > a, .button-group.round.stack > *:last-child > button, .button-group.round.stack > *:last-child > .button { + -webkit-bottom-left-radius: 1rem; + -webkit-bottom-right-radius: 1rem; + border-bottom-left-radius: 1rem; + border-bottom-right-radius: 1rem; } + @media only screen and (min-width: 40.063em) { + .button-group.round.stack-for-small > * { + margin: 0 -2px; + display: inline-block; } + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.round.stack-for-small > *, .button-group.round.stack-for-small > * > a, .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * > .button { + border-radius: 0; } + .button-group.round.stack-for-small > *:first-child, .button-group.round.stack-for-small > *:first-child > a, .button-group.round.stack-for-small > *:first-child > button, .button-group.round.stack-for-small > *:first-child > .button { + -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.stack-for-small > *:last-child, .button-group.round.stack-for-small > *:last-child > a, .button-group.round.stack-for-small > *:last-child > button, .button-group.round.stack-for-small > *:last-child > .button { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } } + @media only screen and (max-width: 40em) { + .button-group.round.stack-for-small > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; } + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); } + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-left: 0; } + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; } + .button-group.round.stack-for-small > * > button { + width: 100%; } + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-top: 0; } + .button-group.round.stack-for-small > *, .button-group.round.stack-for-small > * > a, .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * > .button { + border-radius: 0; } + .button-group.round.stack-for-small > *:first-child, .button-group.round.stack-for-small > *:first-child > a, .button-group.round.stack-for-small > *:first-child > button, .button-group.round.stack-for-small > *:first-child > .button { + -webkit-top-left-radius: 1rem; + -webkit-top-right-radius: 1rem; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; } + .button-group.round.stack-for-small > *:last-child, .button-group.round.stack-for-small > *:last-child > a, .button-group.round.stack-for-small > *:last-child > button, .button-group.round.stack-for-small > *:last-child > .button { + -webkit-bottom-left-radius: 1rem; + -webkit-bottom-right-radius: 1rem; + border-bottom-left-radius: 1rem; + border-bottom-right-radius: 1rem; } } + +.button-bar:before, .button-bar:after { + content: " "; + display: table; } +.button-bar:after { + clear: both; } +.button-bar .button-group { + float: left; + margin-right: 0.625rem; } + .button-bar .button-group div { + overflow: hidden; } + +/* Clearing Styles */ +.clearing-thumbs, [data-clearing] { + margin-bottom: 0; + margin-left: 0; + list-style: none; } + .clearing-thumbs:before, .clearing-thumbs:after, [data-clearing]:before, [data-clearing]:after { + content: " "; + display: table; } + .clearing-thumbs:after, [data-clearing]:after { + clear: both; } + .clearing-thumbs li, [data-clearing] li { + float: left; + margin-right: 10px; } + .clearing-thumbs[class*="block-grid-"] li, [data-clearing][class*="block-grid-"] li { + margin-right: 0; } + +.clearing-blackout { + background: #333333; + 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; } + +.clearing-touch-label { + position: absolute; + top: 50%; + left: 50%; + color: #AAAAAA; + font-size: 0.6em; } + +.visible-img { + height: 95%; + position: relative; } + .visible-img img { + position: absolute; + left: 50%; + top: 50%; + transform: translateY(-50%) translateX(-50%); + -webkit-transform: translateY(-50%) translateX(-50%); + -ms-transform: translateY(-50%) translateX(-50%); + max-height: 100%; + max-width: 100%; } + +.clearing-caption { + color: #CCCCCC; + font-size: 0.875em; + line-height: 1.3; + margin-bottom: 0; + text-align: center; + bottom: 0; + background: #333333; + width: 100%; + padding: 10px 30px 20px; + position: absolute; + left: 0; } + +.clearing-close { + z-index: 999; + padding-left: 20px; + padding-top: 10px; + font-size: 30px; + line-height: 1; + color: #CCCCCC; + display: none; } + .clearing-close:hover, .clearing-close:focus { + color: #CCCCCC; } + +.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: 40.063em) { + .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 12px; } + .clearing-main-prev > span:hover, + .clearing-main-next > span:hover { + opacity: 0.8; } + + .clearing-main-prev { + left: 0; } + .clearing-main-prev > span { + left: 5px; + border-color: transparent; + border-right-color: #CCCCCC; } + + .clearing-main-next { + right: 0; } + .clearing-main-next > span { + border-color: transparent; + border-left-color: #CCCCCC; } + + .clearing-main-prev.disabled, + .clearing-main-next.disabled { + opacity: 0.3; } + + .clearing-assembled .clearing-container .carousel { + background: rgba(51, 51, 51, 0.8); + height: 120px; + margin-top: 10px; + text-align: center; } + .clearing-assembled .clearing-container .carousel > ul { + display: inline-block; + z-index: 999; + height: 100%; + position: relative; + float: none; } + .clearing-assembled .clearing-container .carousel > ul li { + display: block; + width: 120px; + min-height: inherit; + float: left; + overflow: hidden; + margin-right: 0; + padding: 0; + position: relative; + cursor: pointer; + opacity: 0.4; + clear: none; } + .clearing-assembled .clearing-container .carousel > ul li.fix-height img { + height: 100%; + max-width: none; } + .clearing-assembled .clearing-container .carousel > ul li a.th { + border: none; + box-shadow: none; + display: block; } + .clearing-assembled .clearing-container .carousel > ul li img { + cursor: pointer !important; + width: 100% !important; } + .clearing-assembled .clearing-container .carousel > ul li.visible { + opacity: 1; } + .clearing-assembled .clearing-container .carousel > ul li:hover { + opacity: 0.8; } + .clearing-assembled .clearing-container .visible-img { + background: #333333; + overflow: hidden; + height: 85%; } + + .clearing-close { + position: absolute; + top: 10px; + right: 20px; + padding-left: 0; + padding-top: 0; } } +/* Foundation Dropdowns */ +.f-dropdown { + position: absolute; + left: -9999px; + list-style: none; + margin-left: 0; + outline: none; + width: 100%; + max-height: none; + height: auto; + background: #FFFFFF; + border: solid 1px #cccccc; + font-size: 0.875rem; + z-index: 89; + 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 #FFFFFF transparent; + border-bottom-style: solid; + position: absolute; + top: -12px; + left: 10px; + z-index: 89; } + .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: 88; } + .f-dropdown.right:before { + left: auto; + right: 10px; } + .f-dropdown.right:after { + left: auto; + right: 9px; } + .f-dropdown.drop-right { + position: absolute; + left: -9999px; + list-style: none; + margin-left: 0; + outline: none; + width: 100%; + max-height: none; + height: auto; + background: #FFFFFF; + border: solid 1px #cccccc; + font-size: 0.875rem; + z-index: 89; + margin-top: 0; + margin-left: 2px; + max-width: 200px; } + .f-dropdown.drop-right > *:first-child { + margin-top: 0; } + .f-dropdown.drop-right > *:last-child { + margin-bottom: 0; } + .f-dropdown.drop-right:before { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 6px; + border-color: transparent #FFFFFF transparent transparent; + border-right-style: solid; + position: absolute; + top: 10px; + left: -12px; + z-index: 89; } + .f-dropdown.drop-right:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 7px; + border-color: transparent #cccccc transparent transparent; + border-right-style: solid; + position: absolute; + top: 9px; + left: -14px; + z-index: 88; } + .f-dropdown.drop-left { + position: absolute; + left: -9999px; + list-style: none; + margin-left: 0; + outline: none; + width: 100%; + max-height: none; + height: auto; + background: #FFFFFF; + border: solid 1px #cccccc; + font-size: 0.875rem; + z-index: 89; + margin-top: 0; + margin-left: -2px; + max-width: 200px; } + .f-dropdown.drop-left > *:first-child { + margin-top: 0; } + .f-dropdown.drop-left > *:last-child { + margin-bottom: 0; } + .f-dropdown.drop-left:before { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 6px; + border-color: transparent transparent transparent #FFFFFF; + border-left-style: solid; + position: absolute; + top: 10px; + right: -12px; + left: auto; + z-index: 89; } + .f-dropdown.drop-left:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 7px; + border-color: transparent transparent transparent #cccccc; + border-left-style: solid; + position: absolute; + top: 9px; + right: -14px; + left: auto; + z-index: 88; } + .f-dropdown.drop-top { + position: absolute; + left: -9999px; + list-style: none; + margin-left: 0; + outline: none; + width: 100%; + max-height: none; + height: auto; + background: #FFFFFF; + border: solid 1px #cccccc; + font-size: 0.875rem; + z-index: 89; + margin-top: -2px; + margin-left: 0; + max-width: 200px; } + .f-dropdown.drop-top > *:first-child { + margin-top: 0; } + .f-dropdown.drop-top > *:last-child { + margin-bottom: 0; } + .f-dropdown.drop-top:before { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 6px; + border-color: #FFFFFF transparent transparent transparent; + border-top-style: solid; + position: absolute; + top: auto; + bottom: -12px; + left: 10px; + right: auto; + z-index: 89; } + .f-dropdown.drop-top:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 7px; + border-color: #cccccc transparent transparent transparent; + border-top-style: solid; + position: absolute; + top: auto; + bottom: -14px; + left: 9px; + right: auto; + z-index: 88; } + .f-dropdown li { + font-size: 0.875rem; + cursor: pointer; + line-height: 1.125rem; + margin: 0; } + .f-dropdown li:hover, .f-dropdown li:focus { + background: #EEEEEE; } + .f-dropdown li.radius { + border-radius: 3px; } + .f-dropdown li a { + display: block; + padding: 0.5rem; + color: #555555; } + .f-dropdown.content { + position: absolute; + left: -9999px; + list-style: none; + margin-left: 0; + outline: none; + padding: 1.25rem; + width: 100%; + height: auto; + max-height: none; + background: #FFFFFF; + border: solid 1px #cccccc; + font-size: 0.875rem; + z-index: 89; + 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; } + .f-dropdown.mega { + width: 100% !important; + max-width: 100% !important; } + .f-dropdown.mega.open { + left: 0 !important; } + +.dropdown.button, button.dropdown { + position: relative; + outline: none; + padding-right: 3.5625rem; } + .dropdown.button::after, button.dropdown::after { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: solid; + border-color: #FFFFFF transparent transparent transparent; + top: 50%; } + .dropdown.button::after, button.dropdown::after { + border-width: 0.375rem; + right: 1.40625rem; + margin-top: -0.15625rem; } + .dropdown.button::after, button.dropdown::after { + border-color: #FFFFFF transparent transparent transparent; } + .dropdown.button.tiny, button.dropdown.tiny { + padding-right: 2.625rem; } + .dropdown.button.tiny:after, button.dropdown.tiny:after { + border-width: 0.375rem; + right: 1.125rem; + margin-top: -0.125rem; } + .dropdown.button.tiny::after, button.dropdown.tiny::after { + border-color: #FFFFFF transparent transparent transparent; } + .dropdown.button.small, button.dropdown.small { + padding-right: 3.0625rem; } + .dropdown.button.small::after, button.dropdown.small::after { + border-width: 0.4375rem; + right: 1.3125rem; + margin-top: -0.15625rem; } + .dropdown.button.small::after, button.dropdown.small::after { + border-color: #FFFFFF transparent transparent transparent; } + .dropdown.button.large, button.dropdown.large { + padding-right: 3.625rem; } + .dropdown.button.large::after, button.dropdown.large::after { + border-width: 0.3125rem; + right: 1.71875rem; + margin-top: -0.15625rem; } + .dropdown.button.large::after, button.dropdown.large::after { + border-color: #FFFFFF transparent transparent transparent; } + .dropdown.button.secondary:after, button.dropdown.secondary:after { + border-color: #333333 transparent transparent transparent; } + +.flex-video { + position: relative; + padding-top: 1.5625rem; + padding-bottom: 67.5%; + height: 0; + margin-bottom: 1rem; + overflow: hidden; } + .flex-video.widescreen { + padding-bottom: 56.34%; } + .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%; } + +/* Standard Forms */ +form { + margin: 0 0 1rem; } + +/* Using forms within rows, we need to set some defaults */ +form .row .row { + margin: 0 -0.5rem; } + form .row .row .column, + form .row .row .columns { + padding: 0 0.5rem; } + form .row .row.collapse { + margin: 0; } + form .row .row.collapse .column, + form .row .row.collapse .columns { + padding: 0; } + form .row .row.collapse input { + -webkit-border-bottom-right-radius: 0; + -webkit-border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-top-right-radius: 0; } +form .row input.column, +form .row input.columns, +form .row textarea.column, +form .row textarea.columns { + padding-left: 0.5rem; } + +/* Label Styles */ +label { + font-size: 0.875rem; + color: #4d4d4d; + cursor: pointer; + display: block; + font-weight: normal; + line-height: 1.5; + margin-bottom: 0; + /* Styles for required inputs */ } + label.right { + float: none !important; + text-align: right; } + label.inline { + margin: 0 0 1rem 0; + padding: 0.5625rem 0; } + label small { + text-transform: capitalize; + color: #676767; } + +/* 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: visible; + font-size: 0.875rem; + height: 2.3125rem; + line-height: 2.3125rem; } + +/* 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; + border: none; } + +.prefix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + border: none; } + +.prefix.button.radius { + border-radius: 0; + -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 { + border-radius: 0; + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } + +.prefix.button.round { + border-radius: 0; + -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 { + border-radius: 0; + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-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-right: none; + color: #333333; + border-color: #cccccc; } + +span.postfix, label.postfix { + background: #f2f2f2; + border-left: none; + color: #333333; + border-color: #cccccc; } + +/* 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"], input[type="color"], textarea { + -webkit-appearance: none; + border-radius: 0; + background-color: #FFFFFF; + font-family: inherit; + border-style: solid; + border-width: 1px; + border-color: #cccccc; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.75); + display: block; + font-size: 0.875rem; + margin: 0 0 1rem 0; + padding: 0.5rem; + height: 2.3125rem; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + transition: all 0.15s linear; } + 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, input[type="color"]: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, input[type="color"]:disabled, textarea:disabled { + background-color: #DDDDDD; + cursor: default; } + input[type="text"][disabled], input[type="text"][readonly], fieldset[disabled] input[type="text"], input[type="password"][disabled], input[type="password"][readonly], fieldset[disabled] input[type="password"], input[type="date"][disabled], input[type="date"][readonly], fieldset[disabled] input[type="date"], input[type="datetime"][disabled], input[type="datetime"][readonly], fieldset[disabled] input[type="datetime"], input[type="datetime-local"][disabled], input[type="datetime-local"][readonly], fieldset[disabled] input[type="datetime-local"], input[type="month"][disabled], input[type="month"][readonly], fieldset[disabled] input[type="month"], input[type="week"][disabled], input[type="week"][readonly], fieldset[disabled] input[type="week"], input[type="email"][disabled], input[type="email"][readonly], fieldset[disabled] input[type="email"], input[type="number"][disabled], input[type="number"][readonly], fieldset[disabled] input[type="number"], input[type="search"][disabled], input[type="search"][readonly], fieldset[disabled] input[type="search"], input[type="tel"][disabled], input[type="tel"][readonly], fieldset[disabled] input[type="tel"], input[type="time"][disabled], input[type="time"][readonly], fieldset[disabled] input[type="time"], input[type="url"][disabled], input[type="url"][readonly], fieldset[disabled] input[type="url"], input[type="color"][disabled], input[type="color"][readonly], fieldset[disabled] input[type="color"], textarea[disabled], textarea[readonly], fieldset[disabled] textarea { + background-color: #DDDDDD; + cursor: default; } + input[type="text"].radius, input[type="password"].radius, input[type="date"].radius, input[type="datetime"].radius, input[type="datetime-local"].radius, input[type="month"].radius, input[type="week"].radius, input[type="email"].radius, input[type="number"].radius, input[type="search"].radius, input[type="tel"].radius, input[type="time"].radius, input[type="url"].radius, input[type="color"].radius, textarea.radius { + border-radius: 3px; } + +form .row .prefix-radius.row.collapse input, +form .row .prefix-radius.row.collapse textarea, +form .row .prefix-radius.row.collapse select, +form .row .prefix-radius.row.collapse button { + border-radius: 0; + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } +form .row .prefix-radius.row.collapse .prefix { + border-radius: 0; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } +form .row .postfix-radius.row.collapse input, +form .row .postfix-radius.row.collapse textarea, +form .row .postfix-radius.row.collapse select, +form .row .postfix-radius.row.collapse button { + border-radius: 0; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } +form .row .postfix-radius.row.collapse .postfix { + border-radius: 0; + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } +form .row .prefix-round.row.collapse input, +form .row .prefix-round.row.collapse textarea, +form .row .prefix-round.row.collapse select, +form .row .prefix-round.row.collapse button { + border-radius: 0; + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } +form .row .prefix-round.row.collapse .prefix { + border-radius: 0; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; } +form .row .postfix-round.row.collapse input, +form .row .postfix-round.row.collapse textarea, +form .row .postfix-round.row.collapse select, +form .row .postfix-round.row.collapse button { + border-radius: 0; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; } +form .row .postfix-round.row.collapse .postfix { + border-radius: 0; + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } + +input[type="submit"] { + -webkit-appearance: none; + border-radius: 0; } + +/* Respect enforced amount of rows for textarea */ +textarea[rows] { + height: auto; } + +/* Not allow resize out of parent */ +textarea { + max-width: 100%; } + +/* Add height value for select elements to match text input height */ +select { + -webkit-appearance: none !important; + border-radius: 0; + background-color: #FAFAFA; + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+); + background-position: 100% center; + background-repeat: no-repeat; + border-style: solid; + border-width: 1px; + border-color: #cccccc; + padding: 0.5rem; + font-size: 0.875rem; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + color: rgba(0, 0, 0, 0.75); + line-height: normal; + border-radius: 0; + height: 2.3125rem; } + select::-ms-expand { + display: none; } + select.radius { + border-radius: 3px; } + select:hover { + background-color: #f3f3f3; + border-color: #999999; } + select:disabled { + background-color: #DDDDDD; + cursor: default; } + select[multiple] { + height: auto; } + +/* Adjust margin for form elements below */ +input[type="file"], +input[type="checkbox"], +input[type="radio"], +select { + margin: 0 0 1rem 0; } + +input[type="checkbox"] + label, +input[type="radio"] + label { + display: inline-block; + margin-left: 0.5rem; + margin-right: 1rem; + margin-bottom: 0; + vertical-align: baseline; } + +/* Normalize file input width */ +input[type="file"] { + width: 100%; } + +/* HTML5 Number spinners settings */ +/* We add basic fieldset styling */ +fieldset { + border: 1px solid #DDDDDD; + padding: 1.25rem; + margin: 1.125rem 0; } + fieldset legend { + font-weight: bold; + background: #FFFFFF; + padding: 0 0.1875rem; + margin: 0; + margin-left: -0.1875rem; } + +/* Error Handling */ +[data-abide] .error small.error, [data-abide] .error span.error, [data-abide] span.error, [data-abide] small.error { + display: block; + padding: 0.375rem 0.5625rem 0.5625rem; + margin-top: -1px; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: normal; + font-style: italic; + background: #f04124; + color: #FFFFFF; } +[data-abide] span.error, [data-abide] small.error { + display: none; } + +span.error, small.error { + display: block; + padding: 0.375rem 0.5625rem 0.5625rem; + margin-top: -1px; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: normal; + font-style: italic; + background: #f04124; + color: #FFFFFF; } + +.error input, +.error textarea, +.error select { + margin-bottom: 0; } +.error input[type="checkbox"], +.error input[type="radio"] { + margin-bottom: 1rem; } +.error label, +.error label.error { + color: #f04124; } +.error small.error { + display: block; + padding: 0.375rem 0.5625rem 0.5625rem; + margin-top: -1px; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: normal; + font-style: italic; + background: #f04124; + color: #FFFFFF; } +.error > label > small { + color: #676767; + background: transparent; + padding: 0; + text-transform: capitalize; + font-style: normal; + font-size: 60%; + margin: 0; + display: inline; } +.error span.error-message { + display: block; } + +input.error, +textarea.error, +select.error { + margin-bottom: 0; } + +label.error { + color: #f04124; } + +.icon-bar { + width: 100%; + font-size: 0; + display: inline-block; + background: #333333; } + .icon-bar > * { + text-align: center; + font-size: 1rem; + width: 25%; + margin: 0 auto; + display: block; + padding: 1.25rem; + float: left; } + .icon-bar > * i, .icon-bar > * img { + display: block; + margin: 0 auto; } + .icon-bar > * i + label, .icon-bar > * img + label { + margin-top: .0625rem; } + .icon-bar > * i { + font-size: 1.875rem; + vertical-align: middle; } + .icon-bar > * img { + width: 1.875rem; + height: 1.875rem; } + .icon-bar.label-right > * i, .icon-bar.label-right > * img { + margin: 0 .0625rem 0 0; + display: inline-block; } + .icon-bar.label-right > * i + label, .icon-bar.label-right > * img + label { + margin-top: 0; } + .icon-bar.label-right > * label { + display: inline-block; } + .icon-bar.vertical.label-right > * { + text-align: left; } + .icon-bar.vertical, .icon-bar.small-vertical { + height: 100%; + width: auto; } + .icon-bar.vertical .item, .icon-bar.small-vertical .item { + width: auto; + margin: auto; + float: none; } + @media only screen and (min-width: 40.063em) { + .icon-bar.medium-vertical { + height: 100%; + width: auto; } + .icon-bar.medium-vertical .item { + width: auto; + margin: auto; + float: none; } } + @media only screen and (min-width: 64.063em) { + .icon-bar.large-vertical { + height: 100%; + width: auto; } + .icon-bar.large-vertical .item { + width: auto; + margin: auto; + float: none; } } + .icon-bar > * { + font-size: 1rem; + padding: 1.25rem; } + .icon-bar > * i + label, .icon-bar > * img + label { + margin-top: .0625rem; } + .icon-bar > * i { + font-size: 1.875rem; } + .icon-bar > * img { + width: 1.875rem; + height: 1.875rem; } + .icon-bar > * label { + color: #FFFFFF; } + .icon-bar > * i { + color: #FFFFFF; } + .icon-bar > a:hover { + background: #008CBA; } + .icon-bar > a:hover label { + color: #FFFFFF; } + .icon-bar > a:hover i { + color: #FFFFFF; } + .icon-bar > a.active { + background: #008CBA; } + .icon-bar > a.active label { + color: #FFFFFF; } + .icon-bar > a.active i { + color: #FFFFFF; } + .icon-bar .item.disabled { + opacity: 0.7; + cursor: not-allowed; + pointer-events: none; } + .icon-bar .item.disabled > * { + opacity: 0.7; + cursor: not-allowed; } + +.icon-bar.two-up .item { + width: 50%; } +.icon-bar.two-up.vertical .item, .icon-bar.two-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.two-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.two-up.large-vertical .item { + width: auto; } } +.icon-bar.three-up .item { + width: 33.3333%; } +.icon-bar.three-up.vertical .item, .icon-bar.three-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.three-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.three-up.large-vertical .item { + width: auto; } } +.icon-bar.four-up .item { + width: 25%; } +.icon-bar.four-up.vertical .item, .icon-bar.four-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.four-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.four-up.large-vertical .item { + width: auto; } } +.icon-bar.five-up .item { + width: 20%; } +.icon-bar.five-up.vertical .item, .icon-bar.five-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.five-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.five-up.large-vertical .item { + width: auto; } } +.icon-bar.six-up .item { + width: 16.66667%; } +.icon-bar.six-up.vertical .item, .icon-bar.six-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.six-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.six-up.large-vertical .item { + width: auto; } } +.icon-bar.seven-up .item { + width: 14.28571%; } +.icon-bar.seven-up.vertical .item, .icon-bar.seven-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.seven-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.seven-up.large-vertical .item { + width: auto; } } +.icon-bar.eight-up .item { + width: 12.5%; } +.icon-bar.eight-up.vertical .item, .icon-bar.eight-up.small-vertical .item { + width: auto; } +@media only screen and (min-width: 40.063em) { + .icon-bar.eight-up.medium-vertical .item { + width: auto; } } +@media only screen and (min-width: 64.063em) { + .icon-bar.eight-up.large-vertical .item { + width: auto; } } + +.inline-list { + margin: 0 auto 1.0625rem auto; + margin-left: -1.375rem; + margin-right: 0; + padding: 0; + list-style: none; + overflow: hidden; } + .inline-list > li { + list-style: none; + float: left; + margin-left: 1.375rem; + display: block; } + .inline-list > li > * { + display: block; } + +/* Foundation Joyride */ +.joyride-list { + display: none; } + +/* Default styles for the container */ +.joyride-tip-guide { + display: none; + position: absolute; + background: #333333; + color: #FFFFFF; + 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.125rem 1.25rem 1.5rem; } + .joyride-content-wrapper .button { + margin-bottom: 0 !important; } + .joyride-content-wrapper .joyride-prev-tip { + margin-right: 10px; } + +/* 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: 10px solid #333333; } + .joyride-tip-guide .joyride-nub.top { + border-top-style: solid; + border-color: #333333; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + top: -20px; } + .joyride-tip-guide .joyride-nub.bottom { + border-bottom-style: solid; + border-color: #333333 !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -20px; } + .joyride-tip-guide .joyride-nub.right { + right: -20px; } + .joyride-tip-guide .joyride-nub.left { + left: -20px; } + +/* 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: #FFFFFF; } + +.joyride-tip-guide p { + margin: 0 0 1.125rem 0; + font-size: 0.875rem; + line-height: 1.3; } + +.joyride-timer-indicator-wrap { + width: 50px; + height: 3px; + border: solid 1px #555555; + position: absolute; + right: 1.0625rem; + bottom: 1rem; } + +.joyride-timer-indicator { + display: block; + width: 0; + height: inherit; + background: #666666; } + +.joyride-close-tip { + position: absolute; + right: 12px; + top: 10px; + color: #777777 !important; + text-decoration: none; + font-size: 24px; + font-weight: normal; + line-height: .5 !important; } + .joyride-close-tip:hover, .joyride-close-tip:focus { + color: #EEEEEE !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; + 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 at least 768px; */ +@media only screen and (min-width: 40.063em) { + .joyride-tip-guide { + width: 300px; + left: inherit; } + .joyride-tip-guide .joyride-nub.bottom { + border-color: #333333 !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -20px; } + .joyride-tip-guide .joyride-nub.right { + border-color: #333333 !important; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: auto; + right: -20px; } + .joyride-tip-guide .joyride-nub.left { + border-color: #333333 !important; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: -20px; + right: auto; } } +.keystroke, +kbd { + background-color: #ededed; + border-color: #dddddd; + color: #222222; + border-style: solid; + border-width: 1px; + margin: 0; + font-family: "Consolas", "Menlo", "Courier", monospace; + font-size: inherit; + padding: 0.125rem 0.25rem 0; + border-radius: 3px; } + +.label { + font-weight: normal; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + text-align: center; + text-decoration: none; + line-height: 1; + white-space: nowrap; + display: inline-block; + position: relative; + margin-bottom: auto; + padding: 0.25rem 0.5rem 0.25rem; + font-size: 0.6875rem; + background-color: #008CBA; + color: #FFFFFF; } + .label.radius { + border-radius: 3px; } + .label.round { + border-radius: 1000px; } + .label.alert { + background-color: #f04124; + color: #FFFFFF; } + .label.warning { + background-color: #f08a24; + color: #FFFFFF; } + .label.success { + background-color: #43AC6A; + color: #FFFFFF; } + .label.secondary { + background-color: #e7e7e7; + color: #333333; } + .label.info { + background-color: #a0d3e8; + color: #333333; } + +[data-magellan-expedition], [data-magellan-expedition-clone] { + background: #FFFFFF; + z-index: 50; + min-width: 100%; + padding: 10px; } + [data-magellan-expedition] .sub-nav, [data-magellan-expedition-clone] .sub-nav { + margin-bottom: 0; } + [data-magellan-expedition] .sub-nav dd, [data-magellan-expedition-clone] .sub-nav dd { + margin-bottom: 0; } + [data-magellan-expedition] .sub-nav a, [data-magellan-expedition-clone] .sub-nav a { + line-height: 1.8em; } + +@-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; } + .slideshow-wrapper .orbit-container .orbit-bullets li { + display: inline-block; } + .slideshow-wrapper .preloader { + display: block; + width: 40px; + height: 40px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -20px; + margin-left: -20px; + border: solid 3px; + border-color: #555555 #FFFFFF; + border-radius: 1000px; + animation-name: rotate; + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-timing-function: linear; } + +.orbit-container { + overflow: hidden; + width: 100%; + position: relative; + background: none; } + .orbit-container .orbit-slides-container { + list-style: none; + margin: 0; + padding: 0; + position: relative; + -webkit-transform: translateZ(0); } + .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(51, 51, 51, 0.8); + color: #FFFFFF; + width: 100%; + padding: 0.625rem 0.875rem; + font-size: 0.875rem; } + .orbit-container .orbit-slide-number { + position: absolute; + top: 10px; + left: 10px; + font-size: 12px; + color: #FFFFFF; + background: transparent; + z-index: 10; } + .orbit-container .orbit-slide-number span { + font-weight: 700; + padding: 0.3125rem; } + .orbit-container .orbit-timer { + position: absolute; + top: 12px; + right: 10px; + height: 6px; + width: 100px; + z-index: 10; } + .orbit-container .orbit-timer .orbit-progress { + height: 3px; + background-color: rgba(255, 255, 255, 0.3); + display: block; + width: 0; + position: relative; + right: 20px; + top: 5px; } + .orbit-container .orbit-timer > span { + display: none; + position: absolute; + top: 0; + right: 0; + width: 11px; + height: 14px; + border: solid 4px #FFFFFF; + border-top: none; + border-bottom: none; } + .orbit-container .orbit-timer.paused > span { + right: -4px; + top: 0; + width: 11px; + height: 14px; + border: inset 8px; + border-left-style: solid; + border-color: transparent; + border-left-color: #FFFFFF; } + .orbit-container .orbit-timer.paused > span.dark { + border-left-color: #333333; } + .orbit-container:hover .orbit-timer > span { + display: block; } + .orbit-container .orbit-prev, + .orbit-container .orbit-next { + position: absolute; + top: 45%; + margin-top: -25px; + width: 36px; + height: 60px; + line-height: 50px; + color: white; + background-color: transparent; + text-indent: -9999px !important; + z-index: 10; } + .orbit-container .orbit-prev:hover, + .orbit-container .orbit-next:hover { + background-color: rgba(0, 0, 0, 0.3); } + .orbit-container .orbit-prev > span, + .orbit-container .orbit-next > span { + position: absolute; + top: 50%; + margin-top: -10px; + display: block; + width: 0; + height: 0; + border: inset 10px; } + .orbit-container .orbit-prev { + left: 0; } + .orbit-container .orbit-prev > span { + border-right-style: solid; + border-color: transparent; + border-right-color: #FFFFFF; } + .orbit-container .orbit-prev:hover > span { + border-right-color: #FFFFFF; } + .orbit-container .orbit-next { + right: 0; } + .orbit-container .orbit-next > span { + border-color: transparent; + border-left-style: solid; + border-left-color: #FFFFFF; + left: 50%; + margin-left: -4px; } + .orbit-container .orbit-next:hover > span { + border-left-color: #FFFFFF; } + +.orbit-bullets-container { + text-align: center; } + +.orbit-bullets { + margin: 0 auto 30px auto; + overflow: hidden; + position: relative; + top: 10px; + float: none; + text-align: center; + display: block; } + .orbit-bullets li { + cursor: pointer; + display: inline-block; + width: 0.5625rem; + height: 0.5625rem; + background: #CCCCCC; + float: none; + margin-right: 6px; + border-radius: 1000px; } + .orbit-bullets li.active { + background: #999999; } + .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: 40.063em) { + .touch .orbit-container .orbit-prev, + .touch .orbit-container .orbit-next { + display: inherit; } + .touch .orbit-bullets { + display: block; } } +@media only screen and (max-width: 40em) { + .orbit-stack-on-small .orbit-slides-container { + height: auto !important; } + .orbit-stack-on-small .orbit-slides-container > * { + position: relative; + margin: 0 !important; + opacity: 1 !important; } + .orbit-stack-on-small .orbit-slide-number { + display: none; } + + .orbit-timer { + display: none; } + + .orbit-next, .orbit-prev { + display: none; } + + .orbit-bullets { + display: none; } } +ul.pagination { + display: block; + min-height: 1.5rem; + margin-left: -0.3125rem; } + ul.pagination li { + height: 1.5rem; + color: #222222; + font-size: 0.875rem; + margin-left: 0.3125rem; } + ul.pagination li a, ul.pagination li button { + display: block; + padding: 0.0625rem 0.625rem 0.0625rem; + color: #999999; + background: none; + border-radius: 3px; + font-weight: normal; + font-size: 1em; + line-height: inherit; + transition: background-color 300ms ease-out; } + ul.pagination li:hover a, + ul.pagination li a:focus, ul.pagination li:hover button, + ul.pagination li button:focus { + background: #e6e6e6; } + ul.pagination li.unavailable a, ul.pagination li.unavailable button { + cursor: default; + color: #999999; } + ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus, ul.pagination li.unavailable:hover button, ul.pagination li.unavailable button:focus { + background: transparent; } + ul.pagination li.current a, ul.pagination li.current button { + background: #008CBA; + color: #FFFFFF; + font-weight: bold; + cursor: default; } + ul.pagination li.current a:hover, ul.pagination li.current a:focus, ul.pagination li.current button:hover, ul.pagination li.current button:focus { + background: #008CBA; } + 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: #d8d8d8; + margin-bottom: 1.25rem; + padding: 1.25rem; + background: #f2f2f2; + color: #333333; } + .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, .panel li, .panel dl { + color: #333333; } + .panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6 { + line-height: 1; + margin-bottom: 0.625rem; } + .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: #b6edff; + margin-bottom: 1.25rem; + padding: 1.25rem; + background: #ecfaff; + color: #333333; } + .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, .panel.callout li, .panel.callout dl { + color: #333333; } + .panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6 { + line-height: 1; + margin-bottom: 0.625rem; } + .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:not(.button) { + color: #008CBA; } + .panel.callout a:not(.button):hover, .panel.callout a:not(.button):focus { + color: #0078a0; } + .panel.radius { + border-radius: 3px; } + +/* Pricing Tables */ +.pricing-table { + border: solid 1px #DDDDDD; + margin-left: 0; + margin-bottom: 1.25rem; } + .pricing-table * { + list-style: none; + line-height: 1; } + .pricing-table .title { + background-color: #333333; + padding: 0.9375rem 1.25rem; + text-align: center; + color: #EEEEEE; + font-weight: normal; + font-size: 1rem; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + .pricing-table .price { + background-color: #F6F6F6; + padding: 0.9375rem 1.25rem; + text-align: center; + color: #333333; + font-weight: normal; + font-size: 2rem; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + .pricing-table .description { + background-color: #FFFFFF; + padding: 0.9375rem; + text-align: center; + color: #777777; + font-size: 0.75rem; + font-weight: normal; + line-height: 1.4; + border-bottom: dotted 1px #DDDDDD; } + .pricing-table .bullet-item { + background-color: #FFFFFF; + padding: 0.9375rem; + text-align: center; + color: #333333; + font-size: 0.875rem; + font-weight: normal; + border-bottom: dotted 1px #DDDDDD; } + .pricing-table .cta-button { + background-color: #FFFFFF; + text-align: center; + padding: 1.25rem 1.25rem 0; } + +/* Progress Bar */ +.progress { + background-color: #F6F6F6; + height: 1.5625rem; + border: 1px solid white; + padding: 0.125rem; + margin-bottom: 0.625rem; } + .progress .meter { + background: #008CBA; + height: 100%; + display: block; } + .progress.secondary .meter { + background: #e7e7e7; + height: 100%; + display: block; } + .progress.success .meter { + background: #43AC6A; + height: 100%; + display: block; } + .progress.alert .meter { + background: #f04124; + height: 100%; + display: block; } + .progress.radius { + border-radius: 3px; } + .progress.radius .meter { + border-radius: 2px; } + .progress.round { + border-radius: 1000px; } + .progress.round .meter { + border-radius: 999px; } + +.range-slider { + position: relative; + border: 1px solid #DDDDDD; + margin: 1.25rem 0; + -ms-touch-action: none; + touch-action: none; + display: block; + width: 100%; + height: 1rem; + background: #FAFAFA; } + .range-slider.vertical-range { + position: relative; + border: 1px solid #DDDDDD; + margin: 1.25rem 0; + -ms-touch-action: none; + touch-action: none; + display: inline-block; + width: 1rem; + height: 12.5rem; } + .range-slider.vertical-range .range-slider-handle { + margin-top: 0; + margin-left: -0.5rem; + position: absolute; + bottom: -10.5rem; } + .range-slider.vertical-range .range-slider-active-segment { + width: 0.875rem; + height: auto; + bottom: 0; } + .range-slider.radius { + background: #FAFAFA; + border-radius: 3px; } + .range-slider.radius .range-slider-handle { + background: #008CBA; + border-radius: 3px; } + .range-slider.radius .range-slider-handle:hover { + background: #007ba4; } + .range-slider.round { + background: #FAFAFA; + border-radius: 1000px; } + .range-slider.round .range-slider-handle { + background: #008CBA; + border-radius: 1000px; } + .range-slider.round .range-slider-handle:hover { + background: #007ba4; } + .range-slider.disabled, .range-slider[disabled] { + background: #FAFAFA; + cursor: not-allowed; + opacity: 0.7; } + .range-slider.disabled .range-slider-handle, .range-slider[disabled] .range-slider-handle { + background: #008CBA; + cursor: default; + opacity: 0.7; } + .range-slider.disabled .range-slider-handle:hover, .range-slider[disabled] .range-slider-handle:hover { + background: #007ba4; } + +.range-slider-active-segment { + display: inline-block; + position: absolute; + height: 0.875rem; + background: #e5e5e5; } + +.range-slider-handle { + display: inline-block; + position: absolute; + z-index: 1; + top: -0.3125rem; + width: 2rem; + height: 1.375rem; + border: 1px solid none; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background: #008CBA; } + .range-slider-handle:hover { + background: #007ba4; } + +.reveal-modal-bg { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: #000000; + background: rgba(0, 0, 0, 0.45); + z-index: 1004; + display: none; + left: 0; } + +.reveal-modal { + visibility: hidden; + display: none; + position: absolute; + z-index: 1005; + width: 100%; + top: 0; + border-radius: 3px; + left: 0; + background-color: #FFFFFF; + padding: 1.875rem; + border: solid 1px #666666; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); } + @media only screen and (max-width: 40em) { + .reveal-modal { + min-height: 100vh; } } + .reveal-modal .column, .reveal-modal .columns { + min-width: 0; } + .reveal-modal > :first-child { + margin-top: 0; } + .reveal-modal > :last-child { + margin-bottom: 0; } + @media only screen and (min-width: 40.063em) { + .reveal-modal { + width: 80%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal { + top: 6.25rem; } } + .reveal-modal.radius { + border-radius: 3px; } + .reveal-modal.round { + border-radius: 1000px; } + .reveal-modal.collapse { + padding: 0; } + @media only screen and (min-width: 40.063em) { + .reveal-modal.tiny { + width: 30%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.small { + width: 40%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.medium { + width: 60%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.large { + width: 70%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + @media only screen and (min-width: 40.063em) { + .reveal-modal.xlarge { + width: 95%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + .reveal-modal.full { + top: 0; + left: 0; + height: 100%; + height: 100vh; + min-height: 100vh; + max-width: none !important; + margin-left: 0 !important; } + @media only screen and (min-width: 40.063em) { + .reveal-modal.full { + width: 100%; + max-width: 62.5rem; + left: 0; + right: 0; + margin: 0 auto; } } + .reveal-modal.toback { + z-index: 1003; } + .reveal-modal .close-reveal-modal { + font-size: 2.5rem; + line-height: 1; + position: absolute; + top: 0.625rem; + right: 1.375rem; + color: #AAAAAA; + font-weight: bold; + cursor: pointer; } + +.side-nav { + display: block; + margin: 0; + padding: 0.875rem 0; + list-style-type: none; + list-style-position: outside; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + .side-nav li { + margin: 0 0 0.4375rem 0; + font-size: 0.875rem; + font-weight: normal; } + .side-nav li a:not(.button) { + display: block; + color: #008CBA; + margin: 0; + padding: 0.4375rem 0.875rem; } + .side-nav li a:not(.button):hover, .side-nav li a:not(.button):focus { + background: rgba(0, 0, 0, 0.025); + color: #1cc7ff; } + .side-nav li.active > a:first-child:not(.button) { + color: #1cc7ff; + font-weight: normal; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + .side-nav li.divider { + border-top: 1px solid; + height: 0; + padding: 0; + list-style: none; + border-top-color: white; } + .side-nav li.heading { + color: #008CBA; + font-size: 0.875rem; + font-weight: bold; + text-transform: uppercase; } + +.split.button { + position: relative; + padding-right: 5.0625rem; } + .split.button span { + display: block; + height: 100%; + position: absolute; + right: 0; + top: 0; + border-left: solid 1px; } + .split.button span:after { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: inset; + top: 50%; + left: 50%; } + .split.button span:active { + background-color: rgba(0, 0, 0, 0.1); } + .split.button span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button span { + width: 3.09375rem; } + .split.button span:after { + border-top-style: solid; + border-width: 0.375rem; + top: 48%; + margin-left: -0.375rem; } + .split.button span:after { + border-color: #FFFFFF transparent transparent transparent; } + .split.button.secondary span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button.secondary span:after { + border-color: #FFFFFF transparent transparent transparent; } + .split.button.alert span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button.success span { + border-left-color: rgba(255, 255, 255, 0.5); } + .split.button.tiny { + padding-right: 3.75rem; } + .split.button.tiny span { + width: 2.25rem; } + .split.button.tiny span:after { + border-top-style: solid; + border-width: 0.375rem; + top: 48%; + margin-left: -0.375rem; } + .split.button.small { + padding-right: 4.375rem; } + .split.button.small span { + width: 2.625rem; } + .split.button.small span:after { + border-top-style: solid; + border-width: 0.4375rem; + top: 48%; + margin-left: -0.375rem; } + .split.button.large { + padding-right: 5.5rem; } + .split.button.large span { + width: 3.4375rem; } + .split.button.large span:after { + border-top-style: solid; + border-width: 0.3125rem; + top: 48%; + margin-left: -0.375rem; } + .split.button.expand { + padding-left: 2rem; } + .split.button.secondary span:after { + border-color: #333333 transparent transparent transparent; } + .split.button.radius span { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } + .split.button.round span { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; } + .split.button.no-pip span:before { + border-style: none; } + .split.button.no-pip span:after { + border-style: none; } + .split.button.no-pip span > i { + top: 50%; + display: block; + position: absolute; + left: 50%; + margin-left: -0.28889em; + margin-top: -0.48889em; } + +.sub-nav { + display: block; + width: auto; + overflow: hidden; + margin-bottom: -0.25rem 0 1.125rem; + padding-top: 0.25rem; } + .sub-nav dt { + text-transform: uppercase; } + .sub-nav dt, + .sub-nav dd, + .sub-nav li { + float: left; + margin-left: 1rem; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + font-size: 0.875rem; + color: #999999; } + .sub-nav dt a, + .sub-nav dd a, + .sub-nav li a { + text-decoration: none; + color: #999999; + padding: 0.1875rem 1rem; } + .sub-nav dt a:hover, + .sub-nav dd a:hover, + .sub-nav li a:hover { + color: #737373; } + .sub-nav dt.active a, + .sub-nav dd.active a, + .sub-nav li.active a { + border-radius: 3px; + font-weight: normal; + background: #008CBA; + padding: 0.1875rem 1rem; + cursor: default; + color: #FFFFFF; } + .sub-nav dt.active a:hover, + .sub-nav dd.active a:hover, + .sub-nav li.active a:hover { + background: #0078a0; } + +.switch { + padding: 0; + border: none; + position: relative; + outline: 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + .switch label { + display: block; + margin-bottom: 1rem; + position: relative; + color: transparent; + background: #DDDDDD; + text-indent: 100%; + width: 4rem; + height: 2rem; + cursor: pointer; + transition: left 0.15s ease-out; } + .switch input { + opacity: 0; + position: absolute; + top: 9px; + left: 10px; + padding: 0; } + .switch input + label { + margin-left: 0; + margin-right: 0; } + .switch label:after { + content: ""; + display: block; + background: #FFFFFF; + position: absolute; + top: .25rem; + left: .25rem; + width: 1.5rem; + height: 1.5rem; + -webkit-transition: left 0.15s ease-out; + -moz-transition: left 0.15s ease-out; + -o-transition: translate3d(0, 0, 0); + transition: left 0.15s ease-out; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + .switch input:checked + label { + background: #008CBA; } + .switch input:checked + label:after { + left: 2.25rem; } + .switch label { + width: 4rem; + height: 2rem; } + .switch label:after { + width: 1.5rem; + height: 1.5rem; } + .switch input:checked + label:after { + left: 2.25rem; } + .switch label { + color: transparent; + background: #DDDDDD; } + .switch label:after { + background: #FFFFFF; } + .switch input:checked + label { + background: #008CBA; } + .switch.large label { + width: 5rem; + height: 2.5rem; } + .switch.large label:after { + width: 2rem; + height: 2rem; } + .switch.large input:checked + label:after { + left: 2.75rem; } + .switch.small label { + width: 3.5rem; + height: 1.75rem; } + .switch.small label:after { + width: 1.25rem; + height: 1.25rem; } + .switch.small input:checked + label:after { + left: 2rem; } + .switch.tiny label { + width: 3rem; + height: 1.5rem; } + .switch.tiny label:after { + width: 1rem; + height: 1rem; } + .switch.tiny input:checked + label:after { + left: 1.75rem; } + .switch.radius label { + border-radius: 4px; } + .switch.radius label:after { + border-radius: 3px; } + .switch.round { + border-radius: 1000px; } + .switch.round label { + border-radius: 2rem; } + .switch.round label:after { + border-radius: 2rem; } + +table { + background: #FFFFFF; + margin-bottom: 1.25rem; + border: solid 1px #DDDDDD; + table-layout: auto; } + table caption { + background: transparent; + color: #222222; + font-size: 1rem; + font-weight: bold; } + table thead { + background: #F5F5F5; } + table thead tr th, + table thead tr td { + padding: 0.5rem 0.625rem 0.625rem; + font-size: 0.875rem; + font-weight: bold; + color: #222222; } + table tfoot { + background: #F5F5F5; } + table tfoot tr th, + table tfoot tr td { + padding: 0.5rem 0.625rem 0.625rem; + font-size: 0.875rem; + font-weight: bold; + color: #222222; } + table tr th, + table tr td { + padding: 0.5625rem 0.625rem; + font-size: 0.875rem; + color: #222222; + text-align: left; } + table tr.even, table tr.alt, table tr:nth-of-type(even) { + background: #F9F9F9; } + table thead tr th, + table tfoot tr th, + table tfoot tr td, + table tbody tr th, + table tbody tr td, + table tr td { + display: table-cell; + line-height: 1.125rem; } + +.tabs { + margin-bottom: 0 !important; + margin-left: 0; } + .tabs:before, .tabs:after { + content: " "; + display: table; } + .tabs:after { + clear: both; } + .tabs dd, .tabs .tab-title { + position: relative; + margin-bottom: 0 !important; + list-style: none; + float: left; } + .tabs dd > a, .tabs .tab-title > a { + display: block; + background-color: #EFEFEF; + color: #222222; + padding: 1rem 2rem; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-size: 1rem; } + .tabs dd > a:hover, .tabs .tab-title > a:hover { + background-color: #e1e1e1; } + .tabs dd > a:focus, .tabs .tab-title > a:focus { + outline: none; } + .tabs dd.active a, .tabs .tab-title.active a { + background-color: #FFFFFF; + color: #222222; } + .tabs.radius dd:first-child a, .tabs.radius .tab:first-child a { + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } + .tabs.radius dd:last-child a, .tabs.radius .tab:last-child a { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } + .tabs.vertical dd, .tabs.vertical .tab-title { + position: inherit; + float: none; + display: block; + top: auto; } + +.tabs-content { + margin-bottom: 1.5rem; + width: 100%; } + .tabs-content:before, .tabs-content:after { + content: " "; + display: table; } + .tabs-content:after { + clear: both; } + .tabs-content > .content { + display: none; + float: left; + padding: 0.9375rem 0; + width: 100%; } + .tabs-content > .content.active { + display: block; + float: none; } + .tabs-content > .content.contained { + padding: 0.9375rem; } + .tabs-content.vertical { + display: block; } + .tabs-content.vertical > .content { + padding: 0 0.9375rem; } + +@media only screen and (min-width: 40.063em) { + .tabs.vertical { + width: 20%; + max-width: 20%; + float: left; + margin: 0 0 1.25rem; } + + .tabs-content.vertical { + width: 80%; + max-width: 80%; + float: left; + margin-left: -1px; + padding-left: 1rem; } } +.no-js .tabs-content > .content { + display: block; + float: none; } + +/* Image Thumbnails */ +.th { + line-height: 0; + display: inline-block; + border: solid 4px #FFFFFF; + max-width: 100%; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + transition: all 200ms ease-out; } + .th:hover, .th:focus { + box-shadow: 0 0 6px 1px rgba(0, 140, 186, 0.5); } + .th.radius { + border-radius: 3px; } + +/* Tooltips */ +.has-tip { + border-bottom: dotted 1px #CCCCCC; + cursor: help; + font-weight: bold; + color: #333333; } + .has-tip:hover, .has-tip:focus { + border-bottom: dotted 1px #003f54; + color: #008CBA; } + .has-tip.tip-left, .has-tip.tip-right { + float: none !important; } + +.tooltip { + display: none; + position: absolute; + z-index: 1006; + font-weight: normal; + font-size: 0.875rem; + line-height: 1.3; + padding: 0.75rem; + max-width: 300px; + left: 50%; + width: 100%; + color: #FFFFFF; + background: #333333; } + .tooltip > .nub { + display: block; + left: 5px; + position: absolute; + width: 0; + height: 0; + border: solid 5px; + border-color: transparent transparent #333333 transparent; + top: -10px; + pointer-events: none; } + .tooltip > .nub.rtl { + left: auto; + right: 5px; } + .tooltip.radius { + border-radius: 3px; } + .tooltip.round { + border-radius: 1000px; } + .tooltip.round > .nub { + left: 2rem; } + .tooltip.opened { + color: #008CBA !important; + border-bottom: dotted 1px #003f54 !important; } + +.tap-to-close { + display: block; + font-size: 0.625rem; + color: #777777; + font-weight: normal; } + +@media only screen and (min-width: 40.063em) { + .tooltip > .nub { + border-color: transparent transparent #333333 transparent; + top: -10px; } + .tooltip.tip-top > .nub { + border-color: #333333 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 #333333; + right: -10px; + left: auto; + top: 50%; + margin-top: -5px; } + .tooltip.tip-right > .nub { + border-color: transparent #333333 transparent transparent; + right: auto; + left: -10px; + top: 50%; + margin-top: -5px; } } +meta.foundation-mq-topbar { + font-family: "/only screen and (min-width:40.063em)/"; + width: 40.063em; } + +/* Wrapped around .top-bar to contain to grid width */ +.contain-to-grid { + width: 100%; + background: #333333; } + .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: 2.8125rem; } + +.top-bar { + overflow: hidden; + height: 2.8125rem; + line-height: 2.8125rem; + position: relative; + background: #333333; + 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: 1.75rem; + padding-top: .35rem; + padding-bottom: .35rem; + font-size: 0.75rem; } + .top-bar .button, .top-bar button { + padding-top: 0.4125rem; + padding-bottom: 0.4125rem; + margin-bottom: 0; + font-size: 0.75rem; } + @media only screen and (max-width: 40em) { + .top-bar .button, .top-bar button { + position: relative; + top: -1px; } } + .top-bar .title-area { + position: relative; + margin: 0; } + .top-bar .name { + height: 2.8125rem; + margin: 0; + font-size: 16px; } + .top-bar .name h1, .top-bar .name h2, .top-bar .name h3, .top-bar .name h4, .top-bar .name p, .top-bar .name span { + line-height: 2.8125rem; + font-size: 1.0625rem; + margin: 0; } + .top-bar .name h1 a, .top-bar .name h2 a, .top-bar .name h3 a, .top-bar .name h4 a, .top-bar .name p a, .top-bar .name span a { + font-weight: normal; + color: #FFFFFF; + width: 75%; + display: block; + padding: 0 0.9375rem; } + .top-bar .toggle-topbar { + position: absolute; + right: 0; + top: 0; } + .top-bar .toggle-topbar a { + color: #FFFFFF; + text-transform: uppercase; + font-size: 0.8125rem; + font-weight: bold; + position: relative; + display: block; + padding: 0 0.9375rem; + height: 2.8125rem; + line-height: 2.8125rem; } + .top-bar .toggle-topbar.menu-icon { + top: 50%; + margin-top: -16px; } + .top-bar .toggle-topbar.menu-icon a { + height: 34px; + line-height: 33px; + padding: 0 2.5rem 0 0.9375rem; + color: #FFFFFF; + position: relative; } + .top-bar .toggle-topbar.menu-icon a span::after { + content: ""; + position: absolute; + display: block; + height: 0; + top: 50%; + margin-top: -8px; + right: 0.9375rem; + box-shadow: 0 0 0 1px #FFFFFF, 0 7px 0 1px #FFFFFF, 0 14px 0 1px #FFFFFF; + width: 16px; } + .top-bar .toggle-topbar.menu-icon a span:hover:after { + box-shadow: 0 0 0 1px "", 0 7px 0 1px "", 0 14px 0 1px ""; } + .top-bar.expanded { + height: auto; + background: transparent; } + .top-bar.expanded .title-area { + background: #333333; } + .top-bar.expanded .toggle-topbar a { + color: #888888; } + .top-bar.expanded .toggle-topbar a span::after { + box-shadow: 0 0 0 1px #888888, 0 7px 0 1px #888888, 0 14px 0 1px #888888; } + +.top-bar-section { + left: 0; + position: relative; + width: auto; + transition: left 300ms ease-out; } + .top-bar-section ul { + padding: 0; + width: 100%; + height: auto; + display: block; + font-size: 16px; + margin: 0; } + .top-bar-section .divider, + .top-bar-section [role="separator"] { + border-top: solid 1px #1a1a1a; + clear: both; + height: 1px; + width: 100%; } + .top-bar-section ul li { + background: #333333; } + .top-bar-section ul li > a { + display: block; + width: 100%; + color: #FFFFFF; + padding: 12px 0 12px 0; + padding-left: 0.9375rem; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-size: 0.8125rem; + font-weight: normal; + text-transform: none; } + .top-bar-section ul li > a.button { + font-size: 0.8125rem; + padding-right: 0.9375rem; + padding-left: 0.9375rem; + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; } + .top-bar-section ul li > a.button:hover, .top-bar-section ul li > a.button:focus { + background-color: #007095; } + .top-bar-section ul li > a.button:hover, .top-bar-section ul li > a.button:focus { + color: #FFFFFF; } + .top-bar-section ul li > a.button.secondary { + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; } + .top-bar-section ul li > a.button.secondary:hover, .top-bar-section ul li > a.button.secondary:focus { + background-color: #b9b9b9; } + .top-bar-section ul li > a.button.secondary:hover, .top-bar-section ul li > a.button.secondary:focus { + color: #333333; } + .top-bar-section ul li > a.button.success { + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; } + .top-bar-section ul li > a.button.success:hover, .top-bar-section ul li > a.button.success:focus { + background-color: #368a55; } + .top-bar-section ul li > a.button.success:hover, .top-bar-section ul li > a.button.success:focus { + color: #FFFFFF; } + .top-bar-section ul li > a.button.alert { + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; } + .top-bar-section ul li > a.button.alert:hover, .top-bar-section ul li > a.button.alert:focus { + background-color: #cf2a0e; } + .top-bar-section ul li > a.button.alert:hover, .top-bar-section ul li > a.button.alert:focus { + color: #FFFFFF; } + .top-bar-section ul li > a.button.warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: #FFFFFF; } + .top-bar-section ul li > a.button.warning:hover, .top-bar-section ul li > a.button.warning:focus { + background-color: #cf6e0e; } + .top-bar-section ul li > a.button.warning:hover, .top-bar-section ul li > a.button.warning:focus { + color: #FFFFFF; } + .top-bar-section ul li > button { + font-size: 0.8125rem; + padding-right: 0.9375rem; + padding-left: 0.9375rem; + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; } + .top-bar-section ul li > button:hover, .top-bar-section ul li > button:focus { + background-color: #007095; } + .top-bar-section ul li > button:hover, .top-bar-section ul li > button:focus { + color: #FFFFFF; } + .top-bar-section ul li > button.secondary { + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; } + .top-bar-section ul li > button.secondary:hover, .top-bar-section ul li > button.secondary:focus { + background-color: #b9b9b9; } + .top-bar-section ul li > button.secondary:hover, .top-bar-section ul li > button.secondary:focus { + color: #333333; } + .top-bar-section ul li > button.success { + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; } + .top-bar-section ul li > button.success:hover, .top-bar-section ul li > button.success:focus { + background-color: #368a55; } + .top-bar-section ul li > button.success:hover, .top-bar-section ul li > button.success:focus { + color: #FFFFFF; } + .top-bar-section ul li > button.alert { + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; } + .top-bar-section ul li > button.alert:hover, .top-bar-section ul li > button.alert:focus { + background-color: #cf2a0e; } + .top-bar-section ul li > button.alert:hover, .top-bar-section ul li > button.alert:focus { + color: #FFFFFF; } + .top-bar-section ul li > button.warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: #FFFFFF; } + .top-bar-section ul li > button.warning:hover, .top-bar-section ul li > button.warning:focus { + background-color: #cf6e0e; } + .top-bar-section ul li > button.warning:hover, .top-bar-section ul li > button.warning:focus { + color: #FFFFFF; } + .top-bar-section ul li:hover:not(.has-form) > a { + background-color: #555555; + background: #333333; + color: #FFFFFF; } + .top-bar-section ul li.active > a { + background: #008CBA; + color: #FFFFFF; } + .top-bar-section ul li.active > a:hover { + background: #0078a0; + color: #FFFFFF; } + .top-bar-section .has-form { + padding: 0.9375rem; } + .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.4); + border-left-style: solid; + margin-right: 0.9375rem; + 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; + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; + position: absolute !important; + width: 100%; } + .top-bar-section .has-dropdown.moved > a:after { + display: none; } + .top-bar-section .dropdown { + padding: 0; + position: absolute; + left: 100%; + top: 0; + z-index: 99; + display: block; + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + .top-bar-section .dropdown li { + width: 100%; + height: auto; } + .top-bar-section .dropdown li a { + font-weight: normal; + padding: 8px 0.9375rem; } + .top-bar-section .dropdown li a.parent-link { + font-weight: normal; } + .top-bar-section .dropdown li.title h5, .top-bar-section .dropdown li.parent-link { + margin-bottom: 0; + margin-top: 0; + font-size: 1.125rem; } + .top-bar-section .dropdown li.title h5 a, .top-bar-section .dropdown li.parent-link a { + color: #FFFFFF; + display: block; } + .top-bar-section .dropdown li.title h5 a:hover, .top-bar-section .dropdown li.parent-link a:hover { + background: none; } + .top-bar-section .dropdown li.has-form { + padding: 8px 0.9375rem; } + .top-bar-section .dropdown li .button, .top-bar-section .dropdown li button { + top: auto; } + .top-bar-section .dropdown label { + padding: 8px 0.9375rem 2px; + margin-bottom: 0; + text-transform: uppercase; + color: #777777; + font-weight: bold; + font-size: 0.625rem; } + +.js-generated { + display: block; } + +@media only screen and (min-width: 40.063em) { + .top-bar { + background: #333333; + 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, + .top-bar .name h2 a, + .top-bar .name h3 a, + .top-bar .name h4 a, + .top-bar .name h5 a, + .top-bar .name h6 a { + width: auto; } + .top-bar input, + .top-bar .button, + .top-bar button { + font-size: 0.875rem; + position: relative; + height: 1.75rem; + top: 0.53125rem; } + .top-bar.expanded { + background: #333333; } + + .contain-to-grid .top-bar { + max-width: 62.5rem; + margin: 0 auto; + margin-bottom: 0; } + + .top-bar-section { + 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-color: #555555; + background: #333333; + color: #FFFFFF; } + .top-bar-section li:not(.has-form) a:not(.button) { + padding: 0 0.9375rem; + line-height: 2.8125rem; + background: #333333; } + .top-bar-section li:not(.has-form) a:not(.button):hover { + background-color: #555555; + background: #333333; } + .top-bar-section li.active:not(.has-form) a:not(.button) { + padding: 0 0.9375rem; + line-height: 2.8125rem; + color: #FFFFFF; + background: #008CBA; } + .top-bar-section li.active:not(.has-form) a:not(.button):hover { + background: #0078a0; + color: #FFFFFF; } + .top-bar-section .has-dropdown > a { + padding-right: 2.1875rem !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.4) transparent transparent transparent; + border-top-style: solid; + margin-top: -2.5px; + top: 1.40625rem; } + .top-bar-section .has-dropdown.moved { + position: relative; } + .top-bar-section .has-dropdown.moved > .dropdown { + display: block; + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + .top-bar-section .has-dropdown.hover > .dropdown, .top-bar-section .has-dropdown.not-click:hover > .dropdown { + display: block; + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; + position: absolute !important; } + .top-bar-section .has-dropdown > a:focus + .dropdown { + display: block; + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; + position: absolute !important; } + .top-bar-section .has-dropdown .dropdown li.has-dropdown > a:after { + border: none; + content: "\00bb"; + top: 1rem; + margin-top: -1px; + right: 5px; + line-height: 1.2; } + .top-bar-section .dropdown { + left: 0; + top: auto; + background: transparent; + min-width: 100%; } + .top-bar-section .dropdown li a { + color: #FFFFFF; + line-height: 2.8125rem; + white-space: nowrap; + padding: 12px 0.9375rem; + background: #333333; } + .top-bar-section .dropdown li:not(.has-form):not(.active) > a:not(.button) { + color: #FFFFFF; + background: #333333; } + .top-bar-section .dropdown li:not(.has-form):not(.active):hover > a:not(.button) { + color: #FFFFFF; + background-color: #555555; + background: #333333; } + .top-bar-section .dropdown li label { + white-space: nowrap; + background: #333333; } + .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 #4e4e4e; + clear: none; + height: 2.8125rem; + width: 0; } + .top-bar-section .has-form { + background: #333333; + padding: 0 0.9375rem; + height: 2.8125rem; } + .top-bar-section .right li .dropdown { + left: auto; + right: 0; } + .top-bar-section .right li .dropdown li .dropdown { + right: 100%; } + .top-bar-section .left li .dropdown { + right: auto; + left: 0; } + .top-bar-section .left li .dropdown li .dropdown { + left: 100%; } + + .no-js .top-bar-section ul li:hover > a { + background-color: #555555; + background: #333333; + color: #FFFFFF; } + .no-js .top-bar-section ul li:active > a { + background: #008CBA; + color: #FFFFFF; } + .no-js .top-bar-section .has-dropdown:hover > .dropdown { + display: block; + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; + position: absolute !important; } + .no-js .top-bar-section .has-dropdown > a:focus + .dropdown { + display: block; + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; + position: absolute !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; } + +@media only screen and (max-width: 40em) { + .small-only-text-left { + text-align: left !important; } + + .small-only-text-right { + text-align: right !important; } + + .small-only-text-center { + text-align: center !important; } + + .small-only-text-justify { + text-align: justify !important; } } +@media only screen { + .small-text-left { + text-align: left !important; } + + .small-text-right { + text-align: right !important; } + + .small-text-center { + text-align: center !important; } + + .small-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + .medium-only-text-left { + text-align: left !important; } + + .medium-only-text-right { + text-align: right !important; } + + .medium-only-text-center { + text-align: center !important; } + + .medium-only-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 40.063em) { + .medium-text-left { + text-align: left !important; } + + .medium-text-right { + text-align: right !important; } + + .medium-text-center { + text-align: center !important; } + + .medium-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 64.063em) and (max-width: 90em) { + .large-only-text-left { + text-align: left !important; } + + .large-only-text-right { + text-align: right !important; } + + .large-only-text-center { + text-align: center !important; } + + .large-only-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 64.063em) { + .large-text-left { + text-align: left !important; } + + .large-text-right { + text-align: right !important; } + + .large-text-center { + text-align: center !important; } + + .large-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 90.063em) and (max-width: 120em) { + .xlarge-only-text-left { + text-align: left !important; } + + .xlarge-only-text-right { + text-align: right !important; } + + .xlarge-only-text-center { + text-align: center !important; } + + .xlarge-only-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 90.063em) { + .xlarge-text-left { + text-align: left !important; } + + .xlarge-text-right { + text-align: right !important; } + + .xlarge-text-center { + text-align: center !important; } + + .xlarge-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 120.063em) and (max-width: 99999999em) { + .xxlarge-only-text-left { + text-align: left !important; } + + .xxlarge-only-text-right { + text-align: right !important; } + + .xxlarge-only-text-center { + text-align: center !important; } + + .xxlarge-only-text-justify { + text-align: justify !important; } } +@media only screen and (min-width: 120.063em) { + .xxlarge-text-left { + text-align: left !important; } + + .xxlarge-text-right { + text-align: right !important; } + + .xxlarge-text-center { + text-align: center !important; } + + .xxlarge-text-justify { + text-align: justify !important; } } +/* 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; } + +/* Default Link Styles */ +a { + color: #008CBA; + text-decoration: none; + line-height: inherit; } + a:hover, a:focus { + color: #0078a0; } + a img { + border: none; } + +/* Default paragraph styles */ +p { + font-family: inherit; + font-weight: normal; + font-size: 1rem; + line-height: 1.6; + margin-bottom: 1.25rem; + text-rendering: optimizeLegibility; } + p.lead { + font-size: 1.21875rem; + line-height: 1.6; } + p aside { + font-size: 0.875rem; + line-height: 1.35; + font-style: italic; } + +/* Default header styles */ +h1, h2, h3, h4, h5, h6 { + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + font-style: normal; + color: #222222; + text-rendering: optimizeLegibility; + margin-top: 0.2rem; + margin-bottom: 0.5rem; + line-height: 1.4; } + h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-size: 60%; + color: #6f6f6f; + line-height: 0; } + +h1 { + font-size: 2.125rem; } + +h2 { + font-size: 1.6875rem; } + +h3 { + font-size: 1.375rem; } + +h4 { + font-size: 1.125rem; } + +h5 { + font-size: 1.125rem; } + +h6 { + font-size: 1rem; } + +.subheader { + line-height: 1.4; + color: #6f6f6f; + font-weight: normal; + margin-top: 0.2rem; + margin-bottom: 0.5rem; } + +hr { + border: solid #DDDDDD; + border-width: 1px 0 0; + clear: both; + margin: 1.25rem 0 1.1875rem; + 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: normal; + color: #333333; + background-color: #f8f8f8; + border-width: 1px; + border-style: solid; + border-color: #dfdfdf; + padding: 0.125rem 0.3125rem 0.0625rem; } + +/* Lists */ +ul, +ol, +dl { + font-size: 1rem; + line-height: 1.6; + margin-bottom: 1.25rem; + list-style-position: outside; + font-family: inherit; } + +ul { + margin-left: 1.1rem; } + ul.no-bullet { + margin-left: 0; } + ul.no-bullet li ul, + ul.no-bullet li ol { + margin-left: 1.25rem; + margin-bottom: 0; + list-style: none; } + +/* Unordered Lists */ +ul li ul, +ul li ol { + margin-left: 1.25rem; + margin-bottom: 0; } +ul.square li ul, ul.circle li ul, ul.disc li ul { + list-style: inherit; } +ul.square { + list-style-type: square; + margin-left: 1.1rem; } +ul.circle { + list-style-type: circle; + margin-left: 1.1rem; } +ul.disc { + list-style-type: disc; + margin-left: 1.1rem; } +ul.no-bullet { + list-style: none; } + +/* Ordered Lists */ +ol { + margin-left: 1.4rem; } + ol li ul, + ol li ol { + margin-left: 1.25rem; + margin-bottom: 0; } + +/* Definition Lists */ +dl dt { + margin-bottom: 0.3rem; + font-weight: bold; } +dl dd { + margin-bottom: 0.75rem; } + +/* Abbreviations */ +abbr, +acronym { + text-transform: uppercase; + font-size: 90%; + color: #222; + cursor: help; } + +abbr { + text-transform: none; } + abbr[title] { + border-bottom: 1px dotted #DDDDDD; } + +/* Blockquotes */ +blockquote { + margin: 0 0 1.25rem; + padding: 0.5625rem 1.25rem 0 1.1875rem; + border-left: 1px solid #DDDDDD; } + blockquote cite { + display: block; + font-size: 0.8125rem; + 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.25rem 0; + border: 1px solid #DDDDDD; + padding: 0.625rem 0.75rem; } + .vcard li { + margin: 0; + display: block; } + .vcard .fn { + font-weight: bold; + font-size: 0.9375rem; } + +.vevent .summary { + font-weight: bold; } +.vevent abbr { + cursor: default; + text-decoration: none; + font-weight: bold; + border: none; + padding: 0 0.0625rem; } + +@media only screen and (min-width: 40.063em) { + h1, h2, h3, h4, h5, h6 { + line-height: 1.4; } + + h1 { + font-size: 2.75rem; } + + h2 { + font-size: 2.3125rem; } + + h3 { + font-size: 1.6875rem; } + + h4 { + font-size: 1.4375rem; } + + h5 { + font-size: 1.125rem; } + + h6 { + font-size: 1rem; } } +.off-canvas-wrap { + -webkit-backface-visibility: hidden; + position: relative; + width: 100%; + overflow: hidden; } + .off-canvas-wrap.move-right, .off-canvas-wrap.move-left { + min-height: 100%; + -webkit-overflow-scrolling: touch; } + +.inner-wrap { + position: relative; + width: 100%; + -webkit-transition: -webkit-transform 500ms ease; + -moz-transition: -moz-transform 500ms ease; + -ms-transition: -ms-transform 500ms ease; + -o-transition: -o-transform 500ms ease; + transition: transform 500ms ease; } + .inner-wrap:before, .inner-wrap:after { + content: " "; + display: table; } + .inner-wrap:after { + clear: both; } + +.tab-bar { + -webkit-backface-visibility: hidden; + background: #333333; + color: #FFFFFF; + height: 2.8125rem; + line-height: 2.8125rem; + position: relative; } + .tab-bar h1, .tab-bar h2, .tab-bar h3, .tab-bar h4, .tab-bar h5, .tab-bar h6 { + color: #FFFFFF; + font-weight: bold; + line-height: 2.8125rem; + margin: 0; } + .tab-bar h1, .tab-bar h2, .tab-bar h3, .tab-bar h4 { + font-size: 1.125rem; } + +.left-small { + width: 2.8125rem; + height: 2.8125rem; + position: absolute; + top: 0; + border-right: solid 1px #1a1a1a; + left: 0; } + +.right-small { + width: 2.8125rem; + height: 2.8125rem; + position: absolute; + top: 0; + border-left: solid 1px #1a1a1a; + right: 0; } + +.tab-bar-section { + padding: 0 0.625rem; + position: absolute; + text-align: center; + height: 2.8125rem; + top: 0; } + @media only screen and (min-width: 40.063em) { + .tab-bar-section.left { + text-align: left; } + .tab-bar-section.right { + text-align: right; } } + .tab-bar-section.left { + left: 0; + right: 2.8125rem; } + .tab-bar-section.right { + left: 2.8125rem; + right: 0; } + .tab-bar-section.middle { + left: 2.8125rem; + right: 2.8125rem; } + +.tab-bar .menu-icon { + text-indent: 2.1875rem; + width: 2.8125rem; + height: 2.8125rem; + display: block; + padding: 0; + color: #FFFFFF; + position: relative; + transform: translate3d(0, 0, 0); } + .tab-bar .menu-icon span::after { + content: ""; + position: absolute; + display: block; + height: 0; + top: 50%; + margin-top: -0.5rem; + left: 0.90625rem; + box-shadow: 0 0 0 1px #FFFFFF, 0 7px 0 1px #FFFFFF, 0 14px 0 1px #FFFFFF; + width: 1rem; } + .tab-bar .menu-icon span:hover:after { + box-shadow: 0 0 0 1px #b3b3b3, 0 7px 0 1px #b3b3b3, 0 14px 0 1px #b3b3b3; } + +.left-off-canvas-menu { + -webkit-backface-visibility: hidden; + width: 15.625rem; + top: 0; + bottom: 0; + position: absolute; + overflow-x: hidden; + overflow-y: auto; + background: #333333; + z-index: 1001; + box-sizing: content-box; + transition: transform 500ms ease 0s; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + -ms-transform: translate(-100%, 0); + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; } + .left-off-canvas-menu * { + -webkit-backface-visibility: hidden; } + +.right-off-canvas-menu { + -webkit-backface-visibility: hidden; + width: 15.625rem; + top: 0; + bottom: 0; + position: absolute; + overflow-x: hidden; + overflow-y: auto; + background: #333333; + z-index: 1001; + box-sizing: content-box; + transition: transform 500ms ease 0s; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + -ms-transform: translate(100%, 0); + -webkit-transform: translate3d(100%, 0, 0); + -moz-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + -o-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + right: 0; } + .right-off-canvas-menu * { + -webkit-backface-visibility: hidden; } + +ul.off-canvas-list { + list-style-type: none; + padding: 0; + margin: 0; } + ul.off-canvas-list li label { + display: block; + padding: 0.3rem 0.9375rem; + color: #999999; + text-transform: uppercase; + font-size: 0.75rem; + font-weight: bold; + background: #444444; + border-top: 1px solid #5e5e5e; + border-bottom: none; + margin: 0; } + ul.off-canvas-list li a { + display: block; + padding: 0.66667rem; + color: rgba(255, 255, 255, 0.7); + border-bottom: 1px solid #262626; + transition: background 300ms ease; } + ul.off-canvas-list li a:hover { + background: #242424; } + +.move-right > .inner-wrap { + -ms-transform: translate(15.625rem, 0); + -webkit-transform: translate3d(15.625rem, 0, 0); + -moz-transform: translate3d(15.625rem, 0, 0); + -ms-transform: translate3d(15.625rem, 0, 0); + -o-transform: translate3d(15.625rem, 0, 0); + transform: translate3d(15.625rem, 0, 0); } +.move-right .exit-off-canvas { + -webkit-backface-visibility: hidden; + transition: background 300ms ease; + cursor: pointer; + box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); + display: block; + position: absolute; + background: rgba(255, 255, 255, 0.2); + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1002; + -webkit-tap-highlight-color: transparent; } + @media only screen and (min-width: 40.063em) { + .move-right .exit-off-canvas:hover { + background: rgba(255, 255, 255, 0.05); } } + +.move-left > .inner-wrap { + -ms-transform: translate(-15.625rem, 0); + -webkit-transform: translate3d(-15.625rem, 0, 0); + -moz-transform: translate3d(-15.625rem, 0, 0); + -ms-transform: translate3d(-15.625rem, 0, 0); + -o-transform: translate3d(-15.625rem, 0, 0); + transform: translate3d(-15.625rem, 0, 0); } +.move-left .exit-off-canvas { + -webkit-backface-visibility: hidden; + transition: background 300ms ease; + cursor: pointer; + box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); + display: block; + position: absolute; + background: rgba(255, 255, 255, 0.2); + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1002; + -webkit-tap-highlight-color: transparent; } + @media only screen and (min-width: 40.063em) { + .move-left .exit-off-canvas:hover { + background: rgba(255, 255, 255, 0.05); } } + +.offcanvas-overlap .left-off-canvas-menu, .offcanvas-overlap .right-off-canvas-menu { + -ms-transform: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + transform: none; + z-index: 1003; } +.offcanvas-overlap .exit-off-canvas { + -webkit-backface-visibility: hidden; + transition: background 300ms ease; + cursor: pointer; + box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); + display: block; + position: absolute; + background: rgba(255, 255, 255, 0.2); + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1002; + -webkit-tap-highlight-color: transparent; } + @media only screen and (min-width: 40.063em) { + .offcanvas-overlap .exit-off-canvas:hover { + background: rgba(255, 255, 255, 0.05); } } + +.offcanvas-overlap-left .right-off-canvas-menu { + -ms-transform: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + transform: none; + z-index: 1003; } +.offcanvas-overlap-left .exit-off-canvas { + -webkit-backface-visibility: hidden; + transition: background 300ms ease; + cursor: pointer; + box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); + display: block; + position: absolute; + background: rgba(255, 255, 255, 0.2); + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1002; + -webkit-tap-highlight-color: transparent; } + @media only screen and (min-width: 40.063em) { + .offcanvas-overlap-left .exit-off-canvas:hover { + background: rgba(255, 255, 255, 0.05); } } + +.offcanvas-overlap-right .left-off-canvas-menu { + -ms-transform: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + transform: none; + z-index: 1003; } +.offcanvas-overlap-right .exit-off-canvas { + -webkit-backface-visibility: hidden; + transition: background 300ms ease; + cursor: pointer; + box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); + display: block; + position: absolute; + background: rgba(255, 255, 255, 0.2); + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1002; + -webkit-tap-highlight-color: transparent; } + @media only screen and (min-width: 40.063em) { + .offcanvas-overlap-right .exit-off-canvas:hover { + background: rgba(255, 255, 255, 0.05); } } + +.no-csstransforms .left-off-canvas-menu { + left: -15.625rem; } +.no-csstransforms .right-off-canvas-menu { + right: -15.625rem; } +.no-csstransforms .move-left > .inner-wrap { + right: 15.625rem; } +.no-csstransforms .move-right > .inner-wrap { + left: 15.625rem; } + +.left-submenu { + -webkit-backface-visibility: hidden; + width: 15.625rem; + top: 0; + bottom: 0; + position: absolute; + margin: 0; + overflow-x: hidden; + overflow-y: auto; + background: #333333; + z-index: 1002; + box-sizing: content-box; + -webkit-overflow-scrolling: touch; + -ms-transform: translate(-100%, 0); + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + -webkit-transition: -webkit-transform 500ms ease; + -moz-transition: -moz-transform 500ms ease; + -ms-transition: -ms-transform 500ms ease; + -o-transition: -o-transform 500ms ease; + transition: transform 500ms ease; } + .left-submenu * { + -webkit-backface-visibility: hidden; } + .left-submenu .back > a { + padding: 0.3rem 0.9375rem; + color: #999999; + text-transform: uppercase; + font-weight: bold; + background: #444; + border-top: 1px solid #5e5e5e; + border-bottom: none; + margin: 0; } + .left-submenu .back > a:hover { + background: #303030; + border-top: 1px solid #5e5e5e; + border-bottom: none; } + .left-submenu .back > a:before { + content: "\AB"; + margin-right: 0.5rem; + display: inline; } + .left-submenu.move-right, .left-submenu.offcanvas-overlap-right, .left-submenu.offcanvas-overlap { + -ms-transform: translate(0%, 0); + -webkit-transform: translate3d(0%, 0, 0); + -moz-transform: translate3d(0%, 0, 0); + -ms-transform: translate3d(0%, 0, 0); + -o-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); } + +.right-submenu { + -webkit-backface-visibility: hidden; + width: 15.625rem; + top: 0; + bottom: 0; + position: absolute; + margin: 0; + overflow-x: hidden; + overflow-y: auto; + background: #333333; + z-index: 1002; + box-sizing: content-box; + -webkit-overflow-scrolling: touch; + -ms-transform: translate(100%, 0); + -webkit-transform: translate3d(100%, 0, 0); + -moz-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + -o-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + right: 0; + -webkit-transition: -webkit-transform 500ms ease; + -moz-transition: -moz-transform 500ms ease; + -ms-transition: -ms-transform 500ms ease; + -o-transition: -o-transform 500ms ease; + transition: transform 500ms ease; } + .right-submenu * { + -webkit-backface-visibility: hidden; } + .right-submenu .back > a { + padding: 0.3rem 0.9375rem; + color: #999999; + text-transform: uppercase; + font-weight: bold; + background: #444; + border-top: 1px solid #5e5e5e; + border-bottom: none; + margin: 0; } + .right-submenu .back > a:hover { + background: #303030; + border-top: 1px solid #5e5e5e; + border-bottom: none; } + .right-submenu .back > a:after { + content: "\BB"; + margin-left: 0.5rem; + display: inline; } + .right-submenu.move-left, .right-submenu.offcanvas-overlap-left, .right-submenu.offcanvas-overlap { + -ms-transform: translate(0%, 0); + -webkit-transform: translate3d(0%, 0, 0); + -moz-transform: translate3d(0%, 0, 0); + -ms-transform: translate3d(0%, 0, 0); + -o-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); } + +.left-off-canvas-menu ul.off-canvas-list li.has-submenu > a:after { + content: "\BB"; + margin-left: 0.5rem; + display: inline; } + +.right-off-canvas-menu ul.off-canvas-list li.has-submenu > a:before { + content: "\AB"; + margin-right: 0.5rem; + display: inline; } + +/* small displays */ +@media only screen { + .show-for-small-only, .show-for-small-up, .show-for-small, .show-for-small-down, .hide-for-medium-only, .hide-for-medium-up, .hide-for-medium, .show-for-medium-down, .hide-for-large-only, .hide-for-large-up, .hide-for-large, .show-for-large-down, .hide-for-xlarge-only, .hide-for-xlarge-up, .hide-for-xlarge, .show-for-xlarge-down, .hide-for-xxlarge-only, .hide-for-xxlarge-up, .hide-for-xxlarge, .show-for-xxlarge-down { + display: inherit !important; } + + .hide-for-small-only, .hide-for-small-up, .hide-for-small, .hide-for-small-down, .show-for-medium-only, .show-for-medium-up, .show-for-medium, .hide-for-medium-down, .show-for-large-only, .show-for-large-up, .show-for-large, .hide-for-large-down, .show-for-xlarge-only, .show-for-xlarge-up, .show-for-xlarge, .hide-for-xlarge-down, .show-for-xxlarge-only, .show-for-xxlarge-up, .show-for-xxlarge, .hide-for-xxlarge-down { + display: none !important; } + + .visible-for-small-only, .visible-for-small-up, .visible-for-small, .visible-for-small-down, .hidden-for-medium-only, .hidden-for-medium-up, .hidden-for-medium, .visible-for-medium-down, .hidden-for-large-only, .hidden-for-large-up, .hidden-for-large, .visible-for-large-down, .hidden-for-xlarge-only, .hidden-for-xlarge-up, .hidden-for-xlarge, .visible-for-xlarge-down, .hidden-for-xxlarge-only, .hidden-for-xxlarge-up, .hidden-for-xxlarge, .visible-for-xxlarge-down { + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; } + + .hidden-for-small-only, .hidden-for-small-up, .hidden-for-small, .hidden-for-small-down, .visible-for-medium-only, .visible-for-medium-up, .visible-for-medium, .hidden-for-medium-down, .visible-for-large-only, .visible-for-large-up, .visible-for-large, .hidden-for-large-down, .visible-for-xlarge-only, .visible-for-xlarge-up, .visible-for-xlarge, .hidden-for-xlarge-down, .visible-for-xxlarge-only, .visible-for-xxlarge-up, .visible-for-xxlarge, .hidden-for-xxlarge-down { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + + table.show-for-small-only, table.show-for-small-up, table.show-for-small, table.show-for-small-down, table.hide-for-medium-only, table.hide-for-medium-up, table.hide-for-medium, table.show-for-medium-down, table.hide-for-large-only, table.hide-for-large-up, table.hide-for-large, table.show-for-large-down, table.hide-for-xlarge-only, table.hide-for-xlarge-up, table.hide-for-xlarge, table.show-for-xlarge-down, table.hide-for-xxlarge-only, table.hide-for-xxlarge-up, table.hide-for-xxlarge, table.show-for-xxlarge-down { + display: table !important; } + + thead.show-for-small-only, thead.show-for-small-up, thead.show-for-small, thead.show-for-small-down, thead.hide-for-medium-only, thead.hide-for-medium-up, thead.hide-for-medium, thead.show-for-medium-down, thead.hide-for-large-only, thead.hide-for-large-up, thead.hide-for-large, thead.show-for-large-down, thead.hide-for-xlarge-only, thead.hide-for-xlarge-up, thead.hide-for-xlarge, thead.show-for-xlarge-down, thead.hide-for-xxlarge-only, thead.hide-for-xxlarge-up, thead.hide-for-xxlarge, thead.show-for-xxlarge-down { + display: table-header-group !important; } + + tbody.show-for-small-only, tbody.show-for-small-up, tbody.show-for-small, tbody.show-for-small-down, tbody.hide-for-medium-only, tbody.hide-for-medium-up, tbody.hide-for-medium, tbody.show-for-medium-down, tbody.hide-for-large-only, tbody.hide-for-large-up, tbody.hide-for-large, tbody.show-for-large-down, tbody.hide-for-xlarge-only, tbody.hide-for-xlarge-up, tbody.hide-for-xlarge, tbody.show-for-xlarge-down, tbody.hide-for-xxlarge-only, tbody.hide-for-xxlarge-up, tbody.hide-for-xxlarge, tbody.show-for-xxlarge-down { + display: table-row-group !important; } + + tr.show-for-small-only, tr.show-for-small-up, tr.show-for-small, tr.show-for-small-down, tr.hide-for-medium-only, tr.hide-for-medium-up, tr.hide-for-medium, tr.show-for-medium-down, tr.hide-for-large-only, tr.hide-for-large-up, tr.hide-for-large, tr.show-for-large-down, tr.hide-for-xlarge-only, tr.hide-for-xlarge-up, tr.hide-for-xlarge, tr.show-for-xlarge-down, tr.hide-for-xxlarge-only, tr.hide-for-xxlarge-up, tr.hide-for-xxlarge, tr.show-for-xxlarge-down { + display: table-row; } + + th.show-for-small-only, td.show-for-small-only, th.show-for-small-up, td.show-for-small-up, th.show-for-small, td.show-for-small, th.show-for-small-down, td.show-for-small-down, th.hide-for-medium-only, td.hide-for-medium-only, th.hide-for-medium-up, td.hide-for-medium-up, th.hide-for-medium, td.hide-for-medium, th.show-for-medium-down, td.show-for-medium-down, th.hide-for-large-only, td.hide-for-large-only, th.hide-for-large-up, td.hide-for-large-up, th.hide-for-large, td.hide-for-large, th.show-for-large-down, td.show-for-large-down, th.hide-for-xlarge-only, td.hide-for-xlarge-only, th.hide-for-xlarge-up, td.hide-for-xlarge-up, th.hide-for-xlarge, td.hide-for-xlarge, th.show-for-xlarge-down, td.show-for-xlarge-down, th.hide-for-xxlarge-only, td.hide-for-xxlarge-only, th.hide-for-xxlarge-up, td.hide-for-xxlarge-up, th.hide-for-xxlarge, td.hide-for-xxlarge, th.show-for-xxlarge-down, td.show-for-xxlarge-down { + display: table-cell !important; } } +/* medium displays */ +@media only screen and (min-width: 40.063em) { + .hide-for-small-only, .show-for-small-up, .hide-for-small, .hide-for-small-down, .show-for-medium-only, .show-for-medium-up, .show-for-medium, .show-for-medium-down, .hide-for-large-only, .hide-for-large-up, .hide-for-large, .show-for-large-down, .hide-for-xlarge-only, .hide-for-xlarge-up, .hide-for-xlarge, .show-for-xlarge-down, .hide-for-xxlarge-only, .hide-for-xxlarge-up, .hide-for-xxlarge, .show-for-xxlarge-down { + display: inherit !important; } + + .show-for-small-only, .hide-for-small-up, .show-for-small, .show-for-small-down, .hide-for-medium-only, .hide-for-medium-up, .hide-for-medium, .hide-for-medium-down, .show-for-large-only, .show-for-large-up, .show-for-large, .hide-for-large-down, .show-for-xlarge-only, .show-for-xlarge-up, .show-for-xlarge, .hide-for-xlarge-down, .show-for-xxlarge-only, .show-for-xxlarge-up, .show-for-xxlarge, .hide-for-xxlarge-down { + display: none !important; } + + .hidden-for-small-only, .visible-for-small-up, .hidden-for-small, .hidden-for-small-down, .visible-for-medium-only, .visible-for-medium-up, .visible-for-medium, .visible-for-medium-down, .hidden-for-large-only, .hidden-for-large-up, .hidden-for-large, .visible-for-large-down, .hidden-for-xlarge-only, .hidden-for-xlarge-up, .hidden-for-xlarge, .visible-for-xlarge-down, .hidden-for-xxlarge-only, .hidden-for-xxlarge-up, .hidden-for-xxlarge, .visible-for-xxlarge-down { + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; } + + .visible-for-small-only, .hidden-for-small-up, .visible-for-small, .visible-for-small-down, .hidden-for-medium-only, .hidden-for-medium-up, .hidden-for-medium, .hidden-for-medium-down, .visible-for-large-only, .visible-for-large-up, .visible-for-large, .hidden-for-large-down, .visible-for-xlarge-only, .visible-for-xlarge-up, .visible-for-xlarge, .hidden-for-xlarge-down, .visible-for-xxlarge-only, .visible-for-xxlarge-up, .visible-for-xxlarge, .hidden-for-xxlarge-down { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + + table.hide-for-small-only, table.show-for-small-up, table.hide-for-small, table.hide-for-small-down, table.show-for-medium-only, table.show-for-medium-up, table.show-for-medium, table.show-for-medium-down, table.hide-for-large-only, table.hide-for-large-up, table.hide-for-large, table.show-for-large-down, table.hide-for-xlarge-only, table.hide-for-xlarge-up, table.hide-for-xlarge, table.show-for-xlarge-down, table.hide-for-xxlarge-only, table.hide-for-xxlarge-up, table.hide-for-xxlarge, table.show-for-xxlarge-down { + display: table !important; } + + thead.hide-for-small-only, thead.show-for-small-up, thead.hide-for-small, thead.hide-for-small-down, thead.show-for-medium-only, thead.show-for-medium-up, thead.show-for-medium, thead.show-for-medium-down, thead.hide-for-large-only, thead.hide-for-large-up, thead.hide-for-large, thead.show-for-large-down, thead.hide-for-xlarge-only, thead.hide-for-xlarge-up, thead.hide-for-xlarge, thead.show-for-xlarge-down, thead.hide-for-xxlarge-only, thead.hide-for-xxlarge-up, thead.hide-for-xxlarge, thead.show-for-xxlarge-down { + display: table-header-group !important; } + + tbody.hide-for-small-only, tbody.show-for-small-up, tbody.hide-for-small, tbody.hide-for-small-down, tbody.show-for-medium-only, tbody.show-for-medium-up, tbody.show-for-medium, tbody.show-for-medium-down, tbody.hide-for-large-only, tbody.hide-for-large-up, tbody.hide-for-large, tbody.show-for-large-down, tbody.hide-for-xlarge-only, tbody.hide-for-xlarge-up, tbody.hide-for-xlarge, tbody.show-for-xlarge-down, tbody.hide-for-xxlarge-only, tbody.hide-for-xxlarge-up, tbody.hide-for-xxlarge, tbody.show-for-xxlarge-down { + display: table-row-group !important; } + + tr.hide-for-small-only, tr.show-for-small-up, tr.hide-for-small, tr.hide-for-small-down, tr.show-for-medium-only, tr.show-for-medium-up, tr.show-for-medium, tr.show-for-medium-down, tr.hide-for-large-only, tr.hide-for-large-up, tr.hide-for-large, tr.show-for-large-down, tr.hide-for-xlarge-only, tr.hide-for-xlarge-up, tr.hide-for-xlarge, tr.show-for-xlarge-down, tr.hide-for-xxlarge-only, tr.hide-for-xxlarge-up, tr.hide-for-xxlarge, tr.show-for-xxlarge-down { + display: table-row; } + + th.hide-for-small-only, td.hide-for-small-only, th.show-for-small-up, td.show-for-small-up, th.hide-for-small, td.hide-for-small, th.hide-for-small-down, td.hide-for-small-down, th.show-for-medium-only, td.show-for-medium-only, th.show-for-medium-up, td.show-for-medium-up, th.show-for-medium, td.show-for-medium, th.show-for-medium-down, td.show-for-medium-down, th.hide-for-large-only, td.hide-for-large-only, th.hide-for-large-up, td.hide-for-large-up, th.hide-for-large, td.hide-for-large, th.show-for-large-down, td.show-for-large-down, th.hide-for-xlarge-only, td.hide-for-xlarge-only, th.hide-for-xlarge-up, td.hide-for-xlarge-up, th.hide-for-xlarge, td.hide-for-xlarge, th.show-for-xlarge-down, td.show-for-xlarge-down, th.hide-for-xxlarge-only, td.hide-for-xxlarge-only, th.hide-for-xxlarge-up, td.hide-for-xxlarge-up, th.hide-for-xxlarge, td.hide-for-xxlarge, th.show-for-xxlarge-down, td.show-for-xxlarge-down { + display: table-cell !important; } } +/* large displays */ +@media only screen and (min-width: 64.063em) { + .hide-for-small-only, .show-for-small-up, .hide-for-small, .hide-for-small-down, .hide-for-medium-only, .show-for-medium-up, .hide-for-medium, .hide-for-medium-down, .show-for-large-only, .show-for-large-up, .show-for-large, .show-for-large-down, .hide-for-xlarge-only, .hide-for-xlarge-up, .hide-for-xlarge, .show-for-xlarge-down, .hide-for-xxlarge-only, .hide-for-xxlarge-up, .hide-for-xxlarge, .show-for-xxlarge-down { + display: inherit !important; } + + .show-for-small-only, .hide-for-small-up, .show-for-small, .show-for-small-down, .show-for-medium-only, .hide-for-medium-up, .show-for-medium, .show-for-medium-down, .hide-for-large-only, .hide-for-large-up, .hide-for-large, .hide-for-large-down, .show-for-xlarge-only, .show-for-xlarge-up, .show-for-xlarge, .hide-for-xlarge-down, .show-for-xxlarge-only, .show-for-xxlarge-up, .show-for-xxlarge, .hide-for-xxlarge-down { + display: none !important; } + + .hidden-for-small-only, .visible-for-small-up, .hidden-for-small, .hidden-for-small-down, .hidden-for-medium-only, .visible-for-medium-up, .hidden-for-medium, .hidden-for-medium-down, .visible-for-large-only, .visible-for-large-up, .visible-for-large, .visible-for-large-down, .hidden-for-xlarge-only, .hidden-for-xlarge-up, .hidden-for-xlarge, .visible-for-xlarge-down, .hidden-for-xxlarge-only, .hidden-for-xxlarge-up, .hidden-for-xxlarge, .visible-for-xxlarge-down { + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; } + + .visible-for-small-only, .hidden-for-small-up, .visible-for-small, .visible-for-small-down, .visible-for-medium-only, .hidden-for-medium-up, .visible-for-medium, .visible-for-medium-down, .hidden-for-large-only, .hidden-for-large-up, .hidden-for-large, .hidden-for-large-down, .visible-for-xlarge-only, .visible-for-xlarge-up, .visible-for-xlarge, .hidden-for-xlarge-down, .visible-for-xxlarge-only, .visible-for-xxlarge-up, .visible-for-xxlarge, .hidden-for-xxlarge-down { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + + table.hide-for-small-only, table.show-for-small-up, table.hide-for-small, table.hide-for-small-down, table.hide-for-medium-only, table.show-for-medium-up, table.hide-for-medium, table.hide-for-medium-down, table.show-for-large-only, table.show-for-large-up, table.show-for-large, table.show-for-large-down, table.hide-for-xlarge-only, table.hide-for-xlarge-up, table.hide-for-xlarge, table.show-for-xlarge-down, table.hide-for-xxlarge-only, table.hide-for-xxlarge-up, table.hide-for-xxlarge, table.show-for-xxlarge-down { + display: table !important; } + + thead.hide-for-small-only, thead.show-for-small-up, thead.hide-for-small, thead.hide-for-small-down, thead.hide-for-medium-only, thead.show-for-medium-up, thead.hide-for-medium, thead.hide-for-medium-down, thead.show-for-large-only, thead.show-for-large-up, thead.show-for-large, thead.show-for-large-down, thead.hide-for-xlarge-only, thead.hide-for-xlarge-up, thead.hide-for-xlarge, thead.show-for-xlarge-down, thead.hide-for-xxlarge-only, thead.hide-for-xxlarge-up, thead.hide-for-xxlarge, thead.show-for-xxlarge-down { + display: table-header-group !important; } + + tbody.hide-for-small-only, tbody.show-for-small-up, tbody.hide-for-small, tbody.hide-for-small-down, tbody.hide-for-medium-only, tbody.show-for-medium-up, tbody.hide-for-medium, tbody.hide-for-medium-down, tbody.show-for-large-only, tbody.show-for-large-up, tbody.show-for-large, tbody.show-for-large-down, tbody.hide-for-xlarge-only, tbody.hide-for-xlarge-up, tbody.hide-for-xlarge, tbody.show-for-xlarge-down, tbody.hide-for-xxlarge-only, tbody.hide-for-xxlarge-up, tbody.hide-for-xxlarge, tbody.show-for-xxlarge-down { + display: table-row-group !important; } + + tr.hide-for-small-only, tr.show-for-small-up, tr.hide-for-small, tr.hide-for-small-down, tr.hide-for-medium-only, tr.show-for-medium-up, tr.hide-for-medium, tr.hide-for-medium-down, tr.show-for-large-only, tr.show-for-large-up, tr.show-for-large, tr.show-for-large-down, tr.hide-for-xlarge-only, tr.hide-for-xlarge-up, tr.hide-for-xlarge, tr.show-for-xlarge-down, tr.hide-for-xxlarge-only, tr.hide-for-xxlarge-up, tr.hide-for-xxlarge, tr.show-for-xxlarge-down { + display: table-row; } + + th.hide-for-small-only, td.hide-for-small-only, th.show-for-small-up, td.show-for-small-up, th.hide-for-small, td.hide-for-small, th.hide-for-small-down, td.hide-for-small-down, th.hide-for-medium-only, td.hide-for-medium-only, th.show-for-medium-up, td.show-for-medium-up, th.hide-for-medium, td.hide-for-medium, th.hide-for-medium-down, td.hide-for-medium-down, th.show-for-large-only, td.show-for-large-only, th.show-for-large-up, td.show-for-large-up, th.show-for-large, td.show-for-large, th.show-for-large-down, td.show-for-large-down, th.hide-for-xlarge-only, td.hide-for-xlarge-only, th.hide-for-xlarge-up, td.hide-for-xlarge-up, th.hide-for-xlarge, td.hide-for-xlarge, th.show-for-xlarge-down, td.show-for-xlarge-down, th.hide-for-xxlarge-only, td.hide-for-xxlarge-only, th.hide-for-xxlarge-up, td.hide-for-xxlarge-up, th.hide-for-xxlarge, td.hide-for-xxlarge, th.show-for-xxlarge-down, td.show-for-xxlarge-down { + display: table-cell !important; } } +/* xlarge displays */ +@media only screen and (min-width: 90.063em) { + .hide-for-small-only, .show-for-small-up, .hide-for-small, .hide-for-small-down, .hide-for-medium-only, .show-for-medium-up, .hide-for-medium, .hide-for-medium-down, .hide-for-large-only, .show-for-large-up, .hide-for-large, .hide-for-large-down, .show-for-xlarge-only, .show-for-xlarge-up, .show-for-xlarge, .show-for-xlarge-down, .hide-for-xxlarge-only, .hide-for-xxlarge-up, .hide-for-xxlarge, .show-for-xxlarge-down { + display: inherit !important; } + + .show-for-small-only, .hide-for-small-up, .show-for-small, .show-for-small-down, .show-for-medium-only, .hide-for-medium-up, .show-for-medium, .show-for-medium-down, .show-for-large-only, .hide-for-large-up, .show-for-large, .show-for-large-down, .hide-for-xlarge-only, .hide-for-xlarge-up, .hide-for-xlarge, .hide-for-xlarge-down, .show-for-xxlarge-only, .show-for-xxlarge-up, .show-for-xxlarge, .hide-for-xxlarge-down { + display: none !important; } + + .hidden-for-small-only, .visible-for-small-up, .hidden-for-small, .hidden-for-small-down, .hidden-for-medium-only, .visible-for-medium-up, .hidden-for-medium, .hidden-for-medium-down, .hidden-for-large-only, .visible-for-large-up, .hidden-for-large, .hidden-for-large-down, .visible-for-xlarge-only, .visible-for-xlarge-up, .visible-for-xlarge, .visible-for-xlarge-down, .hidden-for-xxlarge-only, .hidden-for-xxlarge-up, .hidden-for-xxlarge, .visible-for-xxlarge-down { + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; } + + .visible-for-small-only, .hidden-for-small-up, .visible-for-small, .visible-for-small-down, .visible-for-medium-only, .hidden-for-medium-up, .visible-for-medium, .visible-for-medium-down, .visible-for-large-only, .hidden-for-large-up, .visible-for-large, .visible-for-large-down, .hidden-for-xlarge-only, .hidden-for-xlarge-up, .hidden-for-xlarge, .hidden-for-xlarge-down, .visible-for-xxlarge-only, .visible-for-xxlarge-up, .visible-for-xxlarge, .hidden-for-xxlarge-down { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + + table.hide-for-small-only, table.show-for-small-up, table.hide-for-small, table.hide-for-small-down, table.hide-for-medium-only, table.show-for-medium-up, table.hide-for-medium, table.hide-for-medium-down, table.hide-for-large-only, table.show-for-large-up, table.hide-for-large, table.hide-for-large-down, table.show-for-xlarge-only, table.show-for-xlarge-up, table.show-for-xlarge, table.show-for-xlarge-down, table.hide-for-xxlarge-only, table.hide-for-xxlarge-up, table.hide-for-xxlarge, table.show-for-xxlarge-down { + display: table !important; } + + thead.hide-for-small-only, thead.show-for-small-up, thead.hide-for-small, thead.hide-for-small-down, thead.hide-for-medium-only, thead.show-for-medium-up, thead.hide-for-medium, thead.hide-for-medium-down, thead.hide-for-large-only, thead.show-for-large-up, thead.hide-for-large, thead.hide-for-large-down, thead.show-for-xlarge-only, thead.show-for-xlarge-up, thead.show-for-xlarge, thead.show-for-xlarge-down, thead.hide-for-xxlarge-only, thead.hide-for-xxlarge-up, thead.hide-for-xxlarge, thead.show-for-xxlarge-down { + display: table-header-group !important; } + + tbody.hide-for-small-only, tbody.show-for-small-up, tbody.hide-for-small, tbody.hide-for-small-down, tbody.hide-for-medium-only, tbody.show-for-medium-up, tbody.hide-for-medium, tbody.hide-for-medium-down, tbody.hide-for-large-only, tbody.show-for-large-up, tbody.hide-for-large, tbody.hide-for-large-down, tbody.show-for-xlarge-only, tbody.show-for-xlarge-up, tbody.show-for-xlarge, tbody.show-for-xlarge-down, tbody.hide-for-xxlarge-only, tbody.hide-for-xxlarge-up, tbody.hide-for-xxlarge, tbody.show-for-xxlarge-down { + display: table-row-group !important; } + + tr.hide-for-small-only, tr.show-for-small-up, tr.hide-for-small, tr.hide-for-small-down, tr.hide-for-medium-only, tr.show-for-medium-up, tr.hide-for-medium, tr.hide-for-medium-down, tr.hide-for-large-only, tr.show-for-large-up, tr.hide-for-large, tr.hide-for-large-down, tr.show-for-xlarge-only, tr.show-for-xlarge-up, tr.show-for-xlarge, tr.show-for-xlarge-down, tr.hide-for-xxlarge-only, tr.hide-for-xxlarge-up, tr.hide-for-xxlarge, tr.show-for-xxlarge-down { + display: table-row; } + + th.hide-for-small-only, td.hide-for-small-only, th.show-for-small-up, td.show-for-small-up, th.hide-for-small, td.hide-for-small, th.hide-for-small-down, td.hide-for-small-down, th.hide-for-medium-only, td.hide-for-medium-only, th.show-for-medium-up, td.show-for-medium-up, th.hide-for-medium, td.hide-for-medium, th.hide-for-medium-down, td.hide-for-medium-down, th.hide-for-large-only, td.hide-for-large-only, th.show-for-large-up, td.show-for-large-up, th.hide-for-large, td.hide-for-large, th.hide-for-large-down, td.hide-for-large-down, th.show-for-xlarge-only, td.show-for-xlarge-only, th.show-for-xlarge-up, td.show-for-xlarge-up, th.show-for-xlarge, td.show-for-xlarge, th.show-for-xlarge-down, td.show-for-xlarge-down, th.hide-for-xxlarge-only, td.hide-for-xxlarge-only, th.hide-for-xxlarge-up, td.hide-for-xxlarge-up, th.hide-for-xxlarge, td.hide-for-xxlarge, th.show-for-xxlarge-down, td.show-for-xxlarge-down { + display: table-cell !important; } } +/* xxlarge displays */ +@media only screen and (min-width: 120.063em) { + .hide-for-small-only, .show-for-small-up, .hide-for-small, .hide-for-small-down, .hide-for-medium-only, .show-for-medium-up, .hide-for-medium, .hide-for-medium-down, .hide-for-large-only, .show-for-large-up, .hide-for-large, .hide-for-large-down, .hide-for-xlarge-only, .show-for-xlarge-up, .hide-for-xlarge, .hide-for-xlarge-down, .show-for-xxlarge-only, .show-for-xxlarge-up, .show-for-xxlarge, .show-for-xxlarge-down { + display: inherit !important; } + + .show-for-small-only, .hide-for-small-up, .show-for-small, .show-for-small-down, .show-for-medium-only, .hide-for-medium-up, .show-for-medium, .show-for-medium-down, .show-for-large-only, .hide-for-large-up, .show-for-large, .show-for-large-down, .show-for-xlarge-only, .hide-for-xlarge-up, .show-for-xlarge, .show-for-xlarge-down, .hide-for-xxlarge-only, .hide-for-xxlarge-up, .hide-for-xxlarge, .hide-for-xxlarge-down { + display: none !important; } + + .hidden-for-small-only, .visible-for-small-up, .hidden-for-small, .hidden-for-small-down, .hidden-for-medium-only, .visible-for-medium-up, .hidden-for-medium, .hidden-for-medium-down, .hidden-for-large-only, .visible-for-large-up, .hidden-for-large, .hidden-for-large-down, .hidden-for-xlarge-only, .visible-for-xlarge-up, .hidden-for-xlarge, .hidden-for-xlarge-down, .visible-for-xxlarge-only, .visible-for-xxlarge-up, .visible-for-xxlarge, .visible-for-xxlarge-down { + position: static !important; + height: auto; + width: auto; + overflow: visible; + clip: auto; } + + .visible-for-small-only, .hidden-for-small-up, .visible-for-small, .visible-for-small-down, .visible-for-medium-only, .hidden-for-medium-up, .visible-for-medium, .visible-for-medium-down, .visible-for-large-only, .hidden-for-large-up, .visible-for-large, .visible-for-large-down, .visible-for-xlarge-only, .hidden-for-xlarge-up, .visible-for-xlarge, .visible-for-xlarge-down, .hidden-for-xxlarge-only, .hidden-for-xxlarge-up, .hidden-for-xxlarge, .hidden-for-xxlarge-down { + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); } + + table.hide-for-small-only, table.show-for-small-up, table.hide-for-small, table.hide-for-small-down, table.hide-for-medium-only, table.show-for-medium-up, table.hide-for-medium, table.hide-for-medium-down, table.hide-for-large-only, table.show-for-large-up, table.hide-for-large, table.hide-for-large-down, table.hide-for-xlarge-only, table.show-for-xlarge-up, table.hide-for-xlarge, table.hide-for-xlarge-down, table.show-for-xxlarge-only, table.show-for-xxlarge-up, table.show-for-xxlarge, table.show-for-xxlarge-down { + display: table !important; } + + thead.hide-for-small-only, thead.show-for-small-up, thead.hide-for-small, thead.hide-for-small-down, thead.hide-for-medium-only, thead.show-for-medium-up, thead.hide-for-medium, thead.hide-for-medium-down, thead.hide-for-large-only, thead.show-for-large-up, thead.hide-for-large, thead.hide-for-large-down, thead.hide-for-xlarge-only, thead.show-for-xlarge-up, thead.hide-for-xlarge, thead.hide-for-xlarge-down, thead.show-for-xxlarge-only, thead.show-for-xxlarge-up, thead.show-for-xxlarge, thead.show-for-xxlarge-down { + display: table-header-group !important; } + + tbody.hide-for-small-only, tbody.show-for-small-up, tbody.hide-for-small, tbody.hide-for-small-down, tbody.hide-for-medium-only, tbody.show-for-medium-up, tbody.hide-for-medium, tbody.hide-for-medium-down, tbody.hide-for-large-only, tbody.show-for-large-up, tbody.hide-for-large, tbody.hide-for-large-down, tbody.hide-for-xlarge-only, tbody.show-for-xlarge-up, tbody.hide-for-xlarge, tbody.hide-for-xlarge-down, tbody.show-for-xxlarge-only, tbody.show-for-xxlarge-up, tbody.show-for-xxlarge, tbody.show-for-xxlarge-down { + display: table-row-group !important; } + + tr.hide-for-small-only, tr.show-for-small-up, tr.hide-for-small, tr.hide-for-small-down, tr.hide-for-medium-only, tr.show-for-medium-up, tr.hide-for-medium, tr.hide-for-medium-down, tr.hide-for-large-only, tr.show-for-large-up, tr.hide-for-large, tr.hide-for-large-down, tr.hide-for-xlarge-only, tr.show-for-xlarge-up, tr.hide-for-xlarge, tr.hide-for-xlarge-down, tr.show-for-xxlarge-only, tr.show-for-xxlarge-up, tr.show-for-xxlarge, tr.show-for-xxlarge-down { + display: table-row; } + + th.hide-for-small-only, td.hide-for-small-only, th.show-for-small-up, td.show-for-small-up, th.hide-for-small, td.hide-for-small, th.hide-for-small-down, td.hide-for-small-down, th.hide-for-medium-only, td.hide-for-medium-only, th.show-for-medium-up, td.show-for-medium-up, th.hide-for-medium, td.hide-for-medium, th.hide-for-medium-down, td.hide-for-medium-down, th.hide-for-large-only, td.hide-for-large-only, th.show-for-large-up, td.show-for-large-up, th.hide-for-large, td.hide-for-large, th.hide-for-large-down, td.hide-for-large-down, th.hide-for-xlarge-only, td.hide-for-xlarge-only, th.show-for-xlarge-up, td.show-for-xlarge-up, th.hide-for-xlarge, td.hide-for-xlarge, th.hide-for-xlarge-down, td.hide-for-xlarge-down, th.show-for-xxlarge-only, td.show-for-xxlarge-only, th.show-for-xxlarge-up, td.show-for-xxlarge-up, th.show-for-xxlarge, td.show-for-xxlarge, th.show-for-xxlarge-down, td.show-for-xxlarge-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 visibility for tables */ +table.hide-for-landscape, table.show-for-portrait { + display: table !important; } + +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 visibility for tables */ + table.show-for-landscape, table.hide-for-portrait { + display: table !important; } + + 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 visibility for tables */ + table.show-for-portrait, table.hide-for-landscape { + display: table !important; } + + 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 visibility for tables */ +table.hide-for-touch { + display: table !important; } + +.touch table.show-for-touch { + display: table !important; } + +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; } + +/* + * 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: #000000 !important; + /* Black prints faster: h5bp.com/s */ + box-shadow: none !important; + text-shadow: none !important; } + + .show-for-print { + display: block; } + + .hide-for-print { + display: none; } + + table.show-for-print { + display: table !important; } + + thead.show-for-print { + display: table-header-group !important; } + + tbody.show-for-print { + display: table-row-group !important; } + + tr.show-for-print { + display: table-row !important; } + + td.show-for-print { + display: table-cell !important; } + + th.show-for-print { + display: table-cell !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 #999999; + 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; } } +/* Print visibility */ +@media print { + .show-for-print { + display: block; } + + .hide-for-print { + display: none; } + + table.show-for-print { + display: table !important; } + + thead.show-for-print { + display: table-header-group !important; } + + tbody.show-for-print { + display: table-row-group !important; } + + tr.show-for-print { + display: table-row !important; } + + td.show-for-print { + display: table-cell !important; } + + th.show-for-print { + display: table-cell !important; } } + +/*# sourceMappingURL=foundation.css.map */ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/foundation.css.map b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/foundation.css.map new file mode 100644 index 00000000..c1dcaaaa --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/foundation.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "AA2VE,uBAAwB;EACtB,WAAW,EAAE,eAAe;;AAG9B,wBAAyB;EACvB,WAAW,EAAE,eAA8B;EAC3C,KAAK,EAvDM,CAAC;;AA0Dd,6BAA8B;EAC5B,WAAW,EAAE,qCAAgC;EAC7C,KAAK,EA5DM,CAAC;;AA+Dd,yBAA0B;EACxB,WAAW,EAAE,wCAA+B;EAC5C,KAAK,EAhEO,QAAQ;;AAmEtB,8BAA+B;EAC7B,WAAW,EAAE,6DAAiC;EAC9C,KAAK,EArEO,QAAQ;;AAwEtB,wBAAyB;EACvB,WAAW,EAAE,wCAA8B;EAC3C,KAAK,EAzEM,QAAQ;;AA4ErB,6BAA8B;EAC5B,WAAW,EAAE,6DAAgC;EAC7C,KAAK,EA9EM,QAAQ;;AAiFrB,yBAA0B;EACxB,WAAW,EAAE,wCAA+B;EAC5C,KAAK,EAlFO,QAAQ;;AAqFtB,8BAA+B;EAC7B,WAAW,EAAE,8DAAiC;EAC9C,KAAK,EAvFO,QAAQ;;AA0FtB,0BAA2B;EACzB,WAAW,EAAE,yCAAgC;EAC7C,KAAK,EA3FQ,SAAS;;AA8FxB,wCAAyC;EACvC,WAAW,EAAE,KAAa;;AAM1B,UAAW;EAAE,MAAM,EAAE,IAAI;;AAGzB;;OAEQ;EAvUV,kBAAkB,EAwUM,UAAU;EAvU/B,eAAe,EAuUM,UAAU;EAtU1B,UAAU,EAsUM,UAAU;;AAGhC;IACK;EAAE,SAAS,EA1YH,IAAI;;AA6YjB,IAAK;EACH,UAAU,EA7JN,IAAI;EA8JR,KAAK,EA7JO,IAAI;EA8JhB,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EACT,WAAW,EA/JE,sDAAuB;EAgKpC,WAAW,EA/JE,MAAmB;EAgKhC,UAAU,EA/JE,MAAM;EAgKlB,WAAW,EAlZE,GAAG;EAmZhB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EA9FQ,IAAI;;AAiGtB,OAAQ;EAAE,MAAM,EA7FK,OAAO;;AAgG1B,GAAI;EAAE,SAAS,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;;AAEnC,GAAI;EAAE,sBAAsB,EAAE,OAAO;;AAInC;;;;;kBAEO;EAAE,SAAS,EAAE,eAAe;;AAKrC,KAAM;EAAE,KAAK,EAAE,eAAe;;AAC9B,MAAO;EAAE,KAAK,EAAE,gBAAgB;;AAnRlC,iCAAkB;EAAE,OAAO,EAAE,GAAG;EAAE,OAAO,EAAE,KAAK;AAChD,eAAQ;EAAE,KAAK,EAAE,IAAI;;AAsRnB,KAAM;EACJ,OAAO,EAAE,IAAI;;AAIf,UAAW;EAAE,UAAU,EAAE,MAAM;;AAM/B,YAAa;EAAE,sBAAsB,EAAE,WAAW;EAAE,uBAAuB,EAAE,SAAS;;AAGtF,GAAI;EACF,OAAO,EAAE,YAAY;EACrB,cAAc,EAAE,MAAM;;AAQxB,QAAS;EAAE,MAAM,EAAE,IAAI;EAAE,UAAU,EAAE,IAAI;;AAGzC,MAAO;EAAE,KAAK,EAAE,IAAI;;ACtPpB,IAAK;EAjKL,KAAK,EAAE,IAAI;EACX,WAAwB,EAAE,IAAI;EAC9B,YAA6B,EAAE,IAAI;EACnC,UAAU,EAAE,CAAC;EACb,aAAa,EAAE,CAAC;EAChB,SAAS,EA/DD,OAAc;ED+JxB,uBAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,UAAQ;IAAE,KAAK,EAAE,IAAI;EC+Dd;0BACW;IA7HhB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;EA8HZ,kBAAK;IAAC,WAAW,EAAC,CAAC;IAAE,YAAY,EAAC,CAAC;EAGrC,SAAK;IAnMP,KAAK,EAAE,IAAI;IACX,WAAwB,EAAE,UAAmB;IAC7C,YAA6B,EAAE,UAAmB;IAClD,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;IAChB,SAAS,EAAE,IAAI;IDwHjB,iCAAkB;MAAE,OAAO,EAAE,GAAG;MAAE,OAAO,EAAE,KAAK;IAChD,eAAQ;MAAE,KAAK,EAAE,IAAI;ICsEf,kBAAW;MAnLf,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,CAAC;MACT,SAAS,EAAE,IAAI;MD0GjB,mDAAkB;QAAE,OAAO,EAAE,GAAG;QAAE,OAAO,EAAE,KAAK;MAChD,wBAAQ;QAAE,KAAK,EAAE,IAAI;;AC0EnB;QACS;EAjIT,YAAY,EAAE,SAAoB;EAClC,aAAa,EAAE,SAAoB;EAKnC,KAAK,EAAE,IAAmC;EAWH,KAAK,ED2I9B,IAAI;;ACzBlB,gDAAiD;EAAE,KAAK,EA1OzC,KAAmB;;AA2OlC,yCAA0C;EAAE,KAAK,EDwBnC,IAAI;;ACtBlB,kBAAoB;EA9FpB,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,EAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,EAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,QAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,QAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAkC7F;UACS;IA7DP,QAAQ,EAAE,QAAQ;IAYlB,YAAY,EAAE,SAAoB;IAClC,aAAa,EAAE,SAAoB;IAgBI,KAAK,ED2I9B,IAAI;;ECvGlB,QAAgB;IA/ChB,KAAK,EAAE,QAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,IAAmC;;EAmD1C,eAAuB;IA3BX,WAAwB,EAAE,aAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,mBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA8BrF,kBAAsB;IACpB,WAAwB,EAAE,CAAC;IAC3B,YAA6B,EAAE,CAAC;IAChC,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,ED2FS,IAAI;;ECxFpB;yBAC2B;IA7CzB,WAAwB,EAAE,IAAI;IAC9B,YAA6B,EAAE,IAAI;IACnC,KAAK,EAAE,IAAI;;EA6Cb;2BAC6B;IAC3B,WAAwB,EAAE,CAAC;IAC3B,YAA6B,EAAE,CAAC;IAChC,KAAK,EDiFS,IAAI;;EC7EpB;oCACqC;IACnC,KAAK,EAAE,IAAI;;EAIb;sCACwC;IACtC,KAAK,EDqES,IAAI;;EClEpB;oCACsC;IACpC,KAAK,EAnMU,KAAmB;;EAwMnC;gCACW;IAzGV,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;EA0GjB,wBAAK;IAAC,WAAW,EAAC,CAAC;IAAE,YAAY,EAAC,CAAC;EAGnC;kCACW;IAxGV,YAAY,EAAE,SAAoB;IAClC,aAAa,EAAE,SAAoB;IAgBI,KAAK,ED2I9B,IAAI;AClBlB,4CAAqB;EAlGrB,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,EAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,EAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,QAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,QAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,eAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,eAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,eAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,eAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAkC7F;UACS;IA7DP,QAAQ,EAAE,QAAQ;IAYlB,YAAY,EAAE,SAAoB;IAClC,aAAa,EAAE,SAAoB;IAgBI,KAAK,ED2I9B,IAAI;;ECvGlB,SAAgB;IA/ChB,KAAK,EAAE,QAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,UAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,UAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,UAAgB;IA/ChB,KAAK,EAAE,IAAmC;;EAmD1C,gBAAuB;IA3BX,WAAwB,EAAE,aAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,mBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,iBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,iBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA8BrF,mBAAsB;IACpB,WAAwB,EAAE,CAAC;IAC3B,YAA6B,EAAE,CAAC;IAChC,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,ED2FS,IAAI;;ECxFpB;0BAC2B;IA7CzB,WAAwB,EAAE,IAAI;IAC9B,YAA6B,EAAE,IAAI;IACnC,KAAK,EAAE,IAAI;;EA6Cb;4BAC6B;IAC3B,WAAwB,EAAE,CAAC;IAC3B,YAA6B,EAAE,CAAC;IAChC,KAAK,EDiFS,IAAI;;EC7EpB;qCACqC;IACnC,KAAK,EAAE,IAAI;;EAIb;uCACwC;IACtC,KAAK,EDqES,IAAI;;EClEpB;qCACsC;IACpC,KAAK,EAnMU,KAAmB;;EAwMnC;iCACW;IAzGV,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;EA0GjB,yBAAK;IAAC,WAAW,EAAC,CAAC;IAAE,YAAY,EAAC,CAAC;EAGnC;mCACW;IAxGV,YAAY,EAAE,SAAoB;IAClC,aAAa,EAAE,SAAoB;IAgBI,KAAK,ED2I9B,IAAI;;ECdd,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,EAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,EAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,QAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,QAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,OAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,OAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,QAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,QAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAgIvF,QAAY;IA1JhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EAoIvF,QAAY;IA7JhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;AAwI3F,4CAAoB;EA9GpB,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,EAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,EAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,QAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,QAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,aAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,aAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA0B3F,cAAqB;IApDrB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA8B3F,cAAqB;IAvDrB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EAkC7F;UACS;IA7DP,QAAQ,EAAE,QAAQ;IAYlB,YAAY,EAAE,SAAoB;IAClC,aAAa,EAAE,SAAoB;IAgBI,KAAK,ED2I9B,IAAI;;ECvGlB,QAAgB;IA/ChB,KAAK,EAAE,QAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,QAAgB;IA/ChB,KAAK,EAAE,GAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,SAAmC;;EA+C1C,SAAgB;IA/ChB,KAAK,EAAE,IAAmC;;EAmD1C,eAAuB;IA3BX,WAAwB,EAAE,aAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,mBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,eAAuB;IA3BX,WAAwB,EAAE,cAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA2BnF,gBAAuB;IA3BX,WAAwB,EAAE,oBAA6C;;EA8BrF,kBAAsB;IACpB,WAAwB,EAAE,CAAC;IAC3B,YAA6B,EAAE,CAAC;IAChC,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,ED2FS,IAAI;;ECxFpB;yBAC2B;IA7CzB,WAAwB,EAAE,IAAI;IAC9B,YAA6B,EAAE,IAAI;IACnC,KAAK,EAAE,IAAI;;EA6Cb;2BAC6B;IAC3B,WAAwB,EAAE,CAAC;IAC3B,YAA6B,EAAE,CAAC;IAChC,KAAK,EDiFS,IAAI;;EC7EpB;oCACqC;IACnC,KAAK,EAAE,IAAI;;EAIb;sCACwC;IACtC,KAAK,EDqES,IAAI;;EClEpB;oCACsC;IACpC,KAAK,EAnMU,KAAmB;;EAwMnC;gCACW;IAzGV,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;EA0GjB,wBAAK;IAAC,WAAW,EAAC,CAAC;IAAE,YAAY,EAAC,CAAC;EAGnC;kCACW;IAxGV,YAAY,EAAE,SAAoB;IAClC,aAAa,EAAE,SAAoB;IAgBI,KAAK,ED2I9B,IAAI;;ECHd,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,EAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,EAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,QAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,QAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,OAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,GAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,OAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,GAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,QAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,QAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;;EA2IvF,QAAY;IArKhB,QAAQ,EAAE,QAAQ;IAyBR,IAAiB,EAAE,SAAgC;IAAE,KAAsB,EAAE,IAAI;;EA+IvF,QAAY;IAxKhB,QAAQ,EAAE,QAAQ;IA0BR,KAAsB,EAAE,SAAgC;IAAE,IAAiB,EAAE,IAAI;ACJ3F,UAAW;EAET,aAAa,EAAE,CAAC;EFyCpB,mCAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,gBAAQ;IAAE,KAAK,EAAE,IAAI;EEzCjB,+CAA0B;IACxB,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,YAAY;IAC3B,qEAAa;MAAE,UAAU,EAvHM,OAA4D;IAwH3F,uDAAI;MACF,UAAU,EA3HY,OAAO;MA4H7B,KAAK,EAzHmB,OAAI;MA0H5B,OAAO,EA9Hc,IAAY;MA+HjC,OAAO,EAAE,KAAK;MACd,WAAW,EA1Hc,sDAAiB;MA2H1C,SAAS,EA5Hc,IAAY;MA6HnC,mEAAQ;QAAE,UAAU,EAhIQ,OAA4D;IAmI1F,qEAAW;MACT,OAAO,EAAE,IAAI;MACb,OAAO,EA/HY,SAAgB;MAgInC,mFAAS;QACP,OAAO,EAAE,KAAK;QACd,UAAU,EAjIc,OAAM;;AC0FtC,UAAW;EAzDb,YAAY,EA3BO,KAAK;EA4BxB,YAAY,EA3BO,GAAG;EA4BtB,OAAO,EAAE,KAAK;EACd,WAAW,EAvCO,MAAmB;EAwCrC,aAAa,EA5BO,OAAY;EA6BhC,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,iCAAuG;EAChH,SAAS,EA1CO,SAAY;EHuD5B,UAAU,EAAE,sBAAsB;EGAlC,gBAAgB,EHyKF,OAAO;EGxKrB,YAAY,EAAE,OAAoD;EAIxC,KAAK,EA3Dd,OAAM;EA8FnB,iBAAY;IA7BhB,SAAS,EAjDa,QAAY;IAkDlC,OAAO,EA/Ca,SAAU;IAgD9B,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAvDa,GAAG;IAwDnB,UAAU,EAAE,UAA6B;IACzC,KAAsB,EAxDD,OAAW;IAyDhC,KAAK,EA3Da,OAAI;IA4DtB,OAAO,EAxDa,GAAG;IAyDvB,UAAU,EAtDa,OAAO;IAuD9B,gDACQ;MAAE,OAAO,EA1DS,GAAG;EA8EzB,iBAAY;IHlFd,aAAa,EGSF,GAAc;EA0EvB,gBAAY;IHnFd,aAAa,EAyPA,MAAM;EGpKjB,kBAAY;IA7ChB,gBAAgB,EH4KF,OAAO;IG3KrB,YAAY,EAAE,OAAoD;IAIxC,KAAK,EA3Dd,OAAM;EAoGnB,gBAAY;IA9ChB,gBAAgB,EH2KJ,OAAO;IG1KnB,YAAY,EAAE,OAAoD;IAIxC,KAAK,EA3Dd,OAAM;EAqGnB,oBAAY;IA/ChB,gBAAgB,EH0KA,OAAO;IGzKvB,YAAY,EAAE,OAAoD;IAGxC,KAAK,EAzDV,OAA+C;EAqGhE,kBAAU;IAhDd,gBAAgB,EH6KF,OAAO;IG5KrB,YAAY,EAAE,OAAoD;IAIxC,KAAK,EA3Dd,OAAM;EAuGnB,eAAO;IAjDX,gBAAgB,EH8KL,OAAO;IG7KlB,YAAY,EAAE,OAAoD;IAGxC,KAAK,EAzDV,OAA+C;EAuGhE,sBAAc;IAAE,OAAO,EAAE,CAAC;;AClB5B,sBAAuB;EAjEvB,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,CAAC;EAIR,MAAM,EAAE,WAAe;EJ6H3B,2DAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,4BAAQ;IAAE,KAAK,EAAE,IAAI;EI1HnB,2BAAK;IACH,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,KAAK,EJ6NO,IAAI;II3Nd,OAAO,EAAE,kBAAuB;;AAsDlC,kBAAoB;EAhDtB,wBAAK;IACH,KAAK,EAAE,IAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,KAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,4CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,QAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,4CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,QAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,4CAA8B;MAAE,KAAK,EAAE,IAAI;AA4C3C,4CAAqB;EApDvB,yBAAK;IACH,KAAK,EAAE,IAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,KAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,2CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,0BAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,0CAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,6CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,0BAAK;IACH,KAAK,EAAE,QAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,0CAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,6CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,0BAAK;IACH,KAAK,EAAE,QAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,0CAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,6CAA8B;MAAE,KAAK,EAAE,IAAI;AAgD3C,4CAAoB;EAxDtB,wBAAK;IACH,KAAK,EAAE,IAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,KAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,wBAAK;IACH,KAAK,EAAE,SAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,wCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,0CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,GAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,4CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,QAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,4CAA8B;MAAE,KAAK,EAAE,IAAI;;EAR7C,yBAAK;IACH,KAAK,EAAE,QAAa;IAIpB,UAAU,EAAE,IAAI;IAEhB,yCAAkB;MAAE,KAAK,EAAE,IAAI;IAC/B,4CAA8B;MAAE,KAAK,EAAE,IAAI;ACgD7C,YAAa;EA1Ef,OAAO,EAAE,KAAK;EACd,OAAO,EA7BO,4BAAgB;EA8B9B,QAAQ,EAAE,MAAM;EAChB,WAAwB,EAAE,CAAC;EAC3B,UAAU,EAAE,IAAI;EAChB,YAAY,EA3BO,KAAK;EA4BxB,YAAY,EA7BM,GAAG;EAgCrB,gBAAgB,EAxCP,OAA8C;EAyCvD,YAAY,EA/BO,SAA0D;ELY3E,aAAa,EKXF,GAAc;EAkGvB,gBAAI;IA7DR,MAAM,EAAE,CAAC;IACT,KAAK,ELqNW,IAAI;IKpNpB,SAAS,EApCO,SAAY;IAqC5B,WAAW,EArCK,SAAY;IAsC5B,cAAc,EAlCO,SAAS;IAmC9B,KAAK,EAtCY,OAAc;IAwC/B,kDAAqB;MAAE,eAAe,EApCrB,SAAS;IAsC1B,kBAAE;MACA,KAAK,EA3CU,OAAc;IA+C/B,wBAAU;MACR,MAAM,ELmQa,OAAO;MKlQ1B,KAAK,EAhDkB,OAAI;MAiD3B,0BAAE;QACA,MAAM,ELgQW,OAAO;QK/PxB,KAAK,EAnDgB,OAAI;MAsD3B,kIACmB;QAAE,eAAe,EAAE,IAAI;IAI5C,4BAAc;MACZ,KAAK,EA3DsB,OAAS;MA4DpC,8BAAE;QAAE,KAAK,EA5DkB,OAAS;MA8DpC;0CAGQ;QACN,eAAe,EAAE,IAAI;QACrB,KAAK,EAnEoB,OAAS;QAoElC,MAAM,EL8OY,WAAW;IK1OjC,uBAAS;MACP,OAAO,EAAE,GAAiB;MAC1B,KAAK,EArEW,OAAK;MAsErB,MAAM,EAAE,SAAqB;MAC7B,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAG;IAGV,mCAAqB;MACnB,OAAO,EAAE,GAAG;MACZ,MAAM,EAAE,CAAC;;;AAkBb,qDAAsD;EACpD,OAAO,EAAE,GAAG;;ACsFV,eAAgB;EAjJhB,YAAY,EAlCM,KAAK;EAmCvB,YAAY,EApCM,CAAC;EAqCnB,MAAM,ENuQa,OAAO;EMtQ1B,WAAW,EApDM,sDAAiB;EAqDlC,WAAW,EA9CM,MAAmB;EA+CpC,WAAW,EAAE,MAAM;EACnB,MAAM,EAAE,WAAyB;EACjC,QAAQ,EAAE,QAAQ;EAClB,eAAe,EAAE,IAAI;EACrB,UAAU,EAlDM,MAAM;EAmDtB,kBAAkB,EAAE,IAAI;EACxB,eAAe,EAAE,IAAI;EACrB,aAAa,EAAC,CAAC;EAEF,OAAO,EAnEP,YAAY;EAkFzB,WAAW,EAtFF,IAAY;EAuFrB,aAA8B,EAAE,IAAY;EAC5C,cAAc,EAAE,SAAsB;EACtC,YAAyB,EAAE,IAAY;EAGJ,SAAS,EA/E9B,IAAY;EAoI1B,gBAAgB,EAzHF,OAAc;EA0H5B,YAAY,EARK,OAAwG;EAazH,KAAK,EA9IW,OAAM;ENmDxB,UAAU,EAAE,+BAAsB;EMuFhC,wDACQ;IAAE,gBAAgB,EAVT,OAAwG;EAezH,wDACQ;IACN,KAAK,EAlJS,OAAM;EAwMpB,mCAAY;IAhEd,gBAAgB,ENqFF,OAAO;IMpFrB,YAAY,EAtHgB,OAA0B;IA2HtD,KAAK,EA7Ie,OAAI;IAyIxB,gGACQ;MAAE,gBAAgB,EAxHE,OAA0B;IA6HtD,gGACQ;MACN,KAAK,EAjJa,OAAI;EAwMtB,+BAAY;IAjEd,gBAAgB,ENuFJ,OAAO;IMtFnB,YAAY,EApHc,OAAwB;IAyHlD,KAAK,EA9IW,OAAM;IA0ItB,wFACQ;MAAE,gBAAgB,EAtHA,OAAwB;IA2HlD,wFACQ;MACN,KAAK,EAlJS,OAAM;EA0MpB,2BAAY;IAlEd,gBAAgB,ENsFN,OAAO;IMrFjB,YAAY,EAlHY,OAAsB;IAuH9C,KAAK,EA9IW,OAAM;IA0ItB,gFACQ;MAAE,gBAAgB,EApHF,OAAsB;IAyH9C,gFACQ;MACN,KAAK,EAlJS,OAAM;EA2MpB,+BAAY;IAnEd,gBAAgB,ENwFJ,OAAO;IMvFnB,YAAY,EAhHc,OAAwB;IAqHlD,KAAK,EA9IW,OAAM;IA0ItB,wFACQ;MAAE,gBAAgB,EAlHA,OAAwB;IAuHlD,wFACQ;MACN,KAAK,EAlJS,OAAM;EA4MpB,yBAAY;IApEd,gBAAgB,ENyFP,OAAO;IMxFhB,YAAY,EA9GW,OAAqB;IAmH5C,KAAK,EA7Ie,OAAI;IAyIxB,4EACQ;MAAE,gBAAgB,EAhHH,OAAqB;IAqH5C,4EACQ;MACN,KAAK,EAlJS,OAAM;EA8MpB,2BAAS;IAjIX,WAAW,EArFF,QAAY;IAsFrB,aAA8B,EAAE,OAAY;IAC5C,cAAc,EAAE,SAAsB;IACtC,YAAyB,EAAE,OAAY;IAMJ,SAAS,EAjF9B,OAAY;EA0MxB,2BAAS;IAlIX,WAAW,EAvFF,QAAY;IAwFrB,aAA8B,EAAE,OAAY;IAC5C,cAAc,EAAE,SAAsB;IACtC,YAAyB,EAAE,OAAY;IAKJ,SAAS,EAlF9B,SAAY;EA6MxB,yBAAS;IAnIX,WAAW,EAxFF,QAAY;IAyFrB,aAA8B,EAAE,OAAY;IAC5C,cAAc,EAAE,SAAsB;IACtC,YAAyB,EAAE,OAAY;IAIJ,SAAS,EAlF9B,SAAY;EA+MxB,6BAAS;IA9GX,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,KAAK,EAAE,IAAI;EA8GT,qCAAc;IAAE,UAAU,EAAE,IAAI;IAAE,WAAW,EC/IzC,OAAmD;EDgJvD,uCAAc;IAAE,UAAU,EAAE,KAAK;IAAE,aAAa,EChJ5C,OAAmD;EDkJvD,6BAAS;IN3MX,aAAa,EMmBD,GAAc;EAyLxB,2BAAS;IN5MX,aAAa,EMoBF,MAAe;EA0LxB,sEAAwB;IAjF1B,gBAAgB,EAzHF,OAAc;IA0H5B,YAAY,EARK,OAAwG;IAazH,KAAK,EA9IW,OAAM;IAwJtB,MAAM,EArHe,OAAqB;IAsH1C,OAAO,EAvHe,GAAG;IAwHzB,UAAU,EAAE,IAAI;IAhBhB,8LACQ;MAAE,gBAAgB,EAVT,OAAwG;IAezH,8LACQ;MACN,KAAK,EAlJS,OAAM;IA2JtB,8LACQ;MAAE,gBAAgB,EA7IZ,OAAc;IA2MxB,8GAAY;MAlFhB,gBAAgB,ENqFF,OAAO;MMpFrB,YAAY,EAtHgB,OAA0B;MA2HtD,KAAK,EA7Ie,OAAI;MAuJxB,MAAM,EArHe,OAAqB;MAsH1C,OAAO,EAvHe,GAAG;MAwHzB,UAAU,EAAE,IAAI;MAhBhB,8QACQ;QAAE,gBAAgB,EAxHE,OAA0B;MA6HtD,8QACQ;QACN,KAAK,EAjJa,OAAI;MA0JxB,8QACQ;QAAE,gBAAgB,ENiEZ,OAAO;IMFjB,sGAAU;MAnFd,gBAAgB,ENuFJ,OAAO;MMtFnB,YAAY,EApHc,OAAwB;MAyHlD,KAAK,EA9IW,OAAM;MAwJtB,MAAM,EArHe,OAAqB;MAsH1C,OAAO,EAvHe,GAAG;MAwHzB,UAAU,EAAE,IAAI;MAhBhB,8PACQ;QAAE,gBAAgB,EAtHA,OAAwB;MA2HlD,8PACQ;QACN,KAAK,EAlJS,OAAM;MA2JtB,8PACQ;QAAE,gBAAgB,ENmEd,OAAO;IMHf,8FAAQ;MApFZ,gBAAgB,ENsFN,OAAO;MMrFjB,YAAY,EAlHY,OAAsB;MAuH9C,KAAK,EA9IW,OAAM;MAwJtB,MAAM,EArHe,OAAqB;MAsH1C,OAAO,EAvHe,GAAG;MAwHzB,UAAU,EAAE,IAAI;MAhBhB,8OACQ;QAAE,gBAAgB,EApHF,OAAsB;MAyH9C,8OACQ;QACN,KAAK,EAlJS,OAAM;MA2JtB,8OACQ;QAAE,gBAAgB,ENkEhB,OAAO;IMDb,sGAAU;MArFd,gBAAgB,ENwFJ,OAAO;MMvFnB,YAAY,EAhHc,OAAwB;MAqHlD,KAAK,EA9IW,OAAM;MAwJtB,MAAM,EArHe,OAAqB;MAsH1C,OAAO,EAvHe,GAAG;MAwHzB,UAAU,EAAE,IAAI;MAhBhB,8PACQ;QAAE,gBAAgB,EAlHA,OAAwB;MAuHlD,8PACQ;QACN,KAAK,EAlJS,OAAM;MA2JtB,8PACQ;QAAE,gBAAgB,ENoEd,OAAO;IMFf,0FAAO;MAtFX,gBAAgB,ENyFP,OAAO;MMxFhB,YAAY,EA9GW,OAAqB;MAmH5C,KAAK,EA7Ie,OAAI;MAuJxB,MAAM,EArHe,OAAqB;MAsH1C,OAAO,EAvHe,GAAG;MAwHzB,UAAU,EAAE,IAAI;MAhBhB,sOACQ;QAAE,gBAAgB,EAhHH,OAAqB;MAqH5C,sOACQ;QACN,KAAK,EAlJS,OAAM;MA2JtB,sOACQ;QAAE,gBAAgB,ENqEjB,OAAO;;AMEhB,wBAAyB;EAAC,MAAM,EAAC,CAAC;EAAE,OAAO,EAAC,CAAC;;AAE7C,4CAAqB;EACnB,eAAgB;IAxKL,OAAO,EAyK4B,YAAY;AExG5D,aAAc;EA/Hd,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;EACT,IAAiB,EAAE,CAAC;ERkJtB,yCAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,mBAAQ;IAAE,KAAK,EAAE,IAAI;EQnBf,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,GAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EASzB,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,SAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EASzB,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,GAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EASzB,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,GAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EASzB,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,SAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EASzB,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,SAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EASzB,uBAAgB;IA/FpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAoFrB,KAAK,EAAE,KAA6B;IAzGtC,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAmG7B,+DAAgB;MAAE,KAAK,EAAE,IAAI;EAY3B,kBAAO;IAlGT,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IArBvB,uDAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,6EAAgB;MACd,WAAwB,EAAE,CAAC;EAkHzB,wBAAO;IArGX,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAIrB,OAAO,EAAC,KAAK;IACb,MAAM,EAAC,CAAC;IA+FyD,KAAK,EAAE,IAAI;IAzH9E,mEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,yFAAgB;MACd,WAAwB,EAAE,CAAC;IAoB7B,mEAAkB;MAChB,UAAU,EAAE,SAAgC;MAC5C,YAAY,EAAE,wBAAwB;MACtC,iBAAiB,EAAE,CAAC;MACpB,MAAM,EAAC,CAAC;MACR,OAAO,EAAE,KAAK;IAEhB,iCAAS;MACL,KAAK,EAAE,IAAI;IAIb,yFAAgB;MACd,UAAU,EAAE,CAAC;EAqFb,kCAAO;IAzGX,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IArBvB,uFAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,6GAAgB;MACd,WAAwB,EAAE,CAAC;IAwHvB,wCAAsB;MAFxB,kCAAO;QAzGX,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY;QAIrB,OAAO,EAAC,KAAK;QACb,MAAM,EAAC,CAAC;QA1BV,uFAAkB;UAChB,WAAwB,EAAE,SAAgC;UAC1D,YAAY,EAAE,wBAAwB;QAItC,6GAAgB;UACd,WAAwB,EAAE,CAAC;QAoB7B,uFAAkB;UAChB,UAAU,EAAE,SAAgC;UAC5C,YAAY,EAAE,wBAAwB;UACtC,iBAAiB,EAAE,CAAC;UACpB,MAAM,EAAC,CAAC;UACR,OAAO,EAAE,KAAK;QAEhB,2CAAS;UACL,KAAK,EAAE,IAAI;QAIb,6GAAgB;UACd,UAAU,EAAE,CAAC;EA6Ff,wBAAa;IAjHf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IArBvB,mEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,yFAAgB;MACd,WAAwB,EAAE,CAAC;IAoE7B,6HAGY;MRlFZ,aAAa,EQkFiB,CAAC;IAC/B,6KAGwB;MR5ExB,iCAAqC,EMSzB,GAAc;MNR1B,8BAAkC,EMQtB,GAAc;MNP1B,yBAA6B,EMOjB,GAAc;MNN1B,sBAA0B,EMMd,GAAc;IE2E1B,yKAGuB;MRvFvB,kCAAqC,EMSzB,GAAc;MNR1B,+BAAkC,EMQtB,GAAc;MNP1B,0BAA6B,EMOjB,GAAc;MNN1B,uBAA0B,EMMd,GAAc;EEuHxB,8BAAmB;IAlHrB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAIrB,OAAO,EAAC,KAAK;IACb,MAAM,EAAC,CAAC;IA1BV,+EAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,qGAAgB;MACd,WAAwB,EAAE,CAAC;IAoB7B,+EAAkB;MAChB,UAAU,EAAE,SAAgC;MAC5C,YAAY,EAAE,wBAAwB;MACtC,iBAAiB,EAAE,CAAC;MACpB,MAAM,EAAC,CAAC;MACR,OAAO,EAAE,KAAK;IAEhB,uCAAS;MACL,KAAK,EAAE,IAAI;IAIb,qGAAgB;MACd,UAAU,EAAE,CAAC;IAmCjB,qJAGY;MRlFZ,aAAa,EQkFiB,CAAC;IAC/B,qMAGwB;MRvExB,uBAA4B,EMIhB,GAAc;MNH1B,wBAA6B,EMGjB,GAAc;MNF1B,sBAA2B,EMEf,GAAc;MND1B,uBAA4B,EMChB,GAAc;IE2E1B,iMAGuB;MRlFvB,0BAA4B,EMIhB,GAAc;MNH1B,2BAA6B,EMGjB,GAAc;MNF1B,yBAA2B,EMEf,GAAc;MND1B,0BAA4B,EMChB,GAAc;EEyHtB,4CAAqB;IADvB,wCAA6B;MAnH/B,MAAM,EAAE,MAAM;MACd,OAAO,EAAE,YAAY;MArBvB,mGAAkB;QAChB,WAAwB,EAAE,SAAgC;QAC1D,YAAY,EAAE,wBAAwB;MAItC,yHAAgB;QACd,WAAwB,EAAE,CAAC;MAoE7B,6LAGY;QRlFZ,aAAa,EQkFiB,CAAC;MAC/B,6OAGwB;QR5ExB,iCAAqC,EMSzB,GAAc;QNR1B,8BAAkC,EMQtB,GAAc;QNP1B,yBAA6B,EMOjB,GAAc;QNN1B,sBAA0B,EMMd,GAAc;ME2E1B,yOAGuB;QRvFvB,kCAAqC,EMSzB,GAAc;QNR1B,+BAAkC,EMQtB,GAAc;QNP1B,0BAA6B,EMOjB,GAAc;QNN1B,uBAA0B,EMMd,GAAc;EE4HtB,wCAAsB;IAJxB,wCAA6B;MAnH/B,MAAM,EAAE,MAAM;MACd,OAAO,EAAE,YAAY;MAIrB,OAAO,EAAC,KAAK;MACb,MAAM,EAAC,CAAC;MA1BV,mGAAkB;QAChB,WAAwB,EAAE,SAAgC;QAC1D,YAAY,EAAE,wBAAwB;MAItC,yHAAgB;QACd,WAAwB,EAAE,CAAC;MAoB7B,mGAAkB;QAChB,UAAU,EAAE,SAAgC;QAC5C,YAAY,EAAE,wBAAwB;QACtC,iBAAiB,EAAE,CAAC;QACpB,MAAM,EAAC,CAAC;QACR,OAAO,EAAE,KAAK;MAEhB,iDAAS;QACL,KAAK,EAAE,IAAI;MAIb,yHAAgB;QACd,UAAU,EAAE,CAAC;MAmCjB,6LAGY;QRlFZ,aAAa,EQkFiB,CAAC;MAC/B,6OAGwB;QRvExB,uBAA4B,EMIhB,GAAc;QNH1B,wBAA6B,EMGjB,GAAc;QNF1B,sBAA2B,EMEf,GAAc;QND1B,uBAA4B,EMChB,GAAc;ME2E1B,yOAGuB;QRlFvB,0BAA4B,EMIhB,GAAc;QNH1B,2BAA6B,EMGjB,GAAc;QNF1B,yBAA2B,EMEf,GAAc;QND1B,0BAA4B,EMChB,GAAc;EEiIxB,uBAAY;IA5Hd,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IArBvB,iEAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,uFAAgB;MACd,WAAwB,EAAE,CAAC;IAoE7B,yHAGY;MRlFZ,aAAa,EQkFiB,CAAC;IAC/B,yKAGwB;MR5ExB,iCAAqC,EMU1B,MAAe;MNT1B,8BAAkC,EMSvB,MAAe;MNR1B,yBAA6B,EMQlB,MAAe;MNP1B,sBAA0B,EMOf,MAAe;IE0E1B,qKAGuB;MRvFvB,kCAAqC,EMU1B,MAAe;MNT1B,+BAAkC,EMSvB,MAAe;MNR1B,0BAA6B,EMQlB,MAAe;MNP1B,uBAA0B,EMOf,MAAe;EEiIxB,6BAAkB;IA7HpB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,YAAY;IAIrB,OAAO,EAAC,KAAK;IACb,MAAM,EAAC,CAAC;IA1BV,6EAAkB;MAChB,WAAwB,EAAE,SAAgC;MAC1D,YAAY,EAAE,wBAAwB;IAItC,mGAAgB;MACd,WAAwB,EAAE,CAAC;IAoB7B,6EAAkB;MAChB,UAAU,EAAE,SAAgC;MAC5C,YAAY,EAAE,wBAAwB;MACtC,iBAAiB,EAAE,CAAC;MACpB,MAAM,EAAC,CAAC;MACR,OAAO,EAAE,KAAK;IAEhB,sCAAS;MACL,KAAK,EAAE,IAAI;IAIb,mGAAgB;MACd,UAAU,EAAE,CAAC;IAmCjB,iJAGY;MRlFZ,aAAa,EQkFiB,CAAC;IAC/B,iMAGwB;MRvExB,uBAA4B,EMnCnB,IAAY;MNoCrB,wBAA6B,EMpCpB,IAAY;MNqCrB,sBAA2B,EMrClB,IAAY;MNsCrB,uBAA4B,EMtCnB,IAAY;IEkHrB,6LAGuB;MRlFvB,0BAA4B,EMnCnB,IAAY;MNoCrB,2BAA6B,EMpCpB,IAAY;MNqCrB,yBAA2B,EMrClB,IAAY;MNsCrB,0BAA4B,EMtCnB,IAAY;EE2KjB,4CAAqB;IADvB,uCAA4B;MA9H9B,MAAM,EAAE,MAAM;MACd,OAAO,EAAE,YAAY;MArBvB,iGAAkB;QAChB,WAAwB,EAAE,SAAgC;QAC1D,YAAY,EAAE,wBAAwB;MAItC,uHAAgB;QACd,WAAwB,EAAE,CAAC;MAoE7B,yLAGY;QRlFZ,aAAa,EQkFiB,CAAC;MAC/B,yOAGwB;QR5ExB,iCAAqC,EMU1B,MAAe;QNT1B,8BAAkC,EMSvB,MAAe;QNR1B,yBAA6B,EMQlB,MAAe;QNP1B,sBAA0B,EMOf,MAAe;ME0E1B,qOAGuB;QRvFvB,kCAAqC,EMU1B,MAAe;QNT1B,+BAAkC,EMSvB,MAAe;QNR1B,0BAA6B,EMQlB,MAAe;QNP1B,uBAA0B,EMOf,MAAe;EEsItB,wCAAsB;IAJxB,uCAA4B;MA9H9B,MAAM,EAAE,MAAM;MACd,OAAO,EAAE,YAAY;MAIrB,OAAO,EAAC,KAAK;MACb,MAAM,EAAC,CAAC;MA1BV,iGAAkB;QAChB,WAAwB,EAAE,SAAgC;QAC1D,YAAY,EAAE,wBAAwB;MAItC,uHAAgB;QACd,WAAwB,EAAE,CAAC;MAoB7B,iGAAkB;QAChB,UAAU,EAAE,SAAgC;QAC5C,YAAY,EAAE,wBAAwB;QACtC,iBAAiB,EAAE,CAAC;QACpB,MAAM,EAAC,CAAC;QACR,OAAO,EAAE,KAAK;MAEhB,gDAAS;QACL,KAAK,EAAE,IAAI;MAIb,uHAAgB;QACd,UAAU,EAAE,CAAC;MAmCjB,yLAGY;QRlFZ,aAAa,EQkFiB,CAAC;MAC/B,yOAGwB;QRvExB,uBAA4B,EMnCnB,IAAY;QNoCrB,wBAA6B,EMpCpB,IAAY;QNqCrB,sBAA2B,EMrClB,IAAY;QNsCrB,uBAA4B,EMtCnB,IAAY;MEkHrB,qOAGuB;QRlFvB,0BAA4B,EMnCnB,IAAY;QNoCrB,2BAA6B,EMpCpB,IAAY;QNqCrB,yBAA2B,EMrClB,IAAY;QNsCrB,0BAA4B,EMtCnB,IAAY;;AN6JvB,qCAAkB;EAAE,OAAO,EAAE,GAAG;EAAE,OAAO,EAAE,KAAK;AAChD,iBAAQ;EAAE,KAAK,EAAE,IAAI;AQwBjB,yBAAc;EAvKhB,KAAK,EAAE,IAAiB;EACxB,YAA6B,EAjBJ,QAAY;EAkBrC,6BAAM;IAAE,QAAQ,EAAE,MAAM;;;ACYxB,iCAAsC;EAEpC,aAAa,EAAE,CAAC;EAChB,WAAwB,EAAE,CAAC;EAC3B,UAAU,EAAE,IAAI;ET4HpB,8FAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,6CAAQ;IAAE,KAAK,EAAE,IAAI;ES3HjB,uCAAG;IACD,KAAK,ETgOK,IAAI;IS/Nd,YAA6B,EAAE,IAAI;EAGrC,mFAA2B;IACzB,YAA6B,EAAE,CAAC;;AAIpC,kBAAmB;EACjB,UAAU,EA7CE,OAAY;EA8CxB,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,GAAG,EAAE,CAAC;EACN,IAAiB,EAAE,CAAC;EACpB,OAAO,EAAE,GAAG;EAEZ,kCAAgB;IAAE,OAAO,EAAE,KAAK;;AAGlC,mBAAoB;EAClB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,CAAC;;AAGX,qBAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,KAAK,EJjDS,OAAK;EIkDnB,SAAS,EAAE,KAAK;;AAGlB,YAAa;EACX,MAAM,EAAE,GAAG;EACX,QAAQ,EAAE,QAAQ;EAElB,gBAAI;IACF,QAAQ,EAAE,QAAQ;IAClB,IAAiB,EAAE,GAAG;IACtB,GAAG,EAAE,GAAG;IAEN,SAAS,EAAE,iCAAiC;IAC5C,iBAAiB,EAAE,iCAAiC;IACpD,aAAa,EAAE,iCAAiC;IAOlD,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;;AAInB,iBAAkB;EAChB,KAAK,EArFmB,OAAK;EAsF7B,SAAS,EArFc,OAAO;EAsF9B,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,CAAC;EAChB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,CAAC;EACT,UAAU,EAtGE,OAAY;EAuGxB,KAAK,EAAE,IAAI;EACX,OAAO,EA3Fc,cAAe;EA4FpC,QAAQ,EAAE,QAAQ;EAClB,IAAiB,EAAE,CAAC;;AAGtB,eAAgB;EACd,OAAO,EAAE,GAAG;EACZ,YAAyB,EAAE,IAAI;EAC/B,WAAW,EAAE,IAAI;EACjB,SAAS,EA7GO,IAAI;EA8GpB,WAAW,EAAE,CAAC;EACd,KAAK,EAxGmB,OAAK;EAyG7B,OAAO,EAAE,IAAI;EAEb,4CACQ;IAAE,KAAK,EA5GS,OAAK;;AA+G/B,uCAAwC;EAAE,MAAM,EAAE,IAAI;EACpD,sDAAe;IAAE,OAAO,EAAE,IAAI;;AAIhC,oBAAqB;EACnB,OAAO,EAAE,IAAI;EACb,0CAAwB;IACtB,OAAO,EAAE,KAAK;;AAKlB,4CAAqB;EACnB;qBACoB;IAClB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,CAAC;IACN;8BAAS;MACP,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAG;MACR,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,UAA0B;MAClC;sCAAQ;QAAE,OAAO,EAAE,GAAG;;EAG1B,mBAAoB;IAClB,IAAiB,EAAE,CAAC;IACpB,0BAAS;MACP,IAAiB,EAAE,GAAG;MACtB,YAAY,EAAE,WAAW;MACzB,kBAAmC,EAlJf,OAAK;;EAqJ7B,mBAAoB;IAClB,KAAsB,EAAE,CAAC;IACzB,0BAAS;MACP,YAAY,EAAE,WAAW;MACzB,iBAA8B,EAzJV,OAAK;;EA6J7B;8BAC6B;IAAE,OAAO,EAAE,GAAG;;EAIzC,iDAAU;IACR,UAAU,EA/KG,qBAAkB;IAgL/B,MAAM,EA9JW,KAAK;IA+JtB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,MAAM;IAElB,sDAAO;MACL,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,GAAG;MACZ,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,QAAQ;MAClB,KAAK,EAAE,IAAI;MAEX,yDAAG;QACD,OAAO,EAAE,KAAK;QACd,KAAK,EA1Ka,KAAK;QA2KvB,UAAU,EAAE,OAAO;QACnB,KAAK,ETqED,IAAI;QSpER,QAAQ,EAAE,MAAM;QAChB,YAA6B,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,QAAQ;QAClB,MAAM,ET8HG,OAAO;QS7HhB,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,IAAI;QAGT,wEAAI;UACF,MAAM,EAAE,IAAI;UACZ,SAAS,EAAE,IAAI;QAInB,8DAAK;UACH,MAAM,EAAE,IAAI;UACZ,UAAU,EAAE,IAAI;UAChB,OAAO,EAAE,KAAK;QAGhB,6DAAI;UACJ,MAAM,EAAE,kBAAgC;UACxC,KAAK,EAAE,eAAe;QAGtB,iEAAU;UAAE,OAAO,EAAE,CAAC;QACtB,+DAAQ;UAAE,OAAO,EAAE,GAAG;EAK5B,oDAAa;IACX,UAAU,EAhOF,OAAY;IAiOpB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAlNa,GAAG;;EAsN1B,eAAgB;IACd,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,KAAsB,EAAE,IAAI;IAC5B,YAAyB,EAAE,CAAC;IAC5B,WAAW,EAAE,CAAC;;AC1BlB,WAAY;EA9Jd,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,OAAO;EACb,UAAU,EA1BY,IAAI;EA2B1B,WAAwB,EAAE,CAAC;EAC3B,OAAO,EAAE,IAAI;EAMX,KAAK,EAAE,IAAI;EACX,UAAU,EA/DU,IAAI;EAgExB,MAAM,EAjEU,IAAI;EAkEpB,UAAU,EAzCc,OAAM;EA0C9B,MAAM,EAAE,iBAA0E;EAClF,SAAS,EArCU,QAAY;EAsC/B,OAAO,EAAE,EAAE;EAcX,UAAU,EA/EU,GAAG;EA+KR,SAAS,EApLL,KAAK;EA4D1B,2BAAgB;IAAE,UAAU,EAAE,CAAC;EAC/B,0BAAe;IAAE,aAAa,EAAE,CAAC;EAyB/B,kBAAS;IVLX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,SAAoB;IAM1B,YAAY,EAAE,2CAAmD;IACjE,mBAAmB,EAAE,KAAK;IUJxB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,KAAgC;IACrC,IAAiB,EA/DW,IAAI;IAgEhC,OAAO,EAAE,EAAE;EAEb,iBAAQ;IVZV,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,SAAoB;IAM1B,YAAY,EAAE,2CAAmD;IACjE,mBAAmB,EAAE,KAAK;IUGxB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,KAAsC;IAC3C,IAAiB,EAAE,GAAoC;IACvD,OAAO,EAAE,EAAE;EAGb,wBAAe;IACb,IAAiB,EAAE,IAAI;IACvB,KAAsB,EA5EM,IAAI;EA8ElC,uBAAc;IACZ,IAAiB,EAAE,IAAI;IACvB,KAAsB,EAAE,GAAoC;EA4G5D,sBAA8B;IAjKlC,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,OAAO;IACb,UAAU,EA1BY,IAAI;IA2B1B,WAAwB,EAAE,CAAC;IAC3B,OAAO,EAAE,IAAI;IAMX,KAAK,EAAE,IAAI;IACX,UAAU,EA/DU,IAAI;IAgExB,MAAM,EAjEU,IAAI;IAkEpB,UAAU,EAzCc,OAAM;IA0C9B,MAAM,EAAE,iBAA0E;IAClF,SAAS,EArCU,QAAY;IAsC/B,OAAO,EAAE,EAAE;IA0CX,UAAU,EAAE,CAAC;IACb,WAAwB,EAtGF,GAAsB;IAyK7B,SAAS,EApLL,KAAK;IA4D1B,sCAAgB;MAAE,UAAU,EAAE,CAAC;IAC/B,qCAAe;MAAE,aAAa,EAAE,CAAC;IAsD/B,6BAAS;MVlCX,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAc1B,YAAY,EAAE,2CAAmD;MACjE,kBAAkB,EAAE,KAAK;MUiBvB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EA3FyB,IAAI;MA4FhC,IAAiB,EAAE,KAAgC;MACnD,OAAO,EAAE,EAAE;IAEb,4BAAQ;MVzCV,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAc1B,YAAY,EAAE,2CAAmD;MACjE,kBAAkB,EAAE,KAAK;MUwBvB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAoC;MACzC,IAAiB,EAAE,KAAoC;MACvD,OAAO,EAAE,EAAE;EA4FX,qBAAyB;IArK7B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,OAAO;IACb,UAAU,EA1BY,IAAI;IA2B1B,WAAwB,EAAE,CAAC;IAC3B,OAAO,EAAE,IAAI;IAMX,KAAK,EAAE,IAAI;IACX,UAAU,EA/DU,IAAI;IAgExB,MAAM,EAjEU,IAAI;IAkEpB,UAAU,EAzCc,OAAM;IA0C9B,MAAM,EAAE,iBAA0E;IAClF,SAAS,EArCU,QAAY;IAsC/B,OAAO,EAAE,EAAE;IA+DX,UAAU,EAAE,CAAC;IACb,WAAwB,EAAE,IAAyB;IA8CpC,SAAS,EApLL,KAAK;IA4D1B,qCAAgB;MAAE,UAAU,EAAE,CAAC;IAC/B,oCAAe;MAAE,aAAa,EAAE,CAAC;IA2E/B,4BAAS;MVvDX,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAU1B,YAAY,EAAE,2CAAmD;MACjE,iBAAiB,EAAE,KAAK;MU0CtB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAhHyB,IAAI;MAiHhC,KAAsB,EAAE,KAAgC;MACxD,IAAiB,EAAE,IAAI;MACvB,OAAO,EAAE,EAAE;IAEb,2BAAQ;MV/DV,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAU1B,YAAY,EAAE,2CAAmD;MACjE,iBAAiB,EAAE,KAAK;MUkDtB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAoC;MACzC,KAAsB,EAAE,KAAoC;MAC5D,IAAiB,EAAE,IAAI;MACvB,OAAO,EAAE,EAAE;EAyEX,oBAAW;IAzKf,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,OAAO;IACb,UAAU,EA1BY,IAAI;IA2B1B,WAAwB,EAAE,CAAC;IAC3B,OAAO,EAAE,IAAI;IAMX,KAAK,EAAE,IAAI;IACX,UAAU,EA/DU,IAAI;IAgExB,MAAM,EAjEU,IAAI;IAkEpB,UAAU,EAzCc,OAAM;IA0C9B,MAAM,EAAE,iBAA0E;IAClF,SAAS,EArCU,QAAY;IAsC/B,OAAO,EAAE,EAAE;IAsFX,UAAU,EAAE,IAA0B;IACtC,WAAW,EAAE,CAAC;IAuBC,SAAS,EApLL,KAAK;IA4D1B,oCAAgB;MAAE,UAAU,EAAE,CAAC;IAC/B,mCAAe;MAAE,aAAa,EAAE,CAAC;IAkG/B,2BAAS;MV9EX,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAE1B,YAAY,EAAE,2CAAmD;MACjE,gBAAgB,EAAE,KAAK;MUyErB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,IAAI;MACT,MAAM,EAAE,KAAgC;MACxC,IAAiB,EAzIW,IAAI;MA0IhC,KAAsB,EAAE,IAAI;MAC5B,OAAO,EAAE,EAAE;IAEb,0BAAQ;MVvFV,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAE1B,YAAY,EAAE,2CAAmD;MACjE,gBAAgB,EAAE,KAAK;MUkFrB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,IAAI;MACT,MAAM,EAAE,KAAoC;MAC5C,IAAiB,EAAE,GAAoC;MACvD,KAAsB,EAAE,IAAI;MAC5B,OAAO,EAAE,EAAE;EAqDX,cAAG;IAtCP,SAAS,EA9JY,QAAY;IA+JjC,MAAM,EVqIe,OAAO;IUnI5B,WAAW,EA/JY,QAAY;IAgKnC,MAAM,EAAE,CAAC;IAET,0CACQ;MAAE,UAAU,EAlKK,OAAM;IAoK/B,qBAAS;MVjLP,aAAa,EUoBG,GAAc;IA+JhC,gBAAE;MACA,OAAO,EAAE,KAAK;MACd,OAAO,EA1Ke,MAAe;MA2KrC,KAAK,EA7Ke,OAAS;EAwM3B,mBAAU;IAjLd,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,OAAO;IACb,UAAU,EA1BY,IAAI;IA2B1B,WAAwB,EAAE,CAAC;IAC3B,OAAO,EAAE,IAAI;IAeX,OAAO,EAlCkB,OAAY;IAmCrC,KAAK,EAAE,IAAI;IACX,MAAM,EA1EU,IAAI;IA2EpB,UAAU,EA1EU,IAAI;IA2ExB,UAAU,EAnDc,OAAM;IAoD9B,MAAM,EAAE,iBAA0E;IAClF,SAAS,EA/CU,QAAY;IAgD/B,OAAO,EAAE,EAAE;IAoGI,SAAS,EApLL,KAAK;IA4D1B,mCAAgB;MAAE,UAAU,EAAE,CAAC;IAC/B,kCAAe;MAAE,aAAa,EAAE,CAAC;EA6K7B,gBAAU;IAAE,SAAS,EAAE,KAAK;EAC5B,iBAAU;IAAE,SAAS,EAAE,KAAK;EAC5B,kBAAU;IAAE,SAAS,EAAE,KAAK;EAC5B,iBAAU;IAAE,SAAS,EAAE,KAAK;EAC5B,gBAAU;IACR,KAAK,EAAC,eAAc;IACpB,SAAS,EAAC,eAAc;IAExB,qBAAM;MACJ,IAAI,EAAC,YAAW;;ACpItB,iCAAkC;EAhElC,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,IAAI;EAqCb,aAA8B,EA/DJ,SAAkC;EA6B5D,+CAAS;IACP,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,2CAA8D;IAC5E,GAAG,EAAE,GAAG;EA2BV,+CAAS;IACP,YAAY,EAhEa,QAA8B;IAiEvD,KAAsB,EAhEO,UAAqB;IAiElD,UAAU,EAhEgB,WAAmC;EAgF/D,+CAAS;IAAE,YAAY,EAAE,2CAA8C;EAOrE,2CAAO;IA/CT,aAA8B,EAvDJ,QAAmB;IAwD7C,uDAAQ;MACN,YAAY,EAxDa,QAAe;MAyDxC,KAAsB,EAxDO,QAAmB;MAyDhD,UAAU,EAxDgB,SAAmC;IA4F/D,yDAAS;MAAE,YAAY,EAAE,2CAA8C;EAQrE,6CAAQ;IAtCV,aAA8B,EA3DJ,SAAmB;IA4D7C,2DAAS;MACP,YAAY,EA5Da,SAAe;MA6DxC,KAAsB,EA5DO,SAAmB;MA6DhD,UAAU,EA5DgB,WAAmC;IAsF/D,2DAAS;MAAE,YAAY,EAAE,2CAA8C;EASrE,6CAAQ;IAnBV,aAA8B,EAnEJ,QAAkC;IAoE5D,2DAAS;MACP,YAAY,EApEa,SAA8B;MAqEvD,KAAsB,EApEO,UAAqB;MAqElD,UAAU,EApEgB,WAAmC;IA0E/D,2DAAS;MAAE,YAAY,EAAE,2CAA8C;EAUrE,iEAAkB;IAAE,YAAY,EAAE,2CAAkE;;AC/EtG,WAAY;EAxBd,QAAQ,EAAE,QAAQ;EAClB,WAAW,EAbY,SAAY;EAcnC,cAAc,EAbY,KAAK;EAc/B,MAAM,EAAE,CAAC;EACT,aAAa,EAdY,IAAY;EAerC,QAAQ,EAAE,MAAM;EAEhB,sBAAa;IAAE,cAAc,EAdQ,MAAM;EAe3C,iBAAQ;IAAE,WAAW,EAAE,CAAC;EAExB;;;mBAGM;IACJ,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,IAAiB,EAAE,CAAC;IACpB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;;;ACgVZ,IAAK;EAAE,MAAM,EAAE,QAAiB;;;AApSlC,cAAK;EAAE,MAAM,EAAE,SAAwB;EAErC;yBACS;IAAE,OAAO,EAAE,QAAqB;EAGzC,uBAAW;IAAE,MAAM,EAAE,CAAC;IAEpB;oCACS;MAAE,OAAO,EAAE,CAAC;IACrB,6BAAM;MbpDR,kCAAqC,EaqDS,CAAC;MbpD/C,+BAAkC,EaoDY,CAAC;MbnD/C,0BAA6B,EamDiB,CAAC;MblD/C,uBAA0B,EakDoB,CAAC;AAKjD;;;0BAGiB;EAAE,YAAyB,EAAE,MAAmB;;;AAuR/D,KAAM;EA9NN,SAAS,EAjJU,QAAY;EAkJ/B,KAAK,EA/Ie,OAAoC;EAgJxD,MAAM,EApJW,OAAO;EAqJxB,OAAO,EAAE,KAAK;EACd,WAAW,EApGmB,MAAmB;EAqGjD,WAAW,EApJU,GAAG;EAqJxB,aAAa,EAlJU,CAAC;;EA2WtB,WAAQ;IApNV,KAAK,EAAE,eAAe;IACtB,UAAU,EAAE,KAAK;EAoNf,YAAS;IAjNX,MAAM,EAAE,UAAmB;IAC3B,OAAO,EAAE,WAAmD;EAkN1D,WAAM;IACJ,cAAc,EAhXO,UAAU;IAiX/B,KAAK,EAAE,OAAoD;;;AAK/D;QACS;EApNX,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,CAAC;EACd,cAAc,EAAE,CAAC;EACjB,YAAY,EAzIa,KAAK;EA0I9B,YAAY,EA3Ia,GAAG;EA4I5B,QAAQ,EA1Ic,OAAO;EA2I7B,SAAS,EAjLY,QAAY;EAkLjC,MAAM,EAAE,SAAwD;EAChE,WAAW,EAAE,SAAwD;;;AA2MnE,eAAgB;EAjJhB,YAAyB,EAAE,CAAC;EAC5B,aAA8B,EAAE,CAAC;EACjC,WAAW,EAAE,CAAC;EACd,cAAc,EAAE,CAAC;EACjB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,IAAI;;AA6IZ,cAAe;EAlLf,YAAyB,EAAE,CAAC;EAC5B,aAA8B,EAAE,CAAC;EACjC,WAAW,EAAE,CAAC;EACd,cAAc,EAAE,CAAC;EACjB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,IAAI;;AA+KZ,qBAAsB;EbhXtB,aAAa,EagX2B,CAAC;EbtWzC,iCAAqC,EMSzB,GAAc;ENR1B,8BAAkC,EMQtB,GAAc;ENP1B,yBAA6B,EMOjB,GAAc;ENN1B,sBAA0B,EMMd,GAAc;;AO8V1B,sBAAuB;EbjXvB,aAAa,EaiX4B,CAAC;EbvW1C,kCAAqC,EMSzB,GAAc;ENR1B,+BAAkC,EMQtB,GAAc;ENP1B,0BAA6B,EMOjB,GAAc;ENN1B,uBAA0B,EMMd,GAAc;;AO+V1B,oBAAqB;EblXrB,aAAa,EakX0B,CAAC;EbxWxC,iCAAqC,EMU1B,MAAe;ENT1B,8BAAkC,EMSvB,MAAe;ENR1B,yBAA6B,EMQlB,MAAe;ENP1B,sBAA0B,EMOf,MAAe;;AO+V1B,qBAAsB;EbnXtB,aAAa,EamX2B,CAAC;EbzWzC,kCAAqC,EMU1B,MAAe;ENT1B,+BAAkC,EMSvB,MAAe;ENR1B,0BAA6B,EMQlB,MAAe;ENP1B,uBAA0B,EMOf,MAAe;;;AOkW1B,yBAAyB;EAvMzB,UAAU,EA9JI,OAAoC;EA+JlD,YAA6B,EAAE,IAAI;EAGQ,KAAK,EA/If,OAAI;EAoJrC,YAAY,EAtKY,OAAqC;;AAqW7D,2BAA2B;EAxK3B,UAAU,EA9LI,OAAoC;EA+LlD,WAAwB,EAAE,IAAI;EAGc,KAAK,EA/KhB,OAAI;EAoLrC,YAAY,EAtMY,OAAqC;;;AAwW7D,uTAA6B;EAC3B,kBAAkB,EAAE,IAAI;EACxB,aAAa,EAAE,CAAC;EA9SpB,gBAAgB,EA5Ce,OAAM;EA6CrC,WAAW,EA1FO,OAAO;EA4FvB,YAAK,EArFY,KAAK;EAsFtB,YAAK,EArFY,GAAG;EAsFpB,YAAK,EAzFY,OAAqC;EA2FxD,UAAU,EApFO,kCAAgC;EAqFjD,KAAK,EAhGY,mBAAgB;EAiGjC,OAAO,EAAE,KAAK;EACd,SAAS,EAjGO,QAAY;EAkG5B,MAAM,EAAE,UAAmB;EAC3B,OAAO,EAAE,MAAiB;EAC1B,MAAM,EAAE,SAAwD;EAChE,KAAK,EAAE,IAAI;Eb7CX,kBAAkB,Ea8CE,UAAU;Eb7C3B,eAAe,Ea6CE,UAAU;Eb5CtB,UAAU,Ea4CE,UAAU;EbrD9B,UAAU,EAAE,gBAAsB;Ea0DlC,iZAAQ;IACN,UAAU,EA1GS,OAAoC;IA2GvD,YAAY,EA5DO,OAAyB;IA6D5C,OAAO,EAAE,IAAI;EAGf,8bAAW;IACT,gBAAgB,EAlGI,OAAU;IAmG9B,MAAM,EA1Gc,OAAqB;EA8G3C,k/CAEqB;IACnB,gBAAgB,EA1GI,OAAU;IA2G9B,MAAM,EAlHc,OAAqB;EAiYvC,gaAAS;IbjYX,aAAa,EaFK,GAAc;;AA2Y1B;;;4CAGO;Eb5Yb,aAAa,Ea4YkB,CAAC;EblYhC,kCAAqC,EMSzB,GAAc;ENR1B,+BAAkC,EMQtB,GAAc;ENP1B,0BAA6B,EMOjB,GAAc;ENN1B,uBAA0B,EMMd,GAAc;AO0XpB,6CAAQ;Eb7Yd,aAAa,Ea6YmB,CAAC;EbnYjC,iCAAqC,EMSzB,GAAc;ENR1B,8BAAkC,EMQtB,GAAc;ENP1B,yBAA6B,EMOjB,GAAc;ENN1B,sBAA0B,EMMd,GAAc;AO6XpB;;;6CAGO;EbnZb,aAAa,EamZkB,CAAC;EbzYhC,iCAAqC,EMSzB,GAAc;ENR1B,8BAAkC,EMQtB,GAAc;ENP1B,yBAA6B,EMOjB,GAAc;ENN1B,sBAA0B,EMMd,GAAc;AOiYpB,+CAAS;EbpZf,aAAa,EaoZoB,CAAC;Eb1YlC,kCAAqC,EMSzB,GAAc;ENR1B,+BAAkC,EMQtB,GAAc;ENP1B,0BAA6B,EMOjB,GAAc;ENN1B,uBAA0B,EMMd,GAAc;AOoYpB;;;2CAGO;Eb1Zb,aAAa,Ea0ZkB,CAAC;EbhZhC,kCAAqC,EMU1B,MAAe;ENT1B,+BAAkC,EMSvB,MAAe;ENR1B,0BAA6B,EMQlB,MAAe;ENP1B,uBAA0B,EMOf,MAAe;AOuYpB,4CAAQ;Eb3Zd,aAAa,Ea2ZmB,CAAC;EbjZjC,iCAAqC,EMU1B,MAAe;ENT1B,8BAAkC,EMSvB,MAAe;ENR1B,yBAA6B,EMQlB,MAAe;ENP1B,sBAA0B,EMOf,MAAe;AO0YpB;;;4CAGO;Ebjab,aAAa,EaiakB,CAAC;EbvZhC,iCAAqC,EMU1B,MAAe;ENT1B,8BAAkC,EMSvB,MAAe;ENR1B,yBAA6B,EMQlB,MAAe;ENP1B,sBAA0B,EMOf,MAAe;AO8YpB,8CAAS;Eblaf,aAAa,EakaoB,CAAC;EbxZlC,kCAAqC,EMU1B,MAAe;ENT1B,+BAAkC,EMSvB,MAAe;ENR1B,0BAA6B,EMQlB,MAAe;ENP1B,uBAA0B,EMOf,MAAe;;AOmZ1B,oBAAqB;EACnB,kBAAkB,EAAE,IAAI;EACxB,aAAa,EAAE,CAAC;;;AAIlB,cAAe;EACb,MAAM,EAAE,IAAI;;;AAIjB,QAAS;EACR,SAAS,EAAE,IAAI;;;AAIb,MAAO;EAtJT,kBAAkB,EAAE,eAAe;EACnC,aAAa,EAAE,CAAC;EAChB,gBAAgB,EAxPA,OAAM;EAiQtB,gBAAgB,EAAE,mUAAmU;EAGrV,mBAAmB,EAAE,WAA6C;EAElE,iBAAiB,EAAE,SAAS;EAE1B,YAAK,EAvTY,KAAK;EAwTtB,YAAK,EAvTY,GAAG;EAwTpB,YAAK,EA3TY,OAAqC;EA6TxD,OAAO,EAAE,MAAmB;EAC5B,SAAS,EAjUO,QAAY;EAkU5B,WAAW,EPrUQ,sDAAiB;EOsUpC,KAAK,EApUY,mBAAgB;EAqUjC,WAAW,EAAE,MAAM;Eb3TjB,aAAa,Ea4TC,CAAC;EA6Hb,MAAM,EAAE,SAAwD;EAnJpE,kBAAc;IACZ,OAAO,EAAE,IAAI;EAsBf,aAAS;Ib7TP,aAAa,EAwPD,GAAG;EasEjB,YAAQ;IACN,gBAAgB,EAnRI,OAA8C;IAoRlE,YAAY,EAxRO,OAAyB;EA2R9C,eAAW;IACT,gBAAgB,EA7TI,OAAU;IA8T9B,MAAM,EArUc,OAAqB;EA0bvC,gBAAY;IACV,MAAM,EAAE,IAAI;;;AAKhB;;;MAGO;EACL,MAAM,EAAE,UAAmB;;AAG7B;2BAC4B;EAC1B,OAAO,EAAE,YAAY;EACrB,WAAwB,EAAE,MAAkB;EAC5C,YAA6B,EAhepB,IAAY;EAierB,aAAa,EAAE,CAAC;EAChB,cAAc,EAAE,QAAQ;;;AAI1B,kBAAmB;EACjB,KAAK,EAAC,IAAI;;;;AAaZ,QAAS;EAvPX,MAAM,EAAE,iBAAoE;EAC5E,OAAO,EAjOU,OAAY;EAkO7B,MAAM,EAjOU,UAAc;EAoO9B,eAAO;IACL,WAAW,EAjOM,IAAiB;IAkOlC,UAAU,EA7MmB,OAAM;IA8MnC,OAAO,EAlOM,WAAa;IAmO1B,MAAM,EAAE,CAAC;IACT,WAAwB,ENzLlB,UAAmD;;;AM6avD,kHAA+D;EAtNnE,OAAO,EAAE,KAAK;EACd,OAAO,EApPqB,4BAAe;EAqP3C,UAAU,EApPc,IAAI;EAqP5B,aAAa,EAxSA,IAAY;EAySzB,SAAS,EArPqB,OAAY;EAsP1C,WAAW,EArPqB,MAAmB;EAsPnD,UAAU,EArPqB,MAAM;EAyPrC,UAAU,EAvPmB,OAAY;EAwPE,KAAK,EAzPjB,OAAM;AAucjC,iDAAwB;EAAE,OAAO,EAAE,IAAI;;AAGzC,uBAAwB;EA5N1B,OAAO,EAAE,KAAK;EACd,OAAO,EApPqB,4BAAe;EAqP3C,UAAU,EApPc,IAAI;EAqP5B,aAAa,EAxSA,IAAY;EAySzB,SAAS,EArPqB,OAAY;EAsP1C,WAAW,EArPqB,MAAmB;EAsPnD,UAAU,EArPqB,MAAM;EAyPrC,UAAU,EAvPmB,OAAY;EAwPE,KAAK,EAzPjB,OAAM;;AA+cjC;;aAEO;EACL,aAAa,EAAE,CAAC;AAGlB;0BACoB;EAClB,aAAa,EA9gBN,IAAY;AAihBrB;kBACY;EApPmC,KAAK,EAtO3B,OAAY;AA8drC,kBAAY;EAjPhB,OAAO,EAAE,KAAK;EACd,OAAO,EApPqB,4BAAe;EAqP3C,UAAU,EApPc,IAAI;EAqP5B,aAAa,EAxSA,IAAY;EAySzB,SAAS,EArPqB,OAAY;EAsP1C,WAAW,EArPqB,MAAmB;EAsPnD,UAAU,EArPqB,MAAM;EAyPrC,UAAU,EAvPmB,OAAY;EAwPE,KAAK,EAzPjB,OAAM;AAoe/B,sBAAQ;EACN,KAAK,EAAE,OAAoD;EAC3D,UAAU,EAAE,WAAW;EACvB,OAAO,EAAE,CAAC;EACV,cAAc,EAvhBK,UAAU;EAwhB7B,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,MAAM;AAInB,yBAAmB;EACjB,OAAO,EAAE,KAAK;;AAIlB;;YAEa;EACX,aAAa,EAAE,CAAC;;AAElB,WAAY;EAnRqC,KAAK,EAtO3B,OAAY;;ACgLvC,SAAU;EA5MZ,KAAK,EAAE,IAAI;EACZ,SAAS,EAAE,CAAC;EACZ,OAAO,EAAE,YAAY;EAkIpB,UAAU,EA9JE,OAAI;EA8BjB,aAAM;IACL,UAAU,EAAE,MAAM;IAClB,SAAS,EA7BU,IAAI;IA8BvB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAzBe,OAAO;IA0B7B,KAAK,EAAE,IAAI;IAEX,kCAAO;MACN,OAAO,EAAE,KAAK;MACd,MAAM,EAAE,MAAM;MAEd,kDAAU;QACT,UAAU,EAAE,QAAQ;IAItB,eAAE;MACD,SAAS,EA1CS,QAAQ;MA2C1B,cAAc,EAAE,MAAM;IAGvB,iBAAI;MACH,KAAK,EA9Ce,QAAQ;MA+C5B,MAAM,EA9Ce,QAAQ;EAoD9B,0DAAO;IACN,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,YAAY;IAErB,0EAAU;MACT,UAAU,EAAE,CAAC;EAIf,+BAAM;IAAE,OAAO,EAAE,YAAY;EAG9B,kCAA2B;IAC1B,UAAU,EAAE,IAAI;EAGjB,4CAA4B;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IAEX,wDAAM;MACL,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;EAKZ,4CAAqB;IADtB,yBAAkB;MAEhB,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;MAEX,+BAAM;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;EAKb,4CAAoB;IADrB,wBAAiB;MAEf,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;MAEX,8BAAM;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;EAcd,aAAM;IACL,SAAS,EAxHU,IAAI;IAyHvB,OAAO,EAjHe,OAAO;IAqH5B,kDAAU;MACT,UAAU,EAAE,QAAQ;IAItB,eAAE;MACD,SAAS,EA/HS,QAAQ;IAkI3B,iBAAI;MACH,KAAK,EAlIe,QAAQ;MAmI5B,MAAM,EAlIe,QAAQ;EAwJ7B,mBAAM;IAAE,KAAK,EA3JY,OAAoB;EA6J7C,eAAE;IAAE,KAAK,EA7JgB,OAAoB;EAgK9C,mBAAY;IAEX,UAAU,EA9JW,OAAc;IAgKnC,yBAAM;MAAE,KAAK,EApKY,OAAoB;IAsK7C,qBAAE;MAAE,KAAK,EAtKgB,OAAoB;EAyKxC,oBAAa;IAElB,UAAU,EAvKW,OAAc;IAyKnC,0BAAM;MAAE,KAAK,EA7KY,OAAoB;IA+K7C,sBAAE;MAAE,KAAK,EA/KgB,OAAoB;EAmL5C,wBAAe;IACb,OAAO,EA5Ke,GAAG;IA6KzB,MAAM,EA5Ke,WAAsB;IA6K3C,cAAc,EAAE,IAAI;IACpB,4BAAG;MACD,OAAO,EAhLa,GAAG;MAiLvB,MAAM,EAhLa,WAAsB;;AAsO9C,sBAAM;EAAE,KAAK,EAAE,GAAG;AAClB,sEAAyC;EAAE,KAAK,EAAE,IAAI;AAErD,4CAAqB;EADtB,sCAAwB;IAEtB,KAAK,EAAE,IAAI;AAIZ,4CAAoB;EADrB,qCAAuB;IAErB,KAAK,EAAE,IAAI;AAKb,wBAAM;EAAE,KAAK,EAAE,QAAQ;AACvB,0EAAyC;EAAE,KAAK,EAAE,IAAI;AAErD,4CAAqB;EADtB,wCAAwB;IAEtB,KAAK,EAAE,IAAI;AAIZ,4CAAoB;EADrB,uCAAuB;IAErB,KAAK,EAAE,IAAI;AAKb,uBAAM;EAAE,KAAK,EAAE,GAAG;AAClB,wEAAyC;EAAE,KAAK,EAAE,IAAI;AAErD,4CAAqB;EADtB,uCAAwB;IAEtB,KAAK,EAAE,IAAI;AAIZ,4CAAoB;EADrB,sCAAuB;IAErB,KAAK,EAAE,IAAI;AAKb,uBAAM;EAAE,KAAK,EAAE,GAAG;AAClB,wEAAyC;EAAE,KAAK,EAAE,IAAI;AAErD,4CAAqB;EADtB,uCAAwB;IAEtB,KAAK,EAAE,IAAI;AAIZ,4CAAoB;EADrB,sCAAuB;IAErB,KAAK,EAAE,IAAI;AAKb,sBAAM;EAAE,KAAK,EAAE,SAAS;AACxB,sEAAyC;EAAE,KAAK,EAAE,IAAI;AAErD,4CAAqB;EADtB,sCAAwB;IAEtB,KAAK,EAAE,IAAI;AAIZ,4CAAoB;EADrB,qCAAuB;IAErB,KAAK,EAAE,IAAI;AAKZ,wBAAM;EAAE,KAAK,EAAE,SAAS;AACxB,0EAAyC;EAAE,KAAK,EAAE,IAAI;AAEpD,4CAAqB;EADvB,wCAAwB;IAEjB,KAAK,EAAE,IAAI;AAIf,4CAAoB;EADvB,uCAAuB;IAElB,KAAK,EAAE,IAAI;AAKhB,wBAAM;EAAE,KAAK,EAAE,KAAK;AACpB,0EAAyC;EAAE,KAAK,EAAE,IAAI;AAEpD,4CAAqB;EADvB,wCAAwB;IAEjB,KAAK,EAAE,IAAI;AAIf,4CAAoB;EADvB,uCAAuB;IAElB,KAAK,EAAE,IAAI;;AC7ShB,YAAa;EAlBf,MAAM,EAAE,qBAA4D;EACpE,WAAwB,EApBS,SAAa;EAqB9C,YAA6B,EAvBD,CAAC;EAwB7B,OAAO,EAnBa,CAAC;EAoBrB,UAAU,EAAE,IAAI;EAChB,QAAQ,EAlBa,MAAM;EAoB3B,iBAAO;IACL,UAAU,EAAE,IAAI;IAChB,KAAK,EfuOS,IAAI;IetOlB,WAAwB,EA5BY,QAAY;IA6BhD,OAAO,EArBW,KAAK;IAsBvB,qBAAI;MAAE,OAAO,EAnBc,KAAK;;;ACoBhC,aAAc;EAAE,OAAO,EAAE,IAAI;;;AAG7B,kBAAmB;EACjB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAzCC,OAAI;EA0Cf,KAAK,EAlCc,OAAM;EAmCzB,OAAO,EAAE,GAAG;EACZ,GAAG,EAAE,CAAC;EACN,IAAiB,EAAE,IAAI;EACvB,WAAW,EAAE,OAAO;EACpB,WAAW,EAxBU,MAAmB;EAyBxC,KAAK,EAAE,GAAG;;AAGZ,0BAA2B;EACzB,SAAS,EAAC,KAAK;EACf,IAAiB,EAAE,GAAG;EACtB,WAAwB,EAAC,MAAM;;AAGjC,wBAAyB;EACvB,KAAK,EAAE,IAAI;EAEX,OAAO,EA1DS,uBAAkB;EA4DlC,gCAAQ;IAAE,aAAa,EAAE,YAAY;EAErC,0CAAkB;IAAE,YAAY,EAAE,IAAI;;;AAKtC,+BAAa;EACX,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,IAAiB,EAnEK,IAAI;EAoE1B,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,kBAA2C;EAEnD,mCAAM;IACJ,gBAAgB,EAAE,KAAK;IACvB,YAAY,EA/EL,OAAI;IAgFX,gBAAgB,EAAE,sBAAsB;IACxC,iBAA8B,EAAE,sBAAsB;IACtD,kBAAmC,EAAE,sBAAsB;IAC3D,GAAG,EAAE,KAA0B;EAEjC,sCAAS;IACP,mBAAmB,EAAE,KAAK;IAC1B,YAAY,EAAE,kBAA0B;IACxC,mBAAmB,EAAE,sBAAsB;IAC3C,iBAA8B,EAAE,sBAAsB;IACtD,kBAAmC,EAAE,sBAAsB;IAC3D,MAAM,EAAE,KAA0B;EAGpC,qCAAQ;IAAE,KAAK,EAAE,KAA0B;EAC3C,oCAAO;IAAE,IAAI,EAAE,KAA0B;;;AAK7C;;;;;qBAKsB;EACpB,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,CAAC;EACT,WAAW,EAlGW,IAAiB;EAmGvC,KAAK,EArGc,OAAM;;AAuG3B,oBAAqB;EACnB,MAAM,ETMI,cAAiE;ESL3E,SAAS,EAxGS,QAAY;EAyG9B,WAAW,EAAE,GAAG;;AAGlB,6BAA8B;EAC5B,KAAK,EAtGe,IAAI;EAuGxB,MAAM,EAtGe,GAAG;EAuGxB,MAAM,EArHS,iBAAoB;EAsHnC,QAAQ,EAAE,QAAQ;EAClB,KAAsB,ET3ClB,SAAmD;ES4CvD,MAAM,ET5CF,IAAmD;;AS8CzD,wBAAyB;EACvB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,OAAO;EACf,UAAU,EA/GU,OAAM;;AAkH5B,kBAAmB;EACjB,QAAQ,EAAE,QAAQ;EAClB,KAAsB,EAAE,IAAI;EAC5B,GAAG,EAAE,IAAI;EACT,KAAK,EAAE,kBAAmC;EAC1C,eAAe,EAAE,IAAI;EACrB,SAAS,EApHU,IAAI;EAqHvB,WAAW,EApHU,MAAmB;EAqHxC,WAAW,EAAE,aAAa;EAE1B,kDACQ;IAAE,KAAK,EAAE,kBAAiB;;AAGpC,iBAAkB;EAChB,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,WAAW;EACvB,UAAU,EA7HK,kBAAe;EA8H9B,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,IAAI;EACb,GAAG,EAAE,CAAC;EACN,IAAiB,EAAE,CAAC;EACpB,MAAM,EhBwKW,OAAO;;AgBrK1B,uBAAwB;EACtB,gBAAgB,EAxJG,OAAM;EAyJzB,QAAQ,EAAE,QAAQ;EAClB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,gBAAe;;AAG7B,qBAAsB;EACpB,UAAU,EAAE,WAAW;EACvB,aAAa,EAAE,GAAG;EAClB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,IAAI;EACb,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;;;AAKT,4CAAiB;EACf,kBAAmB;IAAE,KAAK,EAlLJ,KAAK;IAkL6B,IAAiB,EAAE,OAAO;IAE9E,sCAAS;MACP,YAAY,EAAE,kBAA0B;MACxC,mBAAmB,EAAE,sBAAsB;MAC3C,iBAA8B,EAAE,sBAAsB;MACtD,kBAAmC,EAAE,sBAAsB;MAC3D,MAAM,EAAE,KAA0B;IAEpC,qCAAQ;MACN,YAAY,EAAE,kBAA0B;MACxC,gBAAgB,EAAE,sBAAsB;MACxC,kBAAkB,EAAE,sBAAsB;MAAE,mBAAmB,EAAE,sBAAsB;MACvF,GAAG,EA3Le,IAAI;MA4LtB,IAAI,EAAE,IAAI;MACV,KAAK,EAAE,KAA0B;IAEnC,oCAAO;MACL,YAAY,EAAE,kBAA0B;MACxC,gBAAgB,EAAE,sBAAsB;MACxC,iBAAiB,EAAE,sBAAsB;MACzC,mBAAmB,EAAE,sBAAsB;MAC3C,GAAG,EApMe,IAAI;MAqMtB,IAAI,EAAE,KAA0B;MAChC,KAAK,EAAE,IAAI;ACjKnB;GACI;EAlBN,gBAAgB,EAfH,OAA2D;EAgBxE,YAAY,EAAE,OAAwD;EAG5C,KAAK,EA3BV,OAAI;EA8BzB,YAAY,EArBW,KAAK;EAsB5B,YAAY,EArBW,GAAG;EAsB1B,MAAM,EAAE,CAAC;EACT,WAAW,EAnCI,yCAAU;EAoCzB,SAAS,EAnCW,OAAO;EAoC3B,OAAO,EA9BW,kBAAe;EjBe/B,aAAa,EiBRE,GAAc;;ACgE7B,MAAO;EA/DT,WAAW,EAVO,MAAmB;EAWrC,WAAW,EARO,sDAAiB;EASnC,UAAU,EAAE,MAAM;EAClB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,CAAC;EACd,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,QAAQ;EAClB,aAAa,EAAE,IAAI;EASJ,OAAO,EAhCR,sBAAe;EAiCZ,SAAS,EA7BR,SAAY;EA6C5B,gBAAgB,EJpCI,OAAc;EIuCR,KAAK,EA7CZ,OAAM;EA4EvB,aAAS;IlB7DX,aAAa,EkBrBF,GAAc;EAmFvB,YAAQ;IlB9DV,aAAa,EkB8DmC,MAAM;EAEpD,YAAY;IArCd,gBAAgB,ELQW,OAAY;IKLb,KAAK,EA7CZ,OAAM;EAgFvB,cAAY;IAtCd,gBAAgB,ElB0LJ,OAAO;IkBvLO,KAAK,EA7CZ,OAAM;EAiFvB,cAAY;IAvCd,gBAAgB,ElByLJ,OAAO;IkBtLO,KAAK,EA7CZ,OAAM;EAkFvB,gBAAY;IAxCd,gBAAgB,ElBuLF,OAAO;IkBnLb,KAAK,EA/CE,OAAI;EAoFjB,WAAY;IAzCd,gBAAgB,ElB2LP,OAAO;IkBvLR,KAAK,EA/CE,OAAI;;ACDnB,4DAAqE;EACnE,UAAU,EAPF,OAAM;EAQd,OAAO,EAAE,EAAE;EACX,SAAS,EAAE,IAAI;EACf,OAAO,EATM,IAAI;EAWjB,8EAAS;IACP,aAAa,EAAE,CAAC;IAChB,oFAAG;MAAE,aAAa,EAAE,CAAC;IACrB,kFAAE;MACA,WAAW,EAAE,KAAK;;ACyBxB,yBAGC;EAFC,IAAK;IAAE,iBAAiB,EAAE,YAAY;EACtC,EAAG;IAAE,iBAAiB,EAAE,cAAc;AAExC,sBAGC;EAFC,IAAK;IAAE,cAAc,EAAE,YAAY;EACnC,EAAG;IAAE,cAAc,EAAE,cAAc;AAErC,oBAGC;EAFC,IAAK;IAAE,YAAY,EAAE,YAAY;EACjC,EAAG;IAAE,YAAY,EAAE,cAAc;AAEnC,iBAGC;EAFC,IAAK;IAAE,SAAS,EAAE,YAAY;EAC9B,EAAG;IAAE,SAAS,EAAE,cAAc;;AAIhC,kBAAmB;EACjB,QAAQ,EAAE,QAAQ;EAElB,qBAAG;IAED,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,CAAC;IAGT;2CACkB;MAAE,OAAO,EAAE,IAAI;IAGjC,oCAAe;MAAE,OAAO,EAAE,KAAK;EAGjC,mCAAiB;IAAE,gBAAgB,EAAE,WAAW;IAG9C,sCAAG;MAAE,OAAO,EAAE,KAAK;MAEjB,qDAAe;QAAE,OAAO,EAAE,KAAK;IAEjC,qDAAkB;MAChB,OAAO,EAAE,YAAY;EAKzB,6BAAqB;IACnB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,eAAgB;IpB3ElC,aAAa,EoB4EO,MAAM;IACtB,cAAc,EAAE,MAAM;IACtB,kBAAkB,EAAE,IAAI;IACxB,yBAAyB,EAAE,QAAQ;IACnC,yBAAyB,EAAE,MAAM;;AAKrC,gBAAiB;EACf,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAhHK,IAAI;EAkHnB,wCAAwB;IACtB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAGlB,iBAAiB,EAAE,aAAa;IAEhC,4CAAI;MAAE,OAAO,EAAE,KAAK;MAAE,SAAS,EAAE,IAAI;IAErC,4CAAI;MACF,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,KAAK,EAAE,IAAI;MAKT,WAAW,EAAE,IAAI;MAGnB,wDAAc;QAKZ,WAAW,EAAE,CAAC;MAIhB,2DAAe;QAEX,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC;QAKX,gBAAgB,EAxJT,qBAAmB;QAyJ1B,KAAK,EAjIe,OAAM;QAkI1B,KAAK,EAAE,IAAI;QACX,OAAO,EAvJK,iBAAe;QAwJ3B,SAAS,EA1JK,QAAY;EA+JhC,oCAAoB;IAClB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,IAAiB,EAAE,IAAI;IACvB,SAAS,EAAE,IAAI;IAEf,KAAK,EA/ImB,OAAM;IAgJ9B,UAAU,EAjJM,WAAa;IAkJ7B,OAAO,EAAE,EAAE;IAHX,yCAAK;MAAE,WAAW,EAAE,GAAG;MAAE,OAAO,EA7IX,SAAW;EAmJlC,6BAAa;IACX,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,KAAsB,EAAE,IAAI;IAC5B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,EAAE;IACX,6CAAgB;MAEZ,MAAM,EAAE,GAAG;MACX,gBAAgB,EAxKX,wBAAqB;MAyK1B,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,QAAQ,EAAE,QAAQ;MAClB,KAAK,EAAE,IAAI;MACX,GAAG,EAAE,GAAG;IAKZ,oCAAS;MACP,OAAO,EAAE,IAAI;MACb,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,KAAsB,EAAE,CAAC;MACzB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,iBAAgB;MACxB,UAAU,EAAE,IAAI;MAChB,aAAa,EAAE,IAAI;IAKnB,2CAAS;MACP,KAAsB,EAAE,IAAI;MAC5B,GAAG,EAAE,CAAC;MACN,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,SAAS;MACjB,iBAAiB,EAAE,KAAK;MACxB,YAAY,EAAE,WAAW;MACzB,iBAAiB,EA9LG,OAAM;MA+L1B,gDAAO;QACL,iBAAiB,EFlNZ,OAAI;EE0NjB,0CAA4B;IAAE,OAAO,EAAE,KAAK;EAG5C;8BACY;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,KAAK;IACZ,gBAAgB,EApOT,WAAW;IAqOlB,WAAW,EAAE,kBAAkB;IAC/B,OAAO,EAAE,EAAE;IAEX;sCAAQ;MACN,gBAAgB,EAxOL,kBAAe;IA2O5B;uCAAS;MACP,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAG;MACR,UAAU,EAAE,KAAK;MACjB,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,UAAU;EAGtB,4BAAY;IAAE,IAAiB,EAAE,CAAC;IAChC,mCAAS;MACP,kBAAmC,EAAE,KAAK;MAC1C,YAAY,EAAE,WAAW;MACzB,kBAAmC,EA1Ob,OAAM;IA4O9B,yCAAe;MACb,kBAAmC,EA7Ob,OAAM;EAgPhC,4BAAY;IAAE,KAAsB,EAAE,CAAC;IACrC,mCAAS;MACP,YAAY,EAAE,WAAW;MACzB,iBAA8B,EAAE,KAAK;MACrC,iBAA8B,EApPR,OAAM;MAqP5B,IAAiB,EAAE,GAAG;MACtB,WAAwB,EAAE,IAAI;IAEhC,yCAAe;MACb,iBAA8B,EAzPR,OAAM;;AA8PlC,wBAAyB;EAAE,UAAU,EAAE,MAAM;;AAC7C,cAAe;EACb,MAAM,EAAE,gBAAgB;EACxB,QAAQ,EAAE,MAAM;EAChB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,KAAK;EAEd,iBAAG;IACD,MAAM,EAAC,OAAO;IACd,OAAO,EAAE,YAAY;IACrB,KAAK,EA/QS,SAAW;IAgRzB,MAAM,EAhRQ,SAAW;IAiRzB,UAAU,EAnRO,OAAK;IAqRtB,KAAK,EAAE,IAAI;IACX,YAA6B,EAAE,GAAG;IpBlRtC,aAAa,EoBmRO,MAAM;IAEtB,wBAAS;MACP,UAAU,EAzRY,OAAS;IA4RjC,4BAAa;MAAE,YAA6B,EAAE,CAAC;;AAM/C;mCACY;EAAE,OAAO,EAAE,IAAI;AAG7B,qBAAe;EAAE,OAAO,EAAE,IAAI;;AAIhC,4CAAqB;EAIf;qCACY;IAAE,OAAO,EAAE,OAAO;EAGhC,qBAAe;IAAE,OAAO,EAAE,KAAK;AAKnC,wCAAsB;EAElB,6CAAwB;IAAC,MAAM,EAAE,eAAe;EAChD,iDAA4B;IAC1B,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAC,YAAY;IACnB,OAAO,EAAC,YAAY;EAGtB,yCAAoB;IAClB,OAAO,EAAE,IAAI;;EAKd,YAAY;IAAC,OAAO,EAAE,IAAI;;EAG1B,wBAAuB;IAAC,OAAO,EAAE,IAAI;;EAGrC,cAAc;IAAC,OAAO,EAAE,IAAI;ACvNjC,aAAc;EAjDd,OAAO,EAAE,KAAK;EACd,UAAU,EAxFM,MAAY;EAyF5B,WAAwB,EAxFR,UAAY;EA0F5B,gBAAG;IACD,MAAM,EAvFW,MAAY;IAwF7B,KAAK,EAvFgB,OAAI;IAwFzB,SAAS,EAvFW,QAAY;IAwFhC,WAAwB,EAvFP,SAAW;IAyF5B,2CAAU;MACR,OAAO,EAAE,KAAK;MACd,OAAO,EAxFO,4BAAgB;MAyF9B,KAAK,EAnF4B,OAAS;MAoF1C,UAAU,EAAE,IAAI;MrB/EpB,aAAa,EAwPD,GAAG;MqBvKX,WAAW,EAAE,MAAM;MACnB,SAAS,EAAE,GAAG;MACd,WAAW,EAAE,OAAO;MrB3C1B,UAAU,EAAE,+BAAsB;IqB+C9B;;iCAIA;MAAE,UAAU,EApGU,OAAqC;IAyB/D,mEAAU;MACR,MAAM,EAvB2B,OAAO;MAwBxC,KAAK,EAvBgC,OAAS;IAyBhD,gKAKA;MAAE,UAAU,EA7B0B,WAAW;IAqC/C,2DAAU;MACR,UAAU,EA/BoB,OAAc;MAgC5C,KAAK,EAnC0B,OAAM;MAoCrC,WAAW,EAnCqB,IAAiB;MAoCjD,MAAM,EAnCqB,OAAO;MAqClC,gJACQ;QAAE,UAAU,EArCU,OAAc;EAkGhD,gBAAG;IAKC,KAAK,EA5HW,IAAc;IA6H9B,OAAO,EAAE,KAAK;;;AAYhB,oBAAqB;EA7GT,UAAU,EAAE,MAAM;EA2FhC,qCAAG;IAEC,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,YAAY;;;AC3DvB,MAAO;EApCP,YAAY,EA9BK,KAAK;EA+BtB,YAAY,EA9BI,GAAG;EA+BnB,YAAY,EAAE,OAAoD;EAClE,aAAa,EAzBK,OAAY;EA0B9B,OAAO,EAzBK,OAAY;EA2BxB,UAAU,EArCH,OAAoC;EAsChB,KAAK,EAzBjB,OAAI;EA6BnB,qBAAe;IAAE,UAAU,EAAE,CAAC;EAC9B,oBAAc;IAAE,aAAa,EAAE,CAAC;EAK5B,gGAA0B;IAAE,KAAK,EAnCtB,OAAI;EA0CjB,gEAAkB;IAChB,WAAW,EAAE,CAAC;IAAE,aAAa,EAAE,QAAgB;IAC/C,4HAAY;MAAE,WAAW,EAAE,GAAG;EAYhC,cAAU;IAtCZ,YAAY,EA9BK,KAAK;IA+BtB,YAAY,EA9BI,GAAG;IA+BnB,YAAY,EAAE,OAAoD;IAClE,aAAa,EAzBK,OAAY;IA0B9B,OAAO,EAzBK,OAAY;IA2BxB,UAAU,EAAE,OAAG;IACY,KAAK,EAzBjB,OAAI;IA6BnB,6BAAe;MAAE,UAAU,EAAE,CAAC;IAC9B,4BAAc;MAAE,aAAa,EAAE,CAAC;IAK5B,wKAA0B;MAAE,KAAK,EAnCtB,OAAI;IA0CjB,gHAAkB;MAChB,WAAW,EAAE,CAAC;MAAE,aAAa,EAAE,QAAgB;MAC/C,4KAAY;QAAE,WAAW,EAAE,GAAG;IAc9B,6BAAe;MACb,KAAK,EAvDY,OAAc;MAyD/B,wEACQ;QACN,KAAK,EA1DgB,OAAwD;EA+DnF,aAAS;ItB3DX,aAAa,EAwPD,GAAG;;;AuBhJf,cAAe;EA3EjB,MAAM,EAnDa,iBAAqB;EAoDxC,WAAwB,EAAE,CAAC;EAC3B,aAAa,EAlDa,OAAY;EAoDtC,gBAAI;IACF,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,CAAC;EAwEZ,qBAAO;IAjEX,gBAAgB,EA7BC,OAAI;IA8BrB,OAAO,EA1Da,iBAAe;IA2DnC,UAAU,EA1DQ,MAAM;IA2DxB,KAAK,EA1Da,OAAM;IA2DxB,WAAW,EA7BO,MAAmB;IA8BrC,SAAS,EA1DQ,IAAY;IA2D7B,WAAW,EAjDa,sDAAiB;EA6GrC,qBAAO;IArDX,gBAAgB,EA9DD,OAAM;IA+DrB,OAAO,EA9Da,iBAAe;IA+DnC,UAAU,EA9DQ,MAAM;IA+DxB,KAAK,EA7CY,OAAI;IA8CrB,WAAW,EA1CO,MAAmB;IA2CrC,SAAS,EA9DQ,IAAY;IA+D7B,WAAW,EA9Da,sDAAiB;EA8GrC,2BAAa;IAzCjB,gBAAgB,EA/CH,OAAM;IAgDnB,OAAO,EAhEY,SAAY;IAiE/B,UAAU,EAhEO,MAAM;IAiEvB,KAAK,EAnEY,OAAQ;IAoEzB,SAAS,EAjEY,OAAY;IAkEjC,WAAW,EAxDO,MAAmB;IAyDrC,WAAW,EAjEY,GAAG;IAkE1B,aAAa,EAjEY,kBAAsB;EAoG3C,2BAAa;IA5BjB,gBAAgB,EA7DH,OAAM;IA8DnB,OAAO,EArEY,SAAY;IAsE/B,UAAU,EArEO,MAAM;IAsEvB,KAAK,EAxEY,OAAI;IAyErB,SAAS,EAtEY,QAAY;IAuEjC,WAAW,EAtEO,MAAmB;IAuErC,aAAa,EAtEY,kBAAsB;EA6F3C,0BAAY;IAhBhB,gBAAgB,EA1EH,OAAM;IA2EnB,UAAU,EA1EM,MAAM;IA2EtB,OAAO,EA1EW,iBAAiB;;;ACDjC,SAAU;EArBZ,gBAAgB,EAtBG,OAAM;EAuBzB,MAAM,EAxBc,SAAY;EAyBhC,MAAM,EAAE,eAA+E;EACvF,OAAO,EAhBU,QAAW;EAiB5B,aAAa,EAhBc,QAAY;EAqCnC,gBAAO;IAdX,UAAU,EApBW,OAAc;IAqBnC,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;EAeV,0BAAmB;IAjBvB,UAAU,EAnBqB,OAAgB;IAoB/C,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;EAgBV,wBAAiB;IAlBrB,UAAU,EAlBmB,OAAc;IAmB3C,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;EAiBV,sBAAe;IAnBnB,UAAU,EAjBiB,OAAY;IAkBvC,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;EAmBV,gBAAS;IxBjCX,aAAa,EwBfY,GAAc;IAiDnC,uBAAO;MxBlCX,aAAa,EAAE,GAAO;EwBqCpB,eAAQ;IxBrCV,aAAa,EwBqCe,MAAM;IAC9B,sBAAO;MxBtCX,aAAa,EwBsCgB,KAAK;;ACwDlC,aAAc;EA1EhB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,iBAA4F;EACpG,MAAM,ElB0EQ,SAAiE;EkBzE/E,gBAAgB,EAAE,IAAI;EACtB,YAAY,EAAE,IAAI;EAMhB,OAAO,EAAE,KAAK;EACd,KAAK,EA/CgB,IAAI;EAgDzB,MAAM,EA/CgB,IAAY;EAuDlB,UAAU,EAhDF,OAAM;EAyG5B,4BAAiB;IA7ErB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,iBAA4F;IACpG,MAAM,ElB0EQ,SAAiE;IkBzE/E,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,IAAI;IAEhB,OAAO,EAAE,YAAY;IACrB,KAAK,EA/ByB,IAAY;IAgC1C,MAAM,EA/ByB,OAAa;IAsGxC,iDAAqB;MACnB,UAAU,EAAE,CAAC;MACb,WAAwB,EAAE,OAAiC;MAC3D,QAAQ,EAAE,QAAQ;MAClB,MAAM,EAAE,QAAiE;IAE3E,yDAA6B;MAC3B,KAAK,EAAE,QAAqF;MAC5F,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,CAAC;EAGb,oBAAS;IAvEK,UAAU,EAhDF,OAAM;IzBQ9B,aAAa,EyBVK,GAAc;IA2H5B,yCAAqB;MAtCT,UAAU,EAxEC,OAAc;MzBHzC,aAAa,EyBVK,GAAc;MA4FlC,+CAAQ;QACN,UAAU,EA1EuB,OAA6C;EA0G5E,mBAAQ;IA3EM,UAAU,EAhDF,OAAM;IzBQ9B,aAAa,EyBTI,MAAe;IA8H5B,wCAAqB;MA1CT,UAAU,EAxEC,OAAc;MzBHzC,aAAa,EyBTI,MAAe;MA2FlC,8CAAQ;QACN,UAAU,EA1EuB,OAA6C;EA8G5E,+CAAwB;IA/EV,UAAU,EAhDF,OAAM;IAoD9B,MAAM,EA/BqB,WAAsB;IAgCjD,OAAO,EAjCqB,GAAG;IA6G3B,yFAAqB;MA9CT,UAAU,EAxEC,OAAc;MA4EzC,MAAM,EZ/Ec,OAAqB;MYgFzC,OAAO,EApEqB,GAAG;MAsEjC,qGAAQ;QACN,UAAU,EA1EuB,OAA6C;;AAmH9E,4BAA6B;EAC3B,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,QAAqF;EAC7F,UAAU,EAvIuB,OAA8C;;AAyIjF,oBAAqB;EAzEvB,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EACV,GAAG,EA1D8B,UAAY;EA2D7C,KAAK,EA7DqB,IAAY;EA8DtC,MAAM,EA7DqB,QAAY;EA8DvC,MAAM,EAAE,cAAqG;EAC7G,MAAM,EAtDqB,OAAO;EAyDlC,gBAAgB,EAAE,YAAY;EAC1B,YAAY,EAAE,YAAY;EAOZ,UAAU,EAxEC,OAAc;EA+E3C,0BAAQ;IACN,UAAU,EA1EuB,OAA6C;;AC6H9E,gBAAiB;EAlHnB,QAAQ,EAAE,KAAK;EAEf,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,UAAU,EA5CY,OAAM;EA6C5B,UAAU,EA9CQ,mBAAiB;EA+CnC,OAAO,EAAE,IAAqD;EAC9D,OAAO,EAAE,IAAI;EACb,IAAiB,EAAE,CAAC;;AA0GlB,aAAwB;EAhGxB,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,QAAQ;EAClB,OAAO,EA/BI,IAAI;EAgCf,KAAK,EAAE,IAAI;EACX,GAAG,EAAC,CAAC;EACL,aAAa,EA9CD,GAAc;EA+C1B,IAAiB,EAAE,CAAC;EAgDZ,gBAAgB,EA9GV,OAAM;EA+GE,OAAO,EAAE,QAAQ;EAE3B,MAAM,EAAE,iBAAyC;EAI7D,UAAU,EAhHM,2BAAyB;EA2DzC,wCAAsB;IAuFtB,aAAwB;MAtFtB,UAAU,EAAC,KAAK;EAIlB,6CAAkB;IAAE,SAAS,EAAE,CAAC;EAGhC,4BAAiB;IAAE,UAAU,EAAE,CAAC;EAEhC,2BAAgB;IAAE,aAAa,EAAE,CAAC;EAIlC,4CAAqB;IAyErB,aAAwB;MAxEtB,KAAK,EA7EY,GAAG;MA8EpB,SAAS,EA7EI,OAAU;MA8EvB,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,MAAM;EA0ChB,4CAAqB;IA0BrB,aAAwB;MAzBtB,GAAG,EA7Ha,OAAa;EAiK7B,oBAAS;I1BnJX,aAAa,E0BAD,GAAc;EAoJxB,mBAAS;I1BpJX,aAAa,E0BCF,MAAe;EAoJxB,sBAAW;IArDS,OAAO,EAqDuB,CAAC;EAtFrD,4CAAqB;IAuFnB,kBAAQ;MAtFR,KAAK,EAsFuC,GAAG;MArF/C,SAAS,EA7EI,OAAU;MA8EvB,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,MAAM;EALhB,4CAAqB;IAwFnB,mBAAQ;MAvFR,KAAK,EAuFuC,GAAG;MAtF/C,SAAS,EA7EI,OAAU;MA8EvB,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,MAAM;EALhB,4CAAqB;IAyFnB,oBAAU;MAxFV,KAAK,EAwFyC,GAAG;MAvFjD,SAAS,EA7EI,OAAU;MA8EvB,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,MAAM;EALhB,4CAAqB;IA0FnB,mBAAQ;MAzFR,KAAK,EAyFuC,GAAG;MAxF/C,SAAS,EA7EI,OAAU;MA8EvB,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,MAAM;EALhB,4CAAqB;IA2FnB,oBAAS;MA1FT,KAAK,EA0FwC,GAAG;MAzFhD,SAAS,EA7EI,OAAU;MA8EvB,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,MAAM;EAuFd,kBAAO;IAEL,GAAG,EAAC,CAAC;IACL,IAAI,EAAC,CAAC;IACN,MAAM,EAAC,IAAI;IACX,MAAM,EAAE,KAAK;IACb,UAAU,EAAC,KAAK;IAChB,SAAS,EAAE,eAAe;IAC1B,WAAW,EAAE,YAAY;IApG7B,4CAAqB;MA4FnB,kBAAO;QA3FP,KAAK,EA4F+B,IAAI;QA3FxC,SAAS,EA7EI,OAAU;QA8EvB,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,MAAM;EAmGd,oBAAS;IACP,OAAO,EAAE,IAAiB;EAG5B,iCAA8B;IAnDlC,SAAS,EA/Hc,MAAY;IAgInC,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAjIc,QAAY;IAkI7B,KAAsB,EAjIJ,QAAY;IAkI9B,KAAK,EAjIc,OAAK;IAkIxB,WAAW,EAjIS,IAAiB;IAkIrC,MAAM,E1B+Ke,OAAO;;A2B/N1B,SAAU;EAnDZ,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,CAAC;EACT,OAAO,EAnDU,UAAc;EAoD/B,eAAe,EAjDI,IAAI;EAkDvB,mBAAmB,EAjDI,OAAO;EAkD9B,WAAW,EApCiB,sDAAqB;EAsCjD,YAAG;IACD,MAAM,EApDa,eAAiB;IAqDpC,SAAS,EApCgB,QAAmB;IAqC5C,WAAW,EA3Ce,MAAqB;IA6C/C,2BAAe;MACb,OAAO,EAAE,KAAK;MACd,KAAK,EA1Cc,OAAoB;MA2CvC,MAAM,EApDW,CAAC;MAqDlB,OAAO,EApDW,kBAAc;MAqDhC,oEACQ;QACN,UAAU,EAzDO,oBAAoB;QA0DrC,KAAK,EA3De,OAAkD;IA+D1E,gDAAsC;MACpC,KAAK,EAjEkB,OAAkD;MAkEzE,WAAW,EA3Da,MAAqB;MA4D7C,WAAW,EA1Da,sDAAqB;IA6D/C,oBAAU;MACR,UAAU,EAAE,SAA8C;MAC1D,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,IAAI;MAChB,gBAAgB,EAvDG,KAAoC;IA0DzD,oBAAU;MACR,KAAK,EAnEc,OAAoB;MAqErC,SAAI,EApEiB,QAAmB;MAqExC,WAAM,EApEiB,IAAI;MAsE7B,cAAc,EArEc,SAAS;;ACuIvC,aAAc;EApGd,QAAQ,EAAE,QAAQ;EAiElB,aAA8B,EAjGP,SAAmB;EAmC1C,kBAAK;IACH,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,KAAsB,EAAE,CAAC;IACzB,GAAG,EAAE,CAAC;IACN,WAAwB,EAAE,SAAS;IAGnC,wBAAQ;MACN,QAAQ,EAAE,QAAQ;MAClB,OAAO,EAAE,EAAE;MACX,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,KAAK;MACd,YAAY,EAAE,KAAK;MACnB,GAAG,EAAE,GAAG;MAER,IAAiB,EAAE,GAAG;IAGxB,yBAAS;MAAE,gBAAgB,EAzEH,kBAAe;EA+EzC,kBAAK;IACH,iBAA8B,EAAE,wBAAqB;EAoCvD,kBAAK;IAAE,KAAK,EAlGc,UAAqB;IAmG7C,wBAAQ;MACN,gBAAgB,EAAE,KAAK;MACvB,YAAY,EApGQ,QAA8B;MAqGlD,GAAG,EAAE,GAAG;MACR,WAAwB,EApGK,SAAY;EAyH7C,wBAAW;IAAE,YAAY,EAAE,2CAA8C;EA/DzE,4BAAK;IACH,iBAA8B,EAAE,wBAAqB;EA8DvD,kCAAW;IAAE,YAAY,EAAE,2CAA8C;EA/DzE,wBAAK;IACH,iBAA8B,EAAE,wBAAqB;EADvD,0BAAK;IACH,iBAA8B,EAAE,wBAAqB;EA2ErD,kBAAO;IArET,aAA8B,EAnFP,OAAoB;IAqF3C,uBAAK;MAAE,KAAK,EApFc,OAAmB;MAqF3C,6BAAQ;QACN,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAtFQ,QAAe;QAuFnC,GAAG,EAAE,GAAG;QACR,WAAwB,EAtFK,SAAY;EAqJ3C,mBAAQ;IAxDV,aAA8B,EA1FP,QAAoB;IA4F3C,wBAAK;MAAE,KAAK,EA3Fc,QAAmB;MA4F3C,8BAAQ;QACN,gBAAgB,EAAE,KAAK;QACvB,YAAY,EA7FQ,SAAe;QA8FnC,GAAG,EAAE,GAAG;QACR,WAAwB,EA7FK,SAAY;EA+I3C,mBAAQ;IA7BV,aAA8B,EAxGP,MAAmB;IA0G1C,wBAAK;MAAE,KAAK,EAzGc,SAAmB;MA0G3C,8BAAQ;QACN,gBAAgB,EAAE,KAAK;QACvB,YAAY,EA3GQ,SAA8B;QA4GlD,GAAG,EAAE,GAAG;QACR,WAAwB,EA3GK,SAAY;EAkI3C,oBAAS;IAAE,YAAY,EAAE,IAAI;EAhB/B,kCAAW;IAAE,YAAY,EAAE,2CAA8C;EAoBvE,yBAAc;I5B7IhB,kCAAqC,EA8OzB,GAAG;IA7Of,+BAAkC,EA6OtB,GAAG;IA5Of,0BAA6B,EA4OjB,GAAG;IA3Of,uBAA0B,EA2Od,GAAG;E4BhGb,wBAAa;I5B9If,kCAAqC,E4B8IsB,MAAM;I5B7IjE,+BAAkC,E4B6IyB,MAAM;I5B5IjE,0BAA6B,E4B4I8B,MAAM;I5B3IjE,uBAA0B,E4B2IiC,MAAM;EAE7D,gCAAW;IAAE,YAAY,EAAC,IAAI;EAC9B,+BAAU;IAAE,YAAY,EAAC,IAAI;EAC7B,6BAAM;IACJ,GAAG,EAAE,GAAG;IACR,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE,UAAU;;AC7E5B,QAAS;EA3DX,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,MAAM;EAChB,aAAa,EA7CO,mBAAiB;EA8CrC,WAAW,EA7Cc,OAAW;EA+CpC,WAAG;IACD,cAAc,EAAE,SAAS;EAG3B;;aAEG;IACD,KAAK,E7ByMS,IAAI;I6BxMlB,WAAwB,EtBiBlB,IAAmD;IsBhBzD,aAAa,EAAE,CAAC;IAChB,WAAW,EAtDO,sDAAiB;IAuDnC,WAAW,EA3Cc,MAAmB;IA4C5C,SAAS,EAvDO,QAAY;IAwD5B,KAAK,EAvDY,OAAS;IAyD1B;;iBAAE;MACA,eAAe,EAxDK,IAAI;MAyDxB,KAAK,EA3DU,OAAS;MA4DxB,OAAO,EA9CY,cAAgB;MA+CnC;;yBAAQ;QACN,KAAK,EAzDc,OAAkD;IA6DzE;;wBAAW;M7BxDX,aAAa,E6BNO,GAAG;MAgErB,WAAW,EA1DY,MAAmB;MA2D1C,UAAU,EA1DI,OAAc;MA2D5B,OAAO,EAxDY,cAAgB;MAyDnC,MAAM,EAxDY,OAAO;MAyDzB,KAAK,EA3DY,OAAM;MA4DvB;;gCAAQ;QACN,UAAU,EA9DQ,OAAiD;;AC+KrE,OAAQ;EArKZ,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EACV,mBAAmB,EAAE,IAAI;EACtB,gBAAgB,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EAGzB,aAAM;IACJ,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,IAAwB;IACvC,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,WAAW;IAClB,UAAU,EA1CF,OAAU;IA2ClB,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,IAAsB;IAAE,MAAM,EAvCrB,IAAI;IAwCpB,MAAM,EAAE,OAAO;I9BWjB,UAAU,EAAE,mBAAsB;E8BHlC,aAAM;IACJ,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,OAAO,EAAC,CAAC;IAET,qBAAU;MAAE,WAAW,EAAE,CAAC;MAAE,YAAY,EAAE,CAAC;EAO7C,mBAAY;IACV,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,KAAK;IACd,UAAU,EA5DK,OAAM;IA6DrB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAA2B;IAClC,MAAM,EAAE,MAA2B;IAEnC,kBAAkB,EAAE,mBAAuC;IAC3D,eAAe,EAAE,mBAAuC;IACxD,aAAa,EAAE,oBAAkB;IACjC,UAAU,EAAE,mBAAuC;IAEnD,iBAAiB,EAAE,oBAAkB;IACrC,cAAc,EAAE,oBAAkB;IAClC,YAAY,EAAE,oBAAkB;IAChC,SAAS,EAAE,oBAAkB;EAG/B,6BAAsB;IACpB,UAAU,EA5EQ,OAAc;EA+ElC,mCAA4B;IAC1B,IAAI,EAAE,OAA4B;EAWpC,aAAM;IACJ,KAAK,EAAE,IAAW;IAClB,MAAM,EArGU,IAAI;EAwGtB,mBAAY;IACV,KAAK,EAAE,MAAgB;IACvB,MAAM,EAAE,MAAgB;EAG1B,mCAA4B;IAC1B,IAAI,EAAE,OAAiB;EAoBvB,aAAM;IACJ,KAAK,EAAE,WAAW;IAClB,UAAU,EAzIJ,OAAU;EA4IlB,mBAAY;IACV,UAAU,EAnIG,OAAM;EAsIrB,6BAAsB;IACpB,UAAU,EApIM,OAAc;EA2FlC,mBAAM;IACJ,KAAK,EAAE,IAAW;IAClB,MAAM,EApGU,MAAM;EAuGxB,yBAAY;IACV,KAAK,EAAE,IAAgB;IACvB,MAAM,EAAE,IAAgB;EAG1B,yCAA4B;IAC1B,IAAI,EAAE,OAAiB;EAXzB,mBAAM;IACJ,KAAK,EAAE,MAAW;IAClB,MAAM,EAtGU,OAAO;EAyGzB,yBAAY;IACV,KAAK,EAAE,OAAgB;IACvB,MAAM,EAAE,OAAgB;EAG1B,yCAA4B;IAC1B,IAAI,EAAE,IAAiB;EAXzB,kBAAM;IACJ,KAAK,EAAE,IAAW;IAClB,MAAM,EAvGU,MAAM;EA0GxB,wBAAY;IACV,KAAK,EAAE,IAAgB;IACvB,MAAM,EAAE,IAAgB;EAG1B,wCAA4B;IAC1B,IAAI,EAAE,OAAiB;EA4FjB,oBAAM;I9B/LZ,aAAa,E8B+LiB,GAAG;EAC3B,0BAAY;I9BhMlB,aAAa,E8BgMuB,GAAG;EAInC,aAAQ;I9BpMZ,aAAa,E8BoMiB,MAAM;IAC9B,mBAAM;M9BrMZ,aAAa,E8BqMiB,IAAI;IAC5B,yBAAY;M9BtMlB,aAAa,E8BsMuB,IAAI;;ACtGxC,KAAM;EAnER,UAAU,EA7CD,OAAM;EA8Cf,aAAa,EATO,OAAY;EAUhC,MAAM,EAAE,iBAA0D;EAClE,YAAY,EAbC,IAAI;EAejB,aAAQ;IACN,UAAU,EA5BK,WAAW;IA6B1B,KAAK,EArBc,OAAI;IAuBrB,SAAI,EA7BgB,IAAY;IA8BhC,WAAM,EA7BgB,IAAI;EAiC9B,WAAM;IACJ,UAAU,EA5CE,OAAc;IA+CxB;qBACG;MACD,OAAO,EA7CM,wBAAmB;MA8ChC,SAAS,EAjDM,QAAqB;MAkDpC,WAAW,EAhDM,IAAuB;MAiDxC,KAAK,EArCU,OAAI;EA0CzB,WAAM;IACJ,UAAU,EA1DE,OAAc;IA6DxB;qBACG;MACD,OAAO,EA3DM,wBAAmB;MA4DhC,SAAS,EA/DM,QAAqB;MAgEpC,WAAW,EA9DM,IAAuB;MA+DxC,KAAK,EAnDU,OAAI;EAyDvB;aACG;IACD,OAAO,EA7DO,kBAAc;IA8D5B,SAAS,EA7DO,QAAY;IA8D5B,KAAK,EA7DY,OAAI;IA8DrB,UAAU,E/BmKE,IAAI;E+BhKlB,uDAEoB;IAAE,UAAU,EAjGhB,OAAK;EAoGvB;;;;;aAKM;IAAE,OAAO,EAtED,UAAU;IAsES,WAAW,EA1E1B,QAAY;;ACrB5B,KAAM;EAEJ,aAAa,EAAE,YAAY;EAC3B,WAAW,EAAE,CAAC;EhC2IlB,yBAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,WAAQ;IAAE,KAAK,EAAE,IAAI;EgC3IjB,0BAAe;IACb,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,IAAI;IAChB,KAAK,EhC6OK,IAAI;IgC5Od,kCAAI;MACF,OAAO,EAAE,KAAK;MAEZ,gBAAK,EA3BU,OAAO;MA6BxB,KAAK,EAzBqB,OAA2B;MA0BrD,OAAO,EAAE,SAAqD;MAC9D,WAAW,EAzBS,sDAAiB;MA0BrC,SAAS,EA3BS,IAAY;MA4B9B,8CAAQ;QAEJ,gBAAK,EAjCc,OAAuD;MAoC9E,8CAAO;QACH,OAAO,EAAE,IAAI;IAGnB,4CAAW;MAEP,gBAAK,EA3CiB,OAAM;MA6C9B,KAAK,EA1CqB,OAA2B;EA+CrD,8DAAE;IhCrBR,iCAAqC,EA8OzB,GAAG;IA7Of,8BAAkC,EA6OtB,GAAG;IA5Of,yBAA6B,EA4OjB,GAAG;IA3Of,sBAA0B,EA2Od,GAAG;EgCtNT,4DAAE;IhCxBR,kCAAqC,EA8OzB,GAAG;IA7Of,+BAAkC,EA6OtB,GAAG;IA5Of,0BAA6B,EA4OjB,GAAG;IA3Of,uBAA0B,EA2Od,GAAG;EgClNX,4CAAe;IACb,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,KAAK;IACd,GAAG,EAAE,IAAI;;AAKf,aAAc;EAEZ,aAAa,EA7DU,MAAY;EA8DnC,KAAK,EAAE,IAAI;EhCuFf,yCAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,mBAAQ;IAAE,KAAK,EAAE,IAAI;EgCvFjB,wBAAW;IACT,OAAO,EAAE,IAAI;IACb,KAAK,EhC2LK,IAAI;IgC1Ld,OAAO,EAAE,WAAuB;IAChC,KAAK,EAAE,IAAI;IACX,+BAAS;MAAE,OAAO,EAAE,KAAK;MAAE,KAAK,EAAE,IAAI;IACtC,kCAAY;MAAE,OAAO,EApEL,SAAgB;EAsElC,sBAAW;IACT,OAAO,EAAE,KAAK;IACd,iCAAW;MAAE,OAAO,EAAE,WAAuB;;AAGjD,4CAAqB;EAEjB,cAAW;IACT,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,GAAG;IACd,KAAK,EhC2KG,IAAI;IgC1KZ,MAAM,EAAE,WAA2C;;EAIrD,sBAAW;IACT,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,GAAG;IACd,KAAK,EhCmKG,IAAI;IgClKZ,WAAwB,EAAE,IAAI;IAC9B,YAAyB,EAAE,IAAI;AAKnC,+BAAyB;EACvB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;;;AC9Df,GAAI;EAjBN,WAAW,EAAE,CAAC;EACd,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,iBAAqD;EAC7D,SAAS,EAAE,IAAI;EACf,UAAU,EAxBO,4BAA0B;EjCqD3C,UAAU,EAAE,kBAAsB;EiC3BlC,oBACQ;IACN,UAAU,EA3BW,kCAAqC;EAwCxD,UAAS;IjC5BX,aAAa,EiCTF,GAAc;;;ACYzB,QAAS;EACP,aAAa,EA3BK,kBAAiB;EA4BnC,MAAM,EAvBU,IAAI;EAwBpB,WAAW,EA5BK,IAAiB;EA6BjC,KAAK,EAtBE,OAAI;EAwBX,8BACQ;IACN,aAAa,EA/BS,kBAAyD;IAgC/E,KAAK,EA/Bc,OAAc;EAkCnC,qCACY;IAAE,KAAK,EAAE,eAAe;;AAGtC,QAAS;EACP,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,IAAI;EACb,WAAW,EAhCW,MAAmB;EAiCzC,SAAS,EAtCK,QAAY;EAuC1B,WAAW,EApCK,GAAG;EAqCnB,OAAO,EA1CK,OAAY;EA2CxB,SAAS,EA9BK,KAAK;EA+BnB,IAAiB,EAAE,GAAG;EACtB,KAAK,EAAE,IAAI;EACX,KAAK,EA1CU,OAAM;EA2CrB,UAAU,EA9CH,OAAI;EAgDX,eAAO;IACL,OAAO,EAAE,KAAK;IACd,IAAiB,EAvCN,GAAG;IAwCd,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,SAAuB;IAC/B,YAAY,EAAE,2CAA+C;IAC7D,GAAG,EAAE,KAAwB;IAC7B,cAAc,EAAE,IAAI;IAEpB,mBAAM;MACJ,IAAI,EAAE,IAAI;MACV,KAAsB,EAlDb,GAAG;EAsDhB,eAAS;IlClDX,aAAa,EkCNA,GAAc;EA2DzB,cAAQ;IlCrDV,aAAa,EkCLC,MAAe;IA4DzB,qBAAO;MACL,IAAI,EAAE,IAAI;EAId,eAAS;IACP,KAAK,EAAE,kBAAoC;IAC3C,aAAa,EAAE,6BAAuC;;AAI1D,aAAc;EACZ,OAAO,EAAE,KAAK;EACd,SAAS,EA9EW,QAAY;EA+EhC,KAAK,EA7EgB,OAAQ;EA8E7B,WAAW,EA/EW,MAAmB;;AAkF3C,4CAAiB;EAEb,eAAO;IACL,YAAY,EAAE,2CAA+C;IAC7D,GAAG,EAAE,KAAwB;EAE/B,uBAAe;IACb,YAAY,EAAE,2CAA+C;IAC7D,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,KAAwB;EAGlC,qCACY;IAAE,KAAK,EAAE,eAAe;EAEpC,wBAAgB;IACd,YAAY,EAAE,2CAA+C;IAC7D,KAAK,EAAE,KAAwB;IAC/B,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAkB;EAEhC,yBAAiB;IACf,YAAY,EAAE,2CAA+C;IAC7D,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,KAAwB;IAC9B,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAkB;ACtBpC,yBAA0B;EACxB,WAAW,EAAE,wCAAwC;EACrD,KAAK,EArCW,QAA4B;;;AAyC9C,gBAAiB;EACf,KAAK,EAAE,IAAI;EACX,UAAU,EA1DW,OAAI;EA4DzB,yBAAS;IAAE,aAAa,EAtGP,CAAC;;AA0GpB,MAAO;EACL,KAAK,EAAE,IAAI;EACX,IAAiB,EAAE,CAAC;EACpB,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,OAAO,EAAE,EAAE;EAEX,6BAAyB;IACvB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAEhB,yCAAY;MACV,QAAQ,EAAE,KAAK;MACf,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,EAAE;IAGb,8CAAiB;MACf,OAAO,EAAE,EAAE;MACX,UAAU,EAhIJ,SAAY;;AAqIxB,QAAS;EACP,QAAQ,EAAE,MAAM;EAChB,MAAM,EAvII,SAAY;EAwItB,WAAW,EAxID,SAAY;EAyItB,QAAQ,EAAE,QAAQ;EAClB,UAAU,EA/FW,OAAI;EAgGzB,aAAa,EA1II,CAAC;EA6IlB,WAAG;IACD,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,IAAI;EAGlB,aAAK;IAAE,SAAS,EAAE,IAAI;EAEtB;gBACM;IAAE,aAAa,EAAE,CAAC;EAExB,cAAM;IACJ,MAAM,EA3FQ,OAAY;IA4F1B,WAAW,EAAE,MAAM;IACnB,cAAc,EAAE,MAAM;IACtB,SAAS,EAnIS,OAAO;EAsI3B,iCAAgB;IACd,WAAW,EAAE,SAAoB;IACjC,cAAc,EAAE,SAAoB;IACpC,aAAa,EAAE,CAAC;IAChB,SAAS,EA1IS,OAAO;IA+IzB,wCAAsB;MATxB,iCAAgB;QAUZ,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,IAAI;EAKb,oBAAY;IACV,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,CAAC;EAGX,cAAM;IACJ,MAAM,EArLE,SAAY;IAsLpB,MAAM,EAAE,CAAC;IACT,SAAS,E5BrMN,IAAI;I4BwMP,iHAAwB;MACtB,WAAW,EA3LL,SAAY;MA4LlB,SAAS,EAvLM,SAAY;MAwL3B,MAAM,EAAE,CAAC;MACT,6HAAE;QACA,WAAW,EA7JO,MAAmB;QA8JrC,KAAK,EA9IQ,OAAM;QA+InB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,WAAsB;EAMrC,uBAAe;IACb,QAAQ,EAAE,QAAQ;IAClB,KAA6B,EAAE,CAAC;IAChC,GAAG,EAAE,CAAC;IAEN,yBAAE;MACA,KAAK,EA7JU,OAAM;MA8JrB,cAAc,EAlKK,SAAS;MAmK5B,SAAS,EAlKU,SAAY;MAmK/B,WAAW,EAlKK,IAAiB;MAmKjC,QAAQ,EAAE,QAAQ;MAClB,OAAO,EAAE,KAAK;MACd,OAAO,EAAE,WAAsB;MAC/B,MAAM,EAtNA,SAAY;MAuNlB,WAAW,EAvNL,SAAY;IA2NpB,iCAAY;MACV,GAAG,EAAE,GAAG;MACR,UAAU,EAAE,KAAK;MAEjB,mCAAE;QAIA,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,oBAA0D;QACnE,KAAK,EApLQ,OAAM;QAqLnB,QAAQ,EAAE,QAAQ;QnC1H5B,+CAAY;UACV,OAAO,EAAE,EAAE;UACX,QAAQ,EAAE,QAAQ;UAClB,OAAO,EAAE,KAAK;UACd,MAAM,EAAE,CAAC;UAkBP,GAAG,EAAE,GAAG;UACR,UAAU,EAAE,IAAW;UACvB,KAAsB,EmC/GL,SAAkB;UnCkHrC,UAAU,EACR,4DAAuB;UAGzB,KAAK,EmCyGwB,IAAI;QnCvGnC,oDAAiB;UACf,UAAU,EACR,6CAA6B;EmC4G7B,iBAAW;IACT,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,WAAW;IAEvB,6BAAY;MAAE,UAAU,EArNL,OAAI;IAwNrB,kCAAE;MAAE,KAAK,EA/Mc,OAAM;MAgNjC,8CAAY;QAGJ,UAAU,EAAE,4DAAyC;;AAU/D,gBAAiB;EACf,IAAiB,EAAE,CAAC;EACpB,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EnC7Nf,UAAU,EAAE,mBAAsB;EmCgO9B,mBAAG;IACD,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;IACd,SAAS,E5B1SN,IAAI;I4B2SP,MAAM,EAAE,CAAC;EAGX;qCACmB;IACjB,UAAU,EAhOU,iBAA0D;IAiO9E,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,IAAI;EAGb,sBAAM;IACJ,UAAU,EA9PS,OAAI;IA+PvB,0BAAM;MACJ,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI;MACX,KAAK,EA3PU,OAAM;MA4PrB,OAAO,EAAE,aAAa;MACtB,YAAyB,EAzRZ,SAAkB;MA0R/B,WAAW,EA5RK,sDAAiB;MA6RjC,SAAS,EApSK,SAAY;MAqS1B,WAAW,EAhRS,MAAmB;MAiRvC,cAAc,EA9RK,IAAI;MAgSvB,iCAAS;QACP,SAAS,EAzSG,SAAY;QA0SxB,aAA8B,EAjSnB,SAAkB;QAkS7B,YAAyB,EAlSd,SAAkB;Q7BsHrC,gBAAgB,E6B1HI,OAAc;Q7B2HlC,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,gFACQ;UAAE,gBAAgB,EAVT,OAAwG;QAezH,gFACQ;UACN,KAAK,E6BpGc,OAAM;MAyQrB,2CAAmB;Q7B/KzB,gBAAgB,EkBpIa,OAAgB;QlBqI7C,YAAY,EARK,OAAwG;QAazH,KAAK,E6BvGkB,OAAI;Q7BmG3B,oGACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,oGACQ;UACN,KAAK,E6B3GgB,OAAI;MAiRrB,yCAAiB;Q7BhLvB,gBAAgB,EkBnIW,OAAc;QlBoIzC,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,gGACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,gGACQ;UACN,KAAK,E6BpGc,OAAM;MA2QrB,uCAAe;Q7BjLrB,gBAAgB,EkBlIS,OAAY;QlBmIrC,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,4FACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,4FACQ;UACN,KAAK,E6BpGc,OAAM;MA4QrB,yCAAiB;Q7BlLvB,gBAAgB,ENwFJ,OAAO;QMvFnB,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,gGACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,gGACQ;UACN,KAAK,E6BpGc,OAAM;IA+QvB,+BAAS;MACP,SAAS,EArTK,SAAY;MAsT1B,aAA8B,EA7SjB,SAAkB;MA8S/B,YAAyB,EA9SZ,SAAkB;M7BsHrC,gBAAgB,E6B1HI,OAAc;M7B2HlC,YAAY,EARK,OAAwG;MAazH,KAAK,E6BhGgB,OAAM;M7B4F3B,4EACQ;QAAE,gBAAgB,EAVT,OAAwG;MAezH,4EACQ;QACN,KAAK,E6BpGc,OAAM;MAqRrB,yCAAY;Q7B3LlB,gBAAgB,EkBpIa,OAAgB;QlBqI7C,YAAY,EARK,OAAwG;QAazH,KAAK,E6BvGkB,OAAI;Q7BmG3B,gGACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,gGACQ;UACN,KAAK,E6B3GgB,OAAI;MA6RrB,uCAAU;Q7B5LhB,gBAAgB,EkBnIW,OAAc;QlBoIzC,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,4FACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,4FACQ;UACN,KAAK,E6BpGc,OAAM;MAuRrB,qCAAQ;Q7B7Ld,gBAAgB,EkBlIS,OAAY;QlBmIrC,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,wFACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,wFACQ;UACN,KAAK,E6BpGc,OAAM;MAwRrB,uCAAU;Q7B9LhB,gBAAgB,ENwFJ,OAAO;QMvFnB,YAAY,EARK,OAAwG;QAazH,KAAK,E6BhGgB,OAAM;Q7B4F3B,4FACQ;UAAE,gBAAgB,EAdb,OAAoG;QAmBjH,4FACQ;UACN,KAAK,E6BpGc,OAAM;IA4RvB,+CAA2B;MACzB,gBAAgB,EA9TG,OAAS;MAgU1B,UAAU,EAtSK,OAAI;MAwSrB,KAAK,EAjSU,OAAM;IAqSvB,iCAAa;MACX,UAAU,EAtUI,OAAc;MAuU5B,KAAK,EAvSU,OAAM;MAwSrB,uCAAQ;QACN,UAAU,EAxUQ,OAA6C;QAyU/D,KAAK,EA1SQ,OAAM;EAgTzB,0BAAU;IAAE,OAAO,EA5UF,SAAkB;EA+UnC,8BAAc;IACZ,QAAQ,EAAE,QAAQ;IAGhB,wCAAQ;MnC/RhB,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,SAAoB;MAU1B,YAAY,EAAE,4DAAmD;MACjE,iBAAiB,EAAE,KAAK;MmCoRhB,YAA6B,EAvVlB,SAAkB;MAwV7B,UAAU,EAAE,MAAuC;MACnD,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAG;MACR,KAAsB,EAAE,CAAC;IAI7B,oCAAQ;MAAE,QAAQ,EAAE,MAAM;MACxB,gDAAc;QArStB,OAAO,EAAE,KAAK;QnCmHd,QAAQ,EAAE,iBAAiB;QAC3B,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,IAAI;QmCrHV,QAAQ,EAAE,mBAAmB;QAqSnB,KAAK,EAAE,IAAI;MAEb,8CAAY;QACV,OAAO,EAAE,IAAI;EAMnB,0BAAU;IACR,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,IAAiB,EAAE,IAAI;IACvB,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,EAAE;IA1TjB,OAAO,EAAE,KAAK;InC6Gd,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,wBAAwB;ImC4MxB,6BAAG;MACD,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MAEZ,+BAAE;QACA,WAAW,EA5WO,MAAmB;QA6WrC,OAAO,EAAE,aAAwB;QACjC,2CAAc;UACZ,WAAW,EA/WK,MAAmB;MAmXvC,iFAA0B;QAExB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,SAAS,EAlYG,QAAY;QAmYxB,qFAAE;UACA,KAAK,EAzWM,OAAM;UA2WjB,OAAO,EAAE,KAAK;UACd,iGAAQ;YAAE,UAAU,EAAC,IAAI;MAG7B,sCAAW;QAAE,OAAO,EAAE,aAAwB;MAC9C,2EAAgB;QAAE,GAAG,EAAE,IAAI;IAG7B,gCAAM;MACJ,OAAO,EAAE,iBAA4B;MACrC,aAAa,EAAE,CAAC;MAChB,cAAc,EAhYe,SAAS;MAiYtC,KAAK,EAlYe,OAAQ;MAmY5B,WAAW,EA1XK,IAAiB;MA2XjC,SAAS,EAjYe,QAAY;;AAsY1C,aAAc;EAAE,OAAO,EAAE,KAAK;;AAI9B,4CAA8B;EAC5B,QAAS;IACP,UAAU,EA3YS,OAAI;IA6YvB,QAAQ,EAAE,OAAO;InChSvB,+BAAkB;MAAE,OAAO,EAAE,GAAG;MAAE,OAAO,EAAE,KAAK;IAChD,cAAQ;MAAE,KAAK,EAAE,IAAI;ImCiSf,uBAAe;MAAE,OAAO,EAAE,IAAI;IAE9B,oBAAY;MAAE,KAAK,EnC7LT,IAAI;ImC8Ld;;;;;uBAKW;MAAE,KAAK,EAAE,IAAI;IAExB;;mBAEO;MACL,SAAS,E5B/XT,QAAmD;M4BgYnD,QAAQ,EAAE,QAAQ;MAClB,MAAM,EA3YM,OAAY;MA4YxB,GAAG,EAAE,UAA6C;IAGpD,iBAAW;MAAE,UAAU,EAlaJ,OAAI;;EAqazB,yBAA0B;IACxB,SAAS,ET9cE,OAAU;IS+crB,MAAM,EAAE,MAAM;IACd,aAAa,EAldE,CAAC;;EAqdlB,gBAAiB;InC/ZrB,UAAU,EAAE,QAAsB;ImCia5B,IAAiB,EAAE,YAAY;IAE/B,mBAAG;MACD,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,eAAe;MACvB,OAAO,EAAE,MAAM;MAEf,sBAAG;QACD,KAAK,EnCjOC,IAAI;QmCkOV,oCAAc;UAAE,OAAO,EAAE,IAAI;IAM7B,0CAAiB;MACf,gBAAgB,EAvdD,OAAS;MAydtB,UAAU,EA/bC,OAAI;MAicjB,KAAK,EA1bM,OAAM;IA8bnB,iDAAe;MACb,OAAO,EAAE,WAAsB;MAC/B,WAAW,EAlfT,SAAY;MAmfd,UAAU,EAxcG,OAAI;MAycjB,uDAAQ;QACN,gBAAgB,EApeH,OAAS;QAsepB,UAAU,EA5cD,OAAI;IAkdnB,wDAAe;MACb,OAAO,EAAE,WAAsB;MAC/B,WAAW,EA/fT,SAAY;MAggBd,KAAK,EA9cM,OAAM;MA+cjB,UAAU,EA/eA,OAAc;MAgfxB,8DAAQ;QACN,UAAU,EAhfI,OAA6C;QAif3D,KAAK,EAldI,OAAM;IA0dnB,kCAAM;MACJ,aAA8B,EAAE,oBAA+D;MAC/F,wCAAQ;QnCpcpB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,SAAoB;QAE1B,YAAY,EAAE,4DAAmD;QACjE,gBAAgB,EAAE,KAAK;QmC+bX,UAAU,EAAE,MAAmC;QAC/C,GAAG,EAAE,UAAoB;IAK/B,oCAAQ;MAAE,QAAQ,EAAE,QAAQ;MAC1B,gDAAc;QA3cxB,OAAO,EAAE,KAAK;QnC6Gd,QAAQ,EAAE,mBAAmB;QAC7B,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,wBAAwB;ImCgWpB,4GAAc;MA5cxB,OAAO,EAAE,KAAK;MnCmHd,QAAQ,EAAE,iBAAiB;MAC3B,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;MACX,QAAQ,EAAE,OAAO;MACjB,IAAI,EAAE,IAAI;MmCrHV,QAAQ,EAAE,mBAAmB;IA8crB,oDAAsB;MAhd9B,OAAO,EAAE,KAAK;MnCmHd,QAAQ,EAAE,iBAAiB;MAC3B,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;MACX,QAAQ,EAAE,OAAO;MACjB,IAAI,EAAE,IAAI;MmCrHV,QAAQ,EAAE,mBAAmB;IAqdf,kEAAQ;MACN,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,OAAO;MAChB,GAAG,EAAE,IAAI;MACT,UAAU,EAAE,IAAI;MAChB,KAAsB,EAAE,GAAG;MAC3B,WAAW,EAAE,GAAG;IAO1B,0BAAU;MACR,IAAiB,EAAE,CAAC;MACpB,GAAG,EAAE,IAAI;MACT,UAAU,EAAE,WAAW;MACvB,SAAS,EAAE,IAAI;MAGb,+BAAE;QACA,KAAK,EA3gBM,OAAM;QA4gBjB,WAAW,EA9jBT,SAAY;QA+jBd,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,cAAyB;QAClC,UAAU,EAthBG,OAAI;MA0hBjB,0EAAmB;QACjB,KAAK,EAphBI,OAAM;QAqhBf,UAAU,EA5hBC,OAAI;MA+hBjB,gFAAyB;QACvB,KAAK,EAzhBI,OAAM;QA0hBf,gBAAgB,EA3jBH,OAAS;QA6jBpB,UAAU,EAniBD,OAAI;MAwiBnB,mCAAM;QACJ,WAAW,EAAE,MAAM;QACnB,UAAU,EA1iBG,OAAI;MA8iBnB,uCAAU;QACR,IAAiB,EAAE,IAAI;QACvB,GAAG,EAAE,CAAC;IAKZ,4EAC4B;MAC1B,aAAa,EAAE,IAAI;MACnB,UAAU,EAAE,IAAI;MAChB,YAA6B,EAniBR,iBAAyD;MAoiB9E,KAAK,EAAE,IAAI;MACX,MAAM,EAtmBA,SAAY;MAumBlB,KAAK,EAAE,CAAC;IAGV,0BAAU;MACR,UAAU,EAhkBO,OAAI;MAikBrB,OAAO,EAAE,WAAsB;MAC/B,MAAM,EA7mBA,SAAY;IAknBlB,oCAAa;MACX,IAAiB,EAAE,IAAI;MACvB,KAAsB,EAAE,CAAC;MAEzB,iDAAa;QAAE,KAAsB,EAAE,IAAI;IAI7C,mCAAa;MACX,KAAsB,EAAE,IAAI;MAC5B,IAAiB,EAAE,CAAC;MAEpB,gDAAa;QAAE,IAAiB,EAAE,IAAI;;EAUxC,uCAAY;IACV,gBAAgB,EAxnBC,OAAS;IA0nBxB,UAAU,EAhmBG,OAAI;IAkmBnB,KAAK,EA3lBQ,OAAM;EA+lBrB,wCAAa;IACX,UAAU,EAhoBE,OAAc;IAioB1B,KAAK,EAjmBQ,OAAM;EAumBnB,uDAAc;IAxkBxB,OAAO,EAAE,KAAK;InCmHd,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;ImCrHV,QAAQ,EAAE,mBAAmB;EA0kBrB,2DAAsB;IA5kB9B,OAAO,EAAE,KAAK;InCmHd,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;ImCrHV,QAAQ,EAAE,mBAAmB;ACoD7B,UAAc;EAAE,UAAU,EAAE,eAAe;;AAC3C,WAAc;EAAE,UAAU,EAAE,gBAAgB;;AAC5C,YAAc;EAAE,UAAU,EAAE,iBAAiB;;AAC7C,aAAc;EAAE,UAAU,EAAE,kBAAkB;;AAG5C,wCAA8C;EAC5C,qBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,sBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,uBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,wBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,kBAA8C;EAC5C,gBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,iBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,kBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,mBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,kEAA8C;EAC5C,sBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,uBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,wBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,yBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,4CAA8C;EAC5C,iBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,kBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,mBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,oBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,kEAA8C;EAC5C,qBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,sBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,uBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,wBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,4CAA8C;EAC5C,gBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,iBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,kBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,mBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,mEAA8C;EAC5C,sBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,uBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,wBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,yBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,4CAA8C;EAC5C,iBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,kBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,mBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,oBAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,yEAA8C;EAC5C,uBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,wBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,yBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,0BAA+C;IAAE,UAAU,EAAE,kBAAkB;AAJjF,6CAA8C;EAC5C,kBAA4C;IAAE,UAAU,EAAE,eAAe;;EACzE,mBAA+C;IAAE,UAAU,EAAE,gBAAgB;;EAC7E,oBAA+C;IAAE,UAAU,EAAE,iBAAiB;;EAC9E,qBAA+C;IAAE,UAAU,EAAE,kBAAkB;;AA4BjF;;;;;;;;;;;;;;;;;;EAkBG;EACD,MAAM,EAAC,CAAC;EACR,OAAO,EAAC,CAAC;;;AAIX,CAAE;EACA,KAAK,EApJS,OAAc;EAqJ5B,eAAe,EAvJI,IAAI;EAwJvB,WAAW,EAAE,OAAO;EAEpB,gBACQ;IACN,KAAK,EAzJa,OAAiD;EA+JrE,KAAI;IAAE,MAAM,EAAC,IAAI;;;AAInB,CAAE;EACA,WAAW,EA3JE,OAAsB;EA4JnC,WAAW,EAhLE,MAAmB;EAiLhC,SAAS,EA5LO,IAAI;EA6LpB,WAAW,EA5LO,GAAG;EA6LrB,aAAa,EA5JE,OAAwB;EA6JvC,cAAc,EAzLO,kBAAkB;EA2LvC,MAAO;IAlEX,SAAS,EAAE,UAAoC;IAC/C,WAAW,EAAE,GAAG;EAmEZ,OAAQ;IACN,SAAS,EAjMW,QAAY;IAkMhC,WAAW,EAjMW,IAAI;IAkM1B,UAAU,EAjMW,MAAM;;;AAsM/B,sBAAuB;EACrB,WAAW,EAnPI,sDAAiB;EAoPhC,WAAW,EAlME,MAAmB;EAmMhC,UAAU,EAnPI,MAAM;EAoPpB,KAAK,EAnPS,OAAI;EAoPlB,cAAc,EAhPI,kBAAkB;EAiPpC,UAAU,EAnPI,MAAK;EAoPnB,aAAa,EAnPI,MAAK;EAoPtB,WAAW,EAtPI,GAAG;EAwPlB,0DAAM;IACJ,SAAS,EA5NC,GAAG;IA6Nb,KAAK,EA5NM,OAAgD;IA6N3D,WAAW,EAAE,CAAC;;AAIlB,EAAG;EAAE,SAAS,EAAE,QAAkC;;AAClD,EAAG;EAAE,SAAS,EAAE,SAAkC;;AAClD,EAAG;EAAE,SAAS,EAAE,QAAkC;;AAClD,EAAG;EAAE,SAAS,EAAE,QAAkC;;AAClD,EAAG;EAAE,SAAS,EAAE,QAAkC;;AAClD,EAAG;EAAE,SAAS,EAAE,IAAkC;;AAElD,UAAW;EA/Fb,WAAW,EAjJW,GAAG;EAkJzB,KAAK,EAjJgB,OAAgD;EAkJrE,WAAW,EA3HM,MAAmB;EA4HpC,UAAU,EAjJW,MAAK;EAkJ1B,aAAa,EAjJW,MAAK;;AA8O3B,EAAG;EACD,MAAM,EAAE,aAAiC;EACzC,YAAY,EAAE,OAAoB;EAClC,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,mBAAsD;EAC9D,MAAM,EAAE,CAAC;;;AAIX;CACE;EACA,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,OAAO;;AAGtB;CACE;EACA,WAAW,EA3Kc,IAAiB;EA4K1C,WAAW,EAAE,OAAO;;AAGtB,KAAM;EACJ,SAAS,EAjQG,GAAG;EAkQf,WAAW,EAAE,OAAO;;AAGtB,IAAK;EACH,WAAW,EAtPE,+CAAsB;EAuPnC,WAAW,EAtPE,MAAmB;EAuPhC,KAAK,EAzPE,OAAI;EA0PX,gBAAgB,EAvPE,OAA8C;EAwPhE,YAAY,EAvPC,GAAG;EAwPhB,YAAY,EAvPE,KAAK;EAwPnB,YAAY,EAvPE,OAAqD;EAwPnE,OAAO,EAvPE,4BAAoC;;;AA2P/C;;EAEG;EACD,SAAS,EA9OE,IAAoB;EA+O/B,WAAW,EA9OE,GAAsB;EA+OnC,aAAa,EA9OE,OAAwB;EA+OvC,mBAAmB,EA9OH,OAAO;EA+OvB,WAAW,EAnPE,OAAsB;;AAsPrC,EAAG;EACD,WAAwB,EAlPX,MAAM;EAmPnB,YAAY;IACV,WAAwB,EAlPH,CAAC;IAoPpB;sBACG;MACD,WAAwB,EArPf,OAAY;MAsPrB,aAAa,EAAE,CAAC;MAChB,UAAU,EAAE,IAAI;;;AASpB;QACG;EACD,WAAwB,EAlQb,OAAY;EAmQvB,aAAa,EAAE,CAAC;AAMlB,+CAAM;EAAE,UAAU,EAAE,OAAO;AAG7B,SAAS;EAAE,eAAe,EAAE,MAAM;EAAE,WAAwB,EA/Q/C,MAAM;AAgRnB,SAAS;EAAE,eAAe,EAAE,MAAM;EAAE,WAAwB,EAhR/C,MAAM;AAiRnB,OAAO;EAAE,eAAe,EAAE,IAAI;EAAE,WAAwB,EAjR3C,MAAM;AAkRnB,YAAY;EAAE,UAAU,EAAE,IAAI;;;AAIhC,EAAG;EACD,WAAwB,EAtRH,MAAM;EAwRzB;UACG;IACD,WAAwB,EAxRb,OAAY;IAyRvB,aAAa,EAAE,CAAC;;;AAOpB,KAAG;EACD,aAAa,EA/RkB,MAAK;EAgSpC,WAAW,EA9PY,IAAiB;AAgQ1C,KAAG;EAAE,aAAa,EAjSQ,OAAY;;;AAqSxC;OACQ;EACN,cAAc,EAAE,SAAS;EACzB,SAAS,EAAE,GAAG;EACd,KAAK,EpC9HO,IAAI;EoC+HhB,MAAM,EpCnDQ,IAAI;;AoCqDpB,IAAK;EACH,cAAc,EAAE,IAAI;EACpB,WAAS;IACP,aAAa,EApSD,kBAAsB;;;AAyStC,UAAW;EACT,MAAM,EAAE,WAA4B;EACpC,OAAO,EAlTQ,6BAAmB;EAmTlC,WAAwB,EAlTV,iBAAqB;EAoTnC,eAAK;IACH,OAAO,EAAE,KAAK;IACd,SAAS,EArTW,SAAY;IAsThC,KAAK,EApTgB,OAA2B;IAqThD,sBAAS;MACP,OAAO,EAAE,aAAa;IAGxB;6BACU;MACR,KAAK,EA3Tc,OAA2B;;AA+TpD;YACa;EACX,WAAW,EAlXO,GAAG;EAmXrB,KAAK,EAvUa,OAAgD;;;AA2UpE,MAAO;EACL,OAAO,EAAE,YAAY;EACrB,MAAM,EAjUS,aAAkB;EAkUjC,MAAM,EAAE,iBAA6E;EACrF,OAAO,EApUS,gBAAe;EAsU/B,SAAG;IACD,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,KAAK;EAEhB,UAAI;IACF,WAAW,EAxTY,IAAiB;IAyTxC,SAAS,EAlUgB,SAAY;;AAuUvC,gBAAS;EAAE,WAAW,EA9TG,IAAiB;AAgU1C,YAAK;EACH,MAAM,EvB1ZU,OAAqB;EuB2ZrC,eAAe,EAjUY,IAAI;EAkU/B,WAAW,EAnUY,IAAiB;EAoUxC,MAAM,EAAE,IAAI;EACZ,OAAO,EAxUY,WAAa;;AA6UpC,4CAAqB;EACnB,sBAAkB;IAAE,WAAW,EAzbhB,GAAG;;EA0blB,EAAG;IAAE,SAAS,EApbL,OAAY;;EAqbrB,EAAG;IAAE,SAAS,EApbL,SAAY;;EAqbrB,EAAG;IAAE,SAAS,EApbL,SAAY;;EAqbrB,EAAG;IAAE,SAAS,EApbL,SAAY;;EAqbrB,EAAG;IAAE,SAAS,EApbL,QAAY;;EAqbrB,EAAG;IAAE,SAAS,EApbL,IAAI;ACyQf,gBAAiB;EA9MnB,2BAA2B,EAAE,MAAM;EAKnC,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EA4CX,QAAQ,EAAE,MAAM;EAChB,uDACY;IAAE,UAAU,EAAE,IAAI;IAAE,0BAA0B,EAAE,KAAK;;AA2J/D,WAAY;EA1Md,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EAwDX,kBAAkB,EAAE,4BAAsB;EAC1C,eAAe,EAAE,yBAAmB;EACpC,cAAc,EAAE,wBAAkB;EAClC,aAAa,EAAE,uBAAiB;EAChC,UAAU,EAAE,oBAAc;ErCsB1B,qCAAkB;IAAE,OAAO,EAAE,GAAG;IAAE,OAAO,EAAE,KAAK;EAChD,iBAAQ;IAAE,KAAK,EAAE,IAAI;;AqCwHnB,QAAS;EAjNX,2BAA2B,EAAE,MAAM;EA2EnC,UAAU,EAhII,OAAI;EAiIlB,KAAK,EAzGkB,OAAM;EA0G7B,MAAM,EArGkB,SAAc;EAsGtC,WAAW,EAtGa,SAAc;EAyGtC,QAAQ,EAAE,QAAQ;EAIlB,4EAAkB;IAChB,KAAK,EAnHgB,OAAM;IAoH3B,WAAW,EApIgB,IAAiB;IAqI5C,WAAW,EAhHW,SAAc;IAiHpC,MAAM,EAlJa,CAAC;EAoJtB,kDAAY;IAAE,SAAS,EDvJV,QAAY;;AC+QvB,WAAY;EAlHd,KAAK,EAzHmB,SAAc;EA0HtC,MAAM,EA1HkB,SAAc;EA2HtC,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EAEJ,YAAY,EAtKc,iBAA2B;EAwKrD,IAAI,EAAE,CAAC;;AA4GP,YAAa;EAnHf,KAAK,EAzHmB,SAAc;EA0HtC,MAAM,EA1HkB,SAAc;EA2HtC,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EAOJ,WAAW,EA3Ke,iBAA2B;EA6KrD,KAAK,EAAC,CAAC;;AAyGP,gBAAiB;EApGnB,OAAO,EAtLe,UAAe;EAuLrC,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,MAAM;EAClB,MAAM,EA7IkB,SAAc;EA8ItC,GAAG,EAAE,CAAC;EACN,4CAAqB;IACnB,qBAAO;MAAE,UAAU,EAAE,IAAI;IACzB,sBAAQ;MAAE,UAAU,EAAE,KAAK;EAI7B,qBAAO;IACL,IAAI,EAAE,CAAC;IACP,KAAK,EAvJiB,SAAc;EAyJtC,sBAAQ;IACN,IAAI,EA1JkB,SAAc;IA2JpC,KAAK,EAAE,CAAC;EAEV,uBAAS;IACP,IAAI,EA9JkB,SAAc;IA+JpC,KAAK,EA/JiB,SAAc;;AAkPpC,mBAAoB;EAClB,WAAW,EArPc,SAAY;EAsPrC,KAAK,EApPe,SAAc;EAqPlC,MAAM,EArPc,SAAc;EAsPlC,OAAO,EAAE,KAAK;EACd,OAAO,EAtPc,CAAC;EAuPtB,KAAK,EA7Pc,OAAM;EA8PzB,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,oBAAkB;ErCrLjC,+BAAY;IACV,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,CAAC;IAOL,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,OAAW;IAMvB,IAAI,EAAE,UAAoC;IAS9C,UAAU,EACR,4DAAuB;IAGzB,KAAK,EqCjGqB,IAAY;ErCmGxC,oCAAiB;IACf,UAAU,EACR,4DAA6B;;AqCkK/B,qBAAsB;EAlPxB,2BAA2B,EAAE,MAAM;EAsBnC,KAAK,EA5EY,SAAa;EA6E9B,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,IAAI;EAChB,UAAU,EAjFI,OAAI;EAkFlB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,WAAW;EACvB,UAAU,EAAE,uBAAuB;EACnC,0BAA0B,EAAE,KAAK;EACjC,kBAAkB,EAAE,wBAAwB;EAvBxC,aAAa,EAAE,mBAAkB;EACrC,iBAAiB,EAAE,wBAAwB;EACxC,cAAc,EAAE,wBAAwB;EACvC,aAAa,EAAE,wBAAwB;EACtC,YAAY,EAAE,wBAAwB;EACnC,SAAS,EAAE,wBACrB;EAqBI,IAAI,EAAE,CAAC;EAhBT,uBAAE;IArBF,2BAA2B,EAAE,MAAM;;AAmPjC,sBAAuB;EAnPzB,2BAA2B,EAAE,MAAM;EAsBnC,KAAK,EA5EY,SAAa;EA6E9B,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,IAAI;EAChB,UAAU,EAjFI,OAAI;EAkFlB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,WAAW;EACvB,UAAU,EAAE,uBAAuB;EACnC,0BAA0B,EAAE,KAAK;EACjC,kBAAkB,EAAE,wBAAwB;EAvBxC,aAAa,EAAE,kBAAkB;EACrC,iBAAiB,EAAE,uBAAwB;EACxC,cAAc,EAAE,uBAAwB;EACvC,aAAa,EAAE,uBAAwB;EACtC,YAAY,EAAE,uBAAwB;EACnC,SAAS,EAAE,uBACrB;EAyBI,KAAK,EAAE,CAAC;EApBV,wBAAE;IArBF,2BAA2B,EAAE,MAAM;;AAqPjC,kBAAmB;EAvGrB,eAAe,EAAE,IAAI;EACrB,OAAO,EAAC,CAAC;EACT,MAAM,EAAC,CAAC;EAGN,2BAAM;IACJ,OAAO,EAAE,KAAK;IACd,OAAO,EAtMc,gBAAoB;IAuMzC,KAAK,EAtMc,OAAS;IAuM5B,cAAc,EAtMc,SAAS;IAuMrC,SAAS,EAtMc,OAAY;IAuMnC,WAAW,EAtMc,IAAiB;IAuM1C,UAAU,EAtMM,OAAQ;IAuMxB,UAAU,EA/La,iBAA4B;IAgMnD,aAAa,EA/La,IAA+B;IAgMzD,MAAM,EAtMa,CAAC;EAwMtB,uBAAE;IACA,OAAO,EAAE,KAAK;IACd,OAAO,EAzMa,UAAgB;IA0MpC,KAAK,EAzMa,wBAAiB;IA0MnC,aAAa,EAzMa,iBAAwD;IA0MlF,UAAU,EAAE,qBAAqB;IACjC,6BAAQ;MACN,UAAU,EA1NI,OAAyC;;AA+SzD,yBAAc;EAjPd,aAAa,EAAE,uBAAkB;EACrC,iBAAiB,EAAE,4BAAwB;EACxC,cAAc,EAAE,4BAAwB;EACvC,aAAa,EAAE,4BAAwB;EACtC,YAAY,EAAE,4BAAwB;EACnC,SAAS,EAAE,4BACrB;AA8OM,4BAAiB;EA9PrB,2BAA2B,EAAE,MAAM;EAkLjC,UAAU,EAhMkB,qBAAsB;EAiMlD,MAAM,EAhMkB,OAAO;EAiM/B,UAAU,EAhMkB,2DAA4B;EAmMxD,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,UAAU,EApMkB,wBAAiB;EAqM7C,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAC,CAAC;EACN,KAAK,EAAC,CAAC;EACP,OAAO,EAAE,IAAI;EACb,2BAA2B,EAAE,WAAa;EAE1C,4CAAqB;IACnB,kCAAQ;MACN,UAAU,EA7MoB,yBAAkB;;AA4QlD,wBAAc;EAxPd,aAAa,EAAE,wBAAkB;EACrC,iBAAiB,EAAE,6BAAwB;EACxC,cAAc,EAAE,6BAAwB;EACvC,aAAa,EAAE,6BAAwB;EACtC,YAAY,EAAE,6BAAwB;EACnC,SAAS,EAAE,6BACrB;AAsPM,2BAAiB;EAtQrB,2BAA2B,EAAE,MAAM;EAkLjC,UAAU,EAhMkB,qBAAsB;EAiMlD,MAAM,EAhMkB,OAAO;EAiM/B,UAAU,EAhMkB,2DAA4B;EAmMxD,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,UAAU,EApMkB,wBAAiB;EAqM7C,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAC,CAAC;EACN,KAAK,EAAC,CAAC;EACP,OAAO,EAAE,IAAI;EACb,2BAA2B,EAAE,WAAa;EAE1C,4CAAqB;IACnB,iCAAQ;MACN,UAAU,EA7MoB,yBAAkB;;AAmRlD,mFAA8C;EAC5C,aAAa,EAAE,IAAI;EACnB,iBAAiB,EAAE,IAAI;EACvB,cAAc,EAAE,IAAI;EACpB,YAAY,EAAE,IAAI;EAClB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,IAAI;AAEf,mCAAiB;EAjRrB,2BAA2B,EAAE,MAAM;EAkLjC,UAAU,EAhMkB,qBAAsB;EAiMlD,MAAM,EAhMkB,OAAO;EAiM/B,UAAU,EAhMkB,2DAA4B;EAmMxD,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,UAAU,EApMkB,wBAAiB;EAqM7C,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAC,CAAC;EACN,KAAK,EAAC,CAAC;EACP,OAAO,EAAE,IAAI;EACb,2BAA2B,EAAE,WAAa;EAE1C,4CAAqB;IACnB,yCAAQ;MACN,UAAU,EA7MoB,yBAAkB;;AA8RlD,8CAAuB;EACrB,aAAa,EAAE,IAAI;EACnB,iBAAiB,EAAE,IAAI;EACvB,cAAc,EAAE,IAAI;EACpB,YAAY,EAAE,IAAI;EAClB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,IAAI;AAEf,wCAAiB;EA5RrB,2BAA2B,EAAE,MAAM;EAkLjC,UAAU,EAhMkB,qBAAsB;EAiMlD,MAAM,EAhMkB,OAAO;EAiM/B,UAAU,EAhMkB,2DAA4B;EAmMxD,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,UAAU,EApMkB,wBAAiB;EAqM7C,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAC,CAAC;EACN,KAAK,EAAC,CAAC;EACP,OAAO,EAAE,IAAI;EACb,2BAA2B,EAAE,WAAa;EAE1C,4CAAqB;IACnB,8CAAQ;MACN,UAAU,EA7MoB,yBAAkB;;AAySlD,8CAAsB;EACpB,aAAa,EAAE,IAAI;EACnB,iBAAiB,EAAE,IAAI;EACvB,cAAc,EAAE,IAAI;EACpB,YAAY,EAAE,IAAI;EAClB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,IAAI;AAEf,yCAAiB;EAvSrB,2BAA2B,EAAE,MAAM;EAkLjC,UAAU,EAhMkB,qBAAsB;EAiMlD,MAAM,EAhMkB,OAAO;EAiM/B,UAAU,EAhMkB,2DAA4B;EAmMxD,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,UAAU,EApMkB,wBAAiB;EAqM7C,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,IAAI,EAAC,CAAC;EACN,KAAK,EAAC,CAAC;EACP,OAAO,EAAE,IAAI;EACb,2BAA2B,EAAE,WAAa;EAE1C,4CAAqB;IACnB,+CAAQ;MACN,UAAU,EA7MoB,yBAAkB;;AAsTlD,uCAAsB;EAAE,IAAI,EAAE,UAAoB;AAClD,wCAAuB;EAAE,KAAK,EAAE,UAAoB;AAEpD,0CAAyB;EAAE,KAAK,EArWnB,SAAa;AAsW1B,2CAA0B;EAAE,IAAI,EAtWnB,SAAa;;AAwc9B,aAAc;EAlZd,2BAA2B,EAAE,MAAM;EA4TnC,KAAK,EAlXY,SAAa;EAmX9B,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,IAAI;EAChB,UAAU,EAxXI,OAAI;EAyXlB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,WAAW;EACvB,0BAA0B,EAAE,KAAK;EA5T7B,aAAa,EAAE,mBAAkB;EACrC,iBAAiB,EAAE,wBAAwB;EACxC,cAAc,EAAE,wBAAwB;EACvC,aAAa,EAAE,wBAAwB;EACtC,YAAY,EAAE,wBAAwB;EACnC,SAAS,EAAE,wBACrB;EAyTI,IAAI,EAAE,CAAC;EAMT,kBAAkB,EAAE,4BAAsB;EAC1C,eAAe,EAAE,yBAAmB;EACpC,cAAc,EAAE,wBAAkB;EAClC,aAAa,EAAE,uBAAiB;EAChC,UAAU,EAAE,oBAAc;EAxB1B,eAAE;IA3TF,2BAA2B,EAAE,MAAM;EAsVnC,uBAAU;IACR,OAAO,EAxYgB,gBAAoB;IAyY3C,KAAK,EAxYgB,OAAS;IAyY9B,cAAc,EAxYgB,SAAS;IAyYvC,WAAW,EAvYgB,IAAiB;IAwY5C,UAAU,EAhYO,IAAI;IAiYrB,UAAU,EAhYe,iBAA4B;IAiYrD,aAAa,EAhYe,IAA+B;IAsY3D,MAAM,EA5Ye,CAAC;IAuYtB,6BAAQ;MACP,UAAU,EAjYY,OAAkD;MAkYxE,UAAU,EAjYoB,iBAA6D;MAkY3F,aAAa,EAjYoB,IAAI;IAqZlC,8BAAS;MAUb,OAAO,EAAE,KAAK;MAIZ,YAAY,EAAE,MAAM;MAWxB,OAAO,EAAE,MAAM;EAMb,gGAA6D;IA1Y3D,aAAa,EAAE,gBAAkB;IACrC,iBAAiB,EAAE,qBAAwB;IACxC,cAAc,EAAE,qBAAwB;IACvC,aAAa,EAAE,qBAAwB;IACtC,YAAY,EAAE,qBAAwB;IACnC,SAAS,EAAE,qBACrB;;AAyYE,cAAe;EAzZf,2BAA2B,EAAE,MAAM;EA4TnC,KAAK,EAlXY,SAAa;EAmX9B,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,IAAI;EAChB,UAAU,EAxXI,OAAI;EAyXlB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,WAAW;EACvB,0BAA0B,EAAE,KAAK;EA5T7B,aAAa,EAAE,kBAAkB;EACrC,iBAAiB,EAAE,uBAAwB;EACxC,cAAc,EAAE,uBAAwB;EACvC,aAAa,EAAE,uBAAwB;EACtC,YAAY,EAAE,uBAAwB;EACnC,SAAS,EAAE,uBACrB;EA6TI,KAAK,EAAE,CAAC;EAEV,kBAAkB,EAAE,4BAAsB;EAC1C,eAAe,EAAE,yBAAmB;EACpC,cAAc,EAAE,wBAAkB;EAClC,aAAa,EAAE,uBAAiB;EAChC,UAAU,EAAE,oBAAc;EAxB1B,gBAAE;IA3TF,2BAA2B,EAAE,MAAM;EAsVnC,wBAAU;IACR,OAAO,EAxYgB,gBAAoB;IAyY3C,KAAK,EAxYgB,OAAS;IAyY9B,cAAc,EAxYgB,SAAS;IAyYvC,WAAW,EAvYgB,IAAiB;IAwY5C,UAAU,EAhYO,IAAI;IAiYrB,UAAU,EAhYe,iBAA4B;IAiYrD,aAAa,EAhYe,IAA+B;IAsY3D,MAAM,EA5Ye,CAAC;IAuYtB,8BAAQ;MACP,UAAU,EAjYY,OAAkD;MAkYxE,UAAU,EAjYoB,iBAA6D;MAkY3F,aAAa,EAjYoB,IAAI;IA0YlC,8BAAQ;MA6BZ,OAAO,EAAE,KAAK;MAIZ,WAAW,EAAE,MAAM;MAGvB,OAAO,EAAE,MAAM;EAab,iGAA2D;IAjZzD,aAAa,EAAE,gBAAkB;IACrC,iBAAiB,EAAE,qBAAwB;IACxC,cAAc,EAAE,qBAAwB;IACvC,aAAa,EAAE,qBAAwB;IACtC,YAAY,EAAE,qBAAwB;IACnC,SAAS,EAAE,qBACrB;;AAwZI,iEAAkE;EAjClE,OAAO,EAAE,KAAK;EAIZ,WAAW,EAAE,MAAM;EAGvB,OAAO,EAAE,MAAM;;AA6Bb,mEAAoE;EA5CpE,OAAO,EAAE,KAAK;EAIZ,YAAY,EAAE,MAAM;EAWxB,OAAO,EAAE,MAAM;;;AC/Ob,kBAAmH;EACjH,maAA4B;IAC1B,OAAO,EAAE,kBAAkB;;EAE7B,maAAyB;IACvB,OAAO,EAAE,eAAe;;EAGxB,mdAA4B;ItCnClC,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;;EsCkCJ,udAA2B;ItCjDjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,wBAAwB;;EsCkDxB,ugBAA0B;IACxB,OAAO,EAAE,gBAAgB;;EAE3B,ugBAAuC;IACrC,OAAO,EAAE,6BAA6B;;EAExC,ugBAAoC;IAClC,OAAO,EAAE,0BAA0B;;EAErC,2cAA8B;IAC5B,OAAO,EAAE,SAAS;;EAEpB,w5BAA+B;IAC7B,OAAO,EAAE,qBAAqB;;AA7BpC,4CAAmH;EACjH,maAA4B;IAC1B,OAAO,EAAE,kBAAkB;;EAE7B,maAAyB;IACvB,OAAO,EAAE,eAAe;;EAGxB,mdAA4B;ItCnClC,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;;EsCkCJ,udAA2B;ItCjDjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,wBAAwB;;EsCkDxB,ugBAA0B;IACxB,OAAO,EAAE,gBAAgB;;EAE3B,ugBAAuC;IACrC,OAAO,EAAE,6BAA6B;;EAExC,ugBAAoC;IAClC,OAAO,EAAE,0BAA0B;;EAErC,2cAA8B;IAC5B,OAAO,EAAE,SAAS;;EAEpB,w5BAA+B;IAC7B,OAAO,EAAE,qBAAqB;;AA7BpC,4CAAmH;EACjH,maAA4B;IAC1B,OAAO,EAAE,kBAAkB;;EAE7B,maAAyB;IACvB,OAAO,EAAE,eAAe;;EAGxB,mdAA4B;ItCnClC,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;;EsCkCJ,udAA2B;ItCjDjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,wBAAwB;;EsCkDxB,ugBAA0B;IACxB,OAAO,EAAE,gBAAgB;;EAE3B,ugBAAuC;IACrC,OAAO,EAAE,6BAA6B;;EAExC,ugBAAoC;IAClC,OAAO,EAAE,0BAA0B;;EAErC,2cAA8B;IAC5B,OAAO,EAAE,SAAS;;EAEpB,w5BAA+B;IAC7B,OAAO,EAAE,qBAAqB;;AA7BpC,4CAAmH;EACjH,maAA4B;IAC1B,OAAO,EAAE,kBAAkB;;EAE7B,maAAyB;IACvB,OAAO,EAAE,eAAe;;EAGxB,mdAA4B;ItCnClC,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;;EsCkCJ,udAA2B;ItCjDjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,wBAAwB;;EsCkDxB,ugBAA0B;IACxB,OAAO,EAAE,gBAAgB;;EAE3B,ugBAAuC;IACrC,OAAO,EAAE,6BAA6B;;EAExC,ugBAAoC;IAClC,OAAO,EAAE,0BAA0B;;EAErC,2cAA8B;IAC5B,OAAO,EAAE,SAAS;;EAEpB,w5BAA+B;IAC7B,OAAO,EAAE,qBAAqB;;AA7BpC,6CAAmH;EACjH,maAA4B;IAC1B,OAAO,EAAE,kBAAkB;;EAE7B,maAAyB;IACvB,OAAO,EAAE,eAAe;;EAGxB,mdAA4B;ItCnClC,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,IAAI;;EsCkCJ,udAA2B;ItCjDjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,wBAAwB;;EsCkDxB,ugBAA0B;IACxB,OAAO,EAAE,gBAAgB;;EAE3B,ugBAAuC;IACrC,OAAO,EAAE,6BAA6B;;EAExC,ugBAAoC;IAClC,OAAO,EAAE,0BAA0B;;EAErC,2cAA8B;IAC5B,OAAO,EAAE,SAAS;;EAEpB,w5BAA+B;IAC7B,OAAO,EAAE,qBAAqB;;AAatC;kBACmB;EAAE,OAAO,EAAE,kBAAkB;;AAChD;kBACmB;EAAE,OAAO,EAAE,eAAe;;;AAI3C,iDACoB;EAAE,OAAO,EAAE,gBAAgB;;AAG/C,iDACoB;EAAE,OAAO,EAAE,6BAA6B;;AAG5D,iDACoB;EAAE,OAAO,EAAE,0BAA0B;;AAGzD,2CACoB;EAAE,OAAO,EAAE,oBAAoB;;AAInD;;oBACoB;EAAE,OAAO,EAAE,qBAAqB;;AAGtD,+CAAqB;EACnB;oBACmB;IAAE,OAAO,EAAE,kBAAkB;;EAChD;oBACmB;IAAE,OAAO,EAAE,eAAe;;;EAI3C,iDACoB;IAAE,OAAO,EAAE,gBAAgB;;EAG/C,iDACoB;IAAE,OAAO,EAAE,6BAA6B;;EAG5D,iDACoB;IAAE,OAAO,EAAE,0BAA0B;;EAGzD,2CACoB;IAAE,OAAO,EAAE,oBAAoB;;EAInD;;sBACoB;IAAE,OAAO,EAAE,qBAAqB;AAIxD,8CAAoB;EAClB;qBACoB;IAAE,OAAO,EAAE,kBAAkB;;EACjD;qBACoB;IAAE,OAAO,EAAE,eAAe;;;EAI5C,iDACqB;IAAE,OAAO,EAAE,gBAAgB;;EAGhD,iDACqB;IAAE,OAAO,EAAE,6BAA6B;;EAG7D,iDACqB;IAAE,OAAO,EAAE,0BAA0B;;EAG1D,2CACqB;IAAE,OAAO,EAAE,oBAAoB;;EAIpD;;uBACqB;IAAE,OAAO,EAAE,qBAAqB;;AAKzD,eAAgB;EAAE,OAAO,EAAE,eAAe;;AAC1C,eAAgB;EAAE,OAAO,EAAE,kBAAkB;;AAC7C,sBAAuB;EAAE,OAAO,EAAE,kBAAkB;;AACpD,sBAAuB;EAAE,OAAO,EAAE,eAAe;;;AAGjD,oBAAqB;EAAE,OAAO,EAAE,gBAAgB;;AAChD,2BAA4B;EAAE,OAAO,EAAE,gBAAgB;;AACvD,oBAAqB;EAAE,OAAO,EAAE,6BAA6B;;AAC7D,2BAA4B;EAAE,OAAO,EAAE,6BAA6B;;AACpE,oBAAqB;EAAE,OAAO,EAAE,0BAA0B;;AAC1D,2BAA4B;EAAE,OAAO,EAAE,0BAA0B;;AACjE,iBAAkB;EAAE,OAAO,EAAE,oBAAoB;;AACjD,wBAAyB;EAAE,OAAO,EAAE,oBAAoB;;AACxD,iBAAkB;EAAE,OAAO,EAAE,qBAAqB;;AAClD,wBAAyB;EAAE,OAAO,EAAE,qBAAqB;;AACzD,iBAAkB;EAAE,OAAO,EAAE,qBAAqB;;AAClD,wBAAyB;EAAE,OAAO,EAAE,qBAAqB;;;;;;;;AAUrD,WAAY;EAAE,OAAO,EAAE,eAAe;;AACtC,YAAa;EACX,CAAE;IACA,UAAU,EAAE,sBAAsB;IAClC,KAAK,EAAE,kBAAiB;;IACxB,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,eAAe;;EAE9B,eAAgB;IAAE,OAAO,EAAE,KAAK;;EAChC,eAAgB;IAAE,OAAO,EAAE,IAAI;;EAE/B,oBAAqB;IAAE,OAAO,EAAE,gBAAgB;;EAChD,oBAAqB;IAAE,OAAO,EAAE,6BAA6B;;EAC7D,oBAAqB;IAAE,OAAO,EAAE,0BAA0B;;EAC1D,iBAAkB;IAAE,OAAO,EAAE,oBAAoB;;EACjD,iBAAkB;IAAE,OAAO,EAAE,qBAAqB;;EAClD,iBAAkB;IAAE,OAAO,EAAE,qBAAqB;;EAElD;WACU;IAAE,eAAe,EAAE,SAAS;;EACtC,aAAc;IAAE,OAAO,EAAE,mBAAmB;;EAE5C,iBAAkB;IAAE,OAAO,EAAE,oBAAoB;;EAGjD;;oBAEmB;IAAE,OAAO,EAAE,EAAE;;EAEhC;YACW;IACT,MAAM,EAAE,iBAAmB;IAC3B,iBAAiB,EAAE,KAAK;;EAG1B,KAAM;IAAE,OAAO,EAAE,kBAAkB;;;EAEnC;KACI;IAAE,iBAAiB,EAAE,KAAK;;EAE9B,GAAI;IAAE,SAAS,EAAE,eAAe;;EAEhC,KAAwB;IAAhB,MAAM,EAAE,KAAK;EAErB;;IAEG;IACD,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;;EAGX;IACG;IAAE,gBAAgB,EAAE,KAAK;;EAE5B,cAAe;IAAE,OAAO,EAAE,eAAe;;EACzC,WAAY;IAAE,OAAO,EAAE,gBAAgB;;EACvC,eAAgB;IAAE,OAAO,EAAE,eAAe;;EAC1C,eAAgB;IAAE,OAAO,EAAE,kBAAkB;;AAKjD,YAAa;EACX,eAAgB;IAAE,OAAO,EAAE,KAAK;;EAChC,eAAgB;IAAE,OAAO,EAAE,IAAI;;EAE/B,oBAAqB;IAAE,OAAO,EAAE,gBAAgB;;EAChD,oBAAqB;IAAE,OAAO,EAAE,6BAA6B;;EAC7D,oBAAqB;IAAE,OAAO,EAAE,0BAA0B;;EAC1D,iBAAkB;IAAE,OAAO,EAAE,oBAAoB;;EACjD,iBAAkB;IAAE,OAAO,EAAE,qBAAqB;;EAClD,iBAAkB;IAAE,OAAO,EAAE,qBAAqB", +"sources": ["../../../scss/foundation/components/_global.scss","../../../scss/foundation/components/_grid.scss","../../../scss/foundation/components/_accordion.scss","../../../scss/foundation/components/_alert-boxes.scss","../../../scss/foundation/components/_block-grid.scss","../../../scss/foundation/components/_breadcrumbs.scss","../../../scss/foundation/components/_buttons.scss","../../../scss/foundation/_functions.scss","../../../scss/foundation/components/_button-groups.scss","../../../scss/foundation/components/_clearing.scss","../../../scss/foundation/components/_dropdown.scss","../../../scss/foundation/components/_dropdown-buttons.scss","../../../scss/foundation/components/_flex-video.scss","../../../scss/foundation/components/_forms.scss","../../../scss/foundation/components/_icon-bar.scss","../../../scss/foundation/components/_inline-lists.scss","../../../scss/foundation/components/_joyride.scss","../../../scss/foundation/components/_keystrokes.scss","../../../scss/foundation/components/_labels.scss","../../../scss/foundation/components/_magellan.scss","../../../scss/foundation/components/_orbit.scss","../../../scss/foundation/components/_pagination.scss","../../../scss/foundation/components/_panels.scss","../../../scss/foundation/components/_pricing-tables.scss","../../../scss/foundation/components/_progress-bars.scss","../../../scss/foundation/components/_range-slider.scss","../../../scss/foundation/components/_reveal.scss","../../../scss/foundation/components/_side-nav.scss","../../../scss/foundation/components/_split-buttons.scss","../../../scss/foundation/components/_sub-nav.scss","../../../scss/foundation/components/_switches.scss","../../../scss/foundation/components/_tables.scss","../../../scss/foundation/components/_tabs.scss","../../../scss/foundation/components/_thumbs.scss","../../../scss/foundation/components/_tooltips.scss","../../../scss/foundation/components/_top-bar.scss","../../../scss/foundation/components/_type.scss","../../../scss/foundation/components/_offcanvas.scss","../../../scss/foundation/components/_visibility.scss"], +"names": [], +"file": "foundation.css" +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/normalize.css b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/normalize.css new file mode 100644 index 00000000..aed3b919 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/normalize.css @@ -0,0 +1,359 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/** + * 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; } + +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; } + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } + +/** + * 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/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; } + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; } + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +a:active, +a:hover { + outline: 0; } + +/* Text-level semantics + ========================================================================== */ +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; } + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ +b, +strong { + font-weight: bold; } + +/** + * Address styling not present in Safari and Chrome. + */ +dfn { + font-style: italic; } + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; } + +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; } + +/** + * 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/10. + */ +img { + border: 0; } + +/** + * Correct overflow not hidden in IE 9/10/11. + */ +svg:not(:root) { + overflow: hidden; } + +/* Grouping content + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari. + */ +figure { + margin: 1em 40px; } + +/** + * Address differences between Firefox and other browsers. + */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; } + +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; } + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; } + +/* Forms + ========================================================================== */ +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ +button, +input, +optgroup, +select, +textarea { + color: inherit; + /* 1 */ + font: inherit; + /* 2 */ + margin: 0; + /* 3 */ } + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ +button { + overflow: visible; } + +/** + * 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 Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ +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; } + +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; } + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +input { + line-height: normal; } + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ } + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; } + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 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 and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +/** + * 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/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ } + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ +textarea { + overflow: auto; } + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ +optgroup { + font-weight: bold; } + +/* Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + +/*# sourceMappingURL=normalize.css.map */ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/normalize.css.map b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/normalize.css.map new file mode 100644 index 00000000..8f3bfc8d --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/css/normalize.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": ";;;;;;AAQA,IAAK;EACH,WAAW,EAAE,UAAU;;EACvB,oBAAoB,EAAE,IAAI;;EAC1B,wBAAwB,EAAE,IAAI;;;;;;AAOhC,IAAK;EACH,MAAM,EAAE,CAAC;;;;;;;;;;AAaX;;;;;;;;;;;;OAYQ;EACN,OAAO,EAAE,KAAK;;;;;;AAQhB;;;KAGM;EACJ,OAAO,EAAE,YAAY;;EACrB,cAAc,EAAE,QAAQ;;;;;;;AAQ1B,qBAAsB;EACpB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;;;;;;AAQX;QACS;EACP,OAAO,EAAE,IAAI;;;;;;;AAUf,CAAE;EACA,gBAAgB,EAAE,WAAW;;;;;AAO/B;OACQ;EACN,OAAO,EAAE,CAAC;;;;;;;AAUZ,WAAY;EACV,aAAa,EAAE,UAAU;;;;;AAO3B;MACO;EACL,WAAW,EAAE,IAAI;;;;;AAOnB,GAAI;EACF,UAAU,EAAE,MAAM;;;;;;AAQpB,EAAG;EACD,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,QAAQ;;;;;AAOlB,IAAK;EACH,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;;;;;AAOb,KAAM;EACJ,SAAS,EAAE,GAAG;;;;;AAOhB;GACI;EACF,SAAS,EAAE,GAAG;EACd,WAAW,EAAE,CAAC;EACd,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,QAAQ;;AAG1B,GAAI;EACF,GAAG,EAAE,MAAM;;AAGb,GAAI;EACF,MAAM,EAAE,OAAO;;;;;;;AAUjB,GAAI;EACF,MAAM,EAAE,CAAC;;;;;AAOX,cAAe;EACb,QAAQ,EAAE,MAAM;;;;;;;AAUlB,MAAO;EACL,MAAM,EAAE,QAAQ;;;;;AAOlB,EAAG;EACD,eAAe,EAAE,WAAW;EAC5B,UAAU,EAAE,WAAW;EACvB,MAAM,EAAE,CAAC;;;;;AAOX,GAAI;EACF,QAAQ,EAAE,IAAI;;;;;AAOhB;;;IAGK;EACH,WAAW,EAAE,oBAAoB;EACjC,SAAS,EAAE,GAAG;;;;;;;;;;;;;;AAkBhB;;;;QAIS;EACP,KAAK,EAAE,OAAO;;EACd,IAAI,EAAE,OAAO;;EACb,MAAM,EAAE,CAAC;;;;;;AAOX,MAAO;EACL,QAAQ,EAAE,OAAO;;;;;;;;AAUnB;MACO;EACL,cAAc,EAAE,IAAI;;;;;;;;;AAWtB;;;oBAGqB;EACnB,kBAAkB,EAAE,MAAM;;EAC1B,MAAM,EAAE,OAAO;;;;;;AAOjB;oBACqB;EACnB,MAAM,EAAE,OAAO;;;;;AAOjB;uBACwB;EACtB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;;;;AAQZ,KAAM;EACJ,WAAW,EAAE,MAAM;;;;;;;;;AAWrB;mBACoB;EAClB,UAAU,EAAE,UAAU;;EACtB,OAAO,EAAE,CAAC;;;;;;;;AASZ;+CACgD;EAC9C,MAAM,EAAE,IAAI;;;;;;;AASd,oBAAqB;EACnB,kBAAkB,EAAE,SAAS;;EAC7B,eAAe,EAAE,WAAW;EAC5B,kBAAkB,EAAE,WAAW;;EAC/B,UAAU,EAAE,WAAW;;;;;;;AASzB;+CACgD;EAC9C,kBAAkB,EAAE,IAAI;;;;;AAO1B,QAAS;EACP,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,qBAAqB;;;;;;AAQhC,MAAO;EACL,MAAM,EAAE,CAAC;;EACT,OAAO,EAAE,CAAC;;;;;;AAOZ,QAAS;EACP,QAAQ,EAAE,IAAI;;;;;;AAQhB,QAAS;EACP,WAAW,EAAE,IAAI;;;;;;;AAUnB,KAAM;EACJ,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;;AAGnB;EACG;EACD,OAAO,EAAE,CAAC", +"sources": ["../../../scss/normalize.scss"], +"names": [], +"file": "normalize.css" +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation.js new file mode 100644 index 00000000..45da8ef0 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation.js @@ -0,0 +1,6097 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2014, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ + +(function ($, window, document, undefined) { + 'use strict'; + + var header_helpers = function (class_array) { + var i = class_array.length; + var head = $('head'); + + while (i--) { + if (head.has('.' + class_array[i]).length === 0) { + head.append(''); + } + } + }; + + header_helpers([ + 'foundation-mq-small', + 'foundation-mq-small-only', + 'foundation-mq-medium', + 'foundation-mq-medium-only', + 'foundation-mq-large', + 'foundation-mq-large-only', + 'foundation-mq-xlarge', + 'foundation-mq-xlarge-only', + 'foundation-mq-xxlarge', + 'foundation-data-attribute-namespace']); + + // Enable FastClick if present + + $(function () { + if (typeof FastClick !== 'undefined') { + // Don't attach to body if undefined + if (typeof document.body !== 'undefined') { + FastClick.attach(document.body); + } + } + }); + + // private Fast Selector wrapper, + // returns jQuery object. Only use where + // getElementById is not available. + var S = function (selector, context) { + if (typeof selector === 'string') { + if (context) { + var cont; + if (context.jquery) { + cont = context[0]; + if (!cont) { + return context; + } + } else { + cont = context; + } + return $(cont.querySelectorAll(selector)); + } + + return $(document.querySelectorAll(selector)); + } + + return $(selector, context); + }; + + // Namespace functions. + + var attr_name = function (init) { + var arr = []; + if (!init) { + arr.push('data'); + } + if (this.namespace.length > 0) { + arr.push(this.namespace); + } + arr.push(this.name); + + return arr.join('-'); + }; + + var add_namespace = function (str) { + var parts = str.split('-'), + i = parts.length, + arr = []; + + while (i--) { + if (i !== 0) { + arr.push(parts[i]); + } else { + if (this.namespace.length > 0) { + arr.push(this.namespace, parts[i]); + } else { + arr.push(parts[i]); + } + } + } + + return arr.reverse().join('-'); + }; + + // Event binding and data-options updating. + + var bindings = function (method, options) { + var self = this, + bind = function(){ + var $this = S(this), + should_bind_events = !$this.data(self.attr_name(true) + '-init'); + $this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this))); + + if (should_bind_events) { + self.events(this); + } + }; + + if (S(this.scope).is('[' + this.attr_name() +']')) { + bind.call(this.scope); + } else { + S('[' + this.attr_name() +']', this.scope).each(bind); + } + // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating. + if (typeof method === 'string') { + return this[method].call(this, options); + } + + }; + + var single_image_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); + } + }; + + /* + https://github.com/paulirish/matchMedia.js + */ + + window.matchMedia = window.matchMedia || (function ( doc ) { + + '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 )); + + /* + * jquery.requestAnimationFrame + * https://github.com/gnarf37/jquery-requestAnimationFrame + * Requires jQuery 1.8+ + * + * Copyright (c) 2012 Corey Frang + * Licensed under the MIT license. + */ + + (function(jQuery) { + + + // requestAnimationFrame polyfill adapted from Erik Möller + // fixes from Paul Irish and Tino Zijdel + // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating + + var animating, + lastTime = 0, + vendors = ['webkit', 'moz'], + requestAnimationFrame = window.requestAnimationFrame, + cancelAnimationFrame = window.cancelAnimationFrame, + jqueryFxAvailable = 'undefined' !== typeof jQuery.fx; + + for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) { + requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ]; + cancelAnimationFrame = cancelAnimationFrame || + window[ vendors[lastTime] + 'CancelAnimationFrame' ] || + window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ]; + } + + function raf() { + if (animating) { + requestAnimationFrame(raf); + + if (jqueryFxAvailable) { + jQuery.fx.tick(); + } + } + } + + if (requestAnimationFrame) { + // use rAF + window.requestAnimationFrame = requestAnimationFrame; + window.cancelAnimationFrame = cancelAnimationFrame; + + if (jqueryFxAvailable) { + jQuery.fx.timer = function (timer) { + if (timer() && jQuery.timers.push(timer) && !animating) { + animating = true; + raf(); + } + }; + + jQuery.fx.stop = function () { + animating = false; + }; + } + } else { + // polyfill + window.requestAnimationFrame = function (callback) { + var currTime = new Date().getTime(), + timeToCall = Math.max(0, 16 - (currTime - lastTime)), + id = window.setTimeout(function () { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + window.cancelAnimationFrame = function (id) { + clearTimeout(id); + }; + + } + + }( $ )); + + function removeQuotes (string) { + if (typeof string === 'string' || string instanceof String) { + string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, ''); + } + + return string; + } + + window.Foundation = { + name : 'Foundation', + + version : '5.5.1', + + media_queries : { + 'small' : S('.foundation-mq-small').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'small-only' : S('.foundation-mq-small-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'medium' : S('.foundation-mq-medium').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'medium-only' : S('.foundation-mq-medium-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'large' : S('.foundation-mq-large').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'large-only' : S('.foundation-mq-large-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'xlarge' : S('.foundation-mq-xlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'xlarge-only' : S('.foundation-mq-xlarge-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'xxlarge' : S('.foundation-mq-xxlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, '') + }, + + stylesheet : $('').appendTo('head')[0].sheet, + + global : { + namespace : undefined + }, + + init : function (scope, libraries, method, options, response) { + var args = [scope, method, options, response], + responses = []; + + // check RTL + this.rtl = /rtl/i.test(S('html').attr('dir')); + + // set foundation global scope + this.scope = scope || this.scope; + + this.set_namespace(); + + if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) { + if (this.libs.hasOwnProperty(libraries)) { + responses.push(this.init_lib(libraries, args)); + } + } else { + for (var lib in this.libs) { + responses.push(this.init_lib(lib, libraries)); + } + } + + S(window).load(function () { + S(window) + .trigger('resize.fndtn.clearing') + .trigger('resize.fndtn.dropdown') + .trigger('resize.fndtn.equalizer') + .trigger('resize.fndtn.interchange') + .trigger('resize.fndtn.joyride') + .trigger('resize.fndtn.magellan') + .trigger('resize.fndtn.topbar') + .trigger('resize.fndtn.slider'); + }); + + return scope; + }, + + init_lib : function (lib, args) { + if (this.libs.hasOwnProperty(lib)) { + this.patch(this.libs[lib]); + + if (args && args.hasOwnProperty(lib)) { + if (typeof this.libs[lib].settings !== 'undefined') { + $.extend(true, this.libs[lib].settings, args[lib]); + } else if (typeof this.libs[lib].defaults !== 'undefined') { + $.extend(true, this.libs[lib].defaults, args[lib]); + } + return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]); + } + + args = args instanceof Array ? args : new Array(args); + return this.libs[lib].init.apply(this.libs[lib], args); + } + + return function () {}; + }, + + patch : function (lib) { + lib.scope = this.scope; + lib.namespace = this.global.namespace; + lib.rtl = this.rtl; + lib['data_options'] = this.utils.data_options; + lib['attr_name'] = attr_name; + lib['add_namespace'] = add_namespace; + lib['bindings'] = bindings; + lib['S'] = this.utils.S; + }, + + inherit : function (scope, methods) { + var methods_arr = methods.split(' '), + i = methods_arr.length; + + while (i--) { + if (this.utils.hasOwnProperty(methods_arr[i])) { + scope[methods_arr[i]] = this.utils[methods_arr[i]]; + } + } + }, + + set_namespace : function () { + + // Description: + // Don't bother reading the namespace out of the meta tag + // if the namespace has been set globally in javascript + // + // Example: + // Foundation.global.namespace = 'my-namespace'; + // or make it an empty string: + // Foundation.global.namespace = ''; + // + // + + // If the namespace has not been set (is undefined), try to read it out of the meta element. + // Otherwise use the globally defined namespace, even if it's empty ('') + var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace; + + // Finally, if the namsepace is either undefined or false, set it to an empty string. + // Otherwise use the namespace value. + this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace; + }, + + libs : {}, + + // methods that can be inherited in libraries + utils : { + + // Description: + // Fast Selector wrapper returns jQuery object. Only use where getElementById + // is not available. + // + // Arguments: + // Selector (String): CSS selector describing the element(s) to be + // returned as a jQuery object. + // + // Scope (String): CSS selector describing the area to be searched. Default + // is document. + // + // Returns: + // Element (jQuery Object): jQuery object containing elements matching the + // selector within the scope. + S : S, + + // Description: + // Executes a function a max of once every n milliseconds + // + // Arguments: + // Func (Function): Function to be throttled. + // + // Delay (Integer): Function execution threshold in milliseconds. + // + // Returns: + // Lazy_function (Function): Function with throttling applied. + throttle : function (func, delay) { + var timer = null; + + return function () { + var context = this, args = arguments; + + if (timer == null) { + timer = setTimeout(function () { + func.apply(context, args); + timer = null; + }, delay); + } + }; + }, + + // Description: + // Executes a function when it stops being invoked for n seconds + // Modified version of _.debounce() http://underscorejs.org + // + // Arguments: + // Func (Function): Function to be debounced. + // + // Delay (Integer): Function execution threshold in milliseconds. + // + // Immediate (Bool): Whether the function should be called at the beginning + // of the delay instead of the end. Default is false. + // + // Returns: + // Lazy_function (Function): Function with debouncing applied. + debounce : function (func, delay, immediate) { + var timeout, result; + return function () { + var context = this, args = arguments; + var later = function () { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, delay); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + + // Description: + // Parses data-options attribute + // + // Arguments: + // El (jQuery Object): Element to be parsed. + // + // Returns: + // Options (Javascript Object): Contents of the element's data-options + // attribute. + data_options : function (el, data_attr_name) { + data_attr_name = data_attr_name || 'options'; + var opts = {}, ii, p, opts_arr, + data_options = function (el) { + var namespace = Foundation.global.namespace; + + if (namespace.length > 0) { + return el.data(namespace + '-' + data_attr_name); + } + + return el.data(data_attr_name); + }; + + var cached_options = data_options(el); + + if (typeof cached_options === 'object') { + return cached_options; + } + + opts_arr = (cached_options || ':').split(';'); + ii = 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; + } + + while (ii--) { + p = opts_arr[ii].split(':'); + p = [p[0], p.slice(1).join(':')]; + + if (/true/i.test(p[1])) { + p[1] = true; + } + if (/false/i.test(p[1])) { + p[1] = false; + } + if (isNumber(p[1])) { + if (p[1].indexOf('.') === -1) { + p[1] = parseInt(p[1], 10); + } else { + p[1] = parseFloat(p[1]); + } + } + + if (p.length === 2 && p[0].length > 0) { + opts[trim(p[0])] = trim(p[1]); + } + } + + return opts; + }, + + // Description: + // Adds JS-recognizable media queries + // + // Arguments: + // Media (String): Key string for the media query to be stored as in + // Foundation.media_queries + // + // Class (String): Class name for the generated tag + register_media : function (media, media_class) { + if (Foundation.media_queries[media] === undefined) { + $('head').append(''); + Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family')); + } + }, + + // Description: + // Add custom CSS within a JS-defined media query + // + // Arguments: + // Rule (String): CSS rule to be appended to the document. + // + // Media (String): Optional media query string for the CSS rule to be + // nested under. + add_custom_rule : function (rule, media) { + if (media === undefined && Foundation.stylesheet) { + 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 + ' }'); + } + } + }, + + // Description: + // Performs a callback function when an image is fully loaded + // + // Arguments: + // Image (jQuery Object): Image(s) to check if loaded. + // + // Callback (Function): Function to execute when image is fully loaded. + image_loaded : function (images, callback) { + var self = this, + unloaded = images.length; + + if (unloaded === 0) { + callback(images); + } + + images.each(function () { + single_image_loaded(self.S(this), function () { + unloaded -= 1; + if (unloaded === 0) { + callback(images); + } + }); + }); + }, + + // Description: + // Returns a random, alphanumeric string + // + // Arguments: + // Length (Integer): Length of string to be generated. Defaults to random + // integer. + // + // Returns: + // Rand (String): Pseudo-random, alphanumeric string. + random_str : function () { + if (!this.fidx) { + this.fidx = 0; + } + this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-'); + + return this.prefix + (this.fidx++).toString(36); + }, + + // Description: + // Helper for window.matchMedia + // + // Arguments: + // mq (String): Media query + // + // Returns: + // (Boolean): Whether the media query passes or not + match : function (mq) { + return window.matchMedia(mq).matches; + }, + + // Description: + // Helpers for checking Foundation default media queries with JS + // + // Returns: + // (Boolean): Whether the media query passes or not + + is_small_up : function () { + return this.match(Foundation.media_queries.small); + }, + + is_medium_up : function () { + return this.match(Foundation.media_queries.medium); + }, + + is_large_up : function () { + return this.match(Foundation.media_queries.large); + }, + + is_xlarge_up : function () { + return this.match(Foundation.media_queries.xlarge); + }, + + is_xxlarge_up : function () { + return this.match(Foundation.media_queries.xxlarge); + }, + + is_small_only : function () { + return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_medium_only : function () { + return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_large_only : function () { + return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_xlarge_only : function () { + return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_xxlarge_only : function () { + return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up(); + } + } + }; + + $.fn.foundation = function () { + var args = Array.prototype.slice.call(arguments, 0); + + return this.each(function () { + Foundation.init.apply(Foundation, [this].concat(args)); + return this; + }); + }; + +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.abide = { + name : 'abide', + + version : '5.5.1', + + settings : { + live_validate : true, + validate_on_blur : true, + focus_on_invalid : true, + error_labels : true, // labels with a for="inputId" will recieve an `error` class + error_class : 'error', + timeout : 1000, + patterns : { + alpha : /^[a-zA-Z]+$/, + alpha_numeric : /^[a-zA-Z0-9]+$/, + integer : /^[-+]?\d+$/, + number : /^[-+]?\d*(?:[\.\,]\d+)?$/, + + // amex, visa, diners + card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/, + cvv : /^([0-9]){3,4}$/, + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address + email : /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/, + + url : /^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, + // abc.de + domain : /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/, + + datetime : /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/, + // YYYY-MM-DD + date : /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/, + // HH:MM:SS + time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/, + dateISO : /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/, + // MM/DD/YYYY + month_day_year : /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/, + // DD/MM/YYYY + day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/, + + // #FFF or #FFFFFF + color : /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/ + }, + validators : { + equalTo : function (el, required, parent) { + var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value, + to = el.value, + valid = (from === to); + + return valid; + } + } + }, + + timer : null, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + form = self.S(scope).attr('novalidate', 'novalidate'), + settings = form.data(this.attr_name(true) + '-init') || {}; + + this.invalid_attr = this.add_namespace('data-invalid'); + + form + .off('.abide') + .on('submit.fndtn.abide validate.fndtn.abide', function (e) { + var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name())); + return self.validate(self.S(this).find('input, textarea, select').get(), e, is_ajax); + }) + .on('reset', function () { + return self.reset($(this)); + }) + .find('input, textarea, select') + .off('.abide') + .on('blur.fndtn.abide change.fndtn.abide', function (e) { + if (settings.validate_on_blur === true) { + self.validate([this], e); + } + }) + .on('keydown.fndtn.abide', function (e) { + if (settings.live_validate === true && e.which != 9) { + clearTimeout(self.timer); + self.timer = setTimeout(function () { + self.validate([this], e); + }.bind(this), settings.timeout); + } + }); + }, + + reset : function (form) { + form.removeAttr(this.invalid_attr); + $(this.invalid_attr, form).removeAttr(this.invalid_attr); + $('.' + this.settings.error_class, form).not('small').removeClass(this.settings.error_class); + }, + + validate : function (els, e, is_ajax) { + var validations = this.parse_patterns(els), + validation_count = validations.length, + form = this.S(els[0]).closest('form'), + submit_event = /submit/.test(e.type); + + // Has to count up to make sure the focus gets applied to the top error + for (var i = 0; i < validation_count; i++) { + if (!validations[i] && (submit_event || is_ajax)) { + if (this.settings.focus_on_invalid) { + els[i].focus(); + } + form.trigger('invalid').trigger('invalid.fndtn.abide'); + this.S(els[i]).closest('form').attr(this.invalid_attr, ''); + return false; + } + } + + if (submit_event || is_ajax) { + form.trigger('valid').trigger('valid.fndtn.abide'); + } + + form.removeAttr(this.invalid_attr); + + if (is_ajax) { + return false; + } + + return true; + }, + + parse_patterns : function (els) { + var i = els.length, + el_patterns = []; + + while (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'; + + 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]; + } + + if (this.settings.patterns.hasOwnProperty(type)) { + return [el, this.settings.patterns[type], required]; + } + + pattern = /.*/; + + return [el, pattern, required]; + }, + + // TODO: Break this up into smaller methods, getting hard to read. + check_validation_and_apply_styles : function (el_patterns) { + var i = el_patterns.length, + validations = [], + form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'), + settings = form.data(this.attr_name(true) + '-init') || {}; + while (i--) { + var el = el_patterns[i][0], + required = el_patterns[i][2], + value = el.value.trim(), + direct_parent = this.S(el).parent(), + validator = el.getAttribute(this.add_namespace('data-abide-validator')), + is_radio = el.type === 'radio', + is_checkbox = el.type === 'checkbox', + label = this.S('label[for="' + el.getAttribute('id') + '"]'), + valid_length = (required) ? (el.value.length > 0) : true, + el_validations = []; + + var parent, valid; + + // support old way to do equalTo validations + if (el.getAttribute(this.add_namespace('data-equalto'))) { validator = 'equalTo' } + + if (!direct_parent.is('label')) { + parent = direct_parent; + } else { + parent = direct_parent.parent(); + } + + if (validator) { + valid = this.settings.validators[validator].apply(this, [el, required, parent]); + el_validations.push(valid); + } + + if (is_radio && required) { + el_validations.push(this.valid_radio(el, required)); + } else if (is_checkbox && required) { + el_validations.push(this.valid_checkbox(el, required)); + } else { + + if (el_patterns[i][1].test(value) && valid_length || + !required && el.value.length < 1 || $(el).attr('disabled')) { + el_validations.push(true); + } else { + el_validations.push(false); + } + + el_validations = [el_validations.every(function (valid) {return valid;})]; + + if (el_validations[0]) { + this.S(el).removeAttr(this.invalid_attr); + el.setAttribute('aria-invalid', 'false'); + el.removeAttribute('aria-describedby'); + parent.removeClass(this.settings.error_class); + if (label.length > 0 && this.settings.error_labels) { + label.removeClass(this.settings.error_class).removeAttr('role'); + } + $(el).triggerHandler('valid'); + } else { + this.S(el).attr(this.invalid_attr, ''); + el.setAttribute('aria-invalid', 'true'); + + // Try to find the error associated with the input + var errorElem = parent.find('small.' + this.settings.error_class, 'span.' + this.settings.error_class); + var errorID = errorElem.length > 0 ? errorElem[0].id : ''; + if (errorID.length > 0) { + el.setAttribute('aria-describedby', errorID); + } + + // el.setAttribute('aria-describedby', $(el).find('.error')[0].id); + parent.addClass(this.settings.error_class); + if (label.length > 0 && this.settings.error_labels) { + label.addClass(this.settings.error_class).attr('role', 'alert'); + } + $(el).triggerHandler('invalid'); + } + } + validations.push(el_validations[0]); + } + validations = [validations.every(function (valid) {return valid;})]; + return validations; + }, + + valid_checkbox : function (el, required) { + var el = this.S(el), + valid = (el.is(':checked') || !required || el.get(0).getAttribute('disabled')); + + if (valid) { + el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class); + } else { + el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class); + } + + return valid; + }, + + valid_radio : function (el, required) { + var name = el.getAttribute('name'), + group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find("[name='" + name + "']"), + count = group.length, + valid = false, + disabled = false; + + // Has to count up to make sure the focus gets applied to the top error + for (var i=0; i < count; i++) { + if( group[i].getAttribute('disabled') ){ + disabled=true; + valid=true; + } else { + if (group[i].checked){ + valid = true; + } else { + if( disabled ){ + valid = false; + } + } + } + } + + // Has to count up to make sure the focus gets applied to the top error + for (var i = 0; i < count; i++) { + if (valid) { + this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class); + } else { + this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class); + } + } + + return valid; + }, + + valid_equal : function (el, required, parent) { + var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value, + to = el.value, + valid = (from === to); + + if (valid) { + this.S(el).removeAttr(this.invalid_attr); + parent.removeClass(this.settings.error_class); + if (label.length > 0 && settings.error_labels) { + label.removeClass(this.settings.error_class); + } + } else { + this.S(el).attr(this.invalid_attr, ''); + parent.addClass(this.settings.error_class); + if (label.length > 0 && settings.error_labels) { + label.addClass(this.settings.error_class); + } + } + + return valid; + }, + + valid_oneof : function (el, required, parent, doNotValidateOthers) { + var el = this.S(el), + others = this.S('[' + this.add_namespace('data-oneof') + ']'), + valid = others.filter(':checked').length > 0; + + if (valid) { + el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class); + } else { + el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class); + } + + if (!doNotValidateOthers) { + var _this = this; + others.each(function () { + _this.valid_oneof.call(_this, this, null, null, true); + }); + } + + return valid; + } + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.accordion = { + name : 'accordion', + + version : '5.5.1', + + settings : { + content_class : 'content', + active_class : 'active', + multi_expand : false, + toggleable : true, + callback : function () {} + }, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function () { + var self = this; + var S = this.S; + S(this.scope) + .off('.fndtn.accordion') + .on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) { + var accordion = S(this).closest('[' + self.attr_name() + ']'), + groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()), + settings = accordion.data(self.attr_name(true) + '-init') || self.settings, + target = S('#' + this.href.split('#')[1]), + aunts = $('> .accordion-navigation', accordion), + siblings = aunts.children('.' + settings.content_class), + active_content = siblings.filter('.' + settings.active_class); + + e.preventDefault(); + + if (accordion.attr(self.attr_name())) { + siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class); + aunts = aunts.add('[' + groupSelector + '] .accordion-navigation'); + } + + if (settings.toggleable && target.is(active_content)) { + target.parent('.accordion-navigation').toggleClass(settings.active_class, false); + target.toggleClass(settings.active_class, false); + settings.callback(target); + target.triggerHandler('toggled', [accordion]); + accordion.triggerHandler('toggled', [target]); + return; + } + + if (!settings.multi_expand) { + siblings.removeClass(settings.active_class); + aunts.removeClass(settings.active_class); + } + + target.addClass(settings.active_class).parent().addClass(settings.active_class); + settings.callback(target); + target.triggerHandler('toggled', [accordion]); + accordion.triggerHandler('toggled', [target]); + }); + }, + + off : function () {}, + + reflow : function () {} + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.alert = { + name : 'alert', + + version : '5.5.1', + + settings : { + callback : function () {} + }, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function () { + var self = this, + S = this.S; + + $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) { + var alertBox = S(this).closest('[' + self.attr_name() + ']'), + settings = alertBox.data(self.attr_name(true) + '-init') || self.settings; + + e.preventDefault(); + if (Modernizr.csstransitions) { + alertBox.addClass('alert-close'); + alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) { + S(this).trigger('close').trigger('close.fndtn.alert').remove(); + settings.callback(); + }); + } else { + alertBox.fadeOut(300, function () { + S(this).trigger('close').trigger('close.fndtn.alert').remove(); + settings.callback(); + }); + } + }); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.clearing = { + name : 'clearing', + + version : '5.5.1', + + 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, div.clearing-blackout', + + // Default to the entire li element. + open_selectors : '', + + // Image will be skipped in carousel. + skip_selector : '', + + touch_label : '', + + // event initializers and locks + init : false, + locked : false + }, + + init : function (scope, method, options) { + var self = this; + Foundation.inherit(this, 'throttle image_loaded'); + + this.bindings(method, options); + + if (self.S(this.scope).is('[' + this.attr_name() + ']')) { + this.assemble(self.S('li', this.scope)); + } else { + self.S('[' + this.attr_name() + ']', this.scope).each(function () { + self.assemble(self.S('li', this)); + }); + } + }, + + events : function (scope) { + var self = this, + S = self.S, + $scroll_container = $('.scroll-container'); + + if ($scroll_container.length > 0) { + this.scope = $scroll_container; + } + + S(this.scope) + .off('.clearing') + .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors, + function (e, current, target) { + var current = current || S(this), + target = target || current, + next = current.next('li'), + settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'), + image = S(e.target); + + e.preventDefault(); + + if (!settings) { + self.init(); + settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-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 = S('img', target); + } + + // 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) { self.nav(e, 'next') }) + .on('click.fndtn.clearing', '.clearing-main-prev', + function (e) { self.nav(e, 'prev') }) + .on('click.fndtn.clearing', this.settings.close_selectors, + function (e) { Foundation.libs.clearing.close(e, this) }); + + $(document).on('keydown.fndtn.clearing', + function (e) { self.keydown(e) }); + + S(window).off('.clearing').on('resize.fndtn.clearing', + function () { self.resize() }); + + this.swipe_events(scope); + }, + + swipe_events : function (scope) { + var self = this, + S = self.S; + + S(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 + }; + + S(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 = S(this).data('swipe-transition'); + + if (typeof data === 'undefined') { + data = {}; + } + + data.delta_x = e.touches[0].pageX - data.start_page_x; + + if (Foundation.rtl) { + data.delta_x = -data.delta_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) { + S(this).data('swipe-transition', {}); + e.stopPropagation(); + }); + }, + + assemble : function ($li) { + var $el = $li.parent(); + + if ($el.parent().hasClass('carousel')) { + return; + } + + $el.after('
'); + + var grid = $el.detach(), + grid_outerHTML = ''; + + if (grid[0] == null) { + return; + } else { + grid_outerHTML = grid[0].outerHTML; + } + + var holder = this.S('#foundationClearingHolder'), + settings = $el.data(this.attr_name(true) + '-init'), + data = { + grid : '', + viewing : settings.templates.viewing + }, + wrapper = '
' + data.viewing + + data.grid + '
', + touch_label = this.settings.touch_label; + + if (Modernizr.touch) { + wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end(); + } + + holder.after(wrapper).remove(); + }, + + open : function ($image, current, target) { + var self = this, + body = $(document.body), + root = target.closest('.clearing-assembled'), + container = self.S('div', root).first(), + visible_image = self.S('.visible-img', container), + image = self.S('img', visible_image).not($image), + label = self.S('.clearing-touch-label', container), + error = false; + + // Event to disable scrolling on touch devices when Clearing is activated + $('body').on('touchmove', function (e) { + e.preventDefault(); + }); + + image.error(function () { + error = true; + }); + + function startLoad() { + setTimeout(function () { + this.image_loaded(image, function () { + if (image.outerWidth() === 1 && !error) { + startLoad.call(this); + } else { + cb.call(this, image); + } + }.bind(this)); + }.bind(this), 100); + } + + function cb (image) { + var $image = $(image); + $image.css('visibility', 'visible'); + // toggle the gallery + body.css('overflow', 'hidden'); + root.addClass('clearing-blackout'); + container.addClass('clearing-container'); + visible_image.show(); + this.fix_height(target) + .caption(self.S('.clearing-caption', visible_image), self.S('img', target)) + .center_and_label(image, label) + .shift(current, target, function () { + target.closest('li').siblings().removeClass('visible'); + target.closest('li').addClass('visible'); + }); + visible_image.trigger('opened.fndtn.clearing') + } + + if (!this.locked()) { + visible_image.trigger('open.fndtn.clearing'); + // set the image to the selected thumbnail + image + .attr('src', this.load($image)) + .css('visibility', 'hidden'); + + startLoad.call(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))), + body = $(document.body), container, visible_image; + + if (el === e.target && root) { + body.css('overflow', ''); + container = $('div', root).first(); + visible_image = $('.visible-img', container); + visible_image.trigger('close.fndtn.clearing'); + this.settings.prev_index = 0; + $('ul[' + this.attr_name() + ']', root) + .attr('style', '').closest('.clearing-blackout') + .removeClass('clearing-blackout'); + container.removeClass('clearing-container'); + visible_image.hide(); + visible_image.trigger('closed.fndtn.clearing'); + } + + // Event to re-enable scrolling on touch devices + $('body').off('touchmove'); + + return false; + }, + + is_open : function (current) { + return current.parent().prop('style').length > 0; + }, + + keydown : function (e) { + var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'), + NEXT_KEY = this.rtl ? 37 : 39, + PREV_KEY = this.rtl ? 39 : 37, + ESC_KEY = 27; + + if (e.which === NEXT_KEY) { + this.go(clearing, 'next'); + } + if (e.which === PREV_KEY) { + this.go(clearing, 'prev'); + } + if (e.which === ESC_KEY) { + this.S('a.clearing-close').trigger('click').trigger('click.fndtn.clearing'); + } + }, + + nav : function (e, direction) { + var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout'); + + e.preventDefault(); + this.go(clearing, direction); + }, + + resize : function () { + var image = $('img', '.clearing-blackout .visible-img'), + label = $('.clearing-touch-label', '.clearing-blackout'); + + if (image.length) { + this.center_and_label(image, label); + image.trigger('resized.fndtn.clearing') + } + }, + + // visual adjustments + fix_height : function (target) { + var lis = target.parent().children(), + self = this; + + lis.each(function () { + var li = self.S(this), + image = li.find('img'); + + if (li.height() > image.outerHeight()) { + li.addClass('fix-height'); + } + }) + .closest('ul') + .width(lis.length * 100 + '%'); + + return this; + }, + + update_paddles : function (target) { + target = target.closest('li'); + var visible_image = target + .closest('.carousel') + .siblings('.visible-img'); + + if (target.next().length > 0) { + this.S('.clearing-main-next', visible_image).removeClass('disabled'); + } else { + this.S('.clearing-main-next', visible_image).addClass('disabled'); + } + + if (target.prev().length > 0) { + this.S('.clearing-main-prev', visible_image).removeClass('disabled'); + } else { + this.S('.clearing-main-prev', visible_image).addClass('disabled'); + } + }, + + center_and_label : function (target, label) { + if (!this.rtl && label.length > 0) { + label.css({ + marginLeft : -(label.outerWidth() / 2), + marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10 + }); + } else { + label.css({ + marginRight : -(label.outerWidth() / 2), + marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10, + left: 'auto', + right: '50%' + }); + } + return this; + }, + + // image loading and preloading + + load : function ($image) { + var href; + + if ($image[0].nodeName === 'A') { + href = $image.attr('href'); + } else { + href = $image.closest('a').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()); + }, + + img : function (img) { + if (img.length) { + var new_img = new Image(), + new_a = this.S('a', img); + + if (new_a.length) { + new_img.src = new_a.attr('href'); + } else { + new_img.src = this.S('img', img).attr('src'); + } + } + return this; + }, + + // image caption + + caption : function (container, $image) { + var caption = $image.attr('data-caption'); + + if (caption) { + container + .html(caption) + .show(); + } else { + container + .text('') + .hide(); + } + return this; + }, + + // directional methods + + go : function ($ul, direction) { + var current = this.S('.visible', $ul), + target = current[direction](); + + // Check for skip selector. + if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) { + target = target[direction](); + } + + if (target.length) { + this.S('img', target) + .trigger('click', [current, target]).trigger('click.fndtn.clearing', [current, target]) + .trigger('change.fndtn.clearing'); + } + }, + + shift : function (current, target, callback) { + var clearing = target.parent(), + old_index = this.settings.prev_index || target.index(), + direction = this.direction(clearing, current, target), + dir = this.rtl ? 'right' : 'left', + left = parseInt(clearing.css('left'), 10), + width = target.outerWidth(), + skip_shift; + + var dir_obj = {}; + + // we use jQuery animate instead of CSS transitions because we + // need a callback to unlock the next animation + // needs support for RTL ** + if (target.index() !== old_index && !/skip/.test(direction)) { + if (/left/.test(direction)) { + this.lock(); + dir_obj[dir] = left + width; + clearing.animate(dir_obj, 300, this.unlock()); + } else if (/right/.test(direction)) { + this.lock(); + dir_obj[dir] = left - width; + clearing.animate(dir_obj, 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) { + dir_obj[dir] = -(skip_shift * width); + clearing.animate(dir_obj, 300, this.unlock()); + } else { + dir_obj[dir] = 0; + clearing.animate(dir_obj, 300, this.unlock()); + } + } + + callback(); + }, + + direction : function ($el, current, target) { + var lis = this.S('li', $el), + li_width = lis.outerWidth() + (lis.outerWidth() / 4), + up_count = Math.floor(this.S('.clearing-container').outerWidth() / 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; + }, + + off : function () { + this.S(this.scope).off('.fndtn.clearing'); + this.S(window).off('.fndtn.clearing'); + }, + + reflow : function () { + this.init(); + } + }; + +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.dropdown = { + name : 'dropdown', + + version : '5.5.1', + + settings : { + active_class : 'open', + disabled_class : 'disabled', + mega_class : 'mega', + align : 'bottom', + is_hover : false, + hover_timeout : 150, + opened : function () {}, + closed : function () {} + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + + $.extend(true, this.settings, method, options); + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + S = self.S; + + S(this.scope) + .off('.dropdown') + .on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) { + var settings = S(this).data(self.attr_name(true) + '-init') || self.settings; + if (!settings.is_hover || Modernizr.touch) { + e.preventDefault(); + if (S(this).parent('[data-reveal-id]')) { + e.stopPropagation(); + } + self.toggle($(this)); + } + }) + .on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) { + var $this = S(this), + dropdown, + target; + + clearTimeout(self.timeout); + + if ($this.data(self.data_attr())) { + dropdown = S('#' + $this.data(self.data_attr())); + target = $this; + } else { + dropdown = $this; + target = S('[' + self.attr_name() + '="' + dropdown.attr('id') + '"]'); + } + + var settings = target.data(self.attr_name(true) + '-init') || self.settings; + + if (S(e.currentTarget).data(self.data_attr()) && settings.is_hover) { + self.closeall.call(self); + } + + if (settings.is_hover) { + self.open.apply(self, [dropdown, target]); + } + }) + .on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) { + var $this = S(this); + var settings; + + if ($this.data(self.data_attr())) { + settings = $this.data(self.data_attr(true) + '-init') || self.settings; + } else { + var target = S('[' + self.attr_name() + '="' + S(this).attr('id') + '"]'), + settings = target.data(self.attr_name(true) + '-init') || self.settings; + } + + self.timeout = setTimeout(function () { + if ($this.data(self.data_attr())) { + if (settings.is_hover) { + self.close.call(self, S('#' + $this.data(self.data_attr()))); + } + } else { + if (settings.is_hover) { + self.close.call(self, $this); + } + } + }.bind(this), settings.hover_timeout); + }) + .on('click.fndtn.dropdown', function (e) { + var parent = S(e.target).closest('[' + self.attr_name() + '-content]'); + var links = parent.find('a'); + + if (links.length > 0 && parent.attr('aria-autoclose') !== 'false') { + self.close.call(self, S('[' + self.attr_name() + '-content]')); + } + + if (e.target !== document && !$.contains(document.documentElement, e.target)) { + return; + } + + if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) { + return; + } + + if (!(S(e.target).data('revealId')) && + (parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') || + $.contains(parent.first()[0], e.target)))) { + e.stopPropagation(); + return; + } + + self.close.call(self, S('[' + self.attr_name() + '-content]')); + }) + .on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () { + self.settings.opened.call(this); + }) + .on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () { + self.settings.closed.call(this); + }); + + S(window) + .off('.dropdown') + .on('resize.fndtn.dropdown', self.throttle(function () { + self.resize.call(self); + }, 50)); + + this.resize(); + }, + + close : function (dropdown) { + var self = this; + dropdown.each(function () { + var original_target = $('[' + self.attr_name() + '=' + dropdown[0].id + ']') || $('aria-controls=' + dropdown[0].id + ']'); + original_target.attr('aria-expanded', 'false'); + if (self.S(this).hasClass(self.settings.active_class)) { + self.S(this) + .css(Foundation.rtl ? 'right' : 'left', '-99999px') + .attr('aria-hidden', 'true') + .removeClass(self.settings.active_class) + .prev('[' + self.attr_name() + ']') + .removeClass(self.settings.active_class) + .removeData('target'); + + self.S(this).trigger('closed').trigger('closed.fndtn.dropdown', [dropdown]); + } + }); + dropdown.removeClass('f-open-' + this.attr_name(true)); + }, + + closeall : function () { + var self = this; + $.each(self.S('.f-open-' + this.attr_name(true)), function () { + self.close.call(self, self.S(this)); + }); + }, + + open : function (dropdown, target) { + this + .css(dropdown + .addClass(this.settings.active_class), target); + dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class); + dropdown.data('target', target.get(0)).trigger('opened').trigger('opened.fndtn.dropdown', [dropdown, target]); + dropdown.attr('aria-hidden', 'false'); + target.attr('aria-expanded', 'true'); + dropdown.focus(); + dropdown.addClass('f-open-' + this.attr_name(true)); + }, + + data_attr : function () { + if (this.namespace.length > 0) { + return this.namespace + '-' + this.name; + } + + return this.name; + }, + + toggle : function (target) { + if (target.hasClass(this.settings.disabled_class)) { + return; + } + var dropdown = this.S('#' + target.data(this.data_attr())); + if (dropdown.length === 0) { + // No dropdown found, not continuing + return; + } + + this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown)); + + if (dropdown.hasClass(this.settings.active_class)) { + this.close.call(this, dropdown); + if (dropdown.data('target') !== target.get(0)) { + this.open.call(this, dropdown, target); + } + } else { + this.open.call(this, dropdown, target); + } + }, + + resize : function () { + var dropdown = this.S('[' + this.attr_name() + '-content].open'); + var target = $(dropdown.data("target")); + + if (dropdown.length && target.length) { + this.css(dropdown, target); + } + }, + + css : function (dropdown, target) { + var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8), + settings = target.data(this.attr_name(true) + '-init') || this.settings; + + this.clear_idx(); + + if (this.small()) { + var p = this.dirs.bottom.call(dropdown, target, settings); + + dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({ + position : 'absolute', + width : '95%', + 'max-width' : 'none', + top : p.top + }); + + dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset); + } else { + + this.style(dropdown, target, settings); + } + + return dropdown; + }, + + style : function (dropdown, target, settings) { + var css = $.extend({position : 'absolute'}, + this.dirs[settings.align].call(dropdown, target, settings)); + + dropdown.attr('style', '').css(css); + }, + + // return CSS property object + // `this` is the dropdown + dirs : { + // Calculate target offset + _base : function (t) { + var o_p = this.offsetParent(), + o = o_p.offset(), + p = t.offset(); + + p.top -= o.top; + p.left -= o.left; + + //set some flags on the p object to pass along + p.missRight = false; + p.missTop = false; + p.missLeft = false; + p.leftRightFlag = false; + + //lets see if the panel will be off the screen + //get the actual width of the page and store it + var actualBodyWidth; + if (document.getElementsByClassName('row')[0]) { + actualBodyWidth = document.getElementsByClassName('row')[0].clientWidth; + } else { + actualBodyWidth = window.outerWidth; + } + + var actualMarginWidth = (window.outerWidth - actualBodyWidth) / 2; + var actualBoundary = actualBodyWidth; + + if (!this.hasClass('mega')) { + //miss top + if (t.offset().top <= this.outerHeight()) { + p.missTop = true; + actualBoundary = window.outerWidth - actualMarginWidth; + p.leftRightFlag = true; + } + + //miss right + if (t.offset().left + this.outerWidth() > t.offset().left + actualMarginWidth && t.offset().left - actualMarginWidth > this.outerWidth()) { + p.missRight = true; + p.missLeft = false; + } + + //miss left + if (t.offset().left - this.outerWidth() <= 0) { + p.missLeft = true; + p.missRight = false; + } + } + + return p; + }, + + top : function (t, s) { + var self = Foundation.libs.dropdown, + p = self.dirs._base.call(this, t); + + this.addClass('drop-top'); + + if (p.missTop == true) { + p.top = p.top + t.outerHeight() + this.outerHeight(); + this.removeClass('drop-top'); + } + + if (p.missRight == true) { + p.left = p.left - this.outerWidth() + t.outerWidth(); + } + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this, t, s, p); + } + + if (Foundation.rtl) { + return {left : p.left - this.outerWidth() + t.outerWidth(), + top : p.top - this.outerHeight()}; + } + + return {left : p.left, top : p.top - this.outerHeight()}; + }, + + bottom : function (t, s) { + var self = Foundation.libs.dropdown, + p = self.dirs._base.call(this, t); + + if (p.missRight == true) { + p.left = p.left - this.outerWidth() + t.outerWidth(); + } + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this, t, s, p); + } + + if (self.rtl) { + return {left : p.left - this.outerWidth() + t.outerWidth(), top : p.top + t.outerHeight()}; + } + + return {left : p.left, top : p.top + t.outerHeight()}; + }, + + left : function (t, s) { + var p = Foundation.libs.dropdown.dirs._base.call(this, t); + + this.addClass('drop-left'); + + if (p.missLeft == true) { + p.left = p.left + this.outerWidth(); + p.top = p.top + t.outerHeight(); + this.removeClass('drop-left'); + } + + return {left : p.left - this.outerWidth(), top : p.top}; + }, + + right : function (t, s) { + var p = Foundation.libs.dropdown.dirs._base.call(this, t); + + this.addClass('drop-right'); + + if (p.missRight == true) { + p.left = p.left - this.outerWidth(); + p.top = p.top + t.outerHeight(); + this.removeClass('drop-right'); + } else { + p.triggeredRight = true; + } + + var self = Foundation.libs.dropdown; + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this, t, s, p); + } + + return {left : p.left + t.outerWidth(), top : p.top}; + } + }, + + // Insert rule to style psuedo elements + adjust_pip : function (dropdown, target, settings, position) { + var sheet = Foundation.stylesheet, + pip_offset_base = 8; + + if (dropdown.hasClass(settings.mega_class)) { + pip_offset_base = position.left + (target.outerWidth() / 2) - 8; + } else if (this.small()) { + pip_offset_base += position.left - 8; + } + + this.rule_idx = sheet.cssRules.length; + + //default + var sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left: ' + pip_offset_base + 'px;', + css_after = 'left: ' + (pip_offset_base - 1) + 'px;'; + + if (position.missRight == true) { + pip_offset_base = dropdown.outerWidth() - 23; + sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left: ' + pip_offset_base + 'px;', + css_after = 'left: ' + (pip_offset_base - 1) + 'px;'; + } + + //just a case where right is fired, but its not missing right + if (position.triggeredRight == true) { + sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left:-12px;', + css_after = 'left:-14px;'; + } + + if (sheet.insertRule) { + sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx); + sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1); + } else { + sheet.addRule(sel_before, css_before, this.rule_idx); + sheet.addRule(sel_after, css_after, this.rule_idx + 1); + } + }, + + // Remove old dropdown rule index + clear_idx : function () { + var sheet = Foundation.stylesheet; + + if (typeof this.rule_idx !== 'undefined') { + sheet.deleteRule(this.rule_idx); + sheet.deleteRule(this.rule_idx); + delete this.rule_idx; + } + }, + + small : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + off : function () { + this.S(this.scope).off('.fndtn.dropdown'); + this.S('html, body').off('.fndtn.dropdown'); + this.S(window).off('.fndtn.dropdown'); + this.S('[data-dropdown-content]').off('.fndtn.dropdown'); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.equalizer = { + name : 'equalizer', + + version : '5.5.1', + + settings : { + use_tallest : true, + before_height_change : $.noop, + after_height_change : $.noop, + equalize_on_stack : false + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'image_loaded'); + this.bindings(method, options); + this.reflow(); + }, + + events : function () { + this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) { + this.reflow(); + }.bind(this)); + }, + + equalize : function (equalizer) { + var isStacked = false, + vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'), + settings = equalizer.data(this.attr_name(true) + '-init'); + + if (vals.length === 0) { + return; + } + var firstTopOffset = vals.first().offset().top; + settings.before_height_change(); + equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer'); + vals.height('inherit'); + vals.each(function () { + var el = $(this); + if (el.offset().top !== firstTopOffset) { + isStacked = true; + } + }); + + if (settings.equalize_on_stack === false) { + if (isStacked) { + return; + } + }; + + var heights = vals.map(function () { return $(this).outerHeight(false) }).get(); + + if (settings.use_tallest) { + var max = Math.max.apply(null, heights); + vals.css('height', max); + } else { + var min = Math.min.apply(null, heights); + vals.css('height', min); + } + settings.after_height_change(); + equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer'); + }, + + reflow : function () { + var self = this; + + this.S('[' + this.attr_name() + ']', this.scope).each(function () { + var $eq_target = $(this); + self.image_loaded(self.S('img', this), function () { + self.equalize($eq_target) + }); + }); + } + }; +})(jQuery, window, window.document); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.interchange = { + name : 'interchange', + + version : '5.5.1', + + cache : {}, + + images_loaded : false, + nodes_loaded : false, + + settings : { + load_attr : 'interchange', + + named_queries : { + 'default' : 'only screen', + 'small' : Foundation.media_queries['small'], + 'small-only' : Foundation.media_queries['small-only'], + 'medium' : Foundation.media_queries['medium'], + 'medium-only' : Foundation.media_queries['medium-only'], + 'large' : Foundation.media_queries['large'], + 'large-only' : Foundation.media_queries['large-only'], + 'xlarge' : Foundation.media_queries['xlarge'], + 'xlarge-only' : Foundation.media_queries['xlarge-only'], + 'xxlarge' : Foundation.media_queries['xxlarge'], + '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, trigger) { + // The trigger argument, if called within the directive, fires + // an event named after the directive on the element, passing + // any parameters along to the event that you pass to trigger. + // + // ex. trigger(), trigger([a, b, c]), or trigger(a, b, c) + // + // This allows you to bind a callback like so: + // $('#interchangeContainer').on('replace', function (e, a, b, c) { + // console.log($(this).html(), a, b, c); + // }); + + 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 trigger(el[0].src); + } + var last_path = el.data(this.data_attr + '-last-path'), + self = this; + + if (last_path == path) { + return; + } + + if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) { + $(el).css('background-image', 'url(' + path + ')'); + el.data('interchange-last-path', path); + return trigger(path); + } + + return $.get(path, function (response) { + el.html(response); + el.data(self.data_attr + '-last-path', path); + trigger(); + }); + + } + } + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle random_str'); + + this.data_attr = this.set_data_attr(); + $.extend(true, this.settings, method, options); + this.bindings(method, options); + this.load('images'); + this.load('nodes'); + }, + + get_media_hash : function () { + var mediaHash = ''; + for (var queryName in this.settings.named_queries ) { + mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString(); + } + return mediaHash; + }, + + events : function () { + var self = this, prevMediaHash; + + $(window) + .off('.interchange') + .on('resize.fndtn.interchange', self.throttle(function () { + var currMediaHash = self.get_media_hash(); + if (currMediaHash !== prevMediaHash) { + self.resize(); + } + prevMediaHash = currMediaHash; + }, 50)); + + return this; + }, + + resize : function () { + var cache = this.cache; + + if (!this.images_loaded || !this.nodes_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]].call(this, passed.el, passed.scenario[0], (function (passed) { + if (arguments[0] instanceof Array) { + var args = arguments[0]; + } else { + var args = Array.prototype.slice.call(arguments, 0); + } + + return function() { + passed.el.trigger(passed.scenario[1], args); + } + }(passed))); + } + } + } + + }, + + results : function (uuid, scenarios) { + var count = scenarios.length; + + if (count > 0) { + var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]'); + + while (count--) { + var mq, rule = scenarios[count][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[count]}; + } + } + } + + return false; + }, + + load : function (type, force_update) { + if (typeof this['cached_' + type] === 'undefined' || force_update) { + this['update_' + type](); + } + + return this['cached_' + type]; + }, + + update_images : function () { + var images = this.S('img[' + this.data_attr + ']'), + count = images.length, + i = count, + loaded_count = 0, + data_attr = this.data_attr; + + this.cache = {}; + this.cached_images = []; + this.images_loaded = (count === 0); + + while (i--) { + loaded_count++; + if (images[i]) { + var str = images[i].getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_images.push(images[i]); + } + } + + if (loaded_count === count) { + this.images_loaded = true; + this.enhance('images'); + } + } + + return this; + }, + + update_nodes : function () { + var nodes = this.S('[' + this.data_attr + ']').not('img'), + count = nodes.length, + i = count, + loaded_count = 0, + data_attr = this.data_attr; + + this.cached_nodes = []; + this.nodes_loaded = (count === 0); + + while (i--) { + loaded_count++; + var str = nodes[i].getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_nodes.push(nodes[i]); + } + + if (loaded_count === count) { + this.nodes_loaded = true; + this.enhance('nodes'); + } + } + + return this; + }, + + enhance : function (type) { + var i = this['cached_' + type].length; + + while (i--) { + this.object($(this['cached_' + type][i])); + } + + return $(window).trigger('resize').trigger('resize.fndtn.interchange'); + }, + + convert_directive : function (directive) { + + var trimmed = this.trim(directive); + + if (trimmed.length > 0) { + return trimmed; + } + + return 'replace'; + }, + + parse_scenario : function (scenario) { + // This logic had to be made more complex since some users were using commas in the url path + // So we cannot simply just split on a comma + var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/), + media_query = scenario[1]; + + if (directive_match) { + var path = directive_match[1], + directive = directive_match[2]; + } else { + var cached_split = scenario[0].split(/,\s*$/), + path = cached_split[0], + directive = ''; + } + + return [this.trim(path), this.convert_directive(directive), this.trim(media_query)]; + }, + + object : function (el) { + var raw_arr = this.parse_data_attr(el), + scenarios = [], + i = raw_arr.length; + + if (i > 0) { + while (i--) { + var split = raw_arr[i].split(/\(([^\)]*?)(\))$/); + + if (split.length > 1) { + var params = this.parse_scenario(split); + scenarios.push(params); + } + } + } + + return this.store(el, scenarios); + }, + + store : function (el, scenarios) { + var uuid = this.random_str(), + current_uuid = el.data(this.add_namespace('uuid', true)); + + if (this.cache[current_uuid]) { + return this.cache[current_uuid]; + } + + el.attr(this.add_namespace('data-uuid'), uuid); + + return this.cache[uuid] = scenarios; + }, + + trim : function (str) { + + if (typeof str === 'string') { + return $.trim(str); + } + + return str; + }, + + set_data_attr : function (init) { + if (init) { + if (this.namespace.length > 0) { + return this.namespace + '-' + this.settings.load_attr; + } + + return this.settings.load_attr; + } + + if (this.namespace.length > 0) { + return 'data-' + this.namespace + '-' + this.settings.load_attr; + } + + return 'data-' + this.settings.load_attr; + }, + + parse_data_attr : function (el) { + var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/), + i = raw.length, + output = []; + + while (i--) { + if (raw[i].replace(/[\W\d]+/, '').length > 4) { + output.push(raw[i]); + } + } + + return output; + }, + + reflow : function () { + this.load('images', true); + this.load('nodes', true); + } + + }; + +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + var Modernizr = Modernizr || false; + + Foundation.libs.joyride = { + name : 'joyride', + + version : '5.5.1', + + defaults : { + expose : false, // turn on or off the expose feature + modal : true, // Whether to cover page with modal during the tour + keyboard : true, // enable left, right and esc keystrokes + tip_location : 'bottom', // 'top' or 'bottom' in relation to parent + nub_position : 'auto', // override on a per tooltip bases + scroll_speed : 1500, // Page scrolling speed in milliseconds, 0 = no scroll animation + scroll_animation : 'linear', // supports 'swing' and 'linear', extend with jQuery UI. + timer : 0, // 0 = no timer , all other numbers = timer in milliseconds + start_timer_on_click : true, // true or false - true requires clicking the first button start the timer + start_offset : 0, // the index of the tooltip you want to start on (index of the li) + next_button : true, // true or false to control whether a next button is used + prev_button : true, // true or false to control whether a prev button is used + tip_animation : 'fade', // 'pop' or 'fade' in each tip + pause_after : [], // array of indexes where to pause the tour after + exposed : [], // array of expose elements + tip_animation_fade_speed : 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition + cookie_monster : false, // true or false to control whether cookies are used + cookie_name : 'joyride', // Name the cookie you'll use + cookie_domain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com' + cookie_expires : 365, // set when you would like the cookie to expire. + tip_container : 'body', // Where will the tip be attached + abort_on_close : true, // When true, the close event will not fire any callback + tip_location_patterns : { + top : ['bottom'], + bottom : [], // bottom should not need to be repositioned + left : ['right', 'top', 'bottom'], + right : ['left', 'top', 'bottom'] + }, + post_ride_callback : function () {}, // A method to call once the tour closes (canceled or complete) + post_step_callback : function () {}, // A method to call after each step + pre_step_callback : function () {}, // A method to call before each step + pre_ride_callback : function () {}, // A method to call before the tour starts (passed index, tip, and cloned exposed element) + post_expose_callback : function () {}, // A method to call after an element has been exposed + template : { // HTML segments for tip layout + link : '×', + timer : '
', + tip : '
', + wrapper : '
', + button : '', + prev_button : '', + modal : '
', + expose : '
', + expose_cover : '
' + }, + expose_add_class : '' // One or more space-separated class names to be added to exposed element + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle random_str'); + + this.settings = this.settings || $.extend({}, this.defaults, (options || method)); + + this.bindings(method, options) + }, + + go_next : function () { + 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(); + } + }, + + go_prev : function () { + if (this.settings.$li.prev().length < 1) { + // Do nothing if there are no prev element + } else if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + this.hide(); + this.show(null, true); + this.startTimer(); + } else { + this.hide(); + this.show(null, true); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .off('.joyride') + .on('click.fndtn.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) { + e.preventDefault(); + this.go_next() + }.bind(this)) + .on('click.fndtn.joyride', '.joyride-prev-tip', function (e) { + e.preventDefault(); + this.go_prev(); + }.bind(this)) + + .on('click.fndtn.joyride', '.joyride-close-tip', function (e) { + e.preventDefault(); + this.end(this.settings.abort_on_close); + }.bind(this)) + + .on('keyup.fndtn.joyride', function (e) { + // Don't do anything if keystrokes are disabled + // or if the joyride is not being shown + if (!this.settings.keyboard || !this.settings.riding) { + return; + } + + switch (e.which) { + case 39: // right arrow + e.preventDefault(); + this.go_next(); + break; + case 37: // left arrow + e.preventDefault(); + this.go_prev(); + break; + case 27: // escape + e.preventDefault(); + this.end(this.settings.abort_on_close); + } + }.bind(this)); + + $(window) + .off('.joyride') + .on('resize.fndtn.joyride', self.throttle(function () { + if ($('[' + self.attr_name() + ']').length > 0 && self.settings.$next_tip && self.settings.riding) { + 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); + } + } + }, 100)); + }, + + start : function () { + var self = this, + $this = $('[' + this.attr_name() + ']', this.scope), + integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'], + int_settings_count = integer_settings.length; + + if (!$this.length > 0) { + return; + } + + if (!this.settings.init) { + this.events(); + } + + this.settings = $this.data(this.attr_name(true) + '-init'); + + // non configureable settings + this.settings.$content_el = $this; + this.settings.$body = $(this.settings.tip_container); + this.settings.body_offset = $(this.settings.tip_container).position(); + this.settings.$tip_content = this.settings.$content_el.find('> li'); + this.settings.paused = false; + this.settings.attempts = 0; + this.settings.riding = true; + + // can we create cookies? + if (typeof $.cookie !== 'function') { + this.settings.cookie_monster = false; + } + + // generate the tips and insert into dom. + if (!this.settings.cookie_monster || this.settings.cookie_monster && !$.cookie(this.settings.cookie_name)) { + this.settings.$tip_content.each(function (index) { + var $this = $(this); + this.settings = $.extend({}, self.defaults, self.data_options($this)); + + // Make sure that settings parsed from data_options are integers where necessary + var i = int_settings_count; + while (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.start_timer_on_click && 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.prev_button_text(opts.prev_button_text, opts.index) + + this.button_text(opts.button_text) + + this.settings.template.link + + this.timer_instance(opts.index); + + $blank.append($(this.settings.template.wrapper)); + $blank.first().attr(this.add_namespace('data-index'), opts.index); + $('.joyride-content-wrapper', $blank).append(content); + + return $blank[0]; + }, + + timer_instance : function (index) { + var txt; + + if ((index === 0 && this.settings.start_timer_on_click && this.settings.timer > 0) || this.settings.timer === 0) { + txt = ''; + } else { + txt = $(this.settings.template.timer)[0].outerHTML; + } + return txt; + }, + + button_text : function (txt) { + if (this.settings.tip_settings.next_button) { + txt = $.trim(txt) || 'Next'; + txt = $(this.settings.template.button).append(txt)[0].outerHTML; + } else { + txt = ''; + } + return txt; + }, + + prev_button_text : function (txt, idx) { + if (this.settings.tip_settings.prev_button) { + txt = $.trim(txt) || 'Previous'; + + // Add the disabled class to the button if it's the first element + if (idx == 0) { + txt = $(this.settings.template.prev_button).append(txt).addClass('disabled')[0].outerHTML; + } else { + txt = $(this.settings.template.prev_button).append(txt)[0].outerHTML; + } + } else { + txt = ''; + } + return txt; + }, + + create : function (opts) { + this.settings.tip_settings = $.extend({}, this.settings, this.data_options(opts.$li)); + var buttonText = opts.$li.attr(this.add_namespace('data-button')) || opts.$li.attr(this.add_namespace('data-text')), + prevButtonText = opts.$li.attr(this.add_namespace('data-button-prev')) || opts.$li.attr(this.add_namespace('data-prev-text')), + tipClass = opts.$li.attr('class'), + $tip_content = $(this.tip_template({ + tip_class : tipClass, + index : opts.index, + button_text : buttonText, + prev_button_text : prevButtonText, + li : opts.$li + })); + + $(this.settings.tip_container).append($tip_content); + }, + + show : function (init, is_prev) { + var $timer = null; + + // are we paused? + if (this.settings.$li === undefined || ($.inArray(this.settings.$li.index(), this.settings.pause_after) === -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, is_prev); + } + + this.settings.attempts = 0; + + if (this.settings.$li.length && this.settings.$target.length > 0) { + if (init) { //run when we first start + this.settings.pre_ride_callback(this.settings.$li.index(), this.settings.$next_tip); + if (this.settings.modal) { + this.show_modal(); + } + } + + this.settings.pre_step_callback(this.settings.$li.index(), this.settings.$next_tip); + + if (this.settings.modal && this.settings.expose) { + this.expose(); + } + + this.settings.tip_settings = $.extend({}, this.settings, this.data_options(this.settings.$li)); + + this.settings.timer = parseInt(this.settings.timer, 10); + + this.settings.tip_settings.tip_location_pattern = this.settings.tip_location_patterns[this.settings.tip_settings.tip_location]; + + // scroll and hide bg if not modal + if (!/body/i.test(this.settings.$target.selector)) { + var joyridemodalbg = $('.joyride-modal-bg'); + if (/pop/i.test(this.settings.tipAnimation)) { + joyridemodalbg.hide(); + } else { + joyridemodalbg.fadeOut(this.settings.tipAnimationFadeSpeed); + } + 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.tip_animation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip.show(); + + setTimeout(function () { + $timer.animate({ + width : $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tip_animation_fade_speed); + + } else { + this.settings.$next_tip.show(); + + } + + } else if (/fade/i.test(this.settings.tip_animation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip + .fadeIn(this.settings.tip_animation_fade_speed) + .show(); + + setTimeout(function () { + $timer.animate({ + width : $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tip_animation_fade_speed); + + } else { + this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed); + } + } + + this.settings.$current_tip = this.settings.$next_tip; + + // skip non-existant targets + } else if (this.settings.$li && this.settings.$target.length < 1) { + + this.show(init, is_prev); + + } else { + + this.end(); + + } + } else { + + this.settings.paused = true; + + } + + }, + + is_phone : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + 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.post_step_callback(this.settings.$li.index(), + this.settings.$current_tip); + }, + + set_li : function (init, is_prev) { + if (init) { + this.settings.$li = this.settings.$tip_content.eq(this.settings.start_offset); + this.set_next_tip(); + this.settings.$current_tip = this.settings.$next_tip; + } else { + if (is_prev) { + this.settings.$li = this.settings.$li.prev(); + } 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').eq(this.settings.$li.index()); + this.settings.$next_tip.data('closed', ''); + }, + + set_target : function () { + var cl = this.settings.$li.attr(this.add_namespace('data-class')), + id = this.settings.$li.attr(this.add_namespace('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.settings.$next_tip.outerHeight()); + + if (tipOffset != 0) { + $('html, body').stop().animate({ + scrollTop : tipOffset + }, this.settings.scroll_speed, 'swing'); + } + }, + + paused : function () { + return ($.inArray((this.settings.$li.index() + 1), this.settings.pause_after) === -1); + }, + + restart : function () { + this.hide(); + this.settings.$li = undefined; + this.show('init'); + }, + + pos_default : function (init) { + var $nub = this.settings.$next_tip.find('.joyride-nub'), + nub_width = Math.ceil($nub.outerWidth() / 2), + nub_height = Math.ceil($nub.outerHeight() / 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 (!/body/i.test(this.settings.$target.selector)) { + var topAdjustment = this.settings.tip_settings.tipAdjustmentY ? parseInt(this.settings.tip_settings.tipAdjustmentY) : 0, + leftAdjustment = this.settings.tip_settings.tipAdjustmentX ? parseInt(this.settings.tip_settings.tipAdjustmentX) : 0; + + if (this.bottom()) { + if (this.rtl) { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment), + left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth() + leftAdjustment}); + } else { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment), + left : this.settings.$target.offset().left + leftAdjustment}); + } + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'top'); + + } else if (this.top()) { + if (this.rtl) { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment), + left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth()}); + } else { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment), + left : this.settings.$target.offset().left + leftAdjustment}); + } + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'bottom'); + + } else if (this.right()) { + + this.settings.$next_tip.css({ + top : this.settings.$target.offset().top + topAdjustment, + left : (this.settings.$target.outerWidth() + this.settings.$target.offset().left + nub_width + leftAdjustment)}); + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'left'); + + } else if (this.left()) { + + this.settings.$next_tip.css({ + top : this.settings.$target.offset().top + topAdjustment, + left : (this.settings.$target.offset().left - this.settings.$next_tip.outerWidth() - nub_width + leftAdjustment)}); + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'right'); + + } + + if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tip_settings.tip_location_pattern.length) { + + $nub.removeClass('bottom') + .removeClass('top') + .removeClass('right') + .removeClass('left'); + + this.settings.tip_settings.tip_location = this.settings.tip_settings.tip_location_pattern[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.settings.$next_tip.outerHeight(), + tip_offset = this.settings.$next_tip.offset(), + target_height = this.settings.$target.outerHeight(), + $nub = $('.joyride-nub', this.settings.$next_tip), + nub_height = Math.ceil($nub.outerHeight() / 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) { + var joyridemodalbg = $(this.settings.template.modal); + joyridemodalbg.appendTo('body'); + } + + if (/pop/i.test(this.settings.tip_animation)) { + joyridemodalbg.show(); + } else { + joyridemodalbg.fadeIn(this.settings.tip_animation_fade_speed); + } + } + }, + + expose : function () { + var expose, + exposeCover, + el, + origCSS, + origClasses, + randId = 'expose-' + this.random_str(6); + + 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 : el.outerWidth(true), + height : el.outerHeight(true) + }); + + exposeCover = $(this.settings.template.expose_cover); + + 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.expose_add_class); + + exposeCover.css({ + top : el.offset().top, + left : el.offset().left, + width : el.outerWidth(true), + height : el.outerHeight(true) + }); + + if (this.settings.modal) { + this.show_modal(); + } + + this.settings.$body.append(exposeCover); + expose.addClass(randId); + exposeCover.addClass(randId); + el.data('expose', randId); + this.settings.post_expose_callback(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, i; + if (el instanceof $) { + search = el[0] + } else if (typeof el == 'string') { + search = el; + } + + this.settings.exposed = this.settings.exposed || []; + i = this.settings.exposed.length; + + while (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.settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()), + left : ((($w.width() - this.settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft()) + }); + + return true; + }, + + bottom : function () { + return /bottom/i.test(this.settings.tip_settings.tip_location); + }, + + top : function () { + return /top/i.test(this.settings.tip_settings.tip_location); + }, + + right : function () { + return /right/i.test(this.settings.tip_settings.tip_location); + }, + + left : function () { + return /left/i.test(this.settings.tip_settings.tip_location); + }, + + 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() + w.scrollLeft(), + 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(), + w.scrollLeft() > 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 (abort) { + if (this.settings.cookie_monster) { + $.cookie(this.settings.cookie_name, 'ridden', {expires : this.settings.cookie_expires, domain : this.settings.cookie_domain}); + } + + if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + } + + if (this.settings.modal && this.settings.expose) { + this.un_expose(); + } + + // Unplug keystrokes listener + $(this.scope).off('keyup.joyride') + + this.settings.$next_tip.data('closed', true); + this.settings.riding = false; + + $('.joyride-modal-bg').hide(); + this.settings.$current_tip.hide(); + + if (typeof abort === 'undefined' || abort === false) { + this.settings.post_step_callback(this.settings.$li.index(), this.settings.$current_tip); + this.settings.post_ride_callback(this.settings.$li.index(), this.settings.$current_tip); + } + + $('.joyride-tip-guide').remove(); + }, + + 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 () {} + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs['magellan-expedition'] = { + name : 'magellan-expedition', + + version : '5.5.1', + + settings : { + active_class : 'active', + threshold : 0, // pixels from the top of the expedition for it to become fixes + destination_threshold : 20, // pixels from the top of destination for it to be considered active + throttle_delay : 30, // calculation throttling to increase framerate + fixed_top : 0, // top distance in pixels assigend to the fixed element on scroll + offset_by_height : true, // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side. + duration : 700, // animation duration time + easing : 'swing' // animation easing + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + this.bindings(method, options); + }, + + events : function () { + var self = this, + S = self.S, + settings = self.settings; + + // initialize expedition offset + self.set_expedition_position(); + + S(self.scope) + .off('.magellan') + .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href^="#"]', function (e) { + e.preventDefault(); + var expedition = $(this).closest('[' + self.attr_name() + ']'), + settings = expedition.data('magellan-expedition-init'), + hash = this.hash.split('#').join(''), + target = $('a[name="' + hash + '"]'); + + if (target.length === 0) { + target = $('#' + hash); + + } + + // Account for expedition height if fixed position + var scroll_top = target.offset().top - settings.destination_threshold + 1; + if (settings.offset_by_height) { + scroll_top = scroll_top - expedition.outerHeight(); + } + + $('html, body').stop().animate({ + 'scrollTop' : scroll_top + }, settings.duration, settings.easing, function () { + if (history.pushState) { + history.pushState(null, null, '#' + hash); + } else { + location.hash = '#' + hash; + } + }); + }) + .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay)); + + $(window) + .on('resize.fndtn.magellan', self.throttle(this.set_expedition_position.bind(this), settings.throttle_delay)); + }, + + check_for_arrivals : function () { + var self = this; + self.update_arrivals(); + self.update_expedition_positions(); + }, + + set_expedition_position : function () { + var self = this; + $('[' + this.attr_name() + '=fixed]', self.scope).each(function (idx, el) { + var expedition = $(this), + settings = expedition.data('magellan-expedition-init'), + styles = expedition.attr('styles'), // save styles + top_offset, fixed_top; + + expedition.attr('style', ''); + top_offset = expedition.offset().top + settings.threshold; + + //set fixed-top by attribute + fixed_top = parseInt(expedition.data('magellan-fixed-top')); + if (!isNaN(fixed_top)) { + self.settings.fixed_top = fixed_top; + } + + expedition.data(self.data_attr('magellan-top-offset'), top_offset); + expedition.attr('style', styles); + }); + }, + + update_expedition_positions : function () { + var self = this, + window_top_offset = $(window).scrollTop(); + + $('[' + this.attr_name() + '=fixed]', self.scope).each(function () { + var expedition = $(this), + settings = expedition.data('magellan-expedition-init'), + styles = expedition.attr('style'), // save styles + top_offset = expedition.data('magellan-top-offset'); + + //scroll to the top distance + if (window_top_offset + self.settings.fixed_top >= top_offset) { + // Placeholder allows height calculations to be consistent even when + // appearing to switch between fixed/non-fixed placement + var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']'); + if (placeholder.length === 0) { + placeholder = expedition.clone(); + placeholder.removeAttr(self.attr_name()); + placeholder.attr(self.add_namespace('data-magellan-expedition-clone'), ''); + expedition.before(placeholder); + } + expedition.css({position :'fixed', top : settings.fixed_top}).addClass('fixed'); + } else { + expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove(); + expedition.attr('style', styles).css('position', '').css('top', '').removeClass('fixed'); + } + }); + }, + + update_arrivals : function () { + var self = this, + window_top_offset = $(window).scrollTop(); + + $('[' + this.attr_name() + ']', self.scope).each(function () { + var expedition = $(this), + settings = expedition.data(self.attr_name(true) + '-init'), + offsets = self.offsets(expedition, window_top_offset), + arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'), + active_item = false; + offsets.each(function (idx, item) { + if (item.viewport_offset >= item.top_offset) { + var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'); + arrivals.not(item.arrival).removeClass(settings.active_class); + item.arrival.addClass(settings.active_class); + active_item = true; + return true; + } + }); + + if (!active_item) { + arrivals.removeClass(settings.active_class); + } + }); + }, + + offsets : function (expedition, window_offset) { + var self = this, + settings = expedition.data(self.attr_name(true) + '-init'), + viewport_offset = window_offset; + + return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function (idx, el) { + var name = $(this).data(self.data_attr('magellan-arrival')), + dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']'); + if (dest.length > 0) { + var top_offset = dest.offset().top - settings.destination_threshold; + if (settings.offset_by_height) { + top_offset = top_offset - expedition.outerHeight(); + } + top_offset = Math.floor(top_offset); + return { + destination : dest, + arrival : $(this), + top_offset : top_offset, + viewport_offset : viewport_offset + } + } + }).sort(function (a, b) { + if (a.top_offset < b.top_offset) { + return -1; + } + if (a.top_offset > b.top_offset) { + return 1; + } + return 0; + }); + }, + + data_attr : function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + off : function () { + this.S(this.scope).off('.magellan'); + this.S(window).off('.magellan'); + }, + + reflow : function () { + var self = this; + // remove placeholder expeditions used for height calculation purposes + $('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove(); + } + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.offcanvas = { + name : 'offcanvas', + + version : '5.5.1', + + settings : { + open_method : 'move', + close_on_click : false + }, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function () { + var self = this, + S = self.S, + move_class = '', + right_postfix = '', + left_postfix = ''; + + if (this.settings.open_method === 'move') { + move_class = 'move-'; + right_postfix = 'right'; + left_postfix = 'left'; + } else if (this.settings.open_method === 'overlap_single') { + move_class = 'offcanvas-overlap-'; + right_postfix = 'right'; + left_postfix = 'left'; + } else if (this.settings.open_method === 'overlap') { + move_class = 'offcanvas-overlap'; + } + + S(this.scope).off('.offcanvas') + .on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e) { + self.click_toggle_class(e, move_class + right_postfix); + if (self.settings.open_method !== 'overlap') { + S('.left-submenu').removeClass(move_class + right_postfix); + } + $('.left-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e) { + var settings = self.get_settings(e); + var parent = S(this).parent(); + + if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) { + self.hide.call(self, move_class + right_postfix, self.get_wrapper(e)); + parent.parent().removeClass(move_class + right_postfix); + } else if (S(this).parent().hasClass('has-submenu')) { + e.preventDefault(); + S(this).siblings('.left-submenu').toggleClass(move_class + right_postfix); + } else if (parent.hasClass('back')) { + e.preventDefault(); + parent.parent().removeClass(move_class + right_postfix); + } + $('.left-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e) { + self.click_toggle_class(e, move_class + left_postfix); + if (self.settings.open_method !== 'overlap') { + S('.right-submenu').removeClass(move_class + left_postfix); + } + $('.right-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e) { + var settings = self.get_settings(e); + var parent = S(this).parent(); + + if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) { + self.hide.call(self, move_class + left_postfix, self.get_wrapper(e)); + parent.parent().removeClass(move_class + left_postfix); + } else if (S(this).parent().hasClass('has-submenu')) { + e.preventDefault(); + S(this).siblings('.right-submenu').toggleClass(move_class + left_postfix); + } else if (parent.hasClass('back')) { + e.preventDefault(); + parent.parent().removeClass(move_class + left_postfix); + } + $('.right-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) { + self.click_remove_class(e, move_class + left_postfix); + S('.right-submenu').removeClass(move_class + left_postfix); + if (right_postfix) { + self.click_remove_class(e, move_class + right_postfix); + S('.left-submenu').removeClass(move_class + left_postfix); + } + $('.right-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) { + self.click_remove_class(e, move_class + left_postfix); + $('.left-off-canvas-toggle').attr('aria-expanded', 'false'); + if (right_postfix) { + self.click_remove_class(e, move_class + right_postfix); + $('.right-off-canvas-toggle').attr('aria-expanded', 'false'); + } + }); + }, + + toggle : function (class_name, $off_canvas) { + $off_canvas = $off_canvas || this.get_wrapper(); + if ($off_canvas.is('.' + class_name)) { + this.hide(class_name, $off_canvas); + } else { + this.show(class_name, $off_canvas); + } + }, + + show : function (class_name, $off_canvas) { + $off_canvas = $off_canvas || this.get_wrapper(); + $off_canvas.trigger('open').trigger('open.fndtn.offcanvas'); + $off_canvas.addClass(class_name); + }, + + hide : function (class_name, $off_canvas) { + $off_canvas = $off_canvas || this.get_wrapper(); + $off_canvas.trigger('close').trigger('close.fndtn.offcanvas'); + $off_canvas.removeClass(class_name); + }, + + click_toggle_class : function (e, class_name) { + e.preventDefault(); + var $off_canvas = this.get_wrapper(e); + this.toggle(class_name, $off_canvas); + }, + + click_remove_class : function (e, class_name) { + e.preventDefault(); + var $off_canvas = this.get_wrapper(e); + this.hide(class_name, $off_canvas); + }, + + get_settings : function (e) { + var offcanvas = this.S(e.target).closest('[' + this.attr_name() + ']'); + return offcanvas.data(this.attr_name(true) + '-init') || this.settings; + }, + + get_wrapper : function (e) { + var $off_canvas = this.S(e ? e.target : this.scope).closest('.off-canvas-wrap'); + + if ($off_canvas.length === 0) { + $off_canvas = this.S('.off-canvas-wrap'); + } + return $off_canvas; + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); + +;(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; + + self.slides = function () { + return slides_container.children(settings.slide_selector); + }; + + self.slides().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(self.slides().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 = $('[data-orbit-link="' + self.slides().eq(index).attr('data-orbit-slide') + '"]'); + link.siblings().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.stack_on_small) { + container.addClass(settings.stack_on_small_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); + bullets_container.wrap('
    '); + self.slides().each(function (idx, el) { + var bullet = $('
  1. ').attr('data-orbit-slide', idx).on('click', self.link_bullet);; + bullets_container.append(bullet); + }); + } + + }; + + 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 = self.slides(); + + var dir = 'next'; + locked = true; + if (next_idx < idx) {dir = 'prev';} + if (next_idx >= slides.length) { + if (!settings.circular) { + return false; + } + next_idx = 0; + } else if (next_idx < 0) { + if (!settings.circular) { + return false; + } + 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('before-slide-change.fndtn.orbit'); + 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('after-slide-change.fndtn.orbit', [{slide_number : idx, total_slides : slides.length}]); + settings.after_slide_change(idx, slides.length); + }; + if (slides_container.outerHeight() != next.outerHeight() && settings.variable_height) { + slides_container.animate({'height': next.outerHeight()}, 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.outerHeight() > slides_container.outerHeight() && settings.variable_height) { + slides_container.animate({'height': next.outerHeight()}, 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)) != '') { + if (isNaN(parseInt(index))) { + var slide = container.find('[data-orbit-slide=' + index + ']'); + if (slide.index() != -1) {self._goto(slide.index() + 1);} + } else { + self._goto(parseInt(index)); + } + } + + } + + self.timer_callback = function () { + self._goto(idx + 1, true); + } + + self.compute_dimensions = function () { + var current = $(self.slides().get(idx)); + var h = current.outerHeight(); + if (!settings.variable_height) { + self.slides().each(function(){ + if ($(this).outerHeight() > h) { h = $(this).outerHeight(); } + }); + } + 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(); + Foundation.utils.image_loaded(this.slides().children('img'), 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); + + if (settings.next_on_click) { + container.on('click', '.' + settings.slides_container_class + ' [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('load resize', self.compute_dimensions); + Foundation.utils.image_loaded(this.slides().children('img'), self.compute_dimensions); + Foundation.utils.image_loaded(this.slides().children('img'), function () { + container.prev('.' + settings.preloader_class).css('display', 'none'); + self.update_slide_number(0); + self.update_active_link(0); + slides_container.trigger('ready.fndtn.orbit'); + }); + }; + + 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('timer-started.fndtn.orbit') + }; + + 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('timer-stopped.fndtn.orbit'); + }; + }; + + 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) { + current.animate({marginLeft : '-100%'}, duration); + next.animate(animMargin, duration, function () { + current.css(margin, '100%'); + callback(); + }); + }; + + this.prev = function (current, prev, callback) { + current.animate({marginLeft : '100%'}, duration); + prev.css(margin, '-100%'); + prev.animate(animMargin, duration, 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 : '5.5.1', + + settings : { + animation : 'slide', + timer_speed : 10000, + pause_on_hover : true, + resume_on_mouseout : false, + next_on_click : true, + 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', + preloader_class : 'preloader', + slide_selector : '*', + 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, + circular : true, + timer : true, + variable_height : false, + swipe : true, + before_slide_change : noop, + after_slide_change : noop + }, + + init : function (scope, method, options) { + var self = this; + this.bindings(method, options); + }, + + events : function (instance) { + var orbit_instance = new Orbit(this.S(instance), this.S(instance).data('orbit-init')); + this.S(instance).data(this.name + '-instance', orbit_instance); + }, + + reflow : function () { + var self = this; + + if (self.S(self.scope).is('[data-orbit]')) { + var $el = self.S(self.scope); + var instance = $el.data(self.name + '-instance'); + instance.compute_dimensions(); + } else { + self.S('[data-orbit]', self.scope).each(function (idx, el) { + var $el = self.S(el); + var opts = self.data_options($el); + var instance = $el.data(self.name + '-instance'); + instance.compute_dimensions(); + }); + } + } + }; + +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.reveal = { + name : 'reveal', + + version : '5.5.1', + + locked : false, + + settings : { + animation : 'fadeAndPop', + animation_speed : 250, + close_on_background_click : true, + close_on_esc : true, + dismiss_modal_class : 'close-reveal-modal', + multiple_opened : false, + bg_class : 'reveal-modal-bg', + root_element : 'body', + 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) { + $.extend(true, this.settings, method, options); + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + S = self.S; + + S(this.scope) + .off('.reveal') + .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) { + e.preventDefault(); + + if (!self.locked) { + var element = S(this), + ajax = element.data(self.data_attr('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}); + } + } + }); + + S(document) + .on('click.fndtn.reveal', this.close_targets(), function (e) { + e.preventDefault(); + if (!self.locked) { + var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings, + bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0]; + + if (bg_clicked) { + if (settings.close_on_background_click) { + e.stopPropagation(); + } else { + return; + } + } + + self.locked = true; + self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open') : S(this).closest('[' + self.attr_name() + ']')); + } + }); + + if (S('[' + self.attr_name() + ']', this.scope).length > 0) { + S(this.scope) + // .off('.reveal') + .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 { + S(this.scope) + // .off('.reveal') + .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open) + .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened) + .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video) + .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close) + .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed) + .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video); + } + + return true; + }, + + // PATCH #3: turning on key up capture only when a reveal window is open + key_up_on : function (scope) { + var self = this; + + // PATCH #1: fixing multiple keyup event trigger from single key press + self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) { + var open_modal = self.S('[' + self.attr_name() + '].open'), + settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ; + // PATCH #2: making sure that the close event can be called only while unlocked, + // so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window. + if ( settings && event.which === 27 && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key + self.close.call(self, open_modal); + } + }); + + return true; + }, + + // PATCH #3: turning on key up capture only when a reveal window is open + key_up_off : function (scope) { + this.S('body').off('keyup.fndtn.reveal'); + return true; + }, + + open : function (target, ajax_settings) { + var self = this, + modal; + + if (target) { + if (typeof target.selector !== 'undefined') { + // Find the named node; only use the first one found, since the rest of the code assumes there's only one node + modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first(); + } else { + modal = self.S(this.scope); + + ajax_settings = target; + } + } else { + modal = self.S(this.scope); + } + + var settings = modal.data(self.attr_name(true) + '-init'); + settings = settings || this.settings; + + if (modal.hasClass('open') && target.attr('data-reveal-id') == modal.attr('id')) { + return self.close(modal); + } + + if (!modal.hasClass('open')) { + var open_modal = self.S('[' + self.attr_name() + '].open'); + + if (typeof modal.data('css-top') === 'undefined') { + modal.data('css-top', parseInt(modal.css('top'), 10)) + .data('offset', this.cache_offset(modal)); + } + + this.key_up_on(modal); // PATCH #3: turning on key up capture only when a reveal window is open + + modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal'); + + if (open_modal.length < 1) { + this.toggle_bg(modal, true); + } + + if (typeof ajax_settings === 'string') { + ajax_settings = { + url : ajax_settings + }; + } + + if (typeof ajax_settings === 'undefined' || !ajax_settings.url) { + if (open_modal.length > 0) { + if (settings.multiple_opened) { + this.to_back(open_modal); + } else { + this.hide(open_modal, settings.css.close); + } + } + + this.show(modal, settings.css.open); + } else { + var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null; + + $.extend(ajax_settings, { + success : function (data, textStatus, jqXHR) { + if ( $.isFunction(old_success) ) { + var result = old_success(data, textStatus, jqXHR); + if (typeof result == 'string') { + data = result; + } + } + + modal.html(data); + self.S(modal).foundation('section', 'reflow'); + self.S(modal).children().foundation(); + + if (open_modal.length > 0) { + if (settings.multiple_opened) { + this.to_back(open_modal); + } else { + this.hide(open_modal, settings.css.close); + } + } + self.show(modal, settings.css.open); + } + }); + + $.ajax(ajax_settings); + } + } + self.S(window).trigger('resize'); + }, + + close : function (modal) { + var modal = modal && modal.length ? modal : this.S(this.scope), + open_modals = this.S('[' + this.attr_name() + '].open'), + settings = modal.data(this.attr_name(true) + '-init') || this.settings; + + if (open_modals.length > 0) { + this.locked = true; + this.key_up_off(modal); // PATCH #3: turning on key up capture only when a reveal window is open + modal.trigger('close').trigger('close.fndtn.reveal'); + + if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) { + this.toggle_bg(modal, false); + this.to_front(modal); + } + + if (settings.multiple_opened) { + this.hide(modal, settings.css.close, settings); + this.to_front($($.makeArray(open_modals).reverse()[1])); + } else { + this.hide(open_modals, settings.css.close, settings); + } + } + }, + + close_targets : function () { + var base = '.' + this.settings.dismiss_modal_class; + + if (this.settings.close_on_background_click) { + return base + ', .' + this.settings.bg_class; + } + + return base; + }, + + toggle_bg : function (modal, state) { + if (this.S('.' + this.settings.bg_class).length === 0) { + this.settings.bg = $('
    ', {'class': this.settings.bg_class}) + .appendTo('body').hide(); + } + + var visible = this.settings.bg.filter(':visible').length > 0; + if ( state != visible ) { + if ( state == undefined ? visible : !state ) { + this.hide(this.settings.bg); + } else { + this.show(this.settings.bg); + } + } + }, + + show : function (el, css) { + // is modal + if (css) { + var settings = el.data(this.attr_name(true) + '-init') || this.settings, + root_element = settings.root_element; + + if (el.parent(root_element).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(root_element); + } + + var animData = getAnimationData(settings.animation); + if (!animData.animate) { + this.locked = false; + } + if (animData.pop) { + css.top = $(window).scrollTop() - el.data('offset') + 'px'; + var end_css = { + top: $(window).scrollTop() + el.data('css-top') + 'px', + opacity: 1 + }; + + return setTimeout(function () { + return el + .css(css) + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.trigger('opened').trigger('opened.fndtn.reveal'); + }.bind(this)) + .addClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + if (animData.fade) { + css.top = $(window).scrollTop() + el.data('css-top') + 'px'; + var end_css = {opacity: 1}; + + return setTimeout(function () { + return el + .css(css) + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.trigger('opened').trigger('opened.fndtn.reveal'); + }.bind(this)) + .addClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened').trigger('opened.fndtn.reveal'); + } + + var settings = this.settings; + + // should we animate the background? + if (getAnimationData(settings.animation).fade) { + return el.fadeIn(settings.animation_speed / 2); + } + + this.locked = false; + + return el.show(); + }, + + to_back : function(el) { + el.addClass('toback'); + }, + + to_front : function(el) { + el.removeClass('toback'); + }, + + hide : function (el, css) { + // is modal + if (css) { + var settings = el.data(this.attr_name(true) + '-init'); + settings = settings || this.settings; + + var animData = getAnimationData(settings.animation); + if (!animData.animate) { + this.locked = false; + } + if (animData.pop) { + var end_css = { + top: - $(window).scrollTop() - el.data('offset') + 'px', + opacity: 0 + }; + + return setTimeout(function () { + return el + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed').trigger('closed.fndtn.reveal'); + }.bind(this)) + .removeClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + if (animData.fade) { + var end_css = {opacity : 0}; + + return setTimeout(function () { + return el + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed').trigger('closed.fndtn.reveal'); + }.bind(this)) + .removeClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + return el.hide().css(css).removeClass('open').trigger('closed').trigger('closed.fndtn.reveal'); + } + + var settings = this.settings; + + // should we animate the background? + if (getAnimationData(settings.animation).fade) { + return el.fadeOut(settings.animation_speed / 2); + } + + return el.hide(); + }, + + close_video : function (e) { + var video = $('.flex-video', e.target), + iframe = $('iframe', video); + + if (iframe.length > 0) { + iframe.attr('data-src', iframe[0].src); + iframe.attr('src', iframe.attr('src')); + video.hide(); + } + }, + + open_video : function (e) { + var video = $('.flex-video', e.target), + 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(); + } + }, + + data_attr : function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + 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 () {} + }; + + /* + * getAnimationData('popAndFade') // {animate: true, pop: true, fade: true} + * getAnimationData('fade') // {animate: true, pop: false, fade: true} + * getAnimationData('pop') // {animate: true, pop: true, fade: false} + * getAnimationData('foo') // {animate: false, pop: false, fade: false} + * getAnimationData(null) // {animate: false, pop: false, fade: false} + */ + function getAnimationData(str) { + var fade = /fade/i.test(str); + var pop = /pop/i.test(str); + return { + animate : fade || pop, + pop : pop, + fade : fade + }; + } +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.slider = { + name : 'slider', + + version : '5.5.1', + + settings : { + start : 0, + end : 100, + step : 1, + precision : null, + initial : null, + display_selector : '', + vertical : false, + trigger_input_change : false, + on_change : function () {} + }, + + cache : {}, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + this.bindings(method, options); + this.reflow(); + }, + + events : function () { + var self = this; + + $(this.scope) + .off('.slider') + .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider', + '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) { + if (!self.cache.active) { + e.preventDefault(); + self.set_active_slider($(e.target)); + } + }) + .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) { + if (!!self.cache.active) { + e.preventDefault(); + if ($.data(self.cache.active[0], 'settings').vertical) { + var scroll_offset = 0; + if (!e.pageY) { + scroll_offset = window.scrollY; + } + self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset); + } else { + self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x')); + } + } + }) + .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) { + self.remove_active_slider(); + }) + .on('change.fndtn.slider', function (e) { + self.settings.on_change(); + }); + + self.S(window) + .on('resize.fndtn.slider', self.throttle(function (e) { + self.reflow(); + }, 300)); + }, + + get_cursor_position : function (e, xy) { + var pageXY = 'page' + xy.toUpperCase(), + clientXY = 'client' + xy.toUpperCase(), + position; + + if (typeof e[pageXY] !== 'undefined') { + position = e[pageXY]; + } else if (typeof e.originalEvent[clientXY] !== 'undefined') { + position = e.originalEvent[clientXY]; + } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') { + position = e.originalEvent.touches[0][clientXY]; + } else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') { + position = e.currentPoint[xy]; + } + + return position; + }, + + set_active_slider : function ($handle) { + this.cache.active = $handle; + }, + + remove_active_slider : function () { + this.cache.active = null; + }, + + calculate_position : function ($handle, cursor_x) { + var self = this, + settings = $.data($handle[0], 'settings'), + handle_l = $.data($handle[0], 'handle_l'), + handle_o = $.data($handle[0], 'handle_o'), + bar_l = $.data($handle[0], 'bar_l'), + bar_o = $.data($handle[0], 'bar_o'); + + requestAnimationFrame(function () { + var pct; + + if (Foundation.rtl && !settings.vertical) { + pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1); + } else { + pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1); + } + + pct = settings.vertical ? 1 - pct : pct; + + var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision); + + self.set_ui($handle, norm); + }); + }, + + set_ui : function ($handle, value) { + var settings = $.data($handle[0], 'settings'), + handle_l = $.data($handle[0], 'handle_l'), + bar_l = $.data($handle[0], 'bar_l'), + norm_pct = this.normalized_percentage(value, settings.start, settings.end), + handle_offset = norm_pct * (bar_l - handle_l) - 1, + progress_bar_length = norm_pct * 100, + $handle_parent = $handle.parent(), + $hidden_inputs = $handle.parent().children('input[type=hidden]'); + + if (Foundation.rtl && !settings.vertical) { + handle_offset = -handle_offset; + } + + handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset; + this.set_translate($handle, handle_offset, settings.vertical); + + if (settings.vertical) { + $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%'); + } else { + $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%'); + } + + $handle_parent.attr(this.attr_name(), value).trigger('change').trigger('change.fndtn.slider'); + + $hidden_inputs.val(value); + if (settings.trigger_input_change) { + $hidden_inputs.trigger('change'); + } + + if (!$handle[0].hasAttribute('aria-valuemin')) { + $handle.attr({ + 'aria-valuemin' : settings.start, + 'aria-valuemax' : settings.end + }); + } + $handle.attr('aria-valuenow', value); + + if (settings.display_selector != '') { + $(settings.display_selector).each(function () { + if (this.hasOwnProperty('value')) { + $(this).val(value); + } else { + $(this).text(value); + } + }); + } + + }, + + normalized_percentage : function (val, start, end) { + return Math.min(1, (val - start) / (end - start)); + }, + + normalized_value : function (val, start, end, step, precision) { + var range = end - start, + point = val * range, + mod = (point - (point % step)) / step, + rem = point % step, + round = ( rem >= step * 0.5 ? step : 0); + return ((mod * step + round) + start).toFixed(precision); + }, + + set_translate : function (ele, offset, vertical) { + if (vertical) { + $(ele) + .css('-webkit-transform', 'translateY(' + offset + 'px)') + .css('-moz-transform', 'translateY(' + offset + 'px)') + .css('-ms-transform', 'translateY(' + offset + 'px)') + .css('-o-transform', 'translateY(' + offset + 'px)') + .css('transform', 'translateY(' + offset + 'px)'); + } else { + $(ele) + .css('-webkit-transform', 'translateX(' + offset + 'px)') + .css('-moz-transform', 'translateX(' + offset + 'px)') + .css('-ms-transform', 'translateX(' + offset + 'px)') + .css('-o-transform', 'translateX(' + offset + 'px)') + .css('transform', 'translateX(' + offset + 'px)'); + } + }, + + limit_to : function (val, min, max) { + return Math.min(Math.max(val, min), max); + }, + + initialize_settings : function (handle) { + var settings = $.extend({}, this.settings, this.data_options($(handle).parent())), + decimal_places_match_result; + + if (settings.precision === null) { + decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/); + settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0; + } + + if (settings.vertical) { + $.data(handle, 'bar_o', $(handle).parent().offset().top); + $.data(handle, 'bar_l', $(handle).parent().outerHeight()); + $.data(handle, 'handle_o', $(handle).offset().top); + $.data(handle, 'handle_l', $(handle).outerHeight()); + } else { + $.data(handle, 'bar_o', $(handle).parent().offset().left); + $.data(handle, 'bar_l', $(handle).parent().outerWidth()); + $.data(handle, 'handle_o', $(handle).offset().left); + $.data(handle, 'handle_l', $(handle).outerWidth()); + } + + $.data(handle, 'bar', $(handle).parent()); + $.data(handle, 'settings', settings); + }, + + set_initial_position : function ($ele) { + var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'), + initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start), + $handle = $ele.children('.range-slider-handle'); + this.set_ui($handle, initial); + }, + + set_value : function (value) { + var self = this; + $('[' + self.attr_name() + ']', this.scope).each(function () { + $(this).attr(self.attr_name(), value); + }); + if (!!$(this.scope).attr(self.attr_name())) { + $(this.scope).attr(self.attr_name(), value); + } + self.reflow(); + }, + + reflow : function () { + var self = this; + self.S('[' + this.attr_name() + ']').each(function () { + var handle = $(this).children('.range-slider-handle')[0], + val = $(this).attr(self.attr_name()); + self.initialize_settings(handle); + + if (val) { + self.set_ui($(handle), parseFloat(val)); + } else { + self.set_initial_position($(this)); + } + }); + } + }; + +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.tab = { + name : 'tab', + + version : '5.5.1', + + settings : { + active_class : 'active', + callback : function () {}, + deep_linking : false, + scroll_to_content : true, + is_hover : false + }, + + default_tab_hashes : [], + + init : function (scope, method, options) { + var self = this, + S = this.S; + + this.bindings(method, options); + + // store the initial href, which is used to allow correct behaviour of the + // browser back button when deep linking is turned on. + self.entry_location = window.location.href; + + this.handle_location_hash_change(); + + // Store the default active tabs which will be referenced when the + // location hash is absent, as in the case of navigating the tabs and + // returning to the first viewing via the browser Back button. + S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () { + self.default_tab_hashes.push(this.hash); + }); + }, + + events : function () { + var self = this, + S = this.S; + + var usual_tab_behavior = function (e) { + var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'); + if (!settings.is_hover || Modernizr.touch) { + e.preventDefault(); + e.stopPropagation(); + self.toggle_active_tab(S(this).parent()); + } + }; + + S(this.scope) + .off('.tab') + // Click event: tab title + .on('focus.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior ) + .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior ) + // Hover event: tab title + .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) { + var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'); + if (settings.is_hover) { + self.toggle_active_tab(S(this).parent()); + } + }); + + // Location hash change event + S(window).on('hashchange.fndtn.tab', function (e) { + e.preventDefault(); + self.handle_location_hash_change(); + }); + }, + + handle_location_hash_change : function () { + + var self = this, + S = this.S; + + S('[' + this.attr_name() + ']', this.scope).each(function () { + var settings = S(this).data(self.attr_name(true) + '-init'); + if (settings.deep_linking) { + // Match the location hash to a label + var hash; + if (settings.scroll_to_content) { + hash = self.scope.location.hash; + } else { + // prefix the hash to prevent anchor scrolling + hash = self.scope.location.hash.replace('fndtn-', ''); + } + if (hash != '') { + // Check whether the location hash references a tab content div or + // another element on the page (inside or outside the tab content div) + var hash_element = S(hash); + if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) { + // Tab content div + self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent()); + } else { + // Not the tab content div. If inside the tab content, find the + // containing tab and toggle it as active. + var hash_tab_container_id = hash_element.closest('.content').attr('id'); + if (hash_tab_container_id != undefined) { + self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash); + } + } + } else { + // Reference the default tab hashes which were initialized in the init function + for (var ind = 0; ind < self.default_tab_hashes.length; ind++) { + self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent()); + } + } + } + }); + }, + + toggle_active_tab : function (tab, location_hash) { + var self = this, + S = self.S, + tabs = tab.closest('[' + this.attr_name() + ']'), + tab_link = tab.find('a'), + anchor = tab.children('a').first(), + target_hash = '#' + anchor.attr('href').split('#')[1], + target = S(target_hash), + siblings = tab.siblings(), + settings = tabs.data(this.attr_name(true) + '-init'), + interpret_keyup_action = function (e) { + // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js + + // define current, previous and next (possible) tabs + + var $original = $(this); + var $prev = $(this).parents('li').prev().children('[role="tab"]'); + var $next = $(this).parents('li').next().children('[role="tab"]'); + var $target; + + // find the direction (prev or next) + + switch (e.keyCode) { + case 37: + $target = $prev; + break; + case 39: + $target = $next; + break; + default: + $target = false + break; + } + + if ($target.length) { + $original.attr({ + 'tabindex' : '-1', + 'aria-selected' : null + }); + $target.attr({ + 'tabindex' : '0', + 'aria-selected' : true + }).focus(); + } + + // Hide panels + + $('[role="tabpanel"]') + .attr('aria-hidden', 'true'); + + // Show panel which corresponds to target + + $('#' + $(document.activeElement).attr('href').substring(1)) + .attr('aria-hidden', null); + + }, + go_to_hash = function(hash) { + // This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it + // the user would get continually redirected to the default hash. + var is_entry_location = window.location.href === self.entry_location, + default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : is_entry_location ? window.location.hash :'fndtn-' + self.default_tab_hashes[0].replace('#', '') + + if (!(is_entry_location && hash === default_hash)) { + window.location.hash = hash; + } + }; + + // allow usage of data-tab-content attribute instead of href + if (S(this).data(this.data_attr('tab-content'))) { + target_hash = '#' + S(this).data(this.data_attr('tab-content')).split('#')[1]; + target = S(target_hash); + } + + if (settings.deep_linking) { + + if (settings.scroll_to_content) { + + // retain current hash to scroll to content + go_to_hash(location_hash || target_hash); + + if (location_hash == undefined || location_hash == target_hash) { + tab.parent()[0].scrollIntoView(); + } else { + S(target_hash)[0].scrollIntoView(); + } + } else { + // prefix the hashes so that the browser doesn't scroll down + if (location_hash != undefined) { + go_to_hash('fndtn-' + location_hash.replace('#', '')); + } else { + go_to_hash('fndtn-' + target_hash.replace('#', '')); + } + } + } + + // WARNING: The activation and deactivation of the tab content must + // occur after the deep linking in order to properly refresh the browser + // window (notably in Chrome). + // Clean up multiple attr instances to done once + tab.addClass(settings.active_class).triggerHandler('opened'); + tab_link.attr({'aria-selected' : 'true', tabindex : 0}); + siblings.removeClass(settings.active_class) + siblings.find('a').attr({'aria-selected' : 'false', tabindex : -1}); + target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true', tabindex : -1}); + target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex'); + settings.callback(tab); + target.triggerHandler('toggled', [tab]); + tabs.triggerHandler('toggled', [target]); + + tab_link.off('keydown').on('keydown', interpret_keyup_action ); + }, + + data_attr : function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + off : function () {}, + + reflow : function () {} + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.tooltip = { + name : 'tooltip', + + version : '5.5.1', + + settings : { + additional_inheritable_classes : [], + tooltip_class : '.tooltip', + append_to : 'body', + touch_close_text : 'Tap To Close', + disable_for_touch : false, + hover_delay : 200, + show_on : 'all', + tip_template : function (selector, content) { + return '' + content + ''; + } + }, + + cache : {}, + + init : function (scope, method, options) { + Foundation.inherit(this, 'random_str'); + this.bindings(method, options); + }, + + should_show : function (target, tip) { + var settings = $.extend({}, this.settings, this.data_options(target)); + + if (settings.show_on === 'all') { + return true; + } else if (this.small() && settings.show_on === 'small') { + return true; + } else if (this.medium() && settings.show_on === 'medium') { + return true; + } else if (this.large() && settings.show_on === 'large') { + return true; + } + return false; + }, + + medium : function () { + return matchMedia(Foundation.media_queries['medium']).matches; + }, + + large : function () { + return matchMedia(Foundation.media_queries['large']).matches; + }, + + events : function (instance) { + var self = this, + S = self.S; + + self.create(this.S(instance)); + + $(this.scope) + .off('.tooltip') + .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', + '[' + this.attr_name() + ']', function (e) { + var $this = S(this), + settings = $.extend({}, self.settings, self.data_options($this)), + is_touch = false; + + if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type) && S(e.target).is('a')) { + return false; + } + + if (/mouse/i.test(e.type) && self.ie_touch(e)) { + return false; + } + + if ($this.hasClass('open')) { + if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) { + e.preventDefault(); + } + self.hide($this); + } else { + if (settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) { + return; + } else if (!settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) { + e.preventDefault(); + S(settings.tooltip_class + '.open').hide(); + is_touch = true; + } + + if (/enter|over/i.test(e.type)) { + this.timer = setTimeout(function () { + var tip = self.showTip($this); + }.bind(this), self.settings.hover_delay); + } else if (e.type === 'mouseout' || e.type === 'mouseleave') { + clearTimeout(this.timer); + self.hide($this); + } else { + self.showTip($this); + } + } + }) + .on('mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', '[' + this.attr_name() + '].open', function (e) { + if (/mouse/i.test(e.type) && self.ie_touch(e)) { + return false; + } + + if ($(this).data('tooltip-open-event-type') == 'touch' && e.type == 'mouseleave') { + return; + } else if ($(this).data('tooltip-open-event-type') == 'mouse' && /MSPointerDown|touchstart/i.test(e.type)) { + self.convert_to_touch($(this)); + } else { + self.hide($(this)); + } + }) + .on('DOMNodeRemoved DOMAttrModified', '[' + this.attr_name() + ']:not(a)', function (e) { + self.hide(S(this)); + }); + }, + + ie_touch : function (e) { + // How do I distinguish between IE11 and Windows Phone 8????? + return false; + }, + + showTip : function ($target) { + var $tip = this.getTip($target); + if (this.should_show($target, $tip)) { + return this.show($target); + } + return; + }, + + getTip : function ($target) { + var selector = this.selector($target), + settings = $.extend({}, this.settings, this.data_options($target)), + tip = null; + + if (selector) { + tip = this.S('span[data-selector="' + selector + '"]' + settings.tooltip_class); + } + + return (typeof tip === 'object') ? tip : false; + }, + + selector : function ($target) { + var id = $target.attr('id'), + dataSelector = $target.attr(this.attr_name()) || $target.attr('data-selector'); + + if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { + dataSelector = this.random_str(6); + $target + .attr('data-selector', dataSelector) + .attr('aria-describedby', dataSelector); + } + + return (id && id.length > 0) ? id : dataSelector; + }, + + create : function ($target) { + var self = this, + settings = $.extend({}, this.settings, this.data_options($target)), + tip_template = this.settings.tip_template; + + if (typeof settings.tip_template === 'string' && window.hasOwnProperty(settings.tip_template)) { + tip_template = window[settings.tip_template]; + } + + var $tip = $(tip_template(this.selector($target), $('
    ').html($target.attr('title')).html())), + classes = this.inheritable_classes($target); + + $tip.addClass(classes).appendTo(settings.append_to); + + if (Modernizr.touch) { + $tip.append('' + settings.touch_close_text + ''); + $tip.on('touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', function (e) { + self.hide($target); + }); + } + + $target.removeAttr('title').attr('title', ''); + }, + + 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 = nub.outerHeight(); + nubWidth = nub.outerHeight(); + + if (this.small()) { + tip.css({'width' : '100%'}); + } else { + tip.css({'width' : (width) ? width : 'auto'}); + } + + 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' + }).end(); + }; + + objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', target.offset().left); + + if (this.small()) { + objPos(tip, (target.offset().top + target.outerHeight() + 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) { + nub.addClass('rtl'); + left = target.offset().left + target.outerWidth() - tip.outerWidth(); + } + objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', left); + tip.removeClass('tip-override'); + if (classes && classes.indexOf('tip-top') > -1) { + if (Foundation.rtl) { + nub.addClass('rtl'); + } + objPos(tip, (target.offset().top - tip.outerHeight()), 'auto', 'auto', left) + .removeClass('tip-override'); + } else if (classes && classes.indexOf('tip-left') > -1) { + objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left - tip.outerWidth() - nubHeight)) + .removeClass('tip-override'); + nub.removeClass('rtl'); + } else if (classes && classes.indexOf('tip-right') > -1) { + objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left + target.outerWidth() + nubHeight)) + .removeClass('tip-override'); + nub.removeClass('rtl'); + } + } + + tip.css('visibility', 'visible').hide(); + }, + + small : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + inheritable_classes : function ($target) { + var settings = $.extend({}, this.settings, this.data_options($target)), + inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'radius', 'round'].concat(settings.additional_inheritable_classes), + classes = $target.attr('class'), + filtered = classes ? $.map(classes.split(' '), function (el, i) { + if ($.inArray(el, inheritables) !== -1) { + return el; + } + }).join(' ') : ''; + + return $.trim(filtered); + }, + + convert_to_touch : function ($target) { + var self = this, + $tip = self.getTip($target), + settings = $.extend({}, self.settings, self.data_options($target)); + + if ($tip.find('.tap-to-close').length === 0) { + $tip.append('' + settings.touch_close_text + ''); + $tip.on('click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose', function (e) { + self.hide($target); + }); + } + + $target.data('tooltip-open-event-type', 'touch'); + }, + + show : function ($target) { + var $tip = this.getTip($target); + + if ($target.data('tooltip-open-event-type') == 'touch') { + this.convert_to_touch($target); + } + + this.reposition($target, $tip, $target.attr('class')); + $target.addClass('open'); + $tip.fadeIn(150); + }, + + hide : function ($target) { + var $tip = this.getTip($target); + + $tip.fadeOut(150, function () { + $tip.find('.tap-to-close').remove(); + $tip.off('click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose'); + $target.removeClass('open'); + }); + }, + + off : function () { + var self = this; + this.S(this.scope).off('.fndtn.tooltip'); + this.S(this.settings.tooltip_class).each(function (i) { + $('[' + self.attr_name() + ']').eq(i).attr('title', $(this).text()); + }).remove(); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.topbar = { + name : 'topbar', + + version : '5.5.1', + + settings : { + index : 0, + sticky_class : 'sticky', + custom_back_text : true, + back_text : 'Back', + mobile_show_parent_link : true, + is_hover : true, + scrolltop : true, // jump to top when sticky nav menu toggle is clicked + sticky_on : 'all' + }, + + init : function (section, method, options) { + Foundation.inherit(this, 'add_custom_rule register_media throttle'); + var self = this; + + self.register_media('topbar', 'foundation-mq-topbar'); + + this.bindings(method, options); + + self.S('[' + this.attr_name() + ']', this.scope).each(function () { + var topbar = $(this), + settings = topbar.data(self.attr_name(true) + '-init'), + section = self.S('section, .top-bar-section', this); + topbar.data('index', 0); + var topbarContainer = topbar.parent(); + if (topbarContainer.hasClass('fixed') || self.is_sticky(topbar, topbarContainer, settings) ) { + self.settings.sticky_class = settings.sticky_class; + self.settings.sticky_topbar = topbar; + topbar.data('height', topbarContainer.outerHeight()); + topbar.data('stickyoffset', topbarContainer.offset().top); + } else { + topbar.data('height', topbar.outerHeight()); + } + + if (!settings.assembled) { + self.assemble(topbar); + } + + if (settings.is_hover) { + self.S('.has-dropdown', topbar).addClass('not-click'); + } else { + self.S('.has-dropdown', topbar).removeClass('not-click'); + } + + // Pad body when sticky (scrolled) or fixed. + self.add_custom_rule('.f-topbar-fixed { padding-top: ' + topbar.data('height') + 'px }'); + + if (topbarContainer.hasClass('fixed')) { + self.S('body').addClass('f-topbar-fixed'); + } + }); + + }, + + is_sticky : function (topbar, topbarContainer, settings) { + var sticky = topbarContainer.hasClass(settings.sticky_class); + var smallMatch = matchMedia(Foundation.media_queries.small).matches; + var medMatch = matchMedia(Foundation.media_queries.medium).matches; + var lrgMatch = matchMedia(Foundation.media_queries.large).matches; + + if (sticky && settings.sticky_on === 'all') { + return true; + } + if (sticky && this.small() && settings.sticky_on.indexOf('small') !== -1) { + if (smallMatch && !medMatch && !lrgMatch) { return true; } + } + if (sticky && this.medium() && settings.sticky_on.indexOf('medium') !== -1) { + if (smallMatch && medMatch && !lrgMatch) { return true; } + } + if (sticky && this.large() && settings.sticky_on.indexOf('large') !== -1) { + if (smallMatch && medMatch && lrgMatch) { return true; } + } + + // fix for iOS browsers + if (sticky && navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) { + return true; + } + return false; + }, + + toggle : function (toggleEl) { + var self = this, + topbar; + + if (toggleEl) { + topbar = self.S(toggleEl).closest('[' + this.attr_name() + ']'); + } else { + topbar = self.S('[' + this.attr_name() + ']'); + } + + var settings = topbar.data(this.attr_name(true) + '-init'); + + var section = self.S('section, .top-bar-section', topbar); + + if (self.breakpoint()) { + if (!self.rtl) { + section.css({left : '0%'}); + $('>.name', section).css({left : '100%'}); + } else { + section.css({right : '0%'}); + $('>.name', section).css({right : '100%'}); + } + + self.S('li.moved', section).removeClass('moved'); + topbar.data('index', 0); + + topbar + .toggleClass('expanded') + .css('height', ''); + } + + if (settings.scrolltop) { + if (!topbar.hasClass('expanded')) { + if (topbar.hasClass('fixed')) { + topbar.parent().addClass('fixed'); + topbar.removeClass('fixed'); + self.S('body').addClass('f-topbar-fixed'); + } + } else if (topbar.parent().hasClass('fixed')) { + if (settings.scrolltop) { + topbar.parent().removeClass('fixed'); + topbar.addClass('fixed'); + self.S('body').removeClass('f-topbar-fixed'); + + window.scrollTo(0, 0); + } else { + topbar.parent().removeClass('expanded'); + } + } + } else { + if (self.is_sticky(topbar, topbar.parent(), settings)) { + topbar.parent().addClass('fixed'); + } + + if (topbar.parent().hasClass('fixed')) { + if (!topbar.hasClass('expanded')) { + topbar.removeClass('fixed'); + topbar.parent().removeClass('expanded'); + self.update_sticky_positioning(); + } else { + topbar.addClass('fixed'); + topbar.parent().addClass('expanded'); + self.S('body').addClass('f-topbar-fixed'); + } + } + } + }, + + timer : null, + + events : function (bar) { + var self = this, + S = this.S; + + S(this.scope) + .off('.topbar') + .on('click.fndtn.topbar', '[' + this.attr_name() + '] .toggle-topbar', function (e) { + e.preventDefault(); + self.toggle(this); + }) + .on('click.fndtn.topbar', '.top-bar .top-bar-section li a[href^="#"],[' + this.attr_name() + '] .top-bar-section li a[href^="#"]', function (e) { + var li = $(this).closest('li'); + if (self.breakpoint() && !li.hasClass('back') && !li.hasClass('has-dropdown')) { + self.toggle(); + } + }) + .on('click.fndtn.topbar', '[' + this.attr_name() + '] li.has-dropdown', function (e) { + var li = S(this), + target = S(e.target), + topbar = li.closest('[' + self.attr_name() + ']'), + settings = topbar.data(self.attr_name(true) + '-init'); + + if (target.data('revealId')) { + self.toggle(); + return; + } + + if (self.breakpoint()) { + return; + } + + if (settings.is_hover && !Modernizr.touch) { + return; + } + + e.stopImmediatePropagation(); + + if (li.hasClass('hover')) { + li + .removeClass('hover') + .find('li') + .removeClass('hover'); + + li.parents('li.hover') + .removeClass('hover'); + } else { + li.addClass('hover'); + + $(li).siblings().removeClass('hover'); + + if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) { + e.preventDefault(); + } + } + }) + .on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown>a', function (e) { + if (self.breakpoint()) { + + e.preventDefault(); + + var $this = S(this), + topbar = $this.closest('[' + self.attr_name() + ']'), + section = topbar.find('section, .top-bar-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', $this.siblings('ul').outerHeight(true) + topbar.data('height')); + } + }); + + S(window).off('.topbar').on('resize.fndtn.topbar', self.throttle(function () { + self.resize.call(self); + }, 50)).trigger('resize').trigger('resize.fndtn.topbar').load(function () { + // Ensure that the offset is calculated after all of the pages resources have loaded + S(this).trigger('resize.fndtn.topbar'); + }); + + S('body').off('.topbar').on('click.fndtn.topbar', function (e) { + var parent = S(e.target).closest('li').closest('li.hover'); + + if (parent.length > 0) { + return; + } + + S('[' + self.attr_name() + '] li.hover').removeClass('hover'); + }); + + // Go up a level on Click + S(this.scope).on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown .back', function (e) { + e.preventDefault(); + + var $this = S(this), + topbar = $this.closest('[' + self.attr_name() + ']'), + section = topbar.find('section, .top-bar-section'), + settings = topbar.data(self.attr_name(true) + '-init'), + $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', $previousLevelUl.outerHeight(true) + topbar.data('height')); + } + + setTimeout(function () { + $movedLi.removeClass('moved'); + }, 300); + }); + + // Show dropdown menus when their items are focused + S(this.scope).find('.dropdown a') + .focus(function () { + $(this).parents('.has-dropdown').addClass('hover'); + }) + .blur(function () { + $(this).parents('.has-dropdown').removeClass('hover'); + }); + }, + + resize : function () { + var self = this; + self.S('[' + this.attr_name() + ']').each(function () { + var topbar = self.S(this), + settings = topbar.data(self.attr_name(true) + '-init'); + + var stickyContainer = topbar.parent('.' + self.settings.sticky_class); + var stickyOffset; + + if (!self.breakpoint()) { + var doToggle = topbar.hasClass('expanded'); + topbar + .css('height', '') + .removeClass('expanded') + .find('li') + .removeClass('hover'); + + if (doToggle) { + self.toggle(topbar); + } + } + + if (self.is_sticky(topbar, stickyContainer, settings)) { + if (stickyContainer.hasClass('fixed')) { + // Remove the fixed to allow for correct calculation of the offset. + stickyContainer.removeClass('fixed'); + + stickyOffset = stickyContainer.offset().top; + if (self.S(document.body).hasClass('f-topbar-fixed')) { + stickyOffset -= topbar.data('height'); + } + + topbar.data('stickyoffset', stickyOffset); + stickyContainer.addClass('fixed'); + } else { + stickyOffset = stickyContainer.offset().top; + topbar.data('stickyoffset', stickyOffset); + } + } + + }); + }, + + breakpoint : function () { + return !matchMedia(Foundation.media_queries['topbar']).matches; + }, + + small : function () { + return matchMedia(Foundation.media_queries['small']).matches; + }, + + medium : function () { + return matchMedia(Foundation.media_queries['medium']).matches; + }, + + large : function () { + return matchMedia(Foundation.media_queries['large']).matches; + }, + + assemble : function (topbar) { + var self = this, + settings = topbar.data(this.attr_name(true) + '-init'), + section = self.S('section, .top-bar-section', topbar); + + // Pull element out of the DOM for manipulation + section.detach(); + + self.S('.has-dropdown>a', section).each(function () { + var $link = self.S(this), + $dropdown = $link.siblings('.dropdown'), + url = $link.attr('href'), + $titleLi; + + if (!$dropdown.find('.title.back').length) { + + if (settings.mobile_show_parent_link == true && url) { + $titleLi = $('
  2. '); + } else { + $titleLi = $('
  3. '); + } + + // Copy link to subnav + if (settings.custom_back_text == true) { + $('h5>a', $titleLi).html(settings.back_text); + } else { + $('h5>a', $titleLi).html('« ' + $link.html()); + } + $dropdown.prepend($titleLi); + } + }); + + // Put element back in the DOM + section.appendTo(topbar); + + // check for sticky + this.sticky(); + + this.assembled(topbar); + }, + + assembled : function (topbar) { + topbar.data(this.attr_name(true), $.extend({}, topbar.data(this.attr_name(true)), {assembled : true})); + }, + + height : function (ul) { + var total = 0, + self = this; + + $('> li', ul).each(function () { + total += self.S(this).outerHeight(true); + }); + + return total; + }, + + sticky : function () { + var self = this; + + this.S(window).on('scroll', function () { + self.update_sticky_positioning(); + }); + }, + + update_sticky_positioning : function () { + var klass = '.' + this.settings.sticky_class, + $window = this.S(window), + self = this; + + if (self.settings.sticky_topbar && self.is_sticky(this.settings.sticky_topbar, this.settings.sticky_topbar.parent(), this.settings)) { + var distance = this.settings.sticky_topbar.data('stickyoffset'); + if (!self.S(klass).hasClass('expanded')) { + if ($window.scrollTop() > (distance)) { + if (!self.S(klass).hasClass('fixed')) { + self.S(klass).addClass('fixed'); + self.S('body').addClass('f-topbar-fixed'); + } + } else if ($window.scrollTop() <= distance) { + if (self.S(klass).hasClass('fixed')) { + self.S(klass).removeClass('fixed'); + self.S('body').removeClass('f-topbar-fixed'); + } + } + } + } + }, + + off : function () { + this.S(this.scope).off('.fndtn.topbar'); + this.S(window).off('.fndtn.topbar'); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation.min.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation.min.js new file mode 100644 index 00000000..6e032f47 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation.min.js @@ -0,0 +1,4 @@ +!function(a,b,c,d){"use strict";function e(a){return("string"==typeof a||a instanceof String)&&(a=a.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g,"")),a}var f=function(b){for(var c=b.length,d=a("head");c--;)0===d.has("."+b[c]).length&&d.append('')};f(["foundation-mq-small","foundation-mq-small-only","foundation-mq-medium","foundation-mq-medium-only","foundation-mq-large","foundation-mq-large-only","foundation-mq-xlarge","foundation-mq-xlarge-only","foundation-mq-xxlarge","foundation-data-attribute-namespace"]),a(function(){"undefined"!=typeof FastClick&&"undefined"!=typeof c.body&&FastClick.attach(c.body)});var g=function(b,d){if("string"==typeof b){if(d){var e;if(d.jquery){if(e=d[0],!e)return d}else e=d;return a(e.querySelectorAll(b))}return a(c.querySelectorAll(b))}return a(b,d)},h=function(a){var b=[];return a||b.push("data"),this.namespace.length>0&&b.push(this.namespace),b.push(this.name),b.join("-")},i=function(a){for(var b=a.split("-"),c=b.length,d=[];c--;)0!==c?d.push(b[c]):this.namespace.length>0?d.push(this.namespace,b[c]):d.push(b[c]);return d.reverse().join("-")},j=function(b,c){var d=this,e=function(){var e=g(this),f=!e.data(d.attr_name(!0)+"-init");e.data(d.attr_name(!0)+"-init",a.extend({},d.settings,c||b,d.data_options(e))),f&&d.events(this)};return g(this.scope).is("["+this.attr_name()+"]")?e.call(this.scope):g("["+this.attr_name()+"]",this.scope).each(e),"string"==typeof b?this[b].call(this,c):void 0},k=function(a,b){function c(){b(a[0])}function d(){if(this.one("load",c),/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var a=this.attr("src"),b=a.match(/\?/)?"&":"?";b+="random="+(new Date).getTime(),this.attr("src",a+b)}}return a.attr("src")?void(a[0].complete||4===a[0].readyState?c():d.call(a)):void c()};b.matchMedia=b.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(c),function(a){function c(){d&&(g(c),i&&a.fx.tick())}for(var d,e=0,f=["webkit","moz"],g=b.requestAnimationFrame,h=b.cancelAnimationFrame,i="undefined"!=typeof a.fx;e").appendTo("head")[0].sheet,global:{namespace:d},init:function(a,c,d,e,f){var h=[a,d,e,f],i=[];if(this.rtl=/rtl/i.test(g("html").attr("dir")),this.scope=a||this.scope,this.set_namespace(),c&&"string"==typeof c&&!/reflow/i.test(c))this.libs.hasOwnProperty(c)&&i.push(this.init_lib(c,h));else for(var j in this.libs)i.push(this.init_lib(j,c));return g(b).load(function(){g(b).trigger("resize.fndtn.clearing").trigger("resize.fndtn.dropdown").trigger("resize.fndtn.equalizer").trigger("resize.fndtn.interchange").trigger("resize.fndtn.joyride").trigger("resize.fndtn.magellan").trigger("resize.fndtn.topbar").trigger("resize.fndtn.slider")}),a},init_lib:function(b,c){return this.libs.hasOwnProperty(b)?(this.patch(this.libs[b]),c&&c.hasOwnProperty(b)?("undefined"!=typeof this.libs[b].settings?a.extend(!0,this.libs[b].settings,c[b]):"undefined"!=typeof this.libs[b].defaults&&a.extend(!0,this.libs[b].defaults,c[b]),this.libs[b].init.apply(this.libs[b],[this.scope,c[b]])):(c=c instanceof Array?c:new Array(c),this.libs[b].init.apply(this.libs[b],c))):function(){}},patch:function(a){a.scope=this.scope,a.namespace=this.global.namespace,a.rtl=this.rtl,a.data_options=this.utils.data_options,a.attr_name=h,a.add_namespace=i,a.bindings=j,a.S=this.utils.S},inherit:function(a,b){for(var c=b.split(" "),d=c.length;d--;)this.utils.hasOwnProperty(c[d])&&(a[c[d]]=this.utils[c[d]])},set_namespace:function(){var b=this.global.namespace===d?a(".foundation-data-attribute-namespace").css("font-family"):this.global.namespace;this.global.namespace=b===d||/false/i.test(b)?"":b},libs:{},utils:{S:g,throttle:function(a,b){var c=null;return function(){var d=this,e=arguments;null==c&&(c=setTimeout(function(){a.apply(d,e),c=null},b))}},debounce:function(a,b,c){var d,e;return function(){var f=this,g=arguments,h=function(){d=null,c||(e=a.apply(f,g))},i=c&&!d;return clearTimeout(d),d=setTimeout(h,b),i&&(e=a.apply(f,g)),e}},data_options:function(b,c){function d(a){return!isNaN(a-0)&&null!==a&&""!==a&&a!==!1&&a!==!0}function e(b){return"string"==typeof b?a.trim(b):b}c=c||"options";var f,g,h,i={},j=function(a){var b=Foundation.global.namespace;return a.data(b.length>0?b+"-"+c:c)},k=j(b);if("object"==typeof k)return k;for(h=(k||":").split(";"),f=h.length;f--;)g=h[f].split(":"),g=[g[0],g.slice(1).join(":")],/true/i.test(g[1])&&(g[1]=!0),/false/i.test(g[1])&&(g[1]=!1),d(g[1])&&(g[1]=-1===g[1].indexOf(".")?parseInt(g[1],10):parseFloat(g[1])),2===g.length&&g[0].length>0&&(i[e(g[0])]=e(g[1]));return i},register_media:function(b,c){Foundation.media_queries[b]===d&&(a("head").append(''),Foundation.media_queries[b]=e(a("."+c).css("font-family")))},add_custom_rule:function(a,b){if(b===d&&Foundation.stylesheet)Foundation.stylesheet.insertRule(a,Foundation.stylesheet.cssRules.length);else{var c=Foundation.media_queries[b];c!==d&&Foundation.stylesheet.insertRule("@media "+Foundation.media_queries[b]+"{ "+a+" }")}},image_loaded:function(a,b){var c=this,d=a.length;0===d&&b(a),a.each(function(){k(c.S(this),function(){d-=1,0===d&&b(a)})})},random_str:function(){return this.fidx||(this.fidx=0),this.prefix=this.prefix||[this.name||"F",(+new Date).toString(36)].join("-"),this.prefix+(this.fidx++).toString(36)},match:function(a){return b.matchMedia(a).matches},is_small_up:function(){return this.match(Foundation.media_queries.small)},is_medium_up:function(){return this.match(Foundation.media_queries.medium)},is_large_up:function(){return this.match(Foundation.media_queries.large)},is_xlarge_up:function(){return this.match(Foundation.media_queries.xlarge)},is_xxlarge_up:function(){return this.match(Foundation.media_queries.xxlarge)},is_small_only:function(){return!(this.is_medium_up()||this.is_large_up()||this.is_xlarge_up()||this.is_xxlarge_up())},is_medium_only:function(){return this.is_medium_up()&&!this.is_large_up()&&!this.is_xlarge_up()&&!this.is_xxlarge_up()},is_large_only:function(){return this.is_medium_up()&&this.is_large_up()&&!this.is_xlarge_up()&&!this.is_xxlarge_up()},is_xlarge_only:function(){return this.is_medium_up()&&this.is_large_up()&&this.is_xlarge_up()&&!this.is_xxlarge_up()},is_xxlarge_only:function(){return this.is_medium_up()&&this.is_large_up()&&this.is_xlarge_up()&&this.is_xxlarge_up()}}},a.fn.foundation=function(){var a=Array.prototype.slice.call(arguments,0);return this.each(function(){return Foundation.init.apply(Foundation,[this].concat(a)),this})}}(jQuery,window,window.document),function(a,b,c){"use strict";Foundation.libs.abide={name:"abide",version:"5.5.1",settings:{live_validate:!0,validate_on_blur:!0,focus_on_invalid:!0,error_labels:!0,error_class:"error",timeout:1e3,patterns:{alpha:/^[a-zA-Z]+$/,alpha_numeric:/^[a-zA-Z0-9]+$/,integer:/^[-+]?\d+$/,number:/^[-+]?\d*(?:[\.\,]\d+)?$/,card:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,cvv:/^([0-9]){3,4}$/,email:/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,url:/^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/,domain:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,datetime:/^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,date:/(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,time:/^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,dateISO:/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,month_day_year:/^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,day_month_year:/^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,color:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/},validators:{equalTo:function(a){var b=c.getElementById(a.getAttribute(this.add_namespace("data-equalto"))).value,d=a.value,e=b===d;return e}}},timer:null,init:function(a,b,c){this.bindings(b,c)},events:function(b){var c=this,d=c.S(b).attr("novalidate","novalidate"),e=d.data(this.attr_name(!0)+"-init")||{};this.invalid_attr=this.add_namespace("data-invalid"),d.off(".abide").on("submit.fndtn.abide validate.fndtn.abide",function(a){var b=/ajax/i.test(c.S(this).attr(c.attr_name()));return c.validate(c.S(this).find("input, textarea, select").get(),a,b)}).on("reset",function(){return c.reset(a(this))}).find("input, textarea, select").off(".abide").on("blur.fndtn.abide change.fndtn.abide",function(a){e.validate_on_blur===!0&&c.validate([this],a)}).on("keydown.fndtn.abide",function(a){e.live_validate===!0&&9!=a.which&&(clearTimeout(c.timer),c.timer=setTimeout(function(){c.validate([this],a)}.bind(this),e.timeout))})},reset:function(b){b.removeAttr(this.invalid_attr),a(this.invalid_attr,b).removeAttr(this.invalid_attr),a("."+this.settings.error_class,b).not("small").removeClass(this.settings.error_class)},validate:function(a,b,c){for(var d=this.parse_patterns(a),e=d.length,f=this.S(a[0]).closest("form"),g=/submit/.test(b.type),h=0;e>h;h++)if(!d[h]&&(g||c))return this.settings.focus_on_invalid&&a[h].focus(),f.trigger("invalid").trigger("invalid.fndtn.abide"),this.S(a[h]).closest("form").attr(this.invalid_attr,""),!1;return(g||c)&&f.trigger("valid").trigger("valid.fndtn.abide"),f.removeAttr(this.invalid_attr),c?!1:!0},parse_patterns:function(a){for(var b=a.length,c=[];b--;)c.push(this.pattern(a[b]));return this.check_validation_and_apply_styles(c)},pattern:function(a){var b=a.getAttribute("type"),c="string"==typeof a.getAttribute("required"),d=a.getAttribute("pattern")||"";return this.settings.patterns.hasOwnProperty(d)&&d.length>0?[a,this.settings.patterns[d],c]:d.length>0?[a,new RegExp(d),c]:this.settings.patterns.hasOwnProperty(b)?[a,this.settings.patterns[b],c]:(d=/.*/,[a,d,c])},check_validation_and_apply_styles:function(b){var c=b.length,d=[],e=this.S(b[0][0]).closest("[data-"+this.attr_name(!0)+"]");for(e.data(this.attr_name(!0)+"-init")||{};c--;){var f,g,h=b[c][0],i=b[c][2],j=h.value.trim(),k=this.S(h).parent(),l=h.getAttribute(this.add_namespace("data-abide-validator")),m="radio"===h.type,n="checkbox"===h.type,o=this.S('label[for="'+h.getAttribute("id")+'"]'),p=i?h.value.length>0:!0,q=[];if(h.getAttribute(this.add_namespace("data-equalto"))&&(l="equalTo"),f=k.is("label")?k.parent():k,l&&(g=this.settings.validators[l].apply(this,[h,i,f]),q.push(g)),m&&i)q.push(this.valid_radio(h,i));else if(n&&i)q.push(this.valid_checkbox(h,i));else if(q.push(b[c][1].test(j)&&p||!i&&h.value.length<1||a(h).attr("disabled")?!0:!1),q=[q.every(function(a){return a})],q[0])this.S(h).removeAttr(this.invalid_attr),h.setAttribute("aria-invalid","false"),h.removeAttribute("aria-describedby"),f.removeClass(this.settings.error_class),o.length>0&&this.settings.error_labels&&o.removeClass(this.settings.error_class).removeAttr("role"),a(h).triggerHandler("valid");else{this.S(h).attr(this.invalid_attr,""),h.setAttribute("aria-invalid","true");var r=f.find("small."+this.settings.error_class,"span."+this.settings.error_class),s=r.length>0?r[0].id:"";s.length>0&&h.setAttribute("aria-describedby",s),f.addClass(this.settings.error_class),o.length>0&&this.settings.error_labels&&o.addClass(this.settings.error_class).attr("role","alert"),a(h).triggerHandler("invalid")}d.push(q[0])}return d=[d.every(function(a){return a})]},valid_checkbox:function(a,b){var a=this.S(a),c=a.is(":checked")||!b||a.get(0).getAttribute("disabled");return c?a.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class):a.attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),c},valid_radio:function(a){for(var b=a.getAttribute("name"),c=this.S(a).closest("[data-"+this.attr_name(!0)+"]").find("[name='"+b+"']"),d=c.length,e=!1,f=!1,g=0;d>g;g++)c[g].getAttribute("disabled")?(f=!0,e=!0):c[g].checked?e=!0:f&&(e=!1);for(var g=0;d>g;g++)e?this.S(c[g]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class):this.S(c[g]).attr(this.invalid_attr,"").parent().addClass(this.settings.error_class);return e},valid_equal:function(a,b,d){var e=c.getElementById(a.getAttribute(this.add_namespace("data-equalto"))).value,f=a.value,g=e===f;return g?(this.S(a).removeAttr(this.invalid_attr),d.removeClass(this.settings.error_class),label.length>0&&settings.error_labels&&label.removeClass(this.settings.error_class)):(this.S(a).attr(this.invalid_attr,""),d.addClass(this.settings.error_class),label.length>0&&settings.error_labels&&label.addClass(this.settings.error_class)),g},valid_oneof:function(a,b,c,d){var a=this.S(a),e=this.S("["+this.add_namespace("data-oneof")+"]"),f=e.filter(":checked").length>0;if(f?a.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class):a.attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),!d){var g=this;e.each(function(){g.valid_oneof.call(g,this,null,null,!0)})}return f}}}(jQuery,window,window.document),function(a){"use strict";Foundation.libs.accordion={name:"accordion",version:"5.5.1",settings:{content_class:"content",active_class:"active",multi_expand:!1,toggleable:!0,callback:function(){}},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=this.S;c(this.scope).off(".fndtn.accordion").on("click.fndtn.accordion","["+this.attr_name()+"] > .accordion-navigation > a",function(d){var e=c(this).closest("["+b.attr_name()+"]"),f=b.attr_name()+"="+e.attr(b.attr_name()),g=e.data(b.attr_name(!0)+"-init")||b.settings,h=c("#"+this.href.split("#")[1]),i=a("> .accordion-navigation",e),j=i.children("."+g.content_class),k=j.filter("."+g.active_class);return d.preventDefault(),e.attr(b.attr_name())&&(j=j.add("["+f+"] dd > ."+g.content_class),i=i.add("["+f+"] .accordion-navigation")),g.toggleable&&h.is(k)?(h.parent(".accordion-navigation").toggleClass(g.active_class,!1),h.toggleClass(g.active_class,!1),g.callback(h),h.triggerHandler("toggled",[e]),void e.triggerHandler("toggled",[h])):(g.multi_expand||(j.removeClass(g.active_class),i.removeClass(g.active_class)),h.addClass(g.active_class).parent().addClass(g.active_class),g.callback(h),h.triggerHandler("toggled",[e]),void e.triggerHandler("toggled",[h]))})},off:function(){},reflow:function(){}}}(jQuery,window,window.document),function(a){"use strict";Foundation.libs.alert={name:"alert",version:"5.5.1",settings:{callback:function(){}},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=this.S;a(this.scope).off(".alert").on("click.fndtn.alert","["+this.attr_name()+"] .close",function(a){var d=c(this).closest("["+b.attr_name()+"]"),e=d.data(b.attr_name(!0)+"-init")||b.settings;a.preventDefault(),Modernizr.csstransitions?(d.addClass("alert-close"),d.on("transitionend webkitTransitionEnd oTransitionEnd",function(){c(this).trigger("close").trigger("close.fndtn.alert").remove(),e.callback()})):d.fadeOut(300,function(){c(this).trigger("close").trigger("close.fndtn.alert").remove(),e.callback()})})},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.clearing={name:"clearing",version:"5.5.1",settings:{templates:{viewing:'×'},close_selectors:".clearing-close, div.clearing-blackout",open_selectors:"",skip_selector:"",touch_label:"",init:!1,locked:!1},init:function(a,b,c){var d=this;Foundation.inherit(this,"throttle image_loaded"),this.bindings(b,c),d.S(this.scope).is("["+this.attr_name()+"]")?this.assemble(d.S("li",this.scope)):d.S("["+this.attr_name()+"]",this.scope).each(function(){d.assemble(d.S("li",this))})},events:function(d){var e=this,f=e.S,g=a(".scroll-container");g.length>0&&(this.scope=g),f(this.scope).off(".clearing").on("click.fndtn.clearing","ul["+this.attr_name()+"] li "+this.settings.open_selectors,function(a,b,c){var b=b||f(this),c=c||b,d=b.next("li"),g=b.closest("["+e.attr_name()+"]").data(e.attr_name(!0)+"-init"),h=f(a.target);a.preventDefault(),g||(e.init(),g=b.closest("["+e.attr_name()+"]").data(e.attr_name(!0)+"-init")),c.hasClass("visible")&&b[0]===c[0]&&d.length>0&&e.is_open(b)&&(c=d,h=f("img",c)),e.open(h,b,c),e.update_paddles(c)}).on("click.fndtn.clearing",".clearing-main-next",function(a){e.nav(a,"next")}).on("click.fndtn.clearing",".clearing-main-prev",function(a){e.nav(a,"prev")}).on("click.fndtn.clearing",this.settings.close_selectors,function(a){Foundation.libs.clearing.close(a,this)}),a(c).on("keydown.fndtn.clearing",function(a){e.keydown(a)}),f(b).off(".clearing").on("resize.fndtn.clearing",function(){e.resize()}),this.swipe_events(d)},swipe_events:function(){var a=this,b=a.S;b(this.scope).on("touchstart.fndtn.clearing",".visible-img",function(a){a.touches||(a=a.originalEvent);var c={start_page_x:a.touches[0].pageX,start_page_y:a.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:d};b(this).data("swipe-transition",c),a.stopPropagation()}).on("touchmove.fndtn.clearing",".visible-img",function(c){if(c.touches||(c=c.originalEvent),!(c.touches.length>1||c.scale&&1!==c.scale)){var d=b(this).data("swipe-transition");if("undefined"==typeof d&&(d={}),d.delta_x=c.touches[0].pageX-d.start_page_x,Foundation.rtl&&(d.delta_x=-d.delta_x),"undefined"==typeof d.is_scrolling&&(d.is_scrolling=!!(d.is_scrolling||Math.abs(d.delta_x)
');var d=c.detach(),e="";if(null!=d[0]){e=d[0].outerHTML;var f=this.S("#foundationClearingHolder"),g=c.data(this.attr_name(!0)+"-init"),h={grid:'",viewing:g.templates.viewing},i='
'+h.viewing+h.grid+"
",j=this.settings.touch_label;Modernizr.touch&&(i=a(i).find(".clearing-touch-label").html(j).end()),f.after(i).remove()}}},open:function(b,d,e){function f(){setTimeout(function(){this.image_loaded(m,function(){1!==m.outerWidth()||o?g.call(this,m):f.call(this)}.bind(this))}.bind(this),100)}function g(b){var c=a(b);c.css("visibility","visible"),i.css("overflow","hidden"),j.addClass("clearing-blackout"),k.addClass("clearing-container"),l.show(),this.fix_height(e).caption(h.S(".clearing-caption",l),h.S("img",e)).center_and_label(b,n).shift(d,e,function(){e.closest("li").siblings().removeClass("visible"),e.closest("li").addClass("visible")}),l.trigger("opened.fndtn.clearing")}var h=this,i=a(c.body),j=e.closest(".clearing-assembled"),k=h.S("div",j).first(),l=h.S(".visible-img",k),m=h.S("img",l).not(b),n=h.S(".clearing-touch-label",k),o=!1;a("body").on("touchmove",function(a){a.preventDefault()}),m.error(function(){o=!0}),this.locked()||(l.trigger("open.fndtn.clearing"),m.attr("src",this.load(b)).css("visibility","hidden"),f.call(this))},close:function(b,d){b.preventDefault();var e,f,g=function(a){return/blackout/.test(a.selector)?a:a.closest(".clearing-blackout")}(a(d)),h=a(c.body);return d===b.target&&g&&(h.css("overflow",""),e=a("div",g).first(),f=a(".visible-img",e),f.trigger("close.fndtn.clearing"),this.settings.prev_index=0,a("ul["+this.attr_name()+"]",g).attr("style","").closest(".clearing-blackout").removeClass("clearing-blackout"),e.removeClass("clearing-container"),f.hide(),f.trigger("closed.fndtn.clearing")),a("body").off("touchmove"),!1},is_open:function(a){return a.parent().prop("style").length>0},keydown:function(b){var c=a(".clearing-blackout ul["+this.attr_name()+"]"),d=this.rtl?37:39,e=this.rtl?39:37,f=27;b.which===d&&this.go(c,"next"),b.which===e&&this.go(c,"prev"),b.which===f&&this.S("a.clearing-close").trigger("click").trigger("click.fndtn.clearing")},nav:function(b,c){var d=a("ul["+this.attr_name()+"]",".clearing-blackout");b.preventDefault(),this.go(d,c)},resize:function(){var b=a("img",".clearing-blackout .visible-img"),c=a(".clearing-touch-label",".clearing-blackout");b.length&&(this.center_and_label(b,c),b.trigger("resized.fndtn.clearing"))},fix_height:function(a){var b=a.parent().children(),c=this;return b.each(function(){var a=c.S(this),b=a.find("img");a.height()>b.outerHeight()&&a.addClass("fix-height")}).closest("ul").width(100*b.length+"%"),this},update_paddles:function(a){a=a.closest("li");var b=a.closest(".carousel").siblings(".visible-img");a.next().length>0?this.S(".clearing-main-next",b).removeClass("disabled"):this.S(".clearing-main-next",b).addClass("disabled"),a.prev().length>0?this.S(".clearing-main-prev",b).removeClass("disabled"):this.S(".clearing-main-prev",b).addClass("disabled")},center_and_label:function(a,b){return b.css(!this.rtl&&b.length>0?{marginLeft:-(b.outerWidth()/2),marginTop:-(a.outerHeight()/2)-b.outerHeight()-10}:{marginRight:-(b.outerWidth()/2),marginTop:-(a.outerHeight()/2)-b.outerHeight()-10,left:"auto",right:"50%"}),this},load:function(a){var b;return b="A"===a[0].nodeName?a.attr("href"):a.closest("a").attr("href"),this.preload(a),b?b:a.attr("src")},preload:function(a){this.img(a.closest("li").next()).img(a.closest("li").prev())},img:function(a){if(a.length){var b=new Image,c=this.S("a",a);b.src=c.length?c.attr("href"):this.S("img",a).attr("src")}return this},caption:function(a,b){var c=b.attr("data-caption");return c?a.html(c).show():a.text("").hide(),this},go:function(a,b){var c=this.S(".visible",a),d=c[b]();this.settings.skip_selector&&0!=d.find(this.settings.skip_selector).length&&(d=d[b]()),d.length&&this.S("img",d).trigger("click",[c,d]).trigger("click.fndtn.clearing",[c,d]).trigger("change.fndtn.clearing")},shift:function(a,b,c){var d,e=b.parent(),f=this.settings.prev_index||b.index(),g=this.direction(e,a,b),h=this.rtl?"right":"left",i=parseInt(e.css("left"),10),j=b.outerWidth(),k={};b.index()===f||/skip/.test(g)?/skip/.test(g)&&(d=b.index()-this.settings.up_count,this.lock(),d>0?(k[h]=-(d*j),e.animate(k,300,this.unlock())):(k[h]=0,e.animate(k,300,this.unlock()))):/left/.test(g)?(this.lock(),k[h]=i+j,e.animate(k,300,this.unlock())):/right/.test(g)&&(this.lock(),k[h]=i-j,e.animate(k,300,this.unlock())),c()},direction:function(a,b,c){var d,e=this.S("li",a),f=e.outerWidth()+e.outerWidth()/4,g=Math.floor(this.S(".clearing-container").outerWidth()/f)-1,h=e.index(c);return this.settings.up_count=g,d=this.adjacent(this.settings.prev_index,h)?h>g&&h>this.settings.prev_index?"right":h>g-1&&h<=this.settings.prev_index?"left":!1:"skip",this.settings.prev_index=h,d},adjacent:function(a,b){for(var c=b+1;c>=b-1;c--)if(c===a)return!0;return!1},lock:function(){this.settings.locked=!0},unlock:function(){this.settings.locked=!1},locked:function(){return this.settings.locked},off:function(){this.S(this.scope).off(".fndtn.clearing"),this.S(b).off(".fndtn.clearing")},reflow:function(){this.init()}}}(jQuery,window,window.document),function(a,b,c){"use strict";Foundation.libs.dropdown={name:"dropdown",version:"5.5.1",settings:{active_class:"open",disabled_class:"disabled",mega_class:"mega",align:"bottom",is_hover:!1,hover_timeout:150,opened:function(){},closed:function(){}},init:function(b,c,d){Foundation.inherit(this,"throttle"),a.extend(!0,this.settings,c,d),this.bindings(c,d)},events:function(){var d=this,e=d.S;e(this.scope).off(".dropdown").on("click.fndtn.dropdown","["+this.attr_name()+"]",function(b){var c=e(this).data(d.attr_name(!0)+"-init")||d.settings;(!c.is_hover||Modernizr.touch)&&(b.preventDefault(),e(this).parent("[data-reveal-id]")&&b.stopPropagation(),d.toggle(a(this)))}).on("mouseenter.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(a){var b,c,f=e(this);clearTimeout(d.timeout),f.data(d.data_attr())?(b=e("#"+f.data(d.data_attr())),c=f):(b=f,c=e("["+d.attr_name()+'="'+b.attr("id")+'"]'));var g=c.data(d.attr_name(!0)+"-init")||d.settings;e(a.currentTarget).data(d.data_attr())&&g.is_hover&&d.closeall.call(d),g.is_hover&&d.open.apply(d,[b,c])}).on("mouseleave.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(){var a,b=e(this);if(b.data(d.data_attr()))a=b.data(d.data_attr(!0)+"-init")||d.settings;else var c=e("["+d.attr_name()+'="'+e(this).attr("id")+'"]'),a=c.data(d.attr_name(!0)+"-init")||d.settings;d.timeout=setTimeout(function(){b.data(d.data_attr())?a.is_hover&&d.close.call(d,e("#"+b.data(d.data_attr()))):a.is_hover&&d.close.call(d,b)}.bind(this),a.hover_timeout)}).on("click.fndtn.dropdown",function(b){var f=e(b.target).closest("["+d.attr_name()+"-content]"),g=f.find("a");return g.length>0&&"false"!==f.attr("aria-autoclose")&&d.close.call(d,e("["+d.attr_name()+"-content]")),b.target!==c&&!a.contains(c.documentElement,b.target)||e(b.target).closest("["+d.attr_name()+"]").length>0?void 0:!e(b.target).data("revealId")&&f.length>0&&(e(b.target).is("["+d.attr_name()+"-content]")||a.contains(f.first()[0],b.target))?void b.stopPropagation():void d.close.call(d,e("["+d.attr_name()+"-content]"))}).on("opened.fndtn.dropdown","["+d.attr_name()+"-content]",function(){d.settings.opened.call(this)}).on("closed.fndtn.dropdown","["+d.attr_name()+"-content]",function(){d.settings.closed.call(this)}),e(b).off(".dropdown").on("resize.fndtn.dropdown",d.throttle(function(){d.resize.call(d)},50)),this.resize()},close:function(b){var c=this;b.each(function(){var d=a("["+c.attr_name()+"="+b[0].id+"]")||a("aria-controls="+b[0].id+"]");d.attr("aria-expanded","false"),c.S(this).hasClass(c.settings.active_class)&&(c.S(this).css(Foundation.rtl?"right":"left","-99999px").attr("aria-hidden","true").removeClass(c.settings.active_class).prev("["+c.attr_name()+"]").removeClass(c.settings.active_class).removeData("target"),c.S(this).trigger("closed").trigger("closed.fndtn.dropdown",[b]))}),b.removeClass("f-open-"+this.attr_name(!0))},closeall:function(){var b=this;a.each(b.S(".f-open-"+this.attr_name(!0)),function(){b.close.call(b,b.S(this))})},open:function(a,b){this.css(a.addClass(this.settings.active_class),b),a.prev("["+this.attr_name()+"]").addClass(this.settings.active_class),a.data("target",b.get(0)).trigger("opened").trigger("opened.fndtn.dropdown",[a,b]),a.attr("aria-hidden","false"),b.attr("aria-expanded","true"),a.focus(),a.addClass("f-open-"+this.attr_name(!0))},data_attr:function(){return this.namespace.length>0?this.namespace+"-"+this.name:this.name},toggle:function(a){if(!a.hasClass(this.settings.disabled_class)){var b=this.S("#"+a.data(this.data_attr()));0!==b.length&&(this.close.call(this,this.S("["+this.attr_name()+"-content]").not(b)),b.hasClass(this.settings.active_class)?(this.close.call(this,b),b.data("target")!==a.get(0)&&this.open.call(this,b,a)):this.open.call(this,b,a))}},resize:function(){var b=this.S("["+this.attr_name()+"-content].open"),c=a(b.data("target"));b.length&&c.length&&this.css(b,c)},css:function(a,b){var c=Math.max((b.width()-a.width())/2,8),d=b.data(this.attr_name(!0)+"-init")||this.settings;if(this.clear_idx(),this.small()){var e=this.dirs.bottom.call(a,b,d);a.attr("style","").removeClass("drop-left drop-right drop-top").css({position:"absolute",width:"95%","max-width":"none",top:e.top}),a.css(Foundation.rtl?"right":"left",c)}else this.style(a,b,d);return a},style:function(b,c,d){var e=a.extend({position:"absolute"},this.dirs[d.align].call(b,c,d));b.attr("style","").css(e)},dirs:{_base:function(a){var d=this.offsetParent(),e=d.offset(),f=a.offset();f.top-=e.top,f.left-=e.left,f.missRight=!1,f.missTop=!1,f.missLeft=!1,f.leftRightFlag=!1;var g;g=c.getElementsByClassName("row")[0]?c.getElementsByClassName("row")[0].clientWidth:b.outerWidth;var h=(b.outerWidth-g)/2,i=g;return this.hasClass("mega")||(a.offset().top<=this.outerHeight()&&(f.missTop=!0,i=b.outerWidth-h,f.leftRightFlag=!0),a.offset().left+this.outerWidth()>a.offset().left+h&&a.offset().left-h>this.outerWidth()&&(f.missRight=!0,f.missLeft=!1),a.offset().left-this.outerWidth()<=0&&(f.missLeft=!0,f.missRight=!1)),f},top:function(a,b){var c=Foundation.libs.dropdown,d=c.dirs._base.call(this,a);return this.addClass("drop-top"),1==d.missTop&&(d.top=d.top+a.outerHeight()+this.outerHeight(),this.removeClass("drop-top")),1==d.missRight&&(d.left=d.left-this.outerWidth()+a.outerWidth()),(a.outerWidth()0)for(var d=this.S("["+this.add_namespace("data-uuid")+'="'+a+'"]');c--;){var e,f=b[c][2];if(e=matchMedia(this.settings.named_queries.hasOwnProperty(f)?this.settings.named_queries[f]:f),e.matches)return{el:d,scenario:b[c]}}return!1},load:function(a,b){return("undefined"==typeof this["cached_"+a]||b)&&this["update_"+a](),this["cached_"+a]},update_images:function(){var a=this.S("img["+this.data_attr+"]"),b=a.length,c=b,d=0,e=this.data_attr;for(this.cache={},this.cached_images=[],this.images_loaded=0===b;c--;){if(d++,a[c]){var f=a[c].getAttribute(e)||"";f.length>0&&this.cached_images.push(a[c])}d===b&&(this.images_loaded=!0,this.enhance("images"))}return this},update_nodes:function(){var a=this.S("["+this.data_attr+"]").not("img"),b=a.length,c=b,d=0,e=this.data_attr;for(this.cached_nodes=[],this.nodes_loaded=0===b;c--;){d++;var f=a[c].getAttribute(e)||"";f.length>0&&this.cached_nodes.push(a[c]),d===b&&(this.nodes_loaded=!0,this.enhance("nodes"))}return this},enhance:function(c){for(var d=this["cached_"+c].length;d--;)this.object(a(this["cached_"+c][d]));return a(b).trigger("resize").trigger("resize.fndtn.interchange")},convert_directive:function(a){var b=this.trim(a);return b.length>0?b:"replace"},parse_scenario:function(a){var b=a[0].match(/(.+),\s*(\w+)\s*$/),c=a[1];if(b)var d=b[1],e=b[2];else var f=a[0].split(/,\s*$/),d=f[0],e="";return[this.trim(d),this.convert_directive(e),this.trim(c)]},object:function(a){var b=this.parse_data_attr(a),c=[],d=b.length;if(d>0)for(;d--;){var e=b[d].split(/\(([^\)]*?)(\))$/);if(e.length>1){var f=this.parse_scenario(e);c.push(f)}}return this.store(a,c)},store:function(a,b){var c=this.random_str(),d=a.data(this.add_namespace("uuid",!0));return this.cache[d]?this.cache[d]:(a.attr(this.add_namespace("data-uuid"),c),this.cache[c]=b)},trim:function(b){return"string"==typeof b?a.trim(b):b},set_data_attr:function(a){return a?this.namespace.length>0?this.namespace+"-"+this.settings.load_attr:this.settings.load_attr:this.namespace.length>0?"data-"+this.namespace+"-"+this.settings.load_attr:"data-"+this.settings.load_attr},parse_data_attr:function(a){for(var b=a.attr(this.attr_name()).split(/\[(.*?)\]/),c=b.length,d=[];c--;)b[c].replace(/[\W\d]+/,"").length>4&&d.push(b[c]);return d},reflow:function(){this.load("images",!0),this.load("nodes",!0)}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.joyride={name:"joyride",version:"5.5.1",defaults:{expose:!1,modal:!0,keyboard:!0,tip_location:"bottom",nub_position:"auto",scroll_speed:1500,scroll_animation:"linear",timer:0,start_timer_on_click:!0,start_offset:0,next_button:!0,prev_button:!0,tip_animation:"fade",pause_after:[],exposed:[],tip_animation_fade_speed:300,cookie_monster:!1,cookie_name:"joyride",cookie_domain:!1,cookie_expires:365,tip_container:"body",abort_on_close:!0,tip_location_patterns:{top:["bottom"],bottom:[],left:["right","top","bottom"],right:["left","top","bottom"]},post_ride_callback:function(){},post_step_callback:function(){},pre_step_callback:function(){},pre_ride_callback:function(){},post_expose_callback:function(){},template:{link:'×',timer:'
',tip:'
',wrapper:'
',button:'',prev_button:'',modal:'
',expose:'
',expose_cover:'
'},expose_add_class:""},init:function(b,c,d){Foundation.inherit(this,"throttle random_str"),this.settings=this.settings||a.extend({},this.defaults,d||c),this.bindings(c,d)},go_next:function(){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())},go_prev:function(){this.settings.$li.prev().length<1||(this.settings.timer>0?(clearTimeout(this.settings.automate),this.hide(),this.show(null,!0),this.startTimer()):(this.hide(),this.show(null,!0)))},events:function(){var c=this;a(this.scope).off(".joyride").on("click.fndtn.joyride",".joyride-next-tip, .joyride-modal-bg",function(a){a.preventDefault(),this.go_next()}.bind(this)).on("click.fndtn.joyride",".joyride-prev-tip",function(a){a.preventDefault(),this.go_prev()}.bind(this)).on("click.fndtn.joyride",".joyride-close-tip",function(a){a.preventDefault(),this.end(this.settings.abort_on_close)}.bind(this)).on("keyup.fndtn.joyride",function(a){if(this.settings.keyboard&&this.settings.riding)switch(a.which){case 39:a.preventDefault(),this.go_next();break;case 37:a.preventDefault(),this.go_prev();break;case 27:a.preventDefault(),this.end(this.settings.abort_on_close)}}.bind(this)),a(b).off(".joyride").on("resize.fndtn.joyride",c.throttle(function(){if(a("["+c.attr_name()+"]").length>0&&c.settings.$next_tip&&c.settings.riding){if(c.settings.exposed.length>0){var b=a(c.settings.exposed);b.each(function(){var b=a(this);c.un_expose(b),c.expose(b)})}c.is_phone()?c.pos_phone():c.pos_default(!1)}},100))},start:function(){var b=this,c=a("["+this.attr_name()+"]",this.scope),d=["timer","scrollSpeed","startOffset","tipAnimationFadeSpeed","cookieExpires"],e=d.length;!c.length>0||(this.settings.init||this.events(),this.settings=c.data(this.attr_name(!0)+"-init"),this.settings.$content_el=c,this.settings.$body=a(this.settings.tip_container),this.settings.body_offset=a(this.settings.tip_container).position(),this.settings.$tip_content=this.settings.$content_el.find("> li"),this.settings.paused=!1,this.settings.attempts=0,this.settings.riding=!0,"function"!=typeof a.cookie&&(this.settings.cookie_monster=!1),(!this.settings.cookie_monster||this.settings.cookie_monster&&!a.cookie(this.settings.cookie_name))&&(this.settings.$tip_content.each(function(c){var f=a(this);this.settings=a.extend({},b.defaults,b.data_options(f));for(var g=e;g--;)b.settings[d[g]]=parseInt(b.settings[d[g]],10);b.create({$li:f,index:c})}),!this.settings.start_timer_on_click&&this.settings.timer>0?(this.show("init"),this.startTimer()):this.show("init")))},resume:function(){this.set_li(),this.show()},tip_template:function(b){var c,d;return b.tip_class=b.tip_class||"",c=a(this.settings.template.tip).addClass(b.tip_class),d=a.trim(a(b.li).html())+this.prev_button_text(b.prev_button_text,b.index)+this.button_text(b.button_text)+this.settings.template.link+this.timer_instance(b.index),c.append(a(this.settings.template.wrapper)),c.first().attr(this.add_namespace("data-index"),b.index),a(".joyride-content-wrapper",c).append(d),c[0]},timer_instance:function(b){var c;return c=0===b&&this.settings.start_timer_on_click&&this.settings.timer>0||0===this.settings.timer?"":a(this.settings.template.timer)[0].outerHTML},button_text:function(b){return this.settings.tip_settings.next_button?(b=a.trim(b)||"Next",b=a(this.settings.template.button).append(b)[0].outerHTML):b="",b},prev_button_text:function(b,c){return this.settings.tip_settings.prev_button?(b=a.trim(b)||"Previous",b=0==c?a(this.settings.template.prev_button).append(b).addClass("disabled")[0].outerHTML:a(this.settings.template.prev_button).append(b)[0].outerHTML):b="",b},create:function(b){this.settings.tip_settings=a.extend({},this.settings,this.data_options(b.$li));var c=b.$li.attr(this.add_namespace("data-button"))||b.$li.attr(this.add_namespace("data-text")),d=b.$li.attr(this.add_namespace("data-button-prev"))||b.$li.attr(this.add_namespace("data-prev-text")),e=b.$li.attr("class"),f=a(this.tip_template({tip_class:e,index:b.index,button_text:c,prev_button_text:d,li:b.$li}));a(this.settings.tip_container).append(f)},show:function(b,c){var e=null;if(this.settings.$li===d||-1===a.inArray(this.settings.$li.index(),this.settings.pause_after))if(this.settings.paused?this.settings.paused=!1:this.set_li(b,c),this.settings.attempts=0,this.settings.$li.length&&this.settings.$target.length>0){if(b&&(this.settings.pre_ride_callback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.show_modal()),this.settings.pre_step_callback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.settings.expose&&this.expose(),this.settings.tip_settings=a.extend({},this.settings,this.data_options(this.settings.$li)),this.settings.timer=parseInt(this.settings.timer,10),this.settings.tip_settings.tip_location_pattern=this.settings.tip_location_patterns[this.settings.tip_settings.tip_location],!/body/i.test(this.settings.$target.selector)){var f=a(".joyride-modal-bg");/pop/i.test(this.settings.tipAnimation)?f.hide():f.fadeOut(this.settings.tipAnimationFadeSpeed),this.scroll_to()}this.is_phone()?this.pos_phone(!0):this.pos_default(!0),e=this.settings.$next_tip.find(".joyride-timer-indicator"),/pop/i.test(this.settings.tip_animation)?(e.width(0),this.settings.timer>0?(this.settings.$next_tip.show(),setTimeout(function(){e.animate({width:e.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tip_animation_fade_speed)):this.settings.$next_tip.show()):/fade/i.test(this.settings.tip_animation)&&(e.width(0),this.settings.timer>0?(this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed).show(),setTimeout(function(){e.animate({width:e.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tip_animation_fade_speed)):this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed)),this.settings.$current_tip=this.settings.$next_tip}else this.settings.$li&&this.settings.$target.length<1?this.show(b,c):this.end();else this.settings.paused=!0},is_phone:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},hide:function(){this.settings.modal&&this.settings.expose&&this.un_expose(),this.settings.modal||a(".joyride-modal-bg").hide(),this.settings.$current_tip.css("visibility","hidden"),setTimeout(a.proxy(function(){this.hide(),this.css("visibility","visible")},this.settings.$current_tip),0),this.settings.post_step_callback(this.settings.$li.index(),this.settings.$current_tip)},set_li:function(a,b){a?(this.settings.$li=this.settings.$tip_content.eq(this.settings.start_offset),this.set_next_tip(),this.settings.$current_tip=this.settings.$next_tip):(this.settings.$li=b?this.settings.$li.prev():this.settings.$li.next(),this.set_next_tip()),this.set_target()},set_next_tip:function(){this.settings.$next_tip=a(".joyride-tip-guide").eq(this.settings.$li.index()),this.settings.$next_tip.data("closed","")},set_target:function(){var b=this.settings.$li.attr(this.add_namespace("data-class")),d=this.settings.$li.attr(this.add_namespace("data-id")),e=function(){return d?a(c.getElementById(d)):b?a("."+b).first():a("body")};this.settings.$target=e()},scroll_to:function(){var c,d;c=a(b).height()/2,d=Math.ceil(this.settings.$target.offset().top-c+this.settings.$next_tip.outerHeight()),0!=d&&a("html, body").stop().animate({scrollTop:d},this.settings.scroll_speed,"swing")},paused:function(){return-1===a.inArray(this.settings.$li.index()+1,this.settings.pause_after)},restart:function(){this.hide(),this.settings.$li=d,this.show("init")},pos_default:function(a){var b=this.settings.$next_tip.find(".joyride-nub"),c=Math.ceil(b.outerWidth()/2),d=Math.ceil(b.outerHeight()/2),e=a||!1;if(e&&(this.settings.$next_tip.css("visibility","hidden"),this.settings.$next_tip.show()),/body/i.test(this.settings.$target.selector))this.settings.$li.length&&this.pos_modal(b);else{var f=this.settings.tip_settings.tipAdjustmentY?parseInt(this.settings.tip_settings.tipAdjustmentY):0,g=this.settings.tip_settings.tipAdjustmentX?parseInt(this.settings.tip_settings.tipAdjustmentX):0;this.bottom()?(this.settings.$next_tip.css(this.rtl?{top:this.settings.$target.offset().top+d+this.settings.$target.outerHeight()+f,left:this.settings.$target.offset().left+this.settings.$target.outerWidth()-this.settings.$next_tip.outerWidth()+g}:{top:this.settings.$target.offset().top+d+this.settings.$target.outerHeight()+f,left:this.settings.$target.offset().left+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"top")):this.top()?(this.settings.$next_tip.css(this.rtl?{top:this.settings.$target.offset().top-this.settings.$next_tip.outerHeight()-d+f,left:this.settings.$target.offset().left+this.settings.$target.outerWidth()-this.settings.$next_tip.outerWidth()}:{top:this.settings.$target.offset().top-this.settings.$next_tip.outerHeight()-d+f,left:this.settings.$target.offset().left+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"bottom")):this.right()?(this.settings.$next_tip.css({top:this.settings.$target.offset().top+f,left:this.settings.$target.outerWidth()+this.settings.$target.offset().left+c+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"left")):this.left()&&(this.settings.$next_tip.css({top:this.settings.$target.offset().top+f,left:this.settings.$target.offset().left-this.settings.$next_tip.outerWidth()-c+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"right")),!this.visible(this.corners(this.settings.$next_tip))&&this.settings.attempts0&&arguments[0]instanceof a)e=arguments[0];else{if(!this.settings.$target||/body/i.test(this.settings.$target.selector))return!1;e=this.settings.$target}return e.length<1?(b.console&&console.error("element not valid",e),!1):(c=a(this.settings.template.expose),this.settings.$body.append(c),c.css({top:e.offset().top,left:e.offset().left,width:e.outerWidth(!0),height:e.outerHeight(!0)}),d=a(this.settings.template.expose_cover),f={zIndex:e.css("z-index"),position:e.css("position")},g=null==e.attr("class")?"":e.attr("class"),e.css("z-index",parseInt(c.css("z-index"))+1),"static"==f.position&&e.css("position","relative"),e.data("expose-css",f),e.data("orig-class",g),e.attr("class",g+" "+this.settings.expose_add_class),d.css({top:e.offset().top,left:e.offset().left,width:e.outerWidth(!0),height:e.outerHeight(!0)}),this.settings.modal&&this.show_modal(),this.settings.$body.append(d),c.addClass(h),d.addClass(h),e.data("expose",h),this.settings.post_expose_callback(this.settings.$li.index(),this.settings.$next_tip,e),void this.add_exposed(e))},un_expose:function(){var c,d,e,f,g,h=!1;if(arguments.length>0&&arguments[0]instanceof a)d=arguments[0];else{if(!this.settings.$target||/body/i.test(this.settings.$target.selector))return!1;d=this.settings.$target}return d.length<1?(b.console&&console.error("element not valid",d),!1):(c=d.data("expose"),e=a("."+c),arguments.length>1&&(h=arguments[1]),h===!0?a(".joyride-expose-wrapper,.joyride-expose-cover").remove():e.remove(),f=d.data("expose-css"),"auto"==f.zIndex?d.css("z-index",""):d.css("z-index",f.zIndex),f.position!=d.css("position")&&("static"==f.position?d.css("position",""):d.css("position",f.position)),g=d.data("orig-class"),d.attr("class",g),d.removeData("orig-classes"),d.removeData("expose"),d.removeData("expose-z-index"),void this.remove_exposed(d))},add_exposed:function(b){this.settings.exposed=this.settings.exposed||[],b instanceof a||"object"==typeof b?this.settings.exposed.push(b[0]):"string"==typeof b&&this.settings.exposed.push(b)},remove_exposed:function(b){var c,d;for(b instanceof a?c=b[0]:"string"==typeof b&&(c=b),this.settings.exposed=this.settings.exposed||[],d=this.settings.exposed.length;d--;)if(this.settings.exposed[d]==c)return void this.settings.exposed.splice(d,1)},center:function(){var c=a(b);return this.settings.$next_tip.css({top:(c.height()-this.settings.$next_tip.outerHeight())/2+c.scrollTop(),left:(c.width()-this.settings.$next_tip.outerWidth())/2+c.scrollLeft()}),!0},bottom:function(){return/bottom/i.test(this.settings.tip_settings.tip_location)},top:function(){return/top/i.test(this.settings.tip_settings.tip_location)},right:function(){return/right/i.test(this.settings.tip_settings.tip_location)},left:function(){return/left/i.test(this.settings.tip_settings.tip_location)},corners:function(c){var d=a(b),e=d.height()/2,f=Math.ceil(this.settings.$target.offset().top-e+this.settings.$next_tip.outerHeight()),g=d.width()+d.scrollLeft(),h=d.height()+f,i=d.height()+d.scrollTop(),j=d.scrollTop();return j>f&&(j=0>f?0:f),h>i&&(i=h),[c.offset().topc.offset().left]},visible:function(a){for(var b=a.length;b--;)if(a[b])return!1;return!0},nub_position:function(a,b,c){a.addClass("auto"===b?c:b)},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(b){this.settings.cookie_monster&&a.cookie(this.settings.cookie_name,"ridden",{expires:this.settings.cookie_expires,domain:this.settings.cookie_domain}),this.settings.timer>0&&clearTimeout(this.settings.automate),this.settings.modal&&this.settings.expose&&this.un_expose(),a(this.scope).off("keyup.joyride"),this.settings.$next_tip.data("closed",!0),this.settings.riding=!1,a(".joyride-modal-bg").hide(),this.settings.$current_tip.hide(),("undefined"==typeof b||b===!1)&&(this.settings.post_step_callback(this.settings.$li.index(),this.settings.$current_tip),this.settings.post_ride_callback(this.settings.$li.index(),this.settings.$current_tip)),a(".joyride-tip-guide").remove()},off:function(){a(this.scope).off(".joyride"),a(b).off(".joyride"),a(".joyride-close-tip, .joyride-next-tip, .joyride-modal-bg").off(".joyride"),a(".joyride-tip-guide, .joyride-modal-bg").remove(),clearTimeout(this.settings.automate),this.settings={}},reflow:function(){}}}(jQuery,window,window.document),function(a,b){"use strict";Foundation.libs["magellan-expedition"]={name:"magellan-expedition",version:"5.5.1",settings:{active_class:"active",threshold:0,destination_threshold:20,throttle_delay:30,fixed_top:0,offset_by_height:!0,duration:700,easing:"swing"},init:function(a,b,c){Foundation.inherit(this,"throttle"),this.bindings(b,c)},events:function(){var c=this,d=c.S,e=c.settings;c.set_expedition_position(),d(c.scope).off(".magellan").on("click.fndtn.magellan","["+c.add_namespace("data-magellan-arrival")+'] a[href^="#"]',function(b){b.preventDefault();var d=a(this).closest("["+c.attr_name()+"]"),e=d.data("magellan-expedition-init"),f=this.hash.split("#").join(""),g=a('a[name="'+f+'"]');0===g.length&&(g=a("#"+f));var h=g.offset().top-e.destination_threshold+1;e.offset_by_height&&(h-=d.outerHeight()),a("html, body").stop().animate({scrollTop:h},e.duration,e.easing,function(){history.pushState?history.pushState(null,null,"#"+f):location.hash="#"+f})}).on("scroll.fndtn.magellan",c.throttle(this.check_for_arrivals.bind(this),e.throttle_delay)),a(b).on("resize.fndtn.magellan",c.throttle(this.set_expedition_position.bind(this),e.throttle_delay))},check_for_arrivals:function(){var a=this;a.update_arrivals(),a.update_expedition_positions()},set_expedition_position:function(){var b=this;a("["+this.attr_name()+"=fixed]",b.scope).each(function(){var c,d,e=a(this),f=e.data("magellan-expedition-init"),g=e.attr("styles");e.attr("style",""),c=e.offset().top+f.threshold,d=parseInt(e.data("magellan-fixed-top")),isNaN(d)||(b.settings.fixed_top=d),e.data(b.data_attr("magellan-top-offset"),c),e.attr("style",g)})},update_expedition_positions:function(){var c=this,d=a(b).scrollTop();a("["+this.attr_name()+"=fixed]",c.scope).each(function(){var b=a(this),e=b.data("magellan-expedition-init"),f=b.attr("style"),g=b.data("magellan-top-offset");if(d+c.settings.fixed_top>=g){var h=b.prev("["+c.add_namespace("data-magellan-expedition-clone")+"]");0===h.length&&(h=b.clone(),h.removeAttr(c.attr_name()),h.attr(c.add_namespace("data-magellan-expedition-clone"),""),b.before(h)),b.css({position:"fixed",top:e.fixed_top}).addClass("fixed")}else b.prev("["+c.add_namespace("data-magellan-expedition-clone")+"]").remove(),b.attr("style",f).css("position","").css("top","").removeClass("fixed")})},update_arrivals:function(){var c=this,d=a(b).scrollTop();a("["+this.attr_name()+"]",c.scope).each(function(){var b=a(this),e=b.data(c.attr_name(!0)+"-init"),f=c.offsets(b,d),g=b.find("["+c.add_namespace("data-magellan-arrival")+"]"),h=!1;f.each(function(a,d){if(d.viewport_offset>=d.top_offset){var f=b.find("["+c.add_namespace("data-magellan-arrival")+"]");return f.not(d.arrival).removeClass(e.active_class),d.arrival.addClass(e.active_class),h=!0,!0}}),h||g.removeClass(e.active_class)})},offsets:function(b,c){var d=this,e=b.data(d.attr_name(!0)+"-init"),f=c;return b.find("["+d.add_namespace("data-magellan-arrival")+"]").map(function(){var c=a(this).data(d.data_attr("magellan-arrival")),g=a("["+d.add_namespace("data-magellan-destination")+"="+c+"]");if(g.length>0){var h=g.offset().top-e.destination_threshold;return e.offset_by_height&&(h-=b.outerHeight()),h=Math.floor(h),{destination:g,arrival:a(this),top_offset:h,viewport_offset:f}}}).sort(function(a,b){return a.top_offsetb.top_offset?1:0})},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},off:function(){this.S(this.scope).off(".magellan"),this.S(b).off(".magellan")},reflow:function(){var b=this;a("["+b.add_namespace("data-magellan-expedition-clone")+"]",b.scope).remove()}}}(jQuery,window,window.document),function(a){"use strict";Foundation.libs.offcanvas={name:"offcanvas",version:"5.5.1",settings:{open_method:"move",close_on_click:!1},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=b.S,d="",e="",f="";"move"===this.settings.open_method?(d="move-",e="right",f="left"):"overlap_single"===this.settings.open_method?(d="offcanvas-overlap-",e="right",f="left"):"overlap"===this.settings.open_method&&(d="offcanvas-overlap"),c(this.scope).off(".offcanvas").on("click.fndtn.offcanvas",".left-off-canvas-toggle",function(f){b.click_toggle_class(f,d+e),"overlap"!==b.settings.open_method&&c(".left-submenu").removeClass(d+e),a(".left-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".left-off-canvas-menu a",function(f){var g=b.get_settings(f),h=c(this).parent();!g.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(f.preventDefault(),c(this).siblings(".left-submenu").toggleClass(d+e)):h.hasClass("back")&&(f.preventDefault(),h.parent().removeClass(d+e)):(b.hide.call(b,d+e,b.get_wrapper(f)),h.parent().removeClass(d+e)),a(".left-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".right-off-canvas-toggle",function(e){b.click_toggle_class(e,d+f),"overlap"!==b.settings.open_method&&c(".right-submenu").removeClass(d+f),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".right-off-canvas-menu a",function(e){var g=b.get_settings(e),h=c(this).parent();!g.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".right-submenu").toggleClass(d+f)):h.hasClass("back")&&(e.preventDefault(),h.parent().removeClass(d+f)):(b.hide.call(b,d+f,b.get_wrapper(e)),h.parent().removeClass(d+f)),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(g){b.click_remove_class(g,d+f),c(".right-submenu").removeClass(d+f),e&&(b.click_remove_class(g,d+e),c(".left-submenu").removeClass(d+f)),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(c){b.click_remove_class(c,d+f),a(".left-off-canvas-toggle").attr("aria-expanded","false"),e&&(b.click_remove_class(c,d+e),a(".right-off-canvas-toggle").attr("aria-expanded","false"))})},toggle:function(a,b){b=b||this.get_wrapper(),b.is("."+a)?this.hide(a,b):this.show(a,b)},show:function(a,b){b=b||this.get_wrapper(),b.trigger("open").trigger("open.fndtn.offcanvas"),b.addClass(a)},hide:function(a,b){b=b||this.get_wrapper(),b.trigger("close").trigger("close.fndtn.offcanvas"),b.removeClass(a)},click_toggle_class:function(a,b){a.preventDefault();var c=this.get_wrapper(a);this.toggle(b,c)},click_remove_class:function(a,b){a.preventDefault();var c=this.get_wrapper(a);this.hide(b,c)},get_settings:function(a){var b=this.S(a.target).closest("["+this.attr_name()+"]");return b.data(this.attr_name(!0)+"-init")||this.settings},get_wrapper:function(a){var b=this.S(a?a.target:this.scope).closest(".off-canvas-wrap");return 0===b.length&&(b=this.S(".off-canvas-wrap")),b},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";var e=function(){},f=function(e,f){if(e.hasClass(f.slides_container_class))return this;var j,k,l,m,n,o,p=this,q=e,r=0,s=!1;p.slides=function(){return q.children(f.slide_selector) +},p.slides().first().addClass(f.active_slide_class),p.update_slide_number=function(b){f.slide_number&&(k.find("span:first").text(parseInt(b)+1),k.find("span:last").text(p.slides().length)),f.bullets&&(l.children().removeClass(f.bullets_active_class),a(l.children().get(b)).addClass(f.bullets_active_class))},p.update_active_link=function(b){var c=a('[data-orbit-link="'+p.slides().eq(b).attr("data-orbit-slide")+'"]');c.siblings().removeClass(f.bullets_active_class),c.addClass(f.bullets_active_class)},p.build_markup=function(){q.wrap('
'),j=q.parent(),q.addClass(f.slides_container_class),f.stack_on_small&&j.addClass(f.stack_on_small_class),f.navigation_arrows&&(j.append(a('').addClass(f.prev_class)),j.append(a('').addClass(f.next_class))),f.timer&&(m=a("
").addClass(f.timer_container_class),m.append(""),m.append(a("
").addClass(f.timer_progress_class)),m.addClass(f.timer_paused_class),j.append(m)),f.slide_number&&(k=a("
").addClass(f.slide_number_class),k.append(" "+f.slide_number_text+" "),j.append(k)),f.bullets&&(l=a("
    ").addClass(f.bullets_container_class),j.append(l),l.wrap('
    '),p.slides().each(function(b){var c=a("
  1. ").attr("data-orbit-slide",b).on("click",p.link_bullet);l.append(c)}))},p._goto=function(b,c){if(b===r)return!1;"object"==typeof o&&o.restart();var d=p.slides(),e="next";if(s=!0,r>b&&(e="prev"),b>=d.length){if(!f.circular)return!1;b=0}else if(0>b){if(!f.circular)return!1;b=d.length-1}var g=a(d.get(r)),h=a(d.get(b));g.css("zIndex",2),g.removeClass(f.active_slide_class),h.css("zIndex",4).addClass(f.active_slide_class),q.trigger("before-slide-change.fndtn.orbit"),f.before_slide_change(),p.update_active_link(b);var i=function(){var a=function(){r=b,s=!1,c===!0&&(o=p.create_timer(),o.start()),p.update_slide_number(r),q.trigger("after-slide-change.fndtn.orbit",[{slide_number:r,total_slides:d.length}]),f.after_slide_change(r,d.length)};q.outerHeight()!=h.outerHeight()&&f.variable_height?q.animate({height:h.outerHeight()},250,"linear",a):a()};if(1===d.length)return i(),!1;var j=function(){"next"===e&&n.next(g,h,i),"prev"===e&&n.prev(g,h,i)};h.outerHeight()>q.outerHeight()&&f.variable_height?q.animate({height:h.outerHeight()},250,"linear",j):j()},p.next=function(a){a.stopImmediatePropagation(),a.preventDefault(),p._goto(r+1)},p.prev=function(a){a.stopImmediatePropagation(),a.preventDefault(),p._goto(r-1)},p.link_custom=function(b){b.preventDefault();var c=a(this).attr("data-orbit-link");if("string"==typeof c&&""!=(c=a.trim(c))){var d=j.find("[data-orbit-slide="+c+"]");-1!=d.index()&&p._goto(d.index())}},p.link_bullet=function(){var b=a(this).attr("data-orbit-slide");if("string"==typeof b&&""!=(b=a.trim(b)))if(isNaN(parseInt(b))){var c=j.find("[data-orbit-slide="+b+"]");-1!=c.index()&&p._goto(c.index()+1)}else p._goto(parseInt(b))},p.timer_callback=function(){p._goto(r+1,!0)},p.compute_dimensions=function(){var b=a(p.slides().get(r)),c=b.outerHeight();f.variable_height||p.slides().each(function(){a(this).outerHeight()>c&&(c=a(this).outerHeight())}),q.height(c)},p.create_timer=function(){var a=new g(j.find("."+f.timer_container_class),f,p.timer_callback);return a},p.stop_timer=function(){"object"==typeof o&&o.stop()},p.toggle_timer=function(){var a=j.find("."+f.timer_container_class);a.hasClass(f.timer_paused_class)?("undefined"==typeof o&&(o=p.create_timer()),o.start()):"object"==typeof o&&o.stop()},p.init=function(){p.build_markup(),f.timer&&(o=p.create_timer(),Foundation.utils.image_loaded(this.slides().children("img"),o.start)),n=new i(f,q),"slide"===f.animation&&(n=new h(f,q)),j.on("click","."+f.next_class,p.next),j.on("click","."+f.prev_class,p.prev),f.next_on_click&&j.on("click","."+f.slides_container_class+" [data-orbit-slide]",p.link_bullet),j.on("click",p.toggle_timer),f.swipe&&j.on("touchstart.fndtn.orbit",function(a){a.touches||(a=a.originalEvent);var b={start_page_x:a.touches[0].pageX,start_page_y:a.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:d};j.data("swipe-transition",b),a.stopPropagation()}).on("touchmove.fndtn.orbit",function(a){if(a.touches||(a=a.originalEvent),!(a.touches.length>1||a.scale&&1!==a.scale)){var b=j.data("swipe-transition");if("undefined"==typeof b&&(b={}),b.delta_x=a.touches[0].pageX-b.start_page_x,"undefined"==typeof b.is_scrolling&&(b.is_scrolling=!!(b.is_scrolling||Math.abs(b.delta_x)0?b(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):b(this.scope).on("open.fndtn.reveal","["+a.attr_name()+"]",this.settings.open).on("opened.fndtn.reveal","["+a.attr_name()+"]",this.settings.opened).on("opened.fndtn.reveal","["+a.attr_name()+"]",this.open_video).on("close.fndtn.reveal","["+a.attr_name()+"]",this.settings.close).on("closed.fndtn.reveal","["+a.attr_name()+"]",this.settings.closed).on("closed.fndtn.reveal","["+a.attr_name()+"]",this.close_video),!0},key_up_on:function(){var a=this;return a.S("body").off("keyup.fndtn.reveal").on("keyup.fndtn.reveal",function(b){var c=a.S("["+a.attr_name()+"].open"),d=c.data(a.attr_name(!0)+"-init")||a.settings;d&&27===b.which&&d.close_on_esc&&!a.locked&&a.close.call(a,c)}),!0},key_up_off:function(){return this.S("body").off("keyup.fndtn.reveal"),!0},open:function(c,d){var e,f=this;c?"undefined"!=typeof c.selector?e=f.S("#"+c.data(f.data_attr("reveal-id"))).first():(e=f.S(this.scope),d=c):e=f.S(this.scope);var g=e.data(f.attr_name(!0)+"-init");if(g=g||this.settings,e.hasClass("open")&&c.attr("data-reveal-id")==e.attr("id"))return f.close(e);if(!e.hasClass("open")){var h=f.S("["+f.attr_name()+"].open");if("undefined"==typeof e.data("css-top")&&e.data("css-top",parseInt(e.css("top"),10)).data("offset",this.cache_offset(e)),this.key_up_on(e),e.on("open.fndtn.reveal").trigger("open.fndtn.reveal"),h.length<1&&this.toggle_bg(e,!0),"string"==typeof d&&(d={url:d}),"undefined"!=typeof d&&d.url){var i="undefined"!=typeof d.success?d.success:null;a.extend(d,{success:function(b,c,d){if(a.isFunction(i)){var j=i(b,c,d);"string"==typeof j&&(b=j)}e.html(b),f.S(e).foundation("section","reflow"),f.S(e).children().foundation(),h.length>0&&(g.multiple_opened?this.to_back(h):this.hide(h,g.css.close)),f.show(e,g.css.open)}}),a.ajax(d)}else h.length>0&&(g.multiple_opened?this.to_back(h):this.hide(h,g.css.close)),this.show(e,g.css.open)}f.S(b).trigger("resize")},close:function(b){var b=b&&b.length?b:this.S(this.scope),c=this.S("["+this.attr_name()+"].open"),d=b.data(this.attr_name(!0)+"-init")||this.settings;c.length>0&&(this.locked=!0,this.key_up_off(b),b.trigger("close").trigger("close.fndtn.reveal"),(d.multiple_opened&&1===c.length||!d.multiple_opened||b.length>1)&&(this.toggle_bg(b,!1),this.to_front(b)),d.multiple_opened?(this.hide(b,d.css.close,d),this.to_front(a(a.makeArray(c).reverse()[1]))):this.hide(c,d.css.close,d))},close_targets:function(){var a="."+this.settings.dismiss_modal_class;return this.settings.close_on_background_click?a+", ."+this.settings.bg_class:a},toggle_bg:function(b,c){0===this.S("."+this.settings.bg_class).length&&(this.settings.bg=a("
    ",{"class":this.settings.bg_class}).appendTo("body").hide());var e=this.settings.bg.filter(":visible").length>0;c!=e&&((c==d?e:!c)?this.hide(this.settings.bg):this.show(this.settings.bg))},show:function(c,d){if(d){var f=c.data(this.attr_name(!0)+"-init")||this.settings,g=f.root_element;if(0===c.parent(g).length){var h=c.wrap('
    ').parent();c.on("closed.fndtn.reveal.wrapped",function(){c.detach().appendTo(h),c.unwrap().unbind("closed.fndtn.reveal.wrapped")}),c.detach().appendTo(g)}var i=e(f.animation);if(i.animate||(this.locked=!1),i.pop){d.top=a(b).scrollTop()-c.data("offset")+"px";var j={top:a(b).scrollTop()+c.data("css-top")+"px",opacity:1};return setTimeout(function(){return c.css(d).animate(j,f.animation_speed,"linear",function(){this.locked=!1,c.trigger("opened").trigger("opened.fndtn.reveal")}.bind(this)).addClass("open")}.bind(this),f.animation_speed/2)}if(i.fade){d.top=a(b).scrollTop()+c.data("css-top")+"px";var j={opacity:1};return setTimeout(function(){return c.css(d).animate(j,f.animation_speed,"linear",function(){this.locked=!1,c.trigger("opened").trigger("opened.fndtn.reveal")}.bind(this)).addClass("open")}.bind(this),f.animation_speed/2)}return c.css(d).show().css({opacity:1}).addClass("open").trigger("opened").trigger("opened.fndtn.reveal")}var f=this.settings;return e(f.animation).fade?c.fadeIn(f.animation_speed/2):(this.locked=!1,c.show())},to_back:function(a){a.addClass("toback")},to_front:function(a){a.removeClass("toback")},hide:function(c,d){if(d){var f=c.data(this.attr_name(!0)+"-init");f=f||this.settings;var g=e(f.animation);if(g.animate||(this.locked=!1),g.pop){var h={top:-a(b).scrollTop()-c.data("offset")+"px",opacity:0};return setTimeout(function(){return c.animate(h,f.animation_speed,"linear",function(){this.locked=!1,c.css(d).trigger("closed").trigger("closed.fndtn.reveal")}.bind(this)).removeClass("open")}.bind(this),f.animation_speed/2)}if(g.fade){var h={opacity:0};return setTimeout(function(){return c.animate(h,f.animation_speed,"linear",function(){this.locked=!1,c.css(d).trigger("closed").trigger("closed.fndtn.reveal")}.bind(this)).removeClass("open")}.bind(this),f.animation_speed/2)}return c.hide().css(d).removeClass("open").trigger("closed").trigger("closed.fndtn.reveal")}var f=this.settings;return e(f.animation).fade?c.fadeOut(f.animation_speed/2):c.hide()},close_video:function(b){var c=a(".flex-video",b.target),d=a("iframe",c);d.length>0&&(d.attr("data-src",d[0].src),d.attr("src",d.attr("src")),c.hide())},open_video:function(b){var c=a(".flex-video",b.target),e=c.find("iframe");if(e.length>0){var f=e.attr("data-src");if("string"==typeof f)e[0].src=e.attr("data-src");else{var g=e[0].src;e[0].src=d,e[0].src=g}c.show()}},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},cache_offset:function(a){var b=a.show().height()+parseInt(a.css("top"),10);return a.hide(),b},off:function(){a(this.scope).off(".fndtn.reveal")},reflow:function(){}}}(jQuery,window,window.document),function(a,b){"use strict";Foundation.libs.slider={name:"slider",version:"5.5.1",settings:{start:0,end:100,step:1,precision:null,initial:null,display_selector:"",vertical:!1,trigger_input_change:!1,on_change:function(){}},cache:{},init:function(a,b,c){Foundation.inherit(this,"throttle"),this.bindings(b,c),this.reflow()},events:function(){var c=this;a(this.scope).off(".slider").on("mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider","["+c.attr_name()+"]:not(.disabled, [disabled]) .range-slider-handle",function(b){c.cache.active||(b.preventDefault(),c.set_active_slider(a(b.target)))}).on("mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider",function(d){if(c.cache.active)if(d.preventDefault(),a.data(c.cache.active[0],"settings").vertical){var e=0;d.pageY||(e=b.scrollY),c.calculate_position(c.cache.active,c.get_cursor_position(d,"y")+e)}else c.calculate_position(c.cache.active,c.get_cursor_position(d,"x"))}).on("mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider",function(){c.remove_active_slider()}).on("change.fndtn.slider",function(){c.settings.on_change()}),c.S(b).on("resize.fndtn.slider",c.throttle(function(){c.reflow()},300))},get_cursor_position:function(a,b){var c,d="page"+b.toUpperCase(),e="client"+b.toUpperCase();return"undefined"!=typeof a[d]?c=a[d]:"undefined"!=typeof a.originalEvent[e]?c=a.originalEvent[e]:a.originalEvent.touches&&a.originalEvent.touches[0]&&"undefined"!=typeof a.originalEvent.touches[0][e]?c=a.originalEvent.touches[0][e]:a.currentPoint&&"undefined"!=typeof a.currentPoint[b]&&(c=a.currentPoint[b]),c},set_active_slider:function(a){this.cache.active=a},remove_active_slider:function(){this.cache.active=null},calculate_position:function(b,c){var d=this,e=a.data(b[0],"settings"),f=(a.data(b[0],"handle_l"),a.data(b[0],"handle_o"),a.data(b[0],"bar_l")),g=a.data(b[0],"bar_o");requestAnimationFrame(function(){var a;a=Foundation.rtl&&!e.vertical?d.limit_to((g+f-c)/f,0,1):d.limit_to((c-g)/f,0,1),a=e.vertical?1-a:a;var h=d.normalized_value(a,e.start,e.end,e.step,e.precision);d.set_ui(b,h)})},set_ui:function(b,c){var d=a.data(b[0],"settings"),e=a.data(b[0],"handle_l"),f=a.data(b[0],"bar_l"),g=this.normalized_percentage(c,d.start,d.end),h=g*(f-e)-1,i=100*g,j=b.parent(),k=b.parent().children("input[type=hidden]");Foundation.rtl&&!d.vertical&&(h=-h),h=d.vertical?-h+f-e+1:h,this.set_translate(b,h,d.vertical),d.vertical?b.siblings(".range-slider-active-segment").css("height",i+"%"):b.siblings(".range-slider-active-segment").css("width",i+"%"),j.attr(this.attr_name(),c).trigger("change").trigger("change.fndtn.slider"),k.val(c),d.trigger_input_change&&k.trigger("change"),b[0].hasAttribute("aria-valuemin")||b.attr({"aria-valuemin":d.start,"aria-valuemax":d.end}),b.attr("aria-valuenow",c),""!=d.display_selector&&a(d.display_selector).each(function(){this.hasOwnProperty("value")?a(this).val(c):a(this).text(c)})},normalized_percentage:function(a,b,c){return Math.min(1,(a-b)/(c-b))},normalized_value:function(a,b,c,d,e){var f=c-b,g=a*f,h=(g-g%d)/d,i=g%d,j=i>=.5*d?d:0;return(h*d+j+b).toFixed(e)},set_translate:function(b,c,d){d?a(b).css("-webkit-transform","translateY("+c+"px)").css("-moz-transform","translateY("+c+"px)").css("-ms-transform","translateY("+c+"px)").css("-o-transform","translateY("+c+"px)").css("transform","translateY("+c+"px)"):a(b).css("-webkit-transform","translateX("+c+"px)").css("-moz-transform","translateX("+c+"px)").css("-ms-transform","translateX("+c+"px)").css("-o-transform","translateX("+c+"px)").css("transform","translateX("+c+"px)")},limit_to:function(a,b,c){return Math.min(Math.max(a,b),c)},initialize_settings:function(b){var c,d=a.extend({},this.settings,this.data_options(a(b).parent()));null===d.precision&&(c=(""+d.step).match(/\.([\d]*)/),d.precision=c&&c[1]?c[1].length:0),d.vertical?(a.data(b,"bar_o",a(b).parent().offset().top),a.data(b,"bar_l",a(b).parent().outerHeight()),a.data(b,"handle_o",a(b).offset().top),a.data(b,"handle_l",a(b).outerHeight())):(a.data(b,"bar_o",a(b).parent().offset().left),a.data(b,"bar_l",a(b).parent().outerWidth()),a.data(b,"handle_o",a(b).offset().left),a.data(b,"handle_l",a(b).outerWidth())),a.data(b,"bar",a(b).parent()),a.data(b,"settings",d)},set_initial_position:function(b){var c=a.data(b.children(".range-slider-handle")[0],"settings"),d="number"!=typeof c.initial||isNaN(c.initial)?Math.floor(.5*(c.end-c.start)/c.step)*c.step+c.start:c.initial,e=b.children(".range-slider-handle");this.set_ui(e,d)},set_value:function(b){var c=this;a("["+c.attr_name()+"]",this.scope).each(function(){a(this).attr(c.attr_name(),b)}),a(this.scope).attr(c.attr_name())&&a(this.scope).attr(c.attr_name(),b),c.reflow()},reflow:function(){var b=this;b.S("["+this.attr_name()+"]").each(function(){var c=a(this).children(".range-slider-handle")[0],d=a(this).attr(b.attr_name());b.initialize_settings(c),d?b.set_ui(a(c),parseFloat(d)):b.set_initial_position(a(this))})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.tab={name:"tab",version:"5.5.1",settings:{active_class:"active",callback:function(){},deep_linking:!1,scroll_to_content:!0,is_hover:!1},default_tab_hashes:[],init:function(a,c,d){var e=this,f=this.S;this.bindings(c,d),e.entry_location=b.location.href,this.handle_location_hash_change(),f("["+this.attr_name()+"] > .active > a",this.scope).each(function(){e.default_tab_hashes.push(this.hash)})},events:function(){var a=this,c=this.S,d=function(b){var d=c(this).closest("["+a.attr_name()+"]").data(a.attr_name(!0)+"-init");(!d.is_hover||Modernizr.touch)&&(b.preventDefault(),b.stopPropagation(),a.toggle_active_tab(c(this).parent()))};c(this.scope).off(".tab").on("focus.fndtn.tab","["+this.attr_name()+"] > * > a",d).on("click.fndtn.tab","["+this.attr_name()+"] > * > a",d).on("mouseenter.fndtn.tab","["+this.attr_name()+"] > * > a",function(){var b=c(this).closest("["+a.attr_name()+"]").data(a.attr_name(!0)+"-init");b.is_hover&&a.toggle_active_tab(c(this).parent())}),c(b).on("hashchange.fndtn.tab",function(b){b.preventDefault(),a.handle_location_hash_change()})},handle_location_hash_change:function(){var b=this,c=this.S;c("["+this.attr_name()+"]",this.scope).each(function(){var e=c(this).data(b.attr_name(!0)+"-init");if(e.deep_linking){var f;if(f=e.scroll_to_content?b.scope.location.hash:b.scope.location.hash.replace("fndtn-",""),""!=f){var g=c(f);if(g.hasClass("content")&&g.parent().hasClass("tabs-content"))b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href="+f+"]").parent());else{var h=g.closest(".content").attr("id");h!=d&&b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href=#"+h+"]").parent(),f)}}else for(var i=0;i * > a[href="+b.default_tab_hashes[i]+"]").parent())}})},toggle_active_tab:function(e,f){var g=this,h=g.S,i=e.closest("["+this.attr_name()+"]"),j=e.find("a"),k=e.children("a").first(),l="#"+k.attr("href").split("#")[1],m=h(l),n=e.siblings(),o=i.data(this.attr_name(!0)+"-init"),p=function(b){var d,e=a(this),f=a(this).parents("li").prev().children('[role="tab"]'),g=a(this).parents("li").next().children('[role="tab"]');switch(b.keyCode){case 37:d=f;break;case 39:d=g;break;default:d=!1}d.length&&(e.attr({tabindex:"-1","aria-selected":null}),d.attr({tabindex:"0","aria-selected":!0}).focus()),a('[role="tabpanel"]').attr("aria-hidden","true"),a("#"+a(c.activeElement).attr("href").substring(1)).attr("aria-hidden",null)},q=function(a){var c=b.location.href===g.entry_location,d=o.scroll_to_content?g.default_tab_hashes[0]:c?b.location.hash:"fndtn-"+g.default_tab_hashes[0].replace("#","");c&&a===d||(b.location.hash=a)};h(this).data(this.data_attr("tab-content"))&&(l="#"+h(this).data(this.data_attr("tab-content")).split("#")[1],m=h(l)),o.deep_linking&&(o.scroll_to_content?(q(f||l),f==d||f==l?e.parent()[0].scrollIntoView():h(l)[0].scrollIntoView()):q(f!=d?"fndtn-"+f.replace("#",""):"fndtn-"+l.replace("#",""))),e.addClass(o.active_class).triggerHandler("opened"),j.attr({"aria-selected":"true",tabindex:0}),n.removeClass(o.active_class),n.find("a").attr({"aria-selected":"false",tabindex:-1}),m.siblings().removeClass(o.active_class).attr({"aria-hidden":"true",tabindex:-1}),m.addClass(o.active_class).attr("aria-hidden","false").removeAttr("tabindex"),o.callback(e),m.triggerHandler("toggled",[e]),i.triggerHandler("toggled",[m]),j.off("keydown").on("keydown",p)},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},off:function(){},reflow:function(){}}}(jQuery,window,window.document),function(a,b){"use strict";Foundation.libs.tooltip={name:"tooltip",version:"5.5.1",settings:{additional_inheritable_classes:[],tooltip_class:".tooltip",append_to:"body",touch_close_text:"Tap To Close",disable_for_touch:!1,hover_delay:200,show_on:"all",tip_template:function(a,b){return''+b+''}},cache:{},init:function(a,b,c){Foundation.inherit(this,"random_str"),this.bindings(b,c)},should_show:function(b){var c=a.extend({},this.settings,this.data_options(b));return"all"===c.show_on?!0:this.small()&&"small"===c.show_on?!0:this.medium()&&"medium"===c.show_on?!0:this.large()&&"large"===c.show_on?!0:!1},medium:function(){return matchMedia(Foundation.media_queries.medium).matches},large:function(){return matchMedia(Foundation.media_queries.large).matches},events:function(b){var c=this,d=c.S;c.create(this.S(b)),a(this.scope).off(".tooltip").on("mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip","["+this.attr_name()+"]",function(b){var e=d(this),f=a.extend({},c.settings,c.data_options(e)),g=!1;if(Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&d(b.target).is("a"))return!1;if(/mouse/i.test(b.type)&&c.ie_touch(b))return!1;if(e.hasClass("open"))Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&b.preventDefault(),c.hide(e);else{if(f.disable_for_touch&&Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type))return;!f.disable_for_touch&&Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&(b.preventDefault(),d(f.tooltip_class+".open").hide(),g=!0),/enter|over/i.test(b.type)?this.timer=setTimeout(function(){c.showTip(e)}.bind(this),c.settings.hover_delay):"mouseout"===b.type||"mouseleave"===b.type?(clearTimeout(this.timer),c.hide(e)):c.showTip(e)}}).on("mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip","["+this.attr_name()+"].open",function(b){return/mouse/i.test(b.type)&&c.ie_touch(b)?!1:void(("touch"!=a(this).data("tooltip-open-event-type")||"mouseleave"!=b.type)&&("mouse"==a(this).data("tooltip-open-event-type")&&/MSPointerDown|touchstart/i.test(b.type)?c.convert_to_touch(a(this)):c.hide(a(this))))}).on("DOMNodeRemoved DOMAttrModified","["+this.attr_name()+"]:not(a)",function(){c.hide(d(this))})},ie_touch:function(){return!1},showTip:function(a){var b=this.getTip(a);return this.should_show(a,b)?this.show(a):void 0},getTip:function(b){var c=this.selector(b),d=a.extend({},this.settings,this.data_options(b)),e=null;return c&&(e=this.S('span[data-selector="'+c+'"]'+d.tooltip_class)),"object"==typeof e?e:!1},selector:function(a){var b=a.attr("id"),c=a.attr(this.attr_name())||a.attr("data-selector");return(b&&b.length<1||!b)&&"string"!=typeof c&&(c=this.random_str(6),a.attr("data-selector",c).attr("aria-describedby",c)),b&&b.length>0?b:c},create:function(c){var d=this,e=a.extend({},this.settings,this.data_options(c)),f=this.settings.tip_template;"string"==typeof e.tip_template&&b.hasOwnProperty(e.tip_template)&&(f=b[e.tip_template]);var g=a(f(this.selector(c),a("
    ").html(c.attr("title")).html())),h=this.inheritable_classes(c);g.addClass(h).appendTo(e.append_to),Modernizr.touch&&(g.append(''+e.touch_close_text+""),g.on("touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip",function(){d.hide(c)})),c.removeAttr("title").attr("title","")},reposition:function(b,c,d){var e,f,g,h,i;if(c.css("visibility","hidden").show(),e=b.data("width"),f=c.children(".nub"),g=f.outerHeight(),h=f.outerHeight(),c.css(this.small()?{width:"100%"}:{width:e?e:"auto"}),i=function(a,b,c,d,e){return a.css({top:b?b:"auto",bottom:d?d:"auto",left:e?e:"auto",right:c?c:"auto"}).end()},i(c,b.offset().top+b.outerHeight()+10,"auto","auto",b.offset().left),this.small())i(c,b.offset().top+b.outerHeight()+10,"auto","auto",12.5,a(this.scope).width()),c.addClass("tip-override"),i(f,-g,"auto","auto",b.offset().left);else{var j=b.offset().left;Foundation.rtl&&(f.addClass("rtl"),j=b.offset().left+b.outerWidth()-c.outerWidth()),i(c,b.offset().top+b.outerHeight()+10,"auto","auto",j),c.removeClass("tip-override"),d&&d.indexOf("tip-top")>-1?(Foundation.rtl&&f.addClass("rtl"),i(c,b.offset().top-c.outerHeight(),"auto","auto",j).removeClass("tip-override")):d&&d.indexOf("tip-left")>-1?(i(c,b.offset().top+b.outerHeight()/2-c.outerHeight()/2,"auto","auto",b.offset().left-c.outerWidth()-g).removeClass("tip-override"),f.removeClass("rtl")):d&&d.indexOf("tip-right")>-1&&(i(c,b.offset().top+b.outerHeight()/2-c.outerHeight()/2,"auto","auto",b.offset().left+b.outerWidth()+g).removeClass("tip-override"),f.removeClass("rtl"))}c.css("visibility","visible").hide()},small:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},inheritable_classes:function(b){var c=a.extend({},this.settings,this.data_options(b)),d=["tip-top","tip-left","tip-bottom","tip-right","radius","round"].concat(c.additional_inheritable_classes),e=b.attr("class"),f=e?a.map(e.split(" "),function(b){return-1!==a.inArray(b,d)?b:void 0}).join(" "):"";return a.trim(f)},convert_to_touch:function(b){var c=this,d=c.getTip(b),e=a.extend({},c.settings,c.data_options(b));0===d.find(".tap-to-close").length&&(d.append(''+e.touch_close_text+""),d.on("click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose",function(){c.hide(b)})),b.data("tooltip-open-event-type","touch")},show:function(a){var b=this.getTip(a);"touch"==a.data("tooltip-open-event-type")&&this.convert_to_touch(a),this.reposition(a,b,a.attr("class")),a.addClass("open"),b.fadeIn(150)},hide:function(a){var b=this.getTip(a);b.fadeOut(150,function(){b.find(".tap-to-close").remove(),b.off("click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose"),a.removeClass("open")})},off:function(){var b=this;this.S(this.scope).off(".fndtn.tooltip"),this.S(this.settings.tooltip_class).each(function(c){a("["+b.attr_name()+"]").eq(c).attr("title",a(this).text())}).remove()},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c){"use strict";Foundation.libs.topbar={name:"topbar",version:"5.5.1",settings:{index:0,sticky_class:"sticky",custom_back_text:!0,back_text:"Back",mobile_show_parent_link:!0,is_hover:!0,scrolltop:!0,sticky_on:"all"},init:function(b,c,d){Foundation.inherit(this,"add_custom_rule register_media throttle");var e=this;e.register_media("topbar","foundation-mq-topbar"),this.bindings(c,d),e.S("["+this.attr_name()+"]",this.scope).each(function(){{var b=a(this),c=b.data(e.attr_name(!0)+"-init");e.S("section, .top-bar-section",this)}b.data("index",0);var d=b.parent();d.hasClass("fixed")||e.is_sticky(b,d,c)?(e.settings.sticky_class=c.sticky_class,e.settings.sticky_topbar=b,b.data("height",d.outerHeight()),b.data("stickyoffset",d.offset().top)):b.data("height",b.outerHeight()),c.assembled||e.assemble(b),c.is_hover?e.S(".has-dropdown",b).addClass("not-click"):e.S(".has-dropdown",b).removeClass("not-click"),e.add_custom_rule(".f-topbar-fixed { padding-top: "+b.data("height")+"px }"),d.hasClass("fixed")&&e.S("body").addClass("f-topbar-fixed")})},is_sticky:function(a,b,c){var d=b.hasClass(c.sticky_class),e=matchMedia(Foundation.media_queries.small).matches,f=matchMedia(Foundation.media_queries.medium).matches,g=matchMedia(Foundation.media_queries.large).matches;return d&&"all"===c.sticky_on?!0:d&&this.small()&&-1!==c.sticky_on.indexOf("small")&&e&&!f&&!g?!0:d&&this.medium()&&-1!==c.sticky_on.indexOf("medium")&&e&&f&&!g?!0:d&&this.large()&&-1!==c.sticky_on.indexOf("large")&&e&&f&&g?!0:d&&navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1},toggle:function(c){var d,e=this;d=c?e.S(c).closest("["+this.attr_name()+"]"):e.S("["+this.attr_name()+"]"); +var f=d.data(this.attr_name(!0)+"-init"),g=e.S("section, .top-bar-section",d);e.breakpoint()&&(e.rtl?(g.css({right:"0%"}),a(">.name",g).css({right:"100%"})):(g.css({left:"0%"}),a(">.name",g).css({left:"100%"})),e.S("li.moved",g).removeClass("moved"),d.data("index",0),d.toggleClass("expanded").css("height","")),f.scrolltop?d.hasClass("expanded")?d.parent().hasClass("fixed")&&(f.scrolltop?(d.parent().removeClass("fixed"),d.addClass("fixed"),e.S("body").removeClass("f-topbar-fixed"),b.scrollTo(0,0)):d.parent().removeClass("expanded")):d.hasClass("fixed")&&(d.parent().addClass("fixed"),d.removeClass("fixed"),e.S("body").addClass("f-topbar-fixed")):(e.is_sticky(d,d.parent(),f)&&d.parent().addClass("fixed"),d.parent().hasClass("fixed")&&(d.hasClass("expanded")?(d.addClass("fixed"),d.parent().addClass("expanded"),e.S("body").addClass("f-topbar-fixed")):(d.removeClass("fixed"),d.parent().removeClass("expanded"),e.update_sticky_positioning())))},timer:null,events:function(){var c=this,d=this.S;d(this.scope).off(".topbar").on("click.fndtn.topbar","["+this.attr_name()+"] .toggle-topbar",function(a){a.preventDefault(),c.toggle(this)}).on("click.fndtn.topbar",'.top-bar .top-bar-section li a[href^="#"],['+this.attr_name()+'] .top-bar-section li a[href^="#"]',function(){var b=a(this).closest("li");!c.breakpoint()||b.hasClass("back")||b.hasClass("has-dropdown")||c.toggle()}).on("click.fndtn.topbar","["+this.attr_name()+"] li.has-dropdown",function(b){var e=d(this),f=d(b.target),g=e.closest("["+c.attr_name()+"]"),h=g.data(c.attr_name(!0)+"-init");return f.data("revealId")?void c.toggle():void(c.breakpoint()||(!h.is_hover||Modernizr.touch)&&(b.stopImmediatePropagation(),e.hasClass("hover")?(e.removeClass("hover").find("li").removeClass("hover"),e.parents("li.hover").removeClass("hover")):(e.addClass("hover"),a(e).siblings().removeClass("hover"),"A"===f[0].nodeName&&f.parent().hasClass("has-dropdown")&&b.preventDefault())))}).on("click.fndtn.topbar","["+this.attr_name()+"] .has-dropdown>a",function(a){if(c.breakpoint()){a.preventDefault();var b=d(this),e=b.closest("["+c.attr_name()+"]"),f=e.find("section, .top-bar-section"),g=(b.next(".dropdown").outerHeight(),b.closest("li"));e.data("index",e.data("index")+1),g.addClass("moved"),c.rtl?(f.css({right:-(100*e.data("index"))+"%"}),f.find(">.name").css({right:100*e.data("index")+"%"})):(f.css({left:-(100*e.data("index"))+"%"}),f.find(">.name").css({left:100*e.data("index")+"%"})),e.css("height",b.siblings("ul").outerHeight(!0)+e.data("height"))}}),d(b).off(".topbar").on("resize.fndtn.topbar",c.throttle(function(){c.resize.call(c)},50)).trigger("resize").trigger("resize.fndtn.topbar").load(function(){d(this).trigger("resize.fndtn.topbar")}),d("body").off(".topbar").on("click.fndtn.topbar",function(a){var b=d(a.target).closest("li").closest("li.hover");b.length>0||d("["+c.attr_name()+"] li.hover").removeClass("hover")}),d(this.scope).on("click.fndtn.topbar","["+this.attr_name()+"] .has-dropdown .back",function(a){a.preventDefault();var b=d(this),e=b.closest("["+c.attr_name()+"]"),f=e.find("section, .top-bar-section"),g=(e.data(c.attr_name(!0)+"-init"),b.closest("li.moved")),h=g.parent();e.data("index",e.data("index")-1),c.rtl?(f.css({right:-(100*e.data("index"))+"%"}),f.find(">.name").css({right:100*e.data("index")+"%"})):(f.css({left:-(100*e.data("index"))+"%"}),f.find(">.name").css({left:100*e.data("index")+"%"})),0===e.data("index")?e.css("height",""):e.css("height",h.outerHeight(!0)+e.data("height")),setTimeout(function(){g.removeClass("moved")},300)}),d(this.scope).find(".dropdown a").focus(function(){a(this).parents(".has-dropdown").addClass("hover")}).blur(function(){a(this).parents(".has-dropdown").removeClass("hover")})},resize:function(){var a=this;a.S("["+this.attr_name()+"]").each(function(){var b,d=a.S(this),e=d.data(a.attr_name(!0)+"-init"),f=d.parent("."+a.settings.sticky_class);if(!a.breakpoint()){var g=d.hasClass("expanded");d.css("height","").removeClass("expanded").find("li").removeClass("hover"),g&&a.toggle(d)}a.is_sticky(d,f,e)&&(f.hasClass("fixed")?(f.removeClass("fixed"),b=f.offset().top,a.S(c.body).hasClass("f-topbar-fixed")&&(b-=d.data("height")),d.data("stickyoffset",b),f.addClass("fixed")):(b=f.offset().top,d.data("stickyoffset",b)))})},breakpoint:function(){return!matchMedia(Foundation.media_queries.topbar).matches},small:function(){return matchMedia(Foundation.media_queries.small).matches},medium:function(){return matchMedia(Foundation.media_queries.medium).matches},large:function(){return matchMedia(Foundation.media_queries.large).matches},assemble:function(b){var c=this,d=b.data(this.attr_name(!0)+"-init"),e=c.S("section, .top-bar-section",b);e.detach(),c.S(".has-dropdown>a",e).each(function(){var b,e=c.S(this),f=e.siblings(".dropdown"),g=e.attr("href");f.find(".title.back").length||(b=a(1==d.mobile_show_parent_link&&g?'
  2. ":'
  3. '),a("h5>a",b).html(1==d.custom_back_text?d.back_text:"« "+e.html()),f.prepend(b))}),e.appendTo(b),this.sticky(),this.assembled(b)},assembled:function(b){b.data(this.attr_name(!0),a.extend({},b.data(this.attr_name(!0)),{assembled:!0}))},height:function(b){var c=0,d=this;return a("> li",b).each(function(){c+=d.S(this).outerHeight(!0)}),c},sticky:function(){var a=this;this.S(b).on("scroll",function(){a.update_sticky_positioning()})},update_sticky_positioning:function(){var a="."+this.settings.sticky_class,c=this.S(b),d=this;if(d.settings.sticky_topbar&&d.is_sticky(this.settings.sticky_topbar,this.settings.sticky_topbar.parent(),this.settings)){var e=this.settings.sticky_topbar.data("stickyoffset");d.S(a).hasClass("expanded")||(c.scrollTop()>e?d.S(a).hasClass("fixed")||(d.S(a).addClass("fixed"),d.S("body").addClass("f-topbar-fixed")):c.scrollTop()<=e&&d.S(a).hasClass("fixed")&&(d.S(a).removeClass("fixed"),d.S("body").removeClass("f-topbar-fixed")))}},off:function(){this.S(this.scope).off(".fndtn.topbar"),this.S(b).off(".fndtn.topbar")},reflow:function(){}}}(jQuery,window,window.document); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.abide.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.abide.js new file mode 100644 index 00000000..9eefe326 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.abide.js @@ -0,0 +1,340 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.abide = { + name : 'abide', + + version : '5.5.1', + + settings : { + live_validate : true, + validate_on_blur : true, + focus_on_invalid : true, + error_labels : true, // labels with a for="inputId" will recieve an `error` class + error_class : 'error', + timeout : 1000, + patterns : { + alpha : /^[a-zA-Z]+$/, + alpha_numeric : /^[a-zA-Z0-9]+$/, + integer : /^[-+]?\d+$/, + number : /^[-+]?\d*(?:[\.\,]\d+)?$/, + + // amex, visa, diners + card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/, + cvv : /^([0-9]){3,4}$/, + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address + email : /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/, + + url : /^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, + // abc.de + domain : /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/, + + datetime : /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/, + // YYYY-MM-DD + date : /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/, + // HH:MM:SS + time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/, + dateISO : /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/, + // MM/DD/YYYY + month_day_year : /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/, + // DD/MM/YYYY + day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/, + + // #FFF or #FFFFFF + color : /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/ + }, + validators : { + equalTo : function (el, required, parent) { + var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value, + to = el.value, + valid = (from === to); + + return valid; + } + } + }, + + timer : null, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + form = self.S(scope).attr('novalidate', 'novalidate'), + settings = form.data(this.attr_name(true) + '-init') || {}; + + this.invalid_attr = this.add_namespace('data-invalid'); + + form + .off('.abide') + .on('submit.fndtn.abide validate.fndtn.abide', function (e) { + var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name())); + return self.validate(self.S(this).find('input, textarea, select').get(), e, is_ajax); + }) + .on('reset', function () { + return self.reset($(this)); + }) + .find('input, textarea, select') + .off('.abide') + .on('blur.fndtn.abide change.fndtn.abide', function (e) { + if (settings.validate_on_blur === true) { + self.validate([this], e); + } + }) + .on('keydown.fndtn.abide', function (e) { + if (settings.live_validate === true && e.which != 9) { + clearTimeout(self.timer); + self.timer = setTimeout(function () { + self.validate([this], e); + }.bind(this), settings.timeout); + } + }); + }, + + reset : function (form) { + form.removeAttr(this.invalid_attr); + $(this.invalid_attr, form).removeAttr(this.invalid_attr); + $('.' + this.settings.error_class, form).not('small').removeClass(this.settings.error_class); + }, + + validate : function (els, e, is_ajax) { + var validations = this.parse_patterns(els), + validation_count = validations.length, + form = this.S(els[0]).closest('form'), + submit_event = /submit/.test(e.type); + + // Has to count up to make sure the focus gets applied to the top error + for (var i = 0; i < validation_count; i++) { + if (!validations[i] && (submit_event || is_ajax)) { + if (this.settings.focus_on_invalid) { + els[i].focus(); + } + form.trigger('invalid').trigger('invalid.fndtn.abide'); + this.S(els[i]).closest('form').attr(this.invalid_attr, ''); + return false; + } + } + + if (submit_event || is_ajax) { + form.trigger('valid').trigger('valid.fndtn.abide'); + } + + form.removeAttr(this.invalid_attr); + + if (is_ajax) { + return false; + } + + return true; + }, + + parse_patterns : function (els) { + var i = els.length, + el_patterns = []; + + while (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'; + + 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]; + } + + if (this.settings.patterns.hasOwnProperty(type)) { + return [el, this.settings.patterns[type], required]; + } + + pattern = /.*/; + + return [el, pattern, required]; + }, + + // TODO: Break this up into smaller methods, getting hard to read. + check_validation_and_apply_styles : function (el_patterns) { + var i = el_patterns.length, + validations = [], + form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'), + settings = form.data(this.attr_name(true) + '-init') || {}; + while (i--) { + var el = el_patterns[i][0], + required = el_patterns[i][2], + value = el.value.trim(), + direct_parent = this.S(el).parent(), + validator = el.getAttribute(this.add_namespace('data-abide-validator')), + is_radio = el.type === 'radio', + is_checkbox = el.type === 'checkbox', + label = this.S('label[for="' + el.getAttribute('id') + '"]'), + valid_length = (required) ? (el.value.length > 0) : true, + el_validations = []; + + var parent, valid; + + // support old way to do equalTo validations + if (el.getAttribute(this.add_namespace('data-equalto'))) { validator = 'equalTo' } + + if (!direct_parent.is('label')) { + parent = direct_parent; + } else { + parent = direct_parent.parent(); + } + + if (validator) { + valid = this.settings.validators[validator].apply(this, [el, required, parent]); + el_validations.push(valid); + } + + if (is_radio && required) { + el_validations.push(this.valid_radio(el, required)); + } else if (is_checkbox && required) { + el_validations.push(this.valid_checkbox(el, required)); + } else { + + if (el_patterns[i][1].test(value) && valid_length || + !required && el.value.length < 1 || $(el).attr('disabled')) { + el_validations.push(true); + } else { + el_validations.push(false); + } + + el_validations = [el_validations.every(function (valid) {return valid;})]; + + if (el_validations[0]) { + this.S(el).removeAttr(this.invalid_attr); + el.setAttribute('aria-invalid', 'false'); + el.removeAttribute('aria-describedby'); + parent.removeClass(this.settings.error_class); + if (label.length > 0 && this.settings.error_labels) { + label.removeClass(this.settings.error_class).removeAttr('role'); + } + $(el).triggerHandler('valid'); + } else { + this.S(el).attr(this.invalid_attr, ''); + el.setAttribute('aria-invalid', 'true'); + + // Try to find the error associated with the input + var errorElem = parent.find('small.' + this.settings.error_class, 'span.' + this.settings.error_class); + var errorID = errorElem.length > 0 ? errorElem[0].id : ''; + if (errorID.length > 0) { + el.setAttribute('aria-describedby', errorID); + } + + // el.setAttribute('aria-describedby', $(el).find('.error')[0].id); + parent.addClass(this.settings.error_class); + if (label.length > 0 && this.settings.error_labels) { + label.addClass(this.settings.error_class).attr('role', 'alert'); + } + $(el).triggerHandler('invalid'); + } + } + validations.push(el_validations[0]); + } + validations = [validations.every(function (valid) {return valid;})]; + return validations; + }, + + valid_checkbox : function (el, required) { + var el = this.S(el), + valid = (el.is(':checked') || !required || el.get(0).getAttribute('disabled')); + + if (valid) { + el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class); + } else { + el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class); + } + + return valid; + }, + + valid_radio : function (el, required) { + var name = el.getAttribute('name'), + group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find("[name='" + name + "']"), + count = group.length, + valid = false, + disabled = false; + + // Has to count up to make sure the focus gets applied to the top error + for (var i=0; i < count; i++) { + if( group[i].getAttribute('disabled') ){ + disabled=true; + valid=true; + } else { + if (group[i].checked){ + valid = true; + } else { + if( disabled ){ + valid = false; + } + } + } + } + + // Has to count up to make sure the focus gets applied to the top error + for (var i = 0; i < count; i++) { + if (valid) { + this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class); + } else { + this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class); + } + } + + return valid; + }, + + valid_equal : function (el, required, parent) { + var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value, + to = el.value, + valid = (from === to); + + if (valid) { + this.S(el).removeAttr(this.invalid_attr); + parent.removeClass(this.settings.error_class); + if (label.length > 0 && settings.error_labels) { + label.removeClass(this.settings.error_class); + } + } else { + this.S(el).attr(this.invalid_attr, ''); + parent.addClass(this.settings.error_class); + if (label.length > 0 && settings.error_labels) { + label.addClass(this.settings.error_class); + } + } + + return valid; + }, + + valid_oneof : function (el, required, parent, doNotValidateOthers) { + var el = this.S(el), + others = this.S('[' + this.add_namespace('data-oneof') + ']'), + valid = others.filter(':checked').length > 0; + + if (valid) { + el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class); + } else { + el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class); + } + + if (!doNotValidateOthers) { + var _this = this; + others.each(function () { + _this.valid_oneof.call(_this, this, null, null, true); + }); + } + + return valid; + } + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.accordion.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.accordion.js new file mode 100644 index 00000000..483d8194 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.accordion.js @@ -0,0 +1,67 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.accordion = { + name : 'accordion', + + version : '5.5.1', + + settings : { + content_class : 'content', + active_class : 'active', + multi_expand : false, + toggleable : true, + callback : function () {} + }, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function () { + var self = this; + var S = this.S; + S(this.scope) + .off('.fndtn.accordion') + .on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) { + var accordion = S(this).closest('[' + self.attr_name() + ']'), + groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()), + settings = accordion.data(self.attr_name(true) + '-init') || self.settings, + target = S('#' + this.href.split('#')[1]), + aunts = $('> .accordion-navigation', accordion), + siblings = aunts.children('.' + settings.content_class), + active_content = siblings.filter('.' + settings.active_class); + + e.preventDefault(); + + if (accordion.attr(self.attr_name())) { + siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class); + aunts = aunts.add('[' + groupSelector + '] .accordion-navigation'); + } + + if (settings.toggleable && target.is(active_content)) { + target.parent('.accordion-navigation').toggleClass(settings.active_class, false); + target.toggleClass(settings.active_class, false); + settings.callback(target); + target.triggerHandler('toggled', [accordion]); + accordion.triggerHandler('toggled', [target]); + return; + } + + if (!settings.multi_expand) { + siblings.removeClass(settings.active_class); + aunts.removeClass(settings.active_class); + } + + target.addClass(settings.active_class).parent().addClass(settings.active_class); + settings.callback(target); + target.triggerHandler('toggled', [accordion]); + accordion.triggerHandler('toggled', [target]); + }); + }, + + off : function () {}, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.alert.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.alert.js new file mode 100644 index 00000000..763a22f6 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.alert.js @@ -0,0 +1,43 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.alert = { + name : 'alert', + + version : '5.5.1', + + settings : { + callback : function () {} + }, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function () { + var self = this, + S = this.S; + + $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) { + var alertBox = S(this).closest('[' + self.attr_name() + ']'), + settings = alertBox.data(self.attr_name(true) + '-init') || self.settings; + + e.preventDefault(); + if (Modernizr.csstransitions) { + alertBox.addClass('alert-close'); + alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) { + S(this).trigger('close').trigger('close.fndtn.alert').remove(); + settings.callback(); + }); + } else { + alertBox.fadeOut(300, function () { + S(this).trigger('close').trigger('close.fndtn.alert').remove(); + settings.callback(); + }); + } + }); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.clearing.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.clearing.js new file mode 100644 index 00000000..e7bd4582 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.clearing.js @@ -0,0 +1,556 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.clearing = { + name : 'clearing', + + version : '5.5.1', + + 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, div.clearing-blackout', + + // Default to the entire li element. + open_selectors : '', + + // Image will be skipped in carousel. + skip_selector : '', + + touch_label : '', + + // event initializers and locks + init : false, + locked : false + }, + + init : function (scope, method, options) { + var self = this; + Foundation.inherit(this, 'throttle image_loaded'); + + this.bindings(method, options); + + if (self.S(this.scope).is('[' + this.attr_name() + ']')) { + this.assemble(self.S('li', this.scope)); + } else { + self.S('[' + this.attr_name() + ']', this.scope).each(function () { + self.assemble(self.S('li', this)); + }); + } + }, + + events : function (scope) { + var self = this, + S = self.S, + $scroll_container = $('.scroll-container'); + + if ($scroll_container.length > 0) { + this.scope = $scroll_container; + } + + S(this.scope) + .off('.clearing') + .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors, + function (e, current, target) { + var current = current || S(this), + target = target || current, + next = current.next('li'), + settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'), + image = S(e.target); + + e.preventDefault(); + + if (!settings) { + self.init(); + settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-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 = S('img', target); + } + + // 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) { self.nav(e, 'next') }) + .on('click.fndtn.clearing', '.clearing-main-prev', + function (e) { self.nav(e, 'prev') }) + .on('click.fndtn.clearing', this.settings.close_selectors, + function (e) { Foundation.libs.clearing.close(e, this) }); + + $(document).on('keydown.fndtn.clearing', + function (e) { self.keydown(e) }); + + S(window).off('.clearing').on('resize.fndtn.clearing', + function () { self.resize() }); + + this.swipe_events(scope); + }, + + swipe_events : function (scope) { + var self = this, + S = self.S; + + S(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 + }; + + S(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 = S(this).data('swipe-transition'); + + if (typeof data === 'undefined') { + data = {}; + } + + data.delta_x = e.touches[0].pageX - data.start_page_x; + + if (Foundation.rtl) { + data.delta_x = -data.delta_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) { + S(this).data('swipe-transition', {}); + e.stopPropagation(); + }); + }, + + assemble : function ($li) { + var $el = $li.parent(); + + if ($el.parent().hasClass('carousel')) { + return; + } + + $el.after('
    '); + + var grid = $el.detach(), + grid_outerHTML = ''; + + if (grid[0] == null) { + return; + } else { + grid_outerHTML = grid[0].outerHTML; + } + + var holder = this.S('#foundationClearingHolder'), + settings = $el.data(this.attr_name(true) + '-init'), + data = { + grid : '', + viewing : settings.templates.viewing + }, + wrapper = '
    ' + data.viewing + + data.grid + '
    ', + touch_label = this.settings.touch_label; + + if (Modernizr.touch) { + wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end(); + } + + holder.after(wrapper).remove(); + }, + + open : function ($image, current, target) { + var self = this, + body = $(document.body), + root = target.closest('.clearing-assembled'), + container = self.S('div', root).first(), + visible_image = self.S('.visible-img', container), + image = self.S('img', visible_image).not($image), + label = self.S('.clearing-touch-label', container), + error = false; + + // Event to disable scrolling on touch devices when Clearing is activated + $('body').on('touchmove', function (e) { + e.preventDefault(); + }); + + image.error(function () { + error = true; + }); + + function startLoad() { + setTimeout(function () { + this.image_loaded(image, function () { + if (image.outerWidth() === 1 && !error) { + startLoad.call(this); + } else { + cb.call(this, image); + } + }.bind(this)); + }.bind(this), 100); + } + + function cb (image) { + var $image = $(image); + $image.css('visibility', 'visible'); + // toggle the gallery + body.css('overflow', 'hidden'); + root.addClass('clearing-blackout'); + container.addClass('clearing-container'); + visible_image.show(); + this.fix_height(target) + .caption(self.S('.clearing-caption', visible_image), self.S('img', target)) + .center_and_label(image, label) + .shift(current, target, function () { + target.closest('li').siblings().removeClass('visible'); + target.closest('li').addClass('visible'); + }); + visible_image.trigger('opened.fndtn.clearing') + } + + if (!this.locked()) { + visible_image.trigger('open.fndtn.clearing'); + // set the image to the selected thumbnail + image + .attr('src', this.load($image)) + .css('visibility', 'hidden'); + + startLoad.call(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))), + body = $(document.body), container, visible_image; + + if (el === e.target && root) { + body.css('overflow', ''); + container = $('div', root).first(); + visible_image = $('.visible-img', container); + visible_image.trigger('close.fndtn.clearing'); + this.settings.prev_index = 0; + $('ul[' + this.attr_name() + ']', root) + .attr('style', '').closest('.clearing-blackout') + .removeClass('clearing-blackout'); + container.removeClass('clearing-container'); + visible_image.hide(); + visible_image.trigger('closed.fndtn.clearing'); + } + + // Event to re-enable scrolling on touch devices + $('body').off('touchmove'); + + return false; + }, + + is_open : function (current) { + return current.parent().prop('style').length > 0; + }, + + keydown : function (e) { + var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'), + NEXT_KEY = this.rtl ? 37 : 39, + PREV_KEY = this.rtl ? 39 : 37, + ESC_KEY = 27; + + if (e.which === NEXT_KEY) { + this.go(clearing, 'next'); + } + if (e.which === PREV_KEY) { + this.go(clearing, 'prev'); + } + if (e.which === ESC_KEY) { + this.S('a.clearing-close').trigger('click').trigger('click.fndtn.clearing'); + } + }, + + nav : function (e, direction) { + var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout'); + + e.preventDefault(); + this.go(clearing, direction); + }, + + resize : function () { + var image = $('img', '.clearing-blackout .visible-img'), + label = $('.clearing-touch-label', '.clearing-blackout'); + + if (image.length) { + this.center_and_label(image, label); + image.trigger('resized.fndtn.clearing') + } + }, + + // visual adjustments + fix_height : function (target) { + var lis = target.parent().children(), + self = this; + + lis.each(function () { + var li = self.S(this), + image = li.find('img'); + + if (li.height() > image.outerHeight()) { + li.addClass('fix-height'); + } + }) + .closest('ul') + .width(lis.length * 100 + '%'); + + return this; + }, + + update_paddles : function (target) { + target = target.closest('li'); + var visible_image = target + .closest('.carousel') + .siblings('.visible-img'); + + if (target.next().length > 0) { + this.S('.clearing-main-next', visible_image).removeClass('disabled'); + } else { + this.S('.clearing-main-next', visible_image).addClass('disabled'); + } + + if (target.prev().length > 0) { + this.S('.clearing-main-prev', visible_image).removeClass('disabled'); + } else { + this.S('.clearing-main-prev', visible_image).addClass('disabled'); + } + }, + + center_and_label : function (target, label) { + if (!this.rtl && label.length > 0) { + label.css({ + marginLeft : -(label.outerWidth() / 2), + marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10 + }); + } else { + label.css({ + marginRight : -(label.outerWidth() / 2), + marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10, + left: 'auto', + right: '50%' + }); + } + return this; + }, + + // image loading and preloading + + load : function ($image) { + var href; + + if ($image[0].nodeName === 'A') { + href = $image.attr('href'); + } else { + href = $image.closest('a').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()); + }, + + img : function (img) { + if (img.length) { + var new_img = new Image(), + new_a = this.S('a', img); + + if (new_a.length) { + new_img.src = new_a.attr('href'); + } else { + new_img.src = this.S('img', img).attr('src'); + } + } + return this; + }, + + // image caption + + caption : function (container, $image) { + var caption = $image.attr('data-caption'); + + if (caption) { + container + .html(caption) + .show(); + } else { + container + .text('') + .hide(); + } + return this; + }, + + // directional methods + + go : function ($ul, direction) { + var current = this.S('.visible', $ul), + target = current[direction](); + + // Check for skip selector. + if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) { + target = target[direction](); + } + + if (target.length) { + this.S('img', target) + .trigger('click', [current, target]).trigger('click.fndtn.clearing', [current, target]) + .trigger('change.fndtn.clearing'); + } + }, + + shift : function (current, target, callback) { + var clearing = target.parent(), + old_index = this.settings.prev_index || target.index(), + direction = this.direction(clearing, current, target), + dir = this.rtl ? 'right' : 'left', + left = parseInt(clearing.css('left'), 10), + width = target.outerWidth(), + skip_shift; + + var dir_obj = {}; + + // we use jQuery animate instead of CSS transitions because we + // need a callback to unlock the next animation + // needs support for RTL ** + if (target.index() !== old_index && !/skip/.test(direction)) { + if (/left/.test(direction)) { + this.lock(); + dir_obj[dir] = left + width; + clearing.animate(dir_obj, 300, this.unlock()); + } else if (/right/.test(direction)) { + this.lock(); + dir_obj[dir] = left - width; + clearing.animate(dir_obj, 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) { + dir_obj[dir] = -(skip_shift * width); + clearing.animate(dir_obj, 300, this.unlock()); + } else { + dir_obj[dir] = 0; + clearing.animate(dir_obj, 300, this.unlock()); + } + } + + callback(); + }, + + direction : function ($el, current, target) { + var lis = this.S('li', $el), + li_width = lis.outerWidth() + (lis.outerWidth() / 4), + up_count = Math.floor(this.S('.clearing-container').outerWidth() / 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; + }, + + off : function () { + this.S(this.scope).off('.fndtn.clearing'); + this.S(window).off('.fndtn.clearing'); + }, + + reflow : function () { + this.init(); + } + }; + +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.dropdown.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.dropdown.js new file mode 100644 index 00000000..4fa8b313 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.dropdown.js @@ -0,0 +1,448 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.dropdown = { + name : 'dropdown', + + version : '5.5.1', + + settings : { + active_class : 'open', + disabled_class : 'disabled', + mega_class : 'mega', + align : 'bottom', + is_hover : false, + hover_timeout : 150, + opened : function () {}, + closed : function () {} + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + + $.extend(true, this.settings, method, options); + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + S = self.S; + + S(this.scope) + .off('.dropdown') + .on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) { + var settings = S(this).data(self.attr_name(true) + '-init') || self.settings; + if (!settings.is_hover || Modernizr.touch) { + e.preventDefault(); + if (S(this).parent('[data-reveal-id]')) { + e.stopPropagation(); + } + self.toggle($(this)); + } + }) + .on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) { + var $this = S(this), + dropdown, + target; + + clearTimeout(self.timeout); + + if ($this.data(self.data_attr())) { + dropdown = S('#' + $this.data(self.data_attr())); + target = $this; + } else { + dropdown = $this; + target = S('[' + self.attr_name() + '="' + dropdown.attr('id') + '"]'); + } + + var settings = target.data(self.attr_name(true) + '-init') || self.settings; + + if (S(e.currentTarget).data(self.data_attr()) && settings.is_hover) { + self.closeall.call(self); + } + + if (settings.is_hover) { + self.open.apply(self, [dropdown, target]); + } + }) + .on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) { + var $this = S(this); + var settings; + + if ($this.data(self.data_attr())) { + settings = $this.data(self.data_attr(true) + '-init') || self.settings; + } else { + var target = S('[' + self.attr_name() + '="' + S(this).attr('id') + '"]'), + settings = target.data(self.attr_name(true) + '-init') || self.settings; + } + + self.timeout = setTimeout(function () { + if ($this.data(self.data_attr())) { + if (settings.is_hover) { + self.close.call(self, S('#' + $this.data(self.data_attr()))); + } + } else { + if (settings.is_hover) { + self.close.call(self, $this); + } + } + }.bind(this), settings.hover_timeout); + }) + .on('click.fndtn.dropdown', function (e) { + var parent = S(e.target).closest('[' + self.attr_name() + '-content]'); + var links = parent.find('a'); + + if (links.length > 0 && parent.attr('aria-autoclose') !== 'false') { + self.close.call(self, S('[' + self.attr_name() + '-content]')); + } + + if (e.target !== document && !$.contains(document.documentElement, e.target)) { + return; + } + + if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) { + return; + } + + if (!(S(e.target).data('revealId')) && + (parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') || + $.contains(parent.first()[0], e.target)))) { + e.stopPropagation(); + return; + } + + self.close.call(self, S('[' + self.attr_name() + '-content]')); + }) + .on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () { + self.settings.opened.call(this); + }) + .on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () { + self.settings.closed.call(this); + }); + + S(window) + .off('.dropdown') + .on('resize.fndtn.dropdown', self.throttle(function () { + self.resize.call(self); + }, 50)); + + this.resize(); + }, + + close : function (dropdown) { + var self = this; + dropdown.each(function () { + var original_target = $('[' + self.attr_name() + '=' + dropdown[0].id + ']') || $('aria-controls=' + dropdown[0].id + ']'); + original_target.attr('aria-expanded', 'false'); + if (self.S(this).hasClass(self.settings.active_class)) { + self.S(this) + .css(Foundation.rtl ? 'right' : 'left', '-99999px') + .attr('aria-hidden', 'true') + .removeClass(self.settings.active_class) + .prev('[' + self.attr_name() + ']') + .removeClass(self.settings.active_class) + .removeData('target'); + + self.S(this).trigger('closed').trigger('closed.fndtn.dropdown', [dropdown]); + } + }); + dropdown.removeClass('f-open-' + this.attr_name(true)); + }, + + closeall : function () { + var self = this; + $.each(self.S('.f-open-' + this.attr_name(true)), function () { + self.close.call(self, self.S(this)); + }); + }, + + open : function (dropdown, target) { + this + .css(dropdown + .addClass(this.settings.active_class), target); + dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class); + dropdown.data('target', target.get(0)).trigger('opened').trigger('opened.fndtn.dropdown', [dropdown, target]); + dropdown.attr('aria-hidden', 'false'); + target.attr('aria-expanded', 'true'); + dropdown.focus(); + dropdown.addClass('f-open-' + this.attr_name(true)); + }, + + data_attr : function () { + if (this.namespace.length > 0) { + return this.namespace + '-' + this.name; + } + + return this.name; + }, + + toggle : function (target) { + if (target.hasClass(this.settings.disabled_class)) { + return; + } + var dropdown = this.S('#' + target.data(this.data_attr())); + if (dropdown.length === 0) { + // No dropdown found, not continuing + return; + } + + this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown)); + + if (dropdown.hasClass(this.settings.active_class)) { + this.close.call(this, dropdown); + if (dropdown.data('target') !== target.get(0)) { + this.open.call(this, dropdown, target); + } + } else { + this.open.call(this, dropdown, target); + } + }, + + resize : function () { + var dropdown = this.S('[' + this.attr_name() + '-content].open'); + var target = $(dropdown.data("target")); + + if (dropdown.length && target.length) { + this.css(dropdown, target); + } + }, + + css : function (dropdown, target) { + var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8), + settings = target.data(this.attr_name(true) + '-init') || this.settings; + + this.clear_idx(); + + if (this.small()) { + var p = this.dirs.bottom.call(dropdown, target, settings); + + dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({ + position : 'absolute', + width : '95%', + 'max-width' : 'none', + top : p.top + }); + + dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset); + } else { + + this.style(dropdown, target, settings); + } + + return dropdown; + }, + + style : function (dropdown, target, settings) { + var css = $.extend({position : 'absolute'}, + this.dirs[settings.align].call(dropdown, target, settings)); + + dropdown.attr('style', '').css(css); + }, + + // return CSS property object + // `this` is the dropdown + dirs : { + // Calculate target offset + _base : function (t) { + var o_p = this.offsetParent(), + o = o_p.offset(), + p = t.offset(); + + p.top -= o.top; + p.left -= o.left; + + //set some flags on the p object to pass along + p.missRight = false; + p.missTop = false; + p.missLeft = false; + p.leftRightFlag = false; + + //lets see if the panel will be off the screen + //get the actual width of the page and store it + var actualBodyWidth; + if (document.getElementsByClassName('row')[0]) { + actualBodyWidth = document.getElementsByClassName('row')[0].clientWidth; + } else { + actualBodyWidth = window.outerWidth; + } + + var actualMarginWidth = (window.outerWidth - actualBodyWidth) / 2; + var actualBoundary = actualBodyWidth; + + if (!this.hasClass('mega')) { + //miss top + if (t.offset().top <= this.outerHeight()) { + p.missTop = true; + actualBoundary = window.outerWidth - actualMarginWidth; + p.leftRightFlag = true; + } + + //miss right + if (t.offset().left + this.outerWidth() > t.offset().left + actualMarginWidth && t.offset().left - actualMarginWidth > this.outerWidth()) { + p.missRight = true; + p.missLeft = false; + } + + //miss left + if (t.offset().left - this.outerWidth() <= 0) { + p.missLeft = true; + p.missRight = false; + } + } + + return p; + }, + + top : function (t, s) { + var self = Foundation.libs.dropdown, + p = self.dirs._base.call(this, t); + + this.addClass('drop-top'); + + if (p.missTop == true) { + p.top = p.top + t.outerHeight() + this.outerHeight(); + this.removeClass('drop-top'); + } + + if (p.missRight == true) { + p.left = p.left - this.outerWidth() + t.outerWidth(); + } + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this, t, s, p); + } + + if (Foundation.rtl) { + return {left : p.left - this.outerWidth() + t.outerWidth(), + top : p.top - this.outerHeight()}; + } + + return {left : p.left, top : p.top - this.outerHeight()}; + }, + + bottom : function (t, s) { + var self = Foundation.libs.dropdown, + p = self.dirs._base.call(this, t); + + if (p.missRight == true) { + p.left = p.left - this.outerWidth() + t.outerWidth(); + } + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this, t, s, p); + } + + if (self.rtl) { + return {left : p.left - this.outerWidth() + t.outerWidth(), top : p.top + t.outerHeight()}; + } + + return {left : p.left, top : p.top + t.outerHeight()}; + }, + + left : function (t, s) { + var p = Foundation.libs.dropdown.dirs._base.call(this, t); + + this.addClass('drop-left'); + + if (p.missLeft == true) { + p.left = p.left + this.outerWidth(); + p.top = p.top + t.outerHeight(); + this.removeClass('drop-left'); + } + + return {left : p.left - this.outerWidth(), top : p.top}; + }, + + right : function (t, s) { + var p = Foundation.libs.dropdown.dirs._base.call(this, t); + + this.addClass('drop-right'); + + if (p.missRight == true) { + p.left = p.left - this.outerWidth(); + p.top = p.top + t.outerHeight(); + this.removeClass('drop-right'); + } else { + p.triggeredRight = true; + } + + var self = Foundation.libs.dropdown; + + if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) { + self.adjust_pip(this, t, s, p); + } + + return {left : p.left + t.outerWidth(), top : p.top}; + } + }, + + // Insert rule to style psuedo elements + adjust_pip : function (dropdown, target, settings, position) { + var sheet = Foundation.stylesheet, + pip_offset_base = 8; + + if (dropdown.hasClass(settings.mega_class)) { + pip_offset_base = position.left + (target.outerWidth() / 2) - 8; + } else if (this.small()) { + pip_offset_base += position.left - 8; + } + + this.rule_idx = sheet.cssRules.length; + + //default + var sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left: ' + pip_offset_base + 'px;', + css_after = 'left: ' + (pip_offset_base - 1) + 'px;'; + + if (position.missRight == true) { + pip_offset_base = dropdown.outerWidth() - 23; + sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left: ' + pip_offset_base + 'px;', + css_after = 'left: ' + (pip_offset_base - 1) + 'px;'; + } + + //just a case where right is fired, but its not missing right + if (position.triggeredRight == true) { + sel_before = '.f-dropdown.open:before', + sel_after = '.f-dropdown.open:after', + css_before = 'left:-12px;', + css_after = 'left:-14px;'; + } + + if (sheet.insertRule) { + sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx); + sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1); + } else { + sheet.addRule(sel_before, css_before, this.rule_idx); + sheet.addRule(sel_after, css_after, this.rule_idx + 1); + } + }, + + // Remove old dropdown rule index + clear_idx : function () { + var sheet = Foundation.stylesheet; + + if (typeof this.rule_idx !== 'undefined') { + sheet.deleteRule(this.rule_idx); + sheet.deleteRule(this.rule_idx); + delete this.rule_idx; + } + }, + + small : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + off : function () { + this.S(this.scope).off('.fndtn.dropdown'); + this.S('html, body').off('.fndtn.dropdown'); + this.S(window).off('.fndtn.dropdown'); + this.S('[data-dropdown-content]').off('.fndtn.dropdown'); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.equalizer.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.equalizer.js new file mode 100644 index 00000000..dd912a75 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.equalizer.js @@ -0,0 +1,77 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.equalizer = { + name : 'equalizer', + + version : '5.5.1', + + settings : { + use_tallest : true, + before_height_change : $.noop, + after_height_change : $.noop, + equalize_on_stack : false + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'image_loaded'); + this.bindings(method, options); + this.reflow(); + }, + + events : function () { + this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) { + this.reflow(); + }.bind(this)); + }, + + equalize : function (equalizer) { + var isStacked = false, + vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'), + settings = equalizer.data(this.attr_name(true) + '-init'); + + if (vals.length === 0) { + return; + } + var firstTopOffset = vals.first().offset().top; + settings.before_height_change(); + equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer'); + vals.height('inherit'); + vals.each(function () { + var el = $(this); + if (el.offset().top !== firstTopOffset) { + isStacked = true; + } + }); + + if (settings.equalize_on_stack === false) { + if (isStacked) { + return; + } + }; + + var heights = vals.map(function () { return $(this).outerHeight(false) }).get(); + + if (settings.use_tallest) { + var max = Math.max.apply(null, heights); + vals.css('height', max); + } else { + var min = Math.min.apply(null, heights); + vals.css('height', min); + } + settings.after_height_change(); + equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer'); + }, + + reflow : function () { + var self = this; + + this.S('[' + this.attr_name() + ']', this.scope).each(function () { + var $eq_target = $(this); + self.image_loaded(self.S('img', this), function () { + self.equalize($eq_target) + }); + }); + } + }; +})(jQuery, window, window.document); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.interchange.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.interchange.js new file mode 100644 index 00000000..9162a4c4 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.interchange.js @@ -0,0 +1,354 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.interchange = { + name : 'interchange', + + version : '5.5.1', + + cache : {}, + + images_loaded : false, + nodes_loaded : false, + + settings : { + load_attr : 'interchange', + + named_queries : { + 'default' : 'only screen', + 'small' : Foundation.media_queries['small'], + 'small-only' : Foundation.media_queries['small-only'], + 'medium' : Foundation.media_queries['medium'], + 'medium-only' : Foundation.media_queries['medium-only'], + 'large' : Foundation.media_queries['large'], + 'large-only' : Foundation.media_queries['large-only'], + 'xlarge' : Foundation.media_queries['xlarge'], + 'xlarge-only' : Foundation.media_queries['xlarge-only'], + 'xxlarge' : Foundation.media_queries['xxlarge'], + '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, trigger) { + // The trigger argument, if called within the directive, fires + // an event named after the directive on the element, passing + // any parameters along to the event that you pass to trigger. + // + // ex. trigger(), trigger([a, b, c]), or trigger(a, b, c) + // + // This allows you to bind a callback like so: + // $('#interchangeContainer').on('replace', function (e, a, b, c) { + // console.log($(this).html(), a, b, c); + // }); + + 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 trigger(el[0].src); + } + var last_path = el.data(this.data_attr + '-last-path'), + self = this; + + if (last_path == path) { + return; + } + + if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) { + $(el).css('background-image', 'url(' + path + ')'); + el.data('interchange-last-path', path); + return trigger(path); + } + + return $.get(path, function (response) { + el.html(response); + el.data(self.data_attr + '-last-path', path); + trigger(); + }); + + } + } + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle random_str'); + + this.data_attr = this.set_data_attr(); + $.extend(true, this.settings, method, options); + this.bindings(method, options); + this.load('images'); + this.load('nodes'); + }, + + get_media_hash : function () { + var mediaHash = ''; + for (var queryName in this.settings.named_queries ) { + mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString(); + } + return mediaHash; + }, + + events : function () { + var self = this, prevMediaHash; + + $(window) + .off('.interchange') + .on('resize.fndtn.interchange', self.throttle(function () { + var currMediaHash = self.get_media_hash(); + if (currMediaHash !== prevMediaHash) { + self.resize(); + } + prevMediaHash = currMediaHash; + }, 50)); + + return this; + }, + + resize : function () { + var cache = this.cache; + + if (!this.images_loaded || !this.nodes_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]].call(this, passed.el, passed.scenario[0], (function (passed) { + if (arguments[0] instanceof Array) { + var args = arguments[0]; + } else { + var args = Array.prototype.slice.call(arguments, 0); + } + + return function() { + passed.el.trigger(passed.scenario[1], args); + } + }(passed))); + } + } + } + + }, + + results : function (uuid, scenarios) { + var count = scenarios.length; + + if (count > 0) { + var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]'); + + while (count--) { + var mq, rule = scenarios[count][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[count]}; + } + } + } + + return false; + }, + + load : function (type, force_update) { + if (typeof this['cached_' + type] === 'undefined' || force_update) { + this['update_' + type](); + } + + return this['cached_' + type]; + }, + + update_images : function () { + var images = this.S('img[' + this.data_attr + ']'), + count = images.length, + i = count, + loaded_count = 0, + data_attr = this.data_attr; + + this.cache = {}; + this.cached_images = []; + this.images_loaded = (count === 0); + + while (i--) { + loaded_count++; + if (images[i]) { + var str = images[i].getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_images.push(images[i]); + } + } + + if (loaded_count === count) { + this.images_loaded = true; + this.enhance('images'); + } + } + + return this; + }, + + update_nodes : function () { + var nodes = this.S('[' + this.data_attr + ']').not('img'), + count = nodes.length, + i = count, + loaded_count = 0, + data_attr = this.data_attr; + + this.cached_nodes = []; + this.nodes_loaded = (count === 0); + + while (i--) { + loaded_count++; + var str = nodes[i].getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_nodes.push(nodes[i]); + } + + if (loaded_count === count) { + this.nodes_loaded = true; + this.enhance('nodes'); + } + } + + return this; + }, + + enhance : function (type) { + var i = this['cached_' + type].length; + + while (i--) { + this.object($(this['cached_' + type][i])); + } + + return $(window).trigger('resize').trigger('resize.fndtn.interchange'); + }, + + convert_directive : function (directive) { + + var trimmed = this.trim(directive); + + if (trimmed.length > 0) { + return trimmed; + } + + return 'replace'; + }, + + parse_scenario : function (scenario) { + // This logic had to be made more complex since some users were using commas in the url path + // So we cannot simply just split on a comma + var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/), + media_query = scenario[1]; + + if (directive_match) { + var path = directive_match[1], + directive = directive_match[2]; + } else { + var cached_split = scenario[0].split(/,\s*$/), + path = cached_split[0], + directive = ''; + } + + return [this.trim(path), this.convert_directive(directive), this.trim(media_query)]; + }, + + object : function (el) { + var raw_arr = this.parse_data_attr(el), + scenarios = [], + i = raw_arr.length; + + if (i > 0) { + while (i--) { + var split = raw_arr[i].split(/\(([^\)]*?)(\))$/); + + if (split.length > 1) { + var params = this.parse_scenario(split); + scenarios.push(params); + } + } + } + + return this.store(el, scenarios); + }, + + store : function (el, scenarios) { + var uuid = this.random_str(), + current_uuid = el.data(this.add_namespace('uuid', true)); + + if (this.cache[current_uuid]) { + return this.cache[current_uuid]; + } + + el.attr(this.add_namespace('data-uuid'), uuid); + + return this.cache[uuid] = scenarios; + }, + + trim : function (str) { + + if (typeof str === 'string') { + return $.trim(str); + } + + return str; + }, + + set_data_attr : function (init) { + if (init) { + if (this.namespace.length > 0) { + return this.namespace + '-' + this.settings.load_attr; + } + + return this.settings.load_attr; + } + + if (this.namespace.length > 0) { + return 'data-' + this.namespace + '-' + this.settings.load_attr; + } + + return 'data-' + this.settings.load_attr; + }, + + parse_data_attr : function (el) { + var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/), + i = raw.length, + output = []; + + while (i--) { + if (raw[i].replace(/[\W\d]+/, '').length > 4) { + output.push(raw[i]); + } + } + + return output; + }, + + reflow : function () { + this.load('images', true); + this.load('nodes', true); + } + + }; + +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.joyride.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.joyride.js new file mode 100644 index 00000000..7b259c37 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.joyride.js @@ -0,0 +1,932 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + var Modernizr = Modernizr || false; + + Foundation.libs.joyride = { + name : 'joyride', + + version : '5.5.1', + + defaults : { + expose : false, // turn on or off the expose feature + modal : true, // Whether to cover page with modal during the tour + keyboard : true, // enable left, right and esc keystrokes + tip_location : 'bottom', // 'top' or 'bottom' in relation to parent + nub_position : 'auto', // override on a per tooltip bases + scroll_speed : 1500, // Page scrolling speed in milliseconds, 0 = no scroll animation + scroll_animation : 'linear', // supports 'swing' and 'linear', extend with jQuery UI. + timer : 0, // 0 = no timer , all other numbers = timer in milliseconds + start_timer_on_click : true, // true or false - true requires clicking the first button start the timer + start_offset : 0, // the index of the tooltip you want to start on (index of the li) + next_button : true, // true or false to control whether a next button is used + prev_button : true, // true or false to control whether a prev button is used + tip_animation : 'fade', // 'pop' or 'fade' in each tip + pause_after : [], // array of indexes where to pause the tour after + exposed : [], // array of expose elements + tip_animation_fade_speed : 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition + cookie_monster : false, // true or false to control whether cookies are used + cookie_name : 'joyride', // Name the cookie you'll use + cookie_domain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com' + cookie_expires : 365, // set when you would like the cookie to expire. + tip_container : 'body', // Where will the tip be attached + abort_on_close : true, // When true, the close event will not fire any callback + tip_location_patterns : { + top : ['bottom'], + bottom : [], // bottom should not need to be repositioned + left : ['right', 'top', 'bottom'], + right : ['left', 'top', 'bottom'] + }, + post_ride_callback : function () {}, // A method to call once the tour closes (canceled or complete) + post_step_callback : function () {}, // A method to call after each step + pre_step_callback : function () {}, // A method to call before each step + pre_ride_callback : function () {}, // A method to call before the tour starts (passed index, tip, and cloned exposed element) + post_expose_callback : function () {}, // A method to call after an element has been exposed + template : { // HTML segments for tip layout + link : '×', + timer : '
    ', + tip : '
    ', + wrapper : '
    ', + button : '', + prev_button : '', + modal : '
    ', + expose : '
    ', + expose_cover : '
    ' + }, + expose_add_class : '' // One or more space-separated class names to be added to exposed element + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle random_str'); + + this.settings = this.settings || $.extend({}, this.defaults, (options || method)); + + this.bindings(method, options) + }, + + go_next : function () { + 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(); + } + }, + + go_prev : function () { + if (this.settings.$li.prev().length < 1) { + // Do nothing if there are no prev element + } else if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + this.hide(); + this.show(null, true); + this.startTimer(); + } else { + this.hide(); + this.show(null, true); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .off('.joyride') + .on('click.fndtn.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) { + e.preventDefault(); + this.go_next() + }.bind(this)) + .on('click.fndtn.joyride', '.joyride-prev-tip', function (e) { + e.preventDefault(); + this.go_prev(); + }.bind(this)) + + .on('click.fndtn.joyride', '.joyride-close-tip', function (e) { + e.preventDefault(); + this.end(this.settings.abort_on_close); + }.bind(this)) + + .on('keyup.fndtn.joyride', function (e) { + // Don't do anything if keystrokes are disabled + // or if the joyride is not being shown + if (!this.settings.keyboard || !this.settings.riding) { + return; + } + + switch (e.which) { + case 39: // right arrow + e.preventDefault(); + this.go_next(); + break; + case 37: // left arrow + e.preventDefault(); + this.go_prev(); + break; + case 27: // escape + e.preventDefault(); + this.end(this.settings.abort_on_close); + } + }.bind(this)); + + $(window) + .off('.joyride') + .on('resize.fndtn.joyride', self.throttle(function () { + if ($('[' + self.attr_name() + ']').length > 0 && self.settings.$next_tip && self.settings.riding) { + 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); + } + } + }, 100)); + }, + + start : function () { + var self = this, + $this = $('[' + this.attr_name() + ']', this.scope), + integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'], + int_settings_count = integer_settings.length; + + if (!$this.length > 0) { + return; + } + + if (!this.settings.init) { + this.events(); + } + + this.settings = $this.data(this.attr_name(true) + '-init'); + + // non configureable settings + this.settings.$content_el = $this; + this.settings.$body = $(this.settings.tip_container); + this.settings.body_offset = $(this.settings.tip_container).position(); + this.settings.$tip_content = this.settings.$content_el.find('> li'); + this.settings.paused = false; + this.settings.attempts = 0; + this.settings.riding = true; + + // can we create cookies? + if (typeof $.cookie !== 'function') { + this.settings.cookie_monster = false; + } + + // generate the tips and insert into dom. + if (!this.settings.cookie_monster || this.settings.cookie_monster && !$.cookie(this.settings.cookie_name)) { + this.settings.$tip_content.each(function (index) { + var $this = $(this); + this.settings = $.extend({}, self.defaults, self.data_options($this)); + + // Make sure that settings parsed from data_options are integers where necessary + var i = int_settings_count; + while (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.start_timer_on_click && 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.prev_button_text(opts.prev_button_text, opts.index) + + this.button_text(opts.button_text) + + this.settings.template.link + + this.timer_instance(opts.index); + + $blank.append($(this.settings.template.wrapper)); + $blank.first().attr(this.add_namespace('data-index'), opts.index); + $('.joyride-content-wrapper', $blank).append(content); + + return $blank[0]; + }, + + timer_instance : function (index) { + var txt; + + if ((index === 0 && this.settings.start_timer_on_click && this.settings.timer > 0) || this.settings.timer === 0) { + txt = ''; + } else { + txt = $(this.settings.template.timer)[0].outerHTML; + } + return txt; + }, + + button_text : function (txt) { + if (this.settings.tip_settings.next_button) { + txt = $.trim(txt) || 'Next'; + txt = $(this.settings.template.button).append(txt)[0].outerHTML; + } else { + txt = ''; + } + return txt; + }, + + prev_button_text : function (txt, idx) { + if (this.settings.tip_settings.prev_button) { + txt = $.trim(txt) || 'Previous'; + + // Add the disabled class to the button if it's the first element + if (idx == 0) { + txt = $(this.settings.template.prev_button).append(txt).addClass('disabled')[0].outerHTML; + } else { + txt = $(this.settings.template.prev_button).append(txt)[0].outerHTML; + } + } else { + txt = ''; + } + return txt; + }, + + create : function (opts) { + this.settings.tip_settings = $.extend({}, this.settings, this.data_options(opts.$li)); + var buttonText = opts.$li.attr(this.add_namespace('data-button')) || opts.$li.attr(this.add_namespace('data-text')), + prevButtonText = opts.$li.attr(this.add_namespace('data-button-prev')) || opts.$li.attr(this.add_namespace('data-prev-text')), + tipClass = opts.$li.attr('class'), + $tip_content = $(this.tip_template({ + tip_class : tipClass, + index : opts.index, + button_text : buttonText, + prev_button_text : prevButtonText, + li : opts.$li + })); + + $(this.settings.tip_container).append($tip_content); + }, + + show : function (init, is_prev) { + var $timer = null; + + // are we paused? + if (this.settings.$li === undefined || ($.inArray(this.settings.$li.index(), this.settings.pause_after) === -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, is_prev); + } + + this.settings.attempts = 0; + + if (this.settings.$li.length && this.settings.$target.length > 0) { + if (init) { //run when we first start + this.settings.pre_ride_callback(this.settings.$li.index(), this.settings.$next_tip); + if (this.settings.modal) { + this.show_modal(); + } + } + + this.settings.pre_step_callback(this.settings.$li.index(), this.settings.$next_tip); + + if (this.settings.modal && this.settings.expose) { + this.expose(); + } + + this.settings.tip_settings = $.extend({}, this.settings, this.data_options(this.settings.$li)); + + this.settings.timer = parseInt(this.settings.timer, 10); + + this.settings.tip_settings.tip_location_pattern = this.settings.tip_location_patterns[this.settings.tip_settings.tip_location]; + + // scroll and hide bg if not modal + if (!/body/i.test(this.settings.$target.selector)) { + var joyridemodalbg = $('.joyride-modal-bg'); + if (/pop/i.test(this.settings.tipAnimation)) { + joyridemodalbg.hide(); + } else { + joyridemodalbg.fadeOut(this.settings.tipAnimationFadeSpeed); + } + 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.tip_animation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip.show(); + + setTimeout(function () { + $timer.animate({ + width : $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tip_animation_fade_speed); + + } else { + this.settings.$next_tip.show(); + + } + + } else if (/fade/i.test(this.settings.tip_animation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip + .fadeIn(this.settings.tip_animation_fade_speed) + .show(); + + setTimeout(function () { + $timer.animate({ + width : $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tip_animation_fade_speed); + + } else { + this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed); + } + } + + this.settings.$current_tip = this.settings.$next_tip; + + // skip non-existant targets + } else if (this.settings.$li && this.settings.$target.length < 1) { + + this.show(init, is_prev); + + } else { + + this.end(); + + } + } else { + + this.settings.paused = true; + + } + + }, + + is_phone : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + 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.post_step_callback(this.settings.$li.index(), + this.settings.$current_tip); + }, + + set_li : function (init, is_prev) { + if (init) { + this.settings.$li = this.settings.$tip_content.eq(this.settings.start_offset); + this.set_next_tip(); + this.settings.$current_tip = this.settings.$next_tip; + } else { + if (is_prev) { + this.settings.$li = this.settings.$li.prev(); + } 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').eq(this.settings.$li.index()); + this.settings.$next_tip.data('closed', ''); + }, + + set_target : function () { + var cl = this.settings.$li.attr(this.add_namespace('data-class')), + id = this.settings.$li.attr(this.add_namespace('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.settings.$next_tip.outerHeight()); + + if (tipOffset != 0) { + $('html, body').stop().animate({ + scrollTop : tipOffset + }, this.settings.scroll_speed, 'swing'); + } + }, + + paused : function () { + return ($.inArray((this.settings.$li.index() + 1), this.settings.pause_after) === -1); + }, + + restart : function () { + this.hide(); + this.settings.$li = undefined; + this.show('init'); + }, + + pos_default : function (init) { + var $nub = this.settings.$next_tip.find('.joyride-nub'), + nub_width = Math.ceil($nub.outerWidth() / 2), + nub_height = Math.ceil($nub.outerHeight() / 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 (!/body/i.test(this.settings.$target.selector)) { + var topAdjustment = this.settings.tip_settings.tipAdjustmentY ? parseInt(this.settings.tip_settings.tipAdjustmentY) : 0, + leftAdjustment = this.settings.tip_settings.tipAdjustmentX ? parseInt(this.settings.tip_settings.tipAdjustmentX) : 0; + + if (this.bottom()) { + if (this.rtl) { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment), + left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth() + leftAdjustment}); + } else { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment), + left : this.settings.$target.offset().left + leftAdjustment}); + } + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'top'); + + } else if (this.top()) { + if (this.rtl) { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment), + left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth()}); + } else { + this.settings.$next_tip.css({ + top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment), + left : this.settings.$target.offset().left + leftAdjustment}); + } + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'bottom'); + + } else if (this.right()) { + + this.settings.$next_tip.css({ + top : this.settings.$target.offset().top + topAdjustment, + left : (this.settings.$target.outerWidth() + this.settings.$target.offset().left + nub_width + leftAdjustment)}); + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'left'); + + } else if (this.left()) { + + this.settings.$next_tip.css({ + top : this.settings.$target.offset().top + topAdjustment, + left : (this.settings.$target.offset().left - this.settings.$next_tip.outerWidth() - nub_width + leftAdjustment)}); + + this.nub_position($nub, this.settings.tip_settings.nub_position, 'right'); + + } + + if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tip_settings.tip_location_pattern.length) { + + $nub.removeClass('bottom') + .removeClass('top') + .removeClass('right') + .removeClass('left'); + + this.settings.tip_settings.tip_location = this.settings.tip_settings.tip_location_pattern[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.settings.$next_tip.outerHeight(), + tip_offset = this.settings.$next_tip.offset(), + target_height = this.settings.$target.outerHeight(), + $nub = $('.joyride-nub', this.settings.$next_tip), + nub_height = Math.ceil($nub.outerHeight() / 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) { + var joyridemodalbg = $(this.settings.template.modal); + joyridemodalbg.appendTo('body'); + } + + if (/pop/i.test(this.settings.tip_animation)) { + joyridemodalbg.show(); + } else { + joyridemodalbg.fadeIn(this.settings.tip_animation_fade_speed); + } + } + }, + + expose : function () { + var expose, + exposeCover, + el, + origCSS, + origClasses, + randId = 'expose-' + this.random_str(6); + + 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 : el.outerWidth(true), + height : el.outerHeight(true) + }); + + exposeCover = $(this.settings.template.expose_cover); + + 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.expose_add_class); + + exposeCover.css({ + top : el.offset().top, + left : el.offset().left, + width : el.outerWidth(true), + height : el.outerHeight(true) + }); + + if (this.settings.modal) { + this.show_modal(); + } + + this.settings.$body.append(exposeCover); + expose.addClass(randId); + exposeCover.addClass(randId); + el.data('expose', randId); + this.settings.post_expose_callback(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, i; + if (el instanceof $) { + search = el[0] + } else if (typeof el == 'string') { + search = el; + } + + this.settings.exposed = this.settings.exposed || []; + i = this.settings.exposed.length; + + while (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.settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()), + left : ((($w.width() - this.settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft()) + }); + + return true; + }, + + bottom : function () { + return /bottom/i.test(this.settings.tip_settings.tip_location); + }, + + top : function () { + return /top/i.test(this.settings.tip_settings.tip_location); + }, + + right : function () { + return /right/i.test(this.settings.tip_settings.tip_location); + }, + + left : function () { + return /left/i.test(this.settings.tip_settings.tip_location); + }, + + 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() + w.scrollLeft(), + 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(), + w.scrollLeft() > 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 (abort) { + if (this.settings.cookie_monster) { + $.cookie(this.settings.cookie_name, 'ridden', {expires : this.settings.cookie_expires, domain : this.settings.cookie_domain}); + } + + if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + } + + if (this.settings.modal && this.settings.expose) { + this.un_expose(); + } + + // Unplug keystrokes listener + $(this.scope).off('keyup.joyride') + + this.settings.$next_tip.data('closed', true); + this.settings.riding = false; + + $('.joyride-modal-bg').hide(); + this.settings.$current_tip.hide(); + + if (typeof abort === 'undefined' || abort === false) { + this.settings.post_step_callback(this.settings.$li.index(), this.settings.$current_tip); + this.settings.post_ride_callback(this.settings.$li.index(), this.settings.$current_tip); + } + + $('.joyride-tip-guide').remove(); + }, + + 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 () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.js new file mode 100644 index 00000000..65e63040 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.js @@ -0,0 +1,703 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2014, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ + +(function ($, window, document, undefined) { + 'use strict'; + + var header_helpers = function (class_array) { + var i = class_array.length; + var head = $('head'); + + while (i--) { + if (head.has('.' + class_array[i]).length === 0) { + head.append(''); + } + } + }; + + header_helpers([ + 'foundation-mq-small', + 'foundation-mq-small-only', + 'foundation-mq-medium', + 'foundation-mq-medium-only', + 'foundation-mq-large', + 'foundation-mq-large-only', + 'foundation-mq-xlarge', + 'foundation-mq-xlarge-only', + 'foundation-mq-xxlarge', + 'foundation-data-attribute-namespace']); + + // Enable FastClick if present + + $(function () { + if (typeof FastClick !== 'undefined') { + // Don't attach to body if undefined + if (typeof document.body !== 'undefined') { + FastClick.attach(document.body); + } + } + }); + + // private Fast Selector wrapper, + // returns jQuery object. Only use where + // getElementById is not available. + var S = function (selector, context) { + if (typeof selector === 'string') { + if (context) { + var cont; + if (context.jquery) { + cont = context[0]; + if (!cont) { + return context; + } + } else { + cont = context; + } + return $(cont.querySelectorAll(selector)); + } + + return $(document.querySelectorAll(selector)); + } + + return $(selector, context); + }; + + // Namespace functions. + + var attr_name = function (init) { + var arr = []; + if (!init) { + arr.push('data'); + } + if (this.namespace.length > 0) { + arr.push(this.namespace); + } + arr.push(this.name); + + return arr.join('-'); + }; + + var add_namespace = function (str) { + var parts = str.split('-'), + i = parts.length, + arr = []; + + while (i--) { + if (i !== 0) { + arr.push(parts[i]); + } else { + if (this.namespace.length > 0) { + arr.push(this.namespace, parts[i]); + } else { + arr.push(parts[i]); + } + } + } + + return arr.reverse().join('-'); + }; + + // Event binding and data-options updating. + + var bindings = function (method, options) { + var self = this, + bind = function(){ + var $this = S(this), + should_bind_events = !$this.data(self.attr_name(true) + '-init'); + $this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this))); + + if (should_bind_events) { + self.events(this); + } + }; + + if (S(this.scope).is('[' + this.attr_name() +']')) { + bind.call(this.scope); + } else { + S('[' + this.attr_name() +']', this.scope).each(bind); + } + // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating. + if (typeof method === 'string') { + return this[method].call(this, options); + } + + }; + + var single_image_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); + } + }; + + /* + https://github.com/paulirish/matchMedia.js + */ + + window.matchMedia = window.matchMedia || (function ( doc ) { + + '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 )); + + /* + * jquery.requestAnimationFrame + * https://github.com/gnarf37/jquery-requestAnimationFrame + * Requires jQuery 1.8+ + * + * Copyright (c) 2012 Corey Frang + * Licensed under the MIT license. + */ + + (function(jQuery) { + + + // requestAnimationFrame polyfill adapted from Erik Möller + // fixes from Paul Irish and Tino Zijdel + // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating + + var animating, + lastTime = 0, + vendors = ['webkit', 'moz'], + requestAnimationFrame = window.requestAnimationFrame, + cancelAnimationFrame = window.cancelAnimationFrame, + jqueryFxAvailable = 'undefined' !== typeof jQuery.fx; + + for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) { + requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ]; + cancelAnimationFrame = cancelAnimationFrame || + window[ vendors[lastTime] + 'CancelAnimationFrame' ] || + window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ]; + } + + function raf() { + if (animating) { + requestAnimationFrame(raf); + + if (jqueryFxAvailable) { + jQuery.fx.tick(); + } + } + } + + if (requestAnimationFrame) { + // use rAF + window.requestAnimationFrame = requestAnimationFrame; + window.cancelAnimationFrame = cancelAnimationFrame; + + if (jqueryFxAvailable) { + jQuery.fx.timer = function (timer) { + if (timer() && jQuery.timers.push(timer) && !animating) { + animating = true; + raf(); + } + }; + + jQuery.fx.stop = function () { + animating = false; + }; + } + } else { + // polyfill + window.requestAnimationFrame = function (callback) { + var currTime = new Date().getTime(), + timeToCall = Math.max(0, 16 - (currTime - lastTime)), + id = window.setTimeout(function () { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + window.cancelAnimationFrame = function (id) { + clearTimeout(id); + }; + + } + + }( $ )); + + function removeQuotes (string) { + if (typeof string === 'string' || string instanceof String) { + string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, ''); + } + + return string; + } + + window.Foundation = { + name : 'Foundation', + + version : '5.5.1', + + media_queries : { + 'small' : S('.foundation-mq-small').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'small-only' : S('.foundation-mq-small-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'medium' : S('.foundation-mq-medium').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'medium-only' : S('.foundation-mq-medium-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'large' : S('.foundation-mq-large').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'large-only' : S('.foundation-mq-large-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'xlarge' : S('.foundation-mq-xlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'xlarge-only' : S('.foundation-mq-xlarge-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''), + 'xxlarge' : S('.foundation-mq-xxlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, '') + }, + + stylesheet : $('').appendTo('head')[0].sheet, + + global : { + namespace : undefined + }, + + init : function (scope, libraries, method, options, response) { + var args = [scope, method, options, response], + responses = []; + + // check RTL + this.rtl = /rtl/i.test(S('html').attr('dir')); + + // set foundation global scope + this.scope = scope || this.scope; + + this.set_namespace(); + + if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) { + if (this.libs.hasOwnProperty(libraries)) { + responses.push(this.init_lib(libraries, args)); + } + } else { + for (var lib in this.libs) { + responses.push(this.init_lib(lib, libraries)); + } + } + + S(window).load(function () { + S(window) + .trigger('resize.fndtn.clearing') + .trigger('resize.fndtn.dropdown') + .trigger('resize.fndtn.equalizer') + .trigger('resize.fndtn.interchange') + .trigger('resize.fndtn.joyride') + .trigger('resize.fndtn.magellan') + .trigger('resize.fndtn.topbar') + .trigger('resize.fndtn.slider'); + }); + + return scope; + }, + + init_lib : function (lib, args) { + if (this.libs.hasOwnProperty(lib)) { + this.patch(this.libs[lib]); + + if (args && args.hasOwnProperty(lib)) { + if (typeof this.libs[lib].settings !== 'undefined') { + $.extend(true, this.libs[lib].settings, args[lib]); + } else if (typeof this.libs[lib].defaults !== 'undefined') { + $.extend(true, this.libs[lib].defaults, args[lib]); + } + return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]); + } + + args = args instanceof Array ? args : new Array(args); + return this.libs[lib].init.apply(this.libs[lib], args); + } + + return function () {}; + }, + + patch : function (lib) { + lib.scope = this.scope; + lib.namespace = this.global.namespace; + lib.rtl = this.rtl; + lib['data_options'] = this.utils.data_options; + lib['attr_name'] = attr_name; + lib['add_namespace'] = add_namespace; + lib['bindings'] = bindings; + lib['S'] = this.utils.S; + }, + + inherit : function (scope, methods) { + var methods_arr = methods.split(' '), + i = methods_arr.length; + + while (i--) { + if (this.utils.hasOwnProperty(methods_arr[i])) { + scope[methods_arr[i]] = this.utils[methods_arr[i]]; + } + } + }, + + set_namespace : function () { + + // Description: + // Don't bother reading the namespace out of the meta tag + // if the namespace has been set globally in javascript + // + // Example: + // Foundation.global.namespace = 'my-namespace'; + // or make it an empty string: + // Foundation.global.namespace = ''; + // + // + + // If the namespace has not been set (is undefined), try to read it out of the meta element. + // Otherwise use the globally defined namespace, even if it's empty ('') + var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace; + + // Finally, if the namsepace is either undefined or false, set it to an empty string. + // Otherwise use the namespace value. + this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace; + }, + + libs : {}, + + // methods that can be inherited in libraries + utils : { + + // Description: + // Fast Selector wrapper returns jQuery object. Only use where getElementById + // is not available. + // + // Arguments: + // Selector (String): CSS selector describing the element(s) to be + // returned as a jQuery object. + // + // Scope (String): CSS selector describing the area to be searched. Default + // is document. + // + // Returns: + // Element (jQuery Object): jQuery object containing elements matching the + // selector within the scope. + S : S, + + // Description: + // Executes a function a max of once every n milliseconds + // + // Arguments: + // Func (Function): Function to be throttled. + // + // Delay (Integer): Function execution threshold in milliseconds. + // + // Returns: + // Lazy_function (Function): Function with throttling applied. + throttle : function (func, delay) { + var timer = null; + + return function () { + var context = this, args = arguments; + + if (timer == null) { + timer = setTimeout(function () { + func.apply(context, args); + timer = null; + }, delay); + } + }; + }, + + // Description: + // Executes a function when it stops being invoked for n seconds + // Modified version of _.debounce() http://underscorejs.org + // + // Arguments: + // Func (Function): Function to be debounced. + // + // Delay (Integer): Function execution threshold in milliseconds. + // + // Immediate (Bool): Whether the function should be called at the beginning + // of the delay instead of the end. Default is false. + // + // Returns: + // Lazy_function (Function): Function with debouncing applied. + debounce : function (func, delay, immediate) { + var timeout, result; + return function () { + var context = this, args = arguments; + var later = function () { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, delay); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + + // Description: + // Parses data-options attribute + // + // Arguments: + // El (jQuery Object): Element to be parsed. + // + // Returns: + // Options (Javascript Object): Contents of the element's data-options + // attribute. + data_options : function (el, data_attr_name) { + data_attr_name = data_attr_name || 'options'; + var opts = {}, ii, p, opts_arr, + data_options = function (el) { + var namespace = Foundation.global.namespace; + + if (namespace.length > 0) { + return el.data(namespace + '-' + data_attr_name); + } + + return el.data(data_attr_name); + }; + + var cached_options = data_options(el); + + if (typeof cached_options === 'object') { + return cached_options; + } + + opts_arr = (cached_options || ':').split(';'); + ii = 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; + } + + while (ii--) { + p = opts_arr[ii].split(':'); + p = [p[0], p.slice(1).join(':')]; + + if (/true/i.test(p[1])) { + p[1] = true; + } + if (/false/i.test(p[1])) { + p[1] = false; + } + if (isNumber(p[1])) { + if (p[1].indexOf('.') === -1) { + p[1] = parseInt(p[1], 10); + } else { + p[1] = parseFloat(p[1]); + } + } + + if (p.length === 2 && p[0].length > 0) { + opts[trim(p[0])] = trim(p[1]); + } + } + + return opts; + }, + + // Description: + // Adds JS-recognizable media queries + // + // Arguments: + // Media (String): Key string for the media query to be stored as in + // Foundation.media_queries + // + // Class (String): Class name for the generated tag + register_media : function (media, media_class) { + if (Foundation.media_queries[media] === undefined) { + $('head').append(''); + Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family')); + } + }, + + // Description: + // Add custom CSS within a JS-defined media query + // + // Arguments: + // Rule (String): CSS rule to be appended to the document. + // + // Media (String): Optional media query string for the CSS rule to be + // nested under. + add_custom_rule : function (rule, media) { + if (media === undefined && Foundation.stylesheet) { + 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 + ' }'); + } + } + }, + + // Description: + // Performs a callback function when an image is fully loaded + // + // Arguments: + // Image (jQuery Object): Image(s) to check if loaded. + // + // Callback (Function): Function to execute when image is fully loaded. + image_loaded : function (images, callback) { + var self = this, + unloaded = images.length; + + if (unloaded === 0) { + callback(images); + } + + images.each(function () { + single_image_loaded(self.S(this), function () { + unloaded -= 1; + if (unloaded === 0) { + callback(images); + } + }); + }); + }, + + // Description: + // Returns a random, alphanumeric string + // + // Arguments: + // Length (Integer): Length of string to be generated. Defaults to random + // integer. + // + // Returns: + // Rand (String): Pseudo-random, alphanumeric string. + random_str : function () { + if (!this.fidx) { + this.fidx = 0; + } + this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-'); + + return this.prefix + (this.fidx++).toString(36); + }, + + // Description: + // Helper for window.matchMedia + // + // Arguments: + // mq (String): Media query + // + // Returns: + // (Boolean): Whether the media query passes or not + match : function (mq) { + return window.matchMedia(mq).matches; + }, + + // Description: + // Helpers for checking Foundation default media queries with JS + // + // Returns: + // (Boolean): Whether the media query passes or not + + is_small_up : function () { + return this.match(Foundation.media_queries.small); + }, + + is_medium_up : function () { + return this.match(Foundation.media_queries.medium); + }, + + is_large_up : function () { + return this.match(Foundation.media_queries.large); + }, + + is_xlarge_up : function () { + return this.match(Foundation.media_queries.xlarge); + }, + + is_xxlarge_up : function () { + return this.match(Foundation.media_queries.xxlarge); + }, + + is_small_only : function () { + return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_medium_only : function () { + return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_large_only : function () { + return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_xlarge_only : function () { + return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up(); + }, + + is_xxlarge_only : function () { + return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up(); + } + } + }; + + $.fn.foundation = function () { + var args = Array.prototype.slice.call(arguments, 0); + + return this.each(function () { + Foundation.init.apply(Foundation, [this].concat(args)); + return this; + }); + }; + +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.magellan.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.magellan.js new file mode 100644 index 00000000..d8e1ebfa --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.magellan.js @@ -0,0 +1,203 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs['magellan-expedition'] = { + name : 'magellan-expedition', + + version : '5.5.1', + + settings : { + active_class : 'active', + threshold : 0, // pixels from the top of the expedition for it to become fixes + destination_threshold : 20, // pixels from the top of destination for it to be considered active + throttle_delay : 30, // calculation throttling to increase framerate + fixed_top : 0, // top distance in pixels assigend to the fixed element on scroll + offset_by_height : true, // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side. + duration : 700, // animation duration time + easing : 'swing' // animation easing + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + this.bindings(method, options); + }, + + events : function () { + var self = this, + S = self.S, + settings = self.settings; + + // initialize expedition offset + self.set_expedition_position(); + + S(self.scope) + .off('.magellan') + .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href^="#"]', function (e) { + e.preventDefault(); + var expedition = $(this).closest('[' + self.attr_name() + ']'), + settings = expedition.data('magellan-expedition-init'), + hash = this.hash.split('#').join(''), + target = $('a[name="' + hash + '"]'); + + if (target.length === 0) { + target = $('#' + hash); + + } + + // Account for expedition height if fixed position + var scroll_top = target.offset().top - settings.destination_threshold + 1; + if (settings.offset_by_height) { + scroll_top = scroll_top - expedition.outerHeight(); + } + + $('html, body').stop().animate({ + 'scrollTop' : scroll_top + }, settings.duration, settings.easing, function () { + if (history.pushState) { + history.pushState(null, null, '#' + hash); + } else { + location.hash = '#' + hash; + } + }); + }) + .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay)); + + $(window) + .on('resize.fndtn.magellan', self.throttle(this.set_expedition_position.bind(this), settings.throttle_delay)); + }, + + check_for_arrivals : function () { + var self = this; + self.update_arrivals(); + self.update_expedition_positions(); + }, + + set_expedition_position : function () { + var self = this; + $('[' + this.attr_name() + '=fixed]', self.scope).each(function (idx, el) { + var expedition = $(this), + settings = expedition.data('magellan-expedition-init'), + styles = expedition.attr('styles'), // save styles + top_offset, fixed_top; + + expedition.attr('style', ''); + top_offset = expedition.offset().top + settings.threshold; + + //set fixed-top by attribute + fixed_top = parseInt(expedition.data('magellan-fixed-top')); + if (!isNaN(fixed_top)) { + self.settings.fixed_top = fixed_top; + } + + expedition.data(self.data_attr('magellan-top-offset'), top_offset); + expedition.attr('style', styles); + }); + }, + + update_expedition_positions : function () { + var self = this, + window_top_offset = $(window).scrollTop(); + + $('[' + this.attr_name() + '=fixed]', self.scope).each(function () { + var expedition = $(this), + settings = expedition.data('magellan-expedition-init'), + styles = expedition.attr('style'), // save styles + top_offset = expedition.data('magellan-top-offset'); + + //scroll to the top distance + if (window_top_offset + self.settings.fixed_top >= top_offset) { + // Placeholder allows height calculations to be consistent even when + // appearing to switch between fixed/non-fixed placement + var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']'); + if (placeholder.length === 0) { + placeholder = expedition.clone(); + placeholder.removeAttr(self.attr_name()); + placeholder.attr(self.add_namespace('data-magellan-expedition-clone'), ''); + expedition.before(placeholder); + } + expedition.css({position :'fixed', top : settings.fixed_top}).addClass('fixed'); + } else { + expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove(); + expedition.attr('style', styles).css('position', '').css('top', '').removeClass('fixed'); + } + }); + }, + + update_arrivals : function () { + var self = this, + window_top_offset = $(window).scrollTop(); + + $('[' + this.attr_name() + ']', self.scope).each(function () { + var expedition = $(this), + settings = expedition.data(self.attr_name(true) + '-init'), + offsets = self.offsets(expedition, window_top_offset), + arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'), + active_item = false; + offsets.each(function (idx, item) { + if (item.viewport_offset >= item.top_offset) { + var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'); + arrivals.not(item.arrival).removeClass(settings.active_class); + item.arrival.addClass(settings.active_class); + active_item = true; + return true; + } + }); + + if (!active_item) { + arrivals.removeClass(settings.active_class); + } + }); + }, + + offsets : function (expedition, window_offset) { + var self = this, + settings = expedition.data(self.attr_name(true) + '-init'), + viewport_offset = window_offset; + + return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function (idx, el) { + var name = $(this).data(self.data_attr('magellan-arrival')), + dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']'); + if (dest.length > 0) { + var top_offset = dest.offset().top - settings.destination_threshold; + if (settings.offset_by_height) { + top_offset = top_offset - expedition.outerHeight(); + } + top_offset = Math.floor(top_offset); + return { + destination : dest, + arrival : $(this), + top_offset : top_offset, + viewport_offset : viewport_offset + } + } + }).sort(function (a, b) { + if (a.top_offset < b.top_offset) { + return -1; + } + if (a.top_offset > b.top_offset) { + return 1; + } + return 0; + }); + }, + + data_attr : function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + off : function () { + this.S(this.scope).off('.magellan'); + this.S(window).off('.magellan'); + }, + + reflow : function () { + var self = this; + // remove placeholder expeditions used for height calculation purposes + $('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove(); + } + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.offcanvas.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.offcanvas.js new file mode 100644 index 00000000..51ce3530 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.offcanvas.js @@ -0,0 +1,152 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.offcanvas = { + name : 'offcanvas', + + version : '5.5.1', + + settings : { + open_method : 'move', + close_on_click : false + }, + + init : function (scope, method, options) { + this.bindings(method, options); + }, + + events : function () { + var self = this, + S = self.S, + move_class = '', + right_postfix = '', + left_postfix = ''; + + if (this.settings.open_method === 'move') { + move_class = 'move-'; + right_postfix = 'right'; + left_postfix = 'left'; + } else if (this.settings.open_method === 'overlap_single') { + move_class = 'offcanvas-overlap-'; + right_postfix = 'right'; + left_postfix = 'left'; + } else if (this.settings.open_method === 'overlap') { + move_class = 'offcanvas-overlap'; + } + + S(this.scope).off('.offcanvas') + .on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e) { + self.click_toggle_class(e, move_class + right_postfix); + if (self.settings.open_method !== 'overlap') { + S('.left-submenu').removeClass(move_class + right_postfix); + } + $('.left-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e) { + var settings = self.get_settings(e); + var parent = S(this).parent(); + + if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) { + self.hide.call(self, move_class + right_postfix, self.get_wrapper(e)); + parent.parent().removeClass(move_class + right_postfix); + } else if (S(this).parent().hasClass('has-submenu')) { + e.preventDefault(); + S(this).siblings('.left-submenu').toggleClass(move_class + right_postfix); + } else if (parent.hasClass('back')) { + e.preventDefault(); + parent.parent().removeClass(move_class + right_postfix); + } + $('.left-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e) { + self.click_toggle_class(e, move_class + left_postfix); + if (self.settings.open_method !== 'overlap') { + S('.right-submenu').removeClass(move_class + left_postfix); + } + $('.right-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e) { + var settings = self.get_settings(e); + var parent = S(this).parent(); + + if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) { + self.hide.call(self, move_class + left_postfix, self.get_wrapper(e)); + parent.parent().removeClass(move_class + left_postfix); + } else if (S(this).parent().hasClass('has-submenu')) { + e.preventDefault(); + S(this).siblings('.right-submenu').toggleClass(move_class + left_postfix); + } else if (parent.hasClass('back')) { + e.preventDefault(); + parent.parent().removeClass(move_class + left_postfix); + } + $('.right-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) { + self.click_remove_class(e, move_class + left_postfix); + S('.right-submenu').removeClass(move_class + left_postfix); + if (right_postfix) { + self.click_remove_class(e, move_class + right_postfix); + S('.left-submenu').removeClass(move_class + left_postfix); + } + $('.right-off-canvas-toggle').attr('aria-expanded', 'true'); + }) + .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) { + self.click_remove_class(e, move_class + left_postfix); + $('.left-off-canvas-toggle').attr('aria-expanded', 'false'); + if (right_postfix) { + self.click_remove_class(e, move_class + right_postfix); + $('.right-off-canvas-toggle').attr('aria-expanded', 'false'); + } + }); + }, + + toggle : function (class_name, $off_canvas) { + $off_canvas = $off_canvas || this.get_wrapper(); + if ($off_canvas.is('.' + class_name)) { + this.hide(class_name, $off_canvas); + } else { + this.show(class_name, $off_canvas); + } + }, + + show : function (class_name, $off_canvas) { + $off_canvas = $off_canvas || this.get_wrapper(); + $off_canvas.trigger('open').trigger('open.fndtn.offcanvas'); + $off_canvas.addClass(class_name); + }, + + hide : function (class_name, $off_canvas) { + $off_canvas = $off_canvas || this.get_wrapper(); + $off_canvas.trigger('close').trigger('close.fndtn.offcanvas'); + $off_canvas.removeClass(class_name); + }, + + click_toggle_class : function (e, class_name) { + e.preventDefault(); + var $off_canvas = this.get_wrapper(e); + this.toggle(class_name, $off_canvas); + }, + + click_remove_class : function (e, class_name) { + e.preventDefault(); + var $off_canvas = this.get_wrapper(e); + this.hide(class_name, $off_canvas); + }, + + get_settings : function (e) { + var offcanvas = this.S(e.target).closest('[' + this.attr_name() + ']'); + return offcanvas.data(this.attr_name(true) + '-init') || this.settings; + }, + + get_wrapper : function (e) { + var $off_canvas = this.S(e ? e.target : this.scope).closest('.off-canvas-wrap'); + + if ($off_canvas.length === 0) { + $off_canvas = this.S('.off-canvas-wrap'); + } + return $off_canvas; + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.orbit.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.orbit.js new file mode 100644 index 00000000..fb03f3d9 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.orbit.js @@ -0,0 +1,476 @@ +;(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; + + self.slides = function () { + return slides_container.children(settings.slide_selector); + }; + + self.slides().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(self.slides().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 = $('[data-orbit-link="' + self.slides().eq(index).attr('data-orbit-slide') + '"]'); + link.siblings().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.stack_on_small) { + container.addClass(settings.stack_on_small_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); + bullets_container.wrap('
      '); + self.slides().each(function (idx, el) { + var bullet = $('
    1. ').attr('data-orbit-slide', idx).on('click', self.link_bullet);; + bullets_container.append(bullet); + }); + } + + }; + + 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 = self.slides(); + + var dir = 'next'; + locked = true; + if (next_idx < idx) {dir = 'prev';} + if (next_idx >= slides.length) { + if (!settings.circular) { + return false; + } + next_idx = 0; + } else if (next_idx < 0) { + if (!settings.circular) { + return false; + } + 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('before-slide-change.fndtn.orbit'); + 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('after-slide-change.fndtn.orbit', [{slide_number : idx, total_slides : slides.length}]); + settings.after_slide_change(idx, slides.length); + }; + if (slides_container.outerHeight() != next.outerHeight() && settings.variable_height) { + slides_container.animate({'height': next.outerHeight()}, 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.outerHeight() > slides_container.outerHeight() && settings.variable_height) { + slides_container.animate({'height': next.outerHeight()}, 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)) != '') { + if (isNaN(parseInt(index))) { + var slide = container.find('[data-orbit-slide=' + index + ']'); + if (slide.index() != -1) {self._goto(slide.index() + 1);} + } else { + self._goto(parseInt(index)); + } + } + + } + + self.timer_callback = function () { + self._goto(idx + 1, true); + } + + self.compute_dimensions = function () { + var current = $(self.slides().get(idx)); + var h = current.outerHeight(); + if (!settings.variable_height) { + self.slides().each(function(){ + if ($(this).outerHeight() > h) { h = $(this).outerHeight(); } + }); + } + 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(); + Foundation.utils.image_loaded(this.slides().children('img'), 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); + + if (settings.next_on_click) { + container.on('click', '.' + settings.slides_container_class + ' [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('load resize', self.compute_dimensions); + Foundation.utils.image_loaded(this.slides().children('img'), self.compute_dimensions); + Foundation.utils.image_loaded(this.slides().children('img'), function () { + container.prev('.' + settings.preloader_class).css('display', 'none'); + self.update_slide_number(0); + self.update_active_link(0); + slides_container.trigger('ready.fndtn.orbit'); + }); + }; + + 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('timer-started.fndtn.orbit') + }; + + 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('timer-stopped.fndtn.orbit'); + }; + }; + + 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) { + current.animate({marginLeft : '-100%'}, duration); + next.animate(animMargin, duration, function () { + current.css(margin, '100%'); + callback(); + }); + }; + + this.prev = function (current, prev, callback) { + current.animate({marginLeft : '100%'}, duration); + prev.css(margin, '-100%'); + prev.animate(animMargin, duration, 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 : '5.5.1', + + settings : { + animation : 'slide', + timer_speed : 10000, + pause_on_hover : true, + resume_on_mouseout : false, + next_on_click : true, + 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', + preloader_class : 'preloader', + slide_selector : '*', + 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, + circular : true, + timer : true, + variable_height : false, + swipe : true, + before_slide_change : noop, + after_slide_change : noop + }, + + init : function (scope, method, options) { + var self = this; + this.bindings(method, options); + }, + + events : function (instance) { + var orbit_instance = new Orbit(this.S(instance), this.S(instance).data('orbit-init')); + this.S(instance).data(this.name + '-instance', orbit_instance); + }, + + reflow : function () { + var self = this; + + if (self.S(self.scope).is('[data-orbit]')) { + var $el = self.S(self.scope); + var instance = $el.data(self.name + '-instance'); + instance.compute_dimensions(); + } else { + self.S('[data-orbit]', self.scope).each(function (idx, el) { + var $el = self.S(el); + var opts = self.data_options($el); + var instance = $el.data(self.name + '-instance'); + instance.compute_dimensions(); + }); + } + } + }; + +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.reveal.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.reveal.js new file mode 100644 index 00000000..c4b95d76 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.reveal.js @@ -0,0 +1,471 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.reveal = { + name : 'reveal', + + version : '5.5.1', + + locked : false, + + settings : { + animation : 'fadeAndPop', + animation_speed : 250, + close_on_background_click : true, + close_on_esc : true, + dismiss_modal_class : 'close-reveal-modal', + multiple_opened : false, + bg_class : 'reveal-modal-bg', + root_element : 'body', + 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) { + $.extend(true, this.settings, method, options); + this.bindings(method, options); + }, + + events : function (scope) { + var self = this, + S = self.S; + + S(this.scope) + .off('.reveal') + .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) { + e.preventDefault(); + + if (!self.locked) { + var element = S(this), + ajax = element.data(self.data_attr('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}); + } + } + }); + + S(document) + .on('click.fndtn.reveal', this.close_targets(), function (e) { + e.preventDefault(); + if (!self.locked) { + var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings, + bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0]; + + if (bg_clicked) { + if (settings.close_on_background_click) { + e.stopPropagation(); + } else { + return; + } + } + + self.locked = true; + self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open') : S(this).closest('[' + self.attr_name() + ']')); + } + }); + + if (S('[' + self.attr_name() + ']', this.scope).length > 0) { + S(this.scope) + // .off('.reveal') + .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 { + S(this.scope) + // .off('.reveal') + .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open) + .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened) + .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video) + .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close) + .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed) + .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video); + } + + return true; + }, + + // PATCH #3: turning on key up capture only when a reveal window is open + key_up_on : function (scope) { + var self = this; + + // PATCH #1: fixing multiple keyup event trigger from single key press + self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) { + var open_modal = self.S('[' + self.attr_name() + '].open'), + settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ; + // PATCH #2: making sure that the close event can be called only while unlocked, + // so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window. + if ( settings && event.which === 27 && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key + self.close.call(self, open_modal); + } + }); + + return true; + }, + + // PATCH #3: turning on key up capture only when a reveal window is open + key_up_off : function (scope) { + this.S('body').off('keyup.fndtn.reveal'); + return true; + }, + + open : function (target, ajax_settings) { + var self = this, + modal; + + if (target) { + if (typeof target.selector !== 'undefined') { + // Find the named node; only use the first one found, since the rest of the code assumes there's only one node + modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first(); + } else { + modal = self.S(this.scope); + + ajax_settings = target; + } + } else { + modal = self.S(this.scope); + } + + var settings = modal.data(self.attr_name(true) + '-init'); + settings = settings || this.settings; + + if (modal.hasClass('open') && target.attr('data-reveal-id') == modal.attr('id')) { + return self.close(modal); + } + + if (!modal.hasClass('open')) { + var open_modal = self.S('[' + self.attr_name() + '].open'); + + if (typeof modal.data('css-top') === 'undefined') { + modal.data('css-top', parseInt(modal.css('top'), 10)) + .data('offset', this.cache_offset(modal)); + } + + this.key_up_on(modal); // PATCH #3: turning on key up capture only when a reveal window is open + + modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal'); + + if (open_modal.length < 1) { + this.toggle_bg(modal, true); + } + + if (typeof ajax_settings === 'string') { + ajax_settings = { + url : ajax_settings + }; + } + + if (typeof ajax_settings === 'undefined' || !ajax_settings.url) { + if (open_modal.length > 0) { + if (settings.multiple_opened) { + this.to_back(open_modal); + } else { + this.hide(open_modal, settings.css.close); + } + } + + this.show(modal, settings.css.open); + } else { + var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null; + + $.extend(ajax_settings, { + success : function (data, textStatus, jqXHR) { + if ( $.isFunction(old_success) ) { + var result = old_success(data, textStatus, jqXHR); + if (typeof result == 'string') { + data = result; + } + } + + modal.html(data); + self.S(modal).foundation('section', 'reflow'); + self.S(modal).children().foundation(); + + if (open_modal.length > 0) { + if (settings.multiple_opened) { + this.to_back(open_modal); + } else { + this.hide(open_modal, settings.css.close); + } + } + self.show(modal, settings.css.open); + } + }); + + $.ajax(ajax_settings); + } + } + self.S(window).trigger('resize'); + }, + + close : function (modal) { + var modal = modal && modal.length ? modal : this.S(this.scope), + open_modals = this.S('[' + this.attr_name() + '].open'), + settings = modal.data(this.attr_name(true) + '-init') || this.settings; + + if (open_modals.length > 0) { + this.locked = true; + this.key_up_off(modal); // PATCH #3: turning on key up capture only when a reveal window is open + modal.trigger('close').trigger('close.fndtn.reveal'); + + if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) { + this.toggle_bg(modal, false); + this.to_front(modal); + } + + if (settings.multiple_opened) { + this.hide(modal, settings.css.close, settings); + this.to_front($($.makeArray(open_modals).reverse()[1])); + } else { + this.hide(open_modals, settings.css.close, settings); + } + } + }, + + close_targets : function () { + var base = '.' + this.settings.dismiss_modal_class; + + if (this.settings.close_on_background_click) { + return base + ', .' + this.settings.bg_class; + } + + return base; + }, + + toggle_bg : function (modal, state) { + if (this.S('.' + this.settings.bg_class).length === 0) { + this.settings.bg = $('
      ', {'class': this.settings.bg_class}) + .appendTo('body').hide(); + } + + var visible = this.settings.bg.filter(':visible').length > 0; + if ( state != visible ) { + if ( state == undefined ? visible : !state ) { + this.hide(this.settings.bg); + } else { + this.show(this.settings.bg); + } + } + }, + + show : function (el, css) { + // is modal + if (css) { + var settings = el.data(this.attr_name(true) + '-init') || this.settings, + root_element = settings.root_element; + + if (el.parent(root_element).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(root_element); + } + + var animData = getAnimationData(settings.animation); + if (!animData.animate) { + this.locked = false; + } + if (animData.pop) { + css.top = $(window).scrollTop() - el.data('offset') + 'px'; + var end_css = { + top: $(window).scrollTop() + el.data('css-top') + 'px', + opacity: 1 + }; + + return setTimeout(function () { + return el + .css(css) + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.trigger('opened').trigger('opened.fndtn.reveal'); + }.bind(this)) + .addClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + if (animData.fade) { + css.top = $(window).scrollTop() + el.data('css-top') + 'px'; + var end_css = {opacity: 1}; + + return setTimeout(function () { + return el + .css(css) + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.trigger('opened').trigger('opened.fndtn.reveal'); + }.bind(this)) + .addClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened').trigger('opened.fndtn.reveal'); + } + + var settings = this.settings; + + // should we animate the background? + if (getAnimationData(settings.animation).fade) { + return el.fadeIn(settings.animation_speed / 2); + } + + this.locked = false; + + return el.show(); + }, + + to_back : function(el) { + el.addClass('toback'); + }, + + to_front : function(el) { + el.removeClass('toback'); + }, + + hide : function (el, css) { + // is modal + if (css) { + var settings = el.data(this.attr_name(true) + '-init'); + settings = settings || this.settings; + + var animData = getAnimationData(settings.animation); + if (!animData.animate) { + this.locked = false; + } + if (animData.pop) { + var end_css = { + top: - $(window).scrollTop() - el.data('offset') + 'px', + opacity: 0 + }; + + return setTimeout(function () { + return el + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed').trigger('closed.fndtn.reveal'); + }.bind(this)) + .removeClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + if (animData.fade) { + var end_css = {opacity : 0}; + + return setTimeout(function () { + return el + .animate(end_css, settings.animation_speed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed').trigger('closed.fndtn.reveal'); + }.bind(this)) + .removeClass('open'); + }.bind(this), settings.animation_speed / 2); + } + + return el.hide().css(css).removeClass('open').trigger('closed').trigger('closed.fndtn.reveal'); + } + + var settings = this.settings; + + // should we animate the background? + if (getAnimationData(settings.animation).fade) { + return el.fadeOut(settings.animation_speed / 2); + } + + return el.hide(); + }, + + close_video : function (e) { + var video = $('.flex-video', e.target), + iframe = $('iframe', video); + + if (iframe.length > 0) { + iframe.attr('data-src', iframe[0].src); + iframe.attr('src', iframe.attr('src')); + video.hide(); + } + }, + + open_video : function (e) { + var video = $('.flex-video', e.target), + 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(); + } + }, + + data_attr : function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + 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 () {} + }; + + /* + * getAnimationData('popAndFade') // {animate: true, pop: true, fade: true} + * getAnimationData('fade') // {animate: true, pop: false, fade: true} + * getAnimationData('pop') // {animate: true, pop: true, fade: false} + * getAnimationData('foo') // {animate: false, pop: false, fade: false} + * getAnimationData(null) // {animate: false, pop: false, fade: false} + */ + function getAnimationData(str) { + var fade = /fade/i.test(str); + var pop = /pop/i.test(str); + return { + animate : fade || pop, + pop : pop, + fade : fade + }; + } +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.slider.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.slider.js new file mode 100644 index 00000000..4d069bc3 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.slider.js @@ -0,0 +1,263 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.slider = { + name : 'slider', + + version : '5.5.1', + + settings : { + start : 0, + end : 100, + step : 1, + precision : null, + initial : null, + display_selector : '', + vertical : false, + trigger_input_change : false, + on_change : function () {} + }, + + cache : {}, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + this.bindings(method, options); + this.reflow(); + }, + + events : function () { + var self = this; + + $(this.scope) + .off('.slider') + .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider', + '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) { + if (!self.cache.active) { + e.preventDefault(); + self.set_active_slider($(e.target)); + } + }) + .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) { + if (!!self.cache.active) { + e.preventDefault(); + if ($.data(self.cache.active[0], 'settings').vertical) { + var scroll_offset = 0; + if (!e.pageY) { + scroll_offset = window.scrollY; + } + self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset); + } else { + self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x')); + } + } + }) + .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) { + self.remove_active_slider(); + }) + .on('change.fndtn.slider', function (e) { + self.settings.on_change(); + }); + + self.S(window) + .on('resize.fndtn.slider', self.throttle(function (e) { + self.reflow(); + }, 300)); + }, + + get_cursor_position : function (e, xy) { + var pageXY = 'page' + xy.toUpperCase(), + clientXY = 'client' + xy.toUpperCase(), + position; + + if (typeof e[pageXY] !== 'undefined') { + position = e[pageXY]; + } else if (typeof e.originalEvent[clientXY] !== 'undefined') { + position = e.originalEvent[clientXY]; + } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') { + position = e.originalEvent.touches[0][clientXY]; + } else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') { + position = e.currentPoint[xy]; + } + + return position; + }, + + set_active_slider : function ($handle) { + this.cache.active = $handle; + }, + + remove_active_slider : function () { + this.cache.active = null; + }, + + calculate_position : function ($handle, cursor_x) { + var self = this, + settings = $.data($handle[0], 'settings'), + handle_l = $.data($handle[0], 'handle_l'), + handle_o = $.data($handle[0], 'handle_o'), + bar_l = $.data($handle[0], 'bar_l'), + bar_o = $.data($handle[0], 'bar_o'); + + requestAnimationFrame(function () { + var pct; + + if (Foundation.rtl && !settings.vertical) { + pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1); + } else { + pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1); + } + + pct = settings.vertical ? 1 - pct : pct; + + var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision); + + self.set_ui($handle, norm); + }); + }, + + set_ui : function ($handle, value) { + var settings = $.data($handle[0], 'settings'), + handle_l = $.data($handle[0], 'handle_l'), + bar_l = $.data($handle[0], 'bar_l'), + norm_pct = this.normalized_percentage(value, settings.start, settings.end), + handle_offset = norm_pct * (bar_l - handle_l) - 1, + progress_bar_length = norm_pct * 100, + $handle_parent = $handle.parent(), + $hidden_inputs = $handle.parent().children('input[type=hidden]'); + + if (Foundation.rtl && !settings.vertical) { + handle_offset = -handle_offset; + } + + handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset; + this.set_translate($handle, handle_offset, settings.vertical); + + if (settings.vertical) { + $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%'); + } else { + $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%'); + } + + $handle_parent.attr(this.attr_name(), value).trigger('change').trigger('change.fndtn.slider'); + + $hidden_inputs.val(value); + if (settings.trigger_input_change) { + $hidden_inputs.trigger('change'); + } + + if (!$handle[0].hasAttribute('aria-valuemin')) { + $handle.attr({ + 'aria-valuemin' : settings.start, + 'aria-valuemax' : settings.end + }); + } + $handle.attr('aria-valuenow', value); + + if (settings.display_selector != '') { + $(settings.display_selector).each(function () { + if (this.hasOwnProperty('value')) { + $(this).val(value); + } else { + $(this).text(value); + } + }); + } + + }, + + normalized_percentage : function (val, start, end) { + return Math.min(1, (val - start) / (end - start)); + }, + + normalized_value : function (val, start, end, step, precision) { + var range = end - start, + point = val * range, + mod = (point - (point % step)) / step, + rem = point % step, + round = ( rem >= step * 0.5 ? step : 0); + return ((mod * step + round) + start).toFixed(precision); + }, + + set_translate : function (ele, offset, vertical) { + if (vertical) { + $(ele) + .css('-webkit-transform', 'translateY(' + offset + 'px)') + .css('-moz-transform', 'translateY(' + offset + 'px)') + .css('-ms-transform', 'translateY(' + offset + 'px)') + .css('-o-transform', 'translateY(' + offset + 'px)') + .css('transform', 'translateY(' + offset + 'px)'); + } else { + $(ele) + .css('-webkit-transform', 'translateX(' + offset + 'px)') + .css('-moz-transform', 'translateX(' + offset + 'px)') + .css('-ms-transform', 'translateX(' + offset + 'px)') + .css('-o-transform', 'translateX(' + offset + 'px)') + .css('transform', 'translateX(' + offset + 'px)'); + } + }, + + limit_to : function (val, min, max) { + return Math.min(Math.max(val, min), max); + }, + + initialize_settings : function (handle) { + var settings = $.extend({}, this.settings, this.data_options($(handle).parent())), + decimal_places_match_result; + + if (settings.precision === null) { + decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/); + settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0; + } + + if (settings.vertical) { + $.data(handle, 'bar_o', $(handle).parent().offset().top); + $.data(handle, 'bar_l', $(handle).parent().outerHeight()); + $.data(handle, 'handle_o', $(handle).offset().top); + $.data(handle, 'handle_l', $(handle).outerHeight()); + } else { + $.data(handle, 'bar_o', $(handle).parent().offset().left); + $.data(handle, 'bar_l', $(handle).parent().outerWidth()); + $.data(handle, 'handle_o', $(handle).offset().left); + $.data(handle, 'handle_l', $(handle).outerWidth()); + } + + $.data(handle, 'bar', $(handle).parent()); + $.data(handle, 'settings', settings); + }, + + set_initial_position : function ($ele) { + var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'), + initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start), + $handle = $ele.children('.range-slider-handle'); + this.set_ui($handle, initial); + }, + + set_value : function (value) { + var self = this; + $('[' + self.attr_name() + ']', this.scope).each(function () { + $(this).attr(self.attr_name(), value); + }); + if (!!$(this.scope).attr(self.attr_name())) { + $(this.scope).attr(self.attr_name(), value); + } + self.reflow(); + }, + + reflow : function () { + var self = this; + self.S('[' + this.attr_name() + ']').each(function () { + var handle = $(this).children('.range-slider-handle')[0], + val = $(this).attr(self.attr_name()); + self.initialize_settings(handle); + + if (val) { + self.set_ui($(handle), parseFloat(val)); + } else { + self.set_initial_position($(this)); + } + }); + } + }; + +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.tab.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.tab.js new file mode 100644 index 00000000..51daa252 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.tab.js @@ -0,0 +1,237 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.tab = { + name : 'tab', + + version : '5.5.1', + + settings : { + active_class : 'active', + callback : function () {}, + deep_linking : false, + scroll_to_content : true, + is_hover : false + }, + + default_tab_hashes : [], + + init : function (scope, method, options) { + var self = this, + S = this.S; + + this.bindings(method, options); + + // store the initial href, which is used to allow correct behaviour of the + // browser back button when deep linking is turned on. + self.entry_location = window.location.href; + + this.handle_location_hash_change(); + + // Store the default active tabs which will be referenced when the + // location hash is absent, as in the case of navigating the tabs and + // returning to the first viewing via the browser Back button. + S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () { + self.default_tab_hashes.push(this.hash); + }); + }, + + events : function () { + var self = this, + S = this.S; + + var usual_tab_behavior = function (e) { + var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'); + if (!settings.is_hover || Modernizr.touch) { + e.preventDefault(); + e.stopPropagation(); + self.toggle_active_tab(S(this).parent()); + } + }; + + S(this.scope) + .off('.tab') + // Click event: tab title + .on('focus.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior ) + .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior ) + // Hover event: tab title + .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) { + var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'); + if (settings.is_hover) { + self.toggle_active_tab(S(this).parent()); + } + }); + + // Location hash change event + S(window).on('hashchange.fndtn.tab', function (e) { + e.preventDefault(); + self.handle_location_hash_change(); + }); + }, + + handle_location_hash_change : function () { + + var self = this, + S = this.S; + + S('[' + this.attr_name() + ']', this.scope).each(function () { + var settings = S(this).data(self.attr_name(true) + '-init'); + if (settings.deep_linking) { + // Match the location hash to a label + var hash; + if (settings.scroll_to_content) { + hash = self.scope.location.hash; + } else { + // prefix the hash to prevent anchor scrolling + hash = self.scope.location.hash.replace('fndtn-', ''); + } + if (hash != '') { + // Check whether the location hash references a tab content div or + // another element on the page (inside or outside the tab content div) + var hash_element = S(hash); + if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) { + // Tab content div + self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent()); + } else { + // Not the tab content div. If inside the tab content, find the + // containing tab and toggle it as active. + var hash_tab_container_id = hash_element.closest('.content').attr('id'); + if (hash_tab_container_id != undefined) { + self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash); + } + } + } else { + // Reference the default tab hashes which were initialized in the init function + for (var ind = 0; ind < self.default_tab_hashes.length; ind++) { + self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent()); + } + } + } + }); + }, + + toggle_active_tab : function (tab, location_hash) { + var self = this, + S = self.S, + tabs = tab.closest('[' + this.attr_name() + ']'), + tab_link = tab.find('a'), + anchor = tab.children('a').first(), + target_hash = '#' + anchor.attr('href').split('#')[1], + target = S(target_hash), + siblings = tab.siblings(), + settings = tabs.data(this.attr_name(true) + '-init'), + interpret_keyup_action = function (e) { + // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js + + // define current, previous and next (possible) tabs + + var $original = $(this); + var $prev = $(this).parents('li').prev().children('[role="tab"]'); + var $next = $(this).parents('li').next().children('[role="tab"]'); + var $target; + + // find the direction (prev or next) + + switch (e.keyCode) { + case 37: + $target = $prev; + break; + case 39: + $target = $next; + break; + default: + $target = false + break; + } + + if ($target.length) { + $original.attr({ + 'tabindex' : '-1', + 'aria-selected' : null + }); + $target.attr({ + 'tabindex' : '0', + 'aria-selected' : true + }).focus(); + } + + // Hide panels + + $('[role="tabpanel"]') + .attr('aria-hidden', 'true'); + + // Show panel which corresponds to target + + $('#' + $(document.activeElement).attr('href').substring(1)) + .attr('aria-hidden', null); + + }, + go_to_hash = function(hash) { + // This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it + // the user would get continually redirected to the default hash. + var is_entry_location = window.location.href === self.entry_location, + default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : is_entry_location ? window.location.hash :'fndtn-' + self.default_tab_hashes[0].replace('#', '') + + if (!(is_entry_location && hash === default_hash)) { + window.location.hash = hash; + } + }; + + // allow usage of data-tab-content attribute instead of href + if (S(this).data(this.data_attr('tab-content'))) { + target_hash = '#' + S(this).data(this.data_attr('tab-content')).split('#')[1]; + target = S(target_hash); + } + + if (settings.deep_linking) { + + if (settings.scroll_to_content) { + + // retain current hash to scroll to content + go_to_hash(location_hash || target_hash); + + if (location_hash == undefined || location_hash == target_hash) { + tab.parent()[0].scrollIntoView(); + } else { + S(target_hash)[0].scrollIntoView(); + } + } else { + // prefix the hashes so that the browser doesn't scroll down + if (location_hash != undefined) { + go_to_hash('fndtn-' + location_hash.replace('#', '')); + } else { + go_to_hash('fndtn-' + target_hash.replace('#', '')); + } + } + } + + // WARNING: The activation and deactivation of the tab content must + // occur after the deep linking in order to properly refresh the browser + // window (notably in Chrome). + // Clean up multiple attr instances to done once + tab.addClass(settings.active_class).triggerHandler('opened'); + tab_link.attr({'aria-selected' : 'true', tabindex : 0}); + siblings.removeClass(settings.active_class) + siblings.find('a').attr({'aria-selected' : 'false', tabindex : -1}); + target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true', tabindex : -1}); + target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex'); + settings.callback(tab); + target.triggerHandler('toggled', [tab]); + tabs.triggerHandler('toggled', [target]); + + tab_link.off('keydown').on('keydown', interpret_keyup_action ); + }, + + data_attr : function (str) { + if (this.namespace.length > 0) { + return this.namespace + '-' + str; + } + + return str; + }, + + off : function () {}, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.tooltip.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.tooltip.js new file mode 100644 index 00000000..bb8faac6 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.tooltip.js @@ -0,0 +1,307 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.tooltip = { + name : 'tooltip', + + version : '5.5.1', + + settings : { + additional_inheritable_classes : [], + tooltip_class : '.tooltip', + append_to : 'body', + touch_close_text : 'Tap To Close', + disable_for_touch : false, + hover_delay : 200, + show_on : 'all', + tip_template : function (selector, content) { + return '' + content + ''; + } + }, + + cache : {}, + + init : function (scope, method, options) { + Foundation.inherit(this, 'random_str'); + this.bindings(method, options); + }, + + should_show : function (target, tip) { + var settings = $.extend({}, this.settings, this.data_options(target)); + + if (settings.show_on === 'all') { + return true; + } else if (this.small() && settings.show_on === 'small') { + return true; + } else if (this.medium() && settings.show_on === 'medium') { + return true; + } else if (this.large() && settings.show_on === 'large') { + return true; + } + return false; + }, + + medium : function () { + return matchMedia(Foundation.media_queries['medium']).matches; + }, + + large : function () { + return matchMedia(Foundation.media_queries['large']).matches; + }, + + events : function (instance) { + var self = this, + S = self.S; + + self.create(this.S(instance)); + + $(this.scope) + .off('.tooltip') + .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', + '[' + this.attr_name() + ']', function (e) { + var $this = S(this), + settings = $.extend({}, self.settings, self.data_options($this)), + is_touch = false; + + if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type) && S(e.target).is('a')) { + return false; + } + + if (/mouse/i.test(e.type) && self.ie_touch(e)) { + return false; + } + + if ($this.hasClass('open')) { + if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) { + e.preventDefault(); + } + self.hide($this); + } else { + if (settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) { + return; + } else if (!settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) { + e.preventDefault(); + S(settings.tooltip_class + '.open').hide(); + is_touch = true; + } + + if (/enter|over/i.test(e.type)) { + this.timer = setTimeout(function () { + var tip = self.showTip($this); + }.bind(this), self.settings.hover_delay); + } else if (e.type === 'mouseout' || e.type === 'mouseleave') { + clearTimeout(this.timer); + self.hide($this); + } else { + self.showTip($this); + } + } + }) + .on('mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', '[' + this.attr_name() + '].open', function (e) { + if (/mouse/i.test(e.type) && self.ie_touch(e)) { + return false; + } + + if ($(this).data('tooltip-open-event-type') == 'touch' && e.type == 'mouseleave') { + return; + } else if ($(this).data('tooltip-open-event-type') == 'mouse' && /MSPointerDown|touchstart/i.test(e.type)) { + self.convert_to_touch($(this)); + } else { + self.hide($(this)); + } + }) + .on('DOMNodeRemoved DOMAttrModified', '[' + this.attr_name() + ']:not(a)', function (e) { + self.hide(S(this)); + }); + }, + + ie_touch : function (e) { + // How do I distinguish between IE11 and Windows Phone 8????? + return false; + }, + + showTip : function ($target) { + var $tip = this.getTip($target); + if (this.should_show($target, $tip)) { + return this.show($target); + } + return; + }, + + getTip : function ($target) { + var selector = this.selector($target), + settings = $.extend({}, this.settings, this.data_options($target)), + tip = null; + + if (selector) { + tip = this.S('span[data-selector="' + selector + '"]' + settings.tooltip_class); + } + + return (typeof tip === 'object') ? tip : false; + }, + + selector : function ($target) { + var id = $target.attr('id'), + dataSelector = $target.attr(this.attr_name()) || $target.attr('data-selector'); + + if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { + dataSelector = this.random_str(6); + $target + .attr('data-selector', dataSelector) + .attr('aria-describedby', dataSelector); + } + + return (id && id.length > 0) ? id : dataSelector; + }, + + create : function ($target) { + var self = this, + settings = $.extend({}, this.settings, this.data_options($target)), + tip_template = this.settings.tip_template; + + if (typeof settings.tip_template === 'string' && window.hasOwnProperty(settings.tip_template)) { + tip_template = window[settings.tip_template]; + } + + var $tip = $(tip_template(this.selector($target), $('
      ').html($target.attr('title')).html())), + classes = this.inheritable_classes($target); + + $tip.addClass(classes).appendTo(settings.append_to); + + if (Modernizr.touch) { + $tip.append('' + settings.touch_close_text + ''); + $tip.on('touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', function (e) { + self.hide($target); + }); + } + + $target.removeAttr('title').attr('title', ''); + }, + + 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 = nub.outerHeight(); + nubWidth = nub.outerHeight(); + + if (this.small()) { + tip.css({'width' : '100%'}); + } else { + tip.css({'width' : (width) ? width : 'auto'}); + } + + 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' + }).end(); + }; + + objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', target.offset().left); + + if (this.small()) { + objPos(tip, (target.offset().top + target.outerHeight() + 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) { + nub.addClass('rtl'); + left = target.offset().left + target.outerWidth() - tip.outerWidth(); + } + objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', left); + tip.removeClass('tip-override'); + if (classes && classes.indexOf('tip-top') > -1) { + if (Foundation.rtl) { + nub.addClass('rtl'); + } + objPos(tip, (target.offset().top - tip.outerHeight()), 'auto', 'auto', left) + .removeClass('tip-override'); + } else if (classes && classes.indexOf('tip-left') > -1) { + objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left - tip.outerWidth() - nubHeight)) + .removeClass('tip-override'); + nub.removeClass('rtl'); + } else if (classes && classes.indexOf('tip-right') > -1) { + objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left + target.outerWidth() + nubHeight)) + .removeClass('tip-override'); + nub.removeClass('rtl'); + } + } + + tip.css('visibility', 'visible').hide(); + }, + + small : function () { + return matchMedia(Foundation.media_queries.small).matches && + !matchMedia(Foundation.media_queries.medium).matches; + }, + + inheritable_classes : function ($target) { + var settings = $.extend({}, this.settings, this.data_options($target)), + inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'radius', 'round'].concat(settings.additional_inheritable_classes), + classes = $target.attr('class'), + filtered = classes ? $.map(classes.split(' '), function (el, i) { + if ($.inArray(el, inheritables) !== -1) { + return el; + } + }).join(' ') : ''; + + return $.trim(filtered); + }, + + convert_to_touch : function ($target) { + var self = this, + $tip = self.getTip($target), + settings = $.extend({}, self.settings, self.data_options($target)); + + if ($tip.find('.tap-to-close').length === 0) { + $tip.append('' + settings.touch_close_text + ''); + $tip.on('click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose', function (e) { + self.hide($target); + }); + } + + $target.data('tooltip-open-event-type', 'touch'); + }, + + show : function ($target) { + var $tip = this.getTip($target); + + if ($target.data('tooltip-open-event-type') == 'touch') { + this.convert_to_touch($target); + } + + this.reposition($target, $tip, $target.attr('class')); + $target.addClass('open'); + $tip.fadeIn(150); + }, + + hide : function ($target) { + var $tip = this.getTip($target); + + $tip.fadeOut(150, function () { + $tip.find('.tap-to-close').remove(); + $tip.off('click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose'); + $target.removeClass('open'); + }); + }, + + off : function () { + var self = this; + this.S(this.scope).off('.fndtn.tooltip'); + this.S(this.settings.tooltip_class).each(function (i) { + $('[' + self.attr_name() + ']').eq(i).attr('title', $(this).text()); + }).remove(); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.topbar.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.topbar.js new file mode 100644 index 00000000..30e581dc --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/foundation/foundation.topbar.js @@ -0,0 +1,452 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.topbar = { + name : 'topbar', + + version : '5.5.1', + + settings : { + index : 0, + sticky_class : 'sticky', + custom_back_text : true, + back_text : 'Back', + mobile_show_parent_link : true, + is_hover : true, + scrolltop : true, // jump to top when sticky nav menu toggle is clicked + sticky_on : 'all' + }, + + init : function (section, method, options) { + Foundation.inherit(this, 'add_custom_rule register_media throttle'); + var self = this; + + self.register_media('topbar', 'foundation-mq-topbar'); + + this.bindings(method, options); + + self.S('[' + this.attr_name() + ']', this.scope).each(function () { + var topbar = $(this), + settings = topbar.data(self.attr_name(true) + '-init'), + section = self.S('section, .top-bar-section', this); + topbar.data('index', 0); + var topbarContainer = topbar.parent(); + if (topbarContainer.hasClass('fixed') || self.is_sticky(topbar, topbarContainer, settings) ) { + self.settings.sticky_class = settings.sticky_class; + self.settings.sticky_topbar = topbar; + topbar.data('height', topbarContainer.outerHeight()); + topbar.data('stickyoffset', topbarContainer.offset().top); + } else { + topbar.data('height', topbar.outerHeight()); + } + + if (!settings.assembled) { + self.assemble(topbar); + } + + if (settings.is_hover) { + self.S('.has-dropdown', topbar).addClass('not-click'); + } else { + self.S('.has-dropdown', topbar).removeClass('not-click'); + } + + // Pad body when sticky (scrolled) or fixed. + self.add_custom_rule('.f-topbar-fixed { padding-top: ' + topbar.data('height') + 'px }'); + + if (topbarContainer.hasClass('fixed')) { + self.S('body').addClass('f-topbar-fixed'); + } + }); + + }, + + is_sticky : function (topbar, topbarContainer, settings) { + var sticky = topbarContainer.hasClass(settings.sticky_class); + var smallMatch = matchMedia(Foundation.media_queries.small).matches; + var medMatch = matchMedia(Foundation.media_queries.medium).matches; + var lrgMatch = matchMedia(Foundation.media_queries.large).matches; + + if (sticky && settings.sticky_on === 'all') { + return true; + } + if (sticky && this.small() && settings.sticky_on.indexOf('small') !== -1) { + if (smallMatch && !medMatch && !lrgMatch) { return true; } + } + if (sticky && this.medium() && settings.sticky_on.indexOf('medium') !== -1) { + if (smallMatch && medMatch && !lrgMatch) { return true; } + } + if (sticky && this.large() && settings.sticky_on.indexOf('large') !== -1) { + if (smallMatch && medMatch && lrgMatch) { return true; } + } + + // fix for iOS browsers + if (sticky && navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) { + return true; + } + return false; + }, + + toggle : function (toggleEl) { + var self = this, + topbar; + + if (toggleEl) { + topbar = self.S(toggleEl).closest('[' + this.attr_name() + ']'); + } else { + topbar = self.S('[' + this.attr_name() + ']'); + } + + var settings = topbar.data(this.attr_name(true) + '-init'); + + var section = self.S('section, .top-bar-section', topbar); + + if (self.breakpoint()) { + if (!self.rtl) { + section.css({left : '0%'}); + $('>.name', section).css({left : '100%'}); + } else { + section.css({right : '0%'}); + $('>.name', section).css({right : '100%'}); + } + + self.S('li.moved', section).removeClass('moved'); + topbar.data('index', 0); + + topbar + .toggleClass('expanded') + .css('height', ''); + } + + if (settings.scrolltop) { + if (!topbar.hasClass('expanded')) { + if (topbar.hasClass('fixed')) { + topbar.parent().addClass('fixed'); + topbar.removeClass('fixed'); + self.S('body').addClass('f-topbar-fixed'); + } + } else if (topbar.parent().hasClass('fixed')) { + if (settings.scrolltop) { + topbar.parent().removeClass('fixed'); + topbar.addClass('fixed'); + self.S('body').removeClass('f-topbar-fixed'); + + window.scrollTo(0, 0); + } else { + topbar.parent().removeClass('expanded'); + } + } + } else { + if (self.is_sticky(topbar, topbar.parent(), settings)) { + topbar.parent().addClass('fixed'); + } + + if (topbar.parent().hasClass('fixed')) { + if (!topbar.hasClass('expanded')) { + topbar.removeClass('fixed'); + topbar.parent().removeClass('expanded'); + self.update_sticky_positioning(); + } else { + topbar.addClass('fixed'); + topbar.parent().addClass('expanded'); + self.S('body').addClass('f-topbar-fixed'); + } + } + } + }, + + timer : null, + + events : function (bar) { + var self = this, + S = this.S; + + S(this.scope) + .off('.topbar') + .on('click.fndtn.topbar', '[' + this.attr_name() + '] .toggle-topbar', function (e) { + e.preventDefault(); + self.toggle(this); + }) + .on('click.fndtn.topbar', '.top-bar .top-bar-section li a[href^="#"],[' + this.attr_name() + '] .top-bar-section li a[href^="#"]', function (e) { + var li = $(this).closest('li'); + if (self.breakpoint() && !li.hasClass('back') && !li.hasClass('has-dropdown')) { + self.toggle(); + } + }) + .on('click.fndtn.topbar', '[' + this.attr_name() + '] li.has-dropdown', function (e) { + var li = S(this), + target = S(e.target), + topbar = li.closest('[' + self.attr_name() + ']'), + settings = topbar.data(self.attr_name(true) + '-init'); + + if (target.data('revealId')) { + self.toggle(); + return; + } + + if (self.breakpoint()) { + return; + } + + if (settings.is_hover && !Modernizr.touch) { + return; + } + + e.stopImmediatePropagation(); + + if (li.hasClass('hover')) { + li + .removeClass('hover') + .find('li') + .removeClass('hover'); + + li.parents('li.hover') + .removeClass('hover'); + } else { + li.addClass('hover'); + + $(li).siblings().removeClass('hover'); + + if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) { + e.preventDefault(); + } + } + }) + .on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown>a', function (e) { + if (self.breakpoint()) { + + e.preventDefault(); + + var $this = S(this), + topbar = $this.closest('[' + self.attr_name() + ']'), + section = topbar.find('section, .top-bar-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', $this.siblings('ul').outerHeight(true) + topbar.data('height')); + } + }); + + S(window).off('.topbar').on('resize.fndtn.topbar', self.throttle(function () { + self.resize.call(self); + }, 50)).trigger('resize').trigger('resize.fndtn.topbar').load(function () { + // Ensure that the offset is calculated after all of the pages resources have loaded + S(this).trigger('resize.fndtn.topbar'); + }); + + S('body').off('.topbar').on('click.fndtn.topbar', function (e) { + var parent = S(e.target).closest('li').closest('li.hover'); + + if (parent.length > 0) { + return; + } + + S('[' + self.attr_name() + '] li.hover').removeClass('hover'); + }); + + // Go up a level on Click + S(this.scope).on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown .back', function (e) { + e.preventDefault(); + + var $this = S(this), + topbar = $this.closest('[' + self.attr_name() + ']'), + section = topbar.find('section, .top-bar-section'), + settings = topbar.data(self.attr_name(true) + '-init'), + $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', $previousLevelUl.outerHeight(true) + topbar.data('height')); + } + + setTimeout(function () { + $movedLi.removeClass('moved'); + }, 300); + }); + + // Show dropdown menus when their items are focused + S(this.scope).find('.dropdown a') + .focus(function () { + $(this).parents('.has-dropdown').addClass('hover'); + }) + .blur(function () { + $(this).parents('.has-dropdown').removeClass('hover'); + }); + }, + + resize : function () { + var self = this; + self.S('[' + this.attr_name() + ']').each(function () { + var topbar = self.S(this), + settings = topbar.data(self.attr_name(true) + '-init'); + + var stickyContainer = topbar.parent('.' + self.settings.sticky_class); + var stickyOffset; + + if (!self.breakpoint()) { + var doToggle = topbar.hasClass('expanded'); + topbar + .css('height', '') + .removeClass('expanded') + .find('li') + .removeClass('hover'); + + if (doToggle) { + self.toggle(topbar); + } + } + + if (self.is_sticky(topbar, stickyContainer, settings)) { + if (stickyContainer.hasClass('fixed')) { + // Remove the fixed to allow for correct calculation of the offset. + stickyContainer.removeClass('fixed'); + + stickyOffset = stickyContainer.offset().top; + if (self.S(document.body).hasClass('f-topbar-fixed')) { + stickyOffset -= topbar.data('height'); + } + + topbar.data('stickyoffset', stickyOffset); + stickyContainer.addClass('fixed'); + } else { + stickyOffset = stickyContainer.offset().top; + topbar.data('stickyoffset', stickyOffset); + } + } + + }); + }, + + breakpoint : function () { + return !matchMedia(Foundation.media_queries['topbar']).matches; + }, + + small : function () { + return matchMedia(Foundation.media_queries['small']).matches; + }, + + medium : function () { + return matchMedia(Foundation.media_queries['medium']).matches; + }, + + large : function () { + return matchMedia(Foundation.media_queries['large']).matches; + }, + + assemble : function (topbar) { + var self = this, + settings = topbar.data(this.attr_name(true) + '-init'), + section = self.S('section, .top-bar-section', topbar); + + // Pull element out of the DOM for manipulation + section.detach(); + + self.S('.has-dropdown>a', section).each(function () { + var $link = self.S(this), + $dropdown = $link.siblings('.dropdown'), + url = $link.attr('href'), + $titleLi; + + if (!$dropdown.find('.title.back').length) { + + if (settings.mobile_show_parent_link == true && url) { + $titleLi = $('
    2. '); + } else { + $titleLi = $('
    3. '); + } + + // Copy link to subnav + if (settings.custom_back_text == true) { + $('h5>a', $titleLi).html(settings.back_text); + } else { + $('h5>a', $titleLi).html('« ' + $link.html()); + } + $dropdown.prepend($titleLi); + } + }); + + // Put element back in the DOM + section.appendTo(topbar); + + // check for sticky + this.sticky(); + + this.assembled(topbar); + }, + + assembled : function (topbar) { + topbar.data(this.attr_name(true), $.extend({}, topbar.data(this.attr_name(true)), {assembled : true})); + }, + + height : function (ul) { + var total = 0, + self = this; + + $('> li', ul).each(function () { + total += self.S(this).outerHeight(true); + }); + + return total; + }, + + sticky : function () { + var self = this; + + this.S(window).on('scroll', function () { + self.update_sticky_positioning(); + }); + }, + + update_sticky_positioning : function () { + var klass = '.' + this.settings.sticky_class, + $window = this.S(window), + self = this; + + if (self.settings.sticky_topbar && self.is_sticky(this.settings.sticky_topbar, this.settings.sticky_topbar.parent(), this.settings)) { + var distance = this.settings.sticky_topbar.data('stickyoffset'); + if (!self.S(klass).hasClass('expanded')) { + if ($window.scrollTop() > (distance)) { + if (!self.S(klass).hasClass('fixed')) { + self.S(klass).addClass('fixed'); + self.S('body').addClass('f-topbar-fixed'); + } + } else if ($window.scrollTop() <= distance) { + if (self.S(klass).hasClass('fixed')) { + self.S(klass).removeClass('fixed'); + self.S('body').removeClass('f-topbar-fixed'); + } + } + } + } + }, + + off : function () { + this.S(this.scope).off('.fndtn.topbar'); + this.S(window).off('.fndtn.topbar'); + }, + + reflow : function () {} + }; +}(jQuery, window, window.document)); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/fastclick.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/fastclick.js new file mode 100644 index 00000000..add01308 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/fastclick.js @@ -0,0 +1,8 @@ +!function(){"use strict";/** + * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs. + * + * @codingstandard ftlabs-jsv2 + * @copyright The Financial Times Limited [All Rights Reserved] + * @license MIT License (see LICENSE.txt) + */ +function a(b,d){function e(a,b){return function(){return a.apply(b,arguments)}}var f;if(d=d||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=d.touchBoundary||10,this.layer=b,this.tapDelay=d.tapDelay||200,this.tapTimeout=d.tapTimeout||700,!a.notNeeded(b)){for(var g=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],h=this,i=0,j=g.length;j>i;i++)h[g[i]]=e(h[g[i]],h);c&&(b.addEventListener("mouseover",this.onMouse,!0),b.addEventListener("mousedown",this.onMouse,!0),b.addEventListener("mouseup",this.onMouse,!0)),b.addEventListener("click",this.onClick,!0),b.addEventListener("touchstart",this.onTouchStart,!1),b.addEventListener("touchmove",this.onTouchMove,!1),b.addEventListener("touchend",this.onTouchEnd,!1),b.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(b.removeEventListener=function(a,c,d){var e=Node.prototype.removeEventListener;"click"===a?e.call(b,a,c.hijacked||c,d):e.call(b,a,c,d)},b.addEventListener=function(a,c,d){var e=Node.prototype.addEventListener;"click"===a?e.call(b,a,c.hijacked||(c.hijacked=function(a){a.propagationStopped||c(a)}),d):e.call(b,a,c,d)}),"function"==typeof b.onclick&&(f=b.onclick,b.addEventListener("click",function(a){f(a)},!1),b.onclick=null)}}var b=navigator.userAgent.indexOf("Windows Phone")>=0,c=navigator.userAgent.indexOf("Android")>0&&!b,d=/iP(ad|hone|od)/.test(navigator.userAgent)&&!b,e=d&&/OS 4_\d(_\d)?/.test(navigator.userAgent),f=d&&/OS [6-7]_\d/.test(navigator.userAgent),g=navigator.userAgent.indexOf("BB10")>0;a.prototype.needsClick=function(a){switch(a.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(a.disabled)return!0;break;case"input":if(d&&"file"===a.type||a.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(a.className)},a.prototype.needsFocus=function(a){switch(a.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!c;case"input":switch(a.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!a.disabled&&!a.readOnly;default:return/\bneedsfocus\b/.test(a.className)}},a.prototype.sendClick=function(a,b){var c,d;document.activeElement&&document.activeElement!==a&&document.activeElement.blur(),d=b.changedTouches[0],c=document.createEvent("MouseEvents"),c.initMouseEvent(this.determineEventType(a),!0,!0,window,1,d.screenX,d.screenY,d.clientX,d.clientY,!1,!1,!1,!1,0,null),c.forwardedTouchEvent=!0,a.dispatchEvent(c)},a.prototype.determineEventType=function(a){return c&&"select"===a.tagName.toLowerCase()?"mousedown":"click"},a.prototype.focus=function(a){var b;d&&a.setSelectionRange&&0!==a.type.indexOf("date")&&"time"!==a.type&&"month"!==a.type?(b=a.value.length,a.setSelectionRange(b,b)):a.focus()},a.prototype.updateScrollParent=function(a){var b,c;if(b=a.fastClickScrollParent,!b||!b.contains(a)){c=a;do{if(c.scrollHeight>c.offsetHeight){b=c,a.fastClickScrollParent=c;break}c=c.parentElement}while(c)}b&&(b.fastClickLastScrollTop=b.scrollTop)},a.prototype.getTargetElementFromEventTarget=function(a){return a.nodeType===Node.TEXT_NODE?a.parentNode:a},a.prototype.onTouchStart=function(a){var b,c,f;if(a.targetTouches.length>1)return!0;if(b=this.getTargetElementFromEventTarget(a.target),c=a.targetTouches[0],d){if(f=window.getSelection(),f.rangeCount&&!f.isCollapsed)return!0;if(!e){if(c.identifier&&c.identifier===this.lastTouchIdentifier)return a.preventDefault(),!1;this.lastTouchIdentifier=c.identifier,this.updateScrollParent(b)}}return this.trackingClick=!0,this.trackingClickStart=a.timeStamp,this.targetElement=b,this.touchStartX=c.pageX,this.touchStartY=c.pageY,a.timeStamp-this.lastClickTimec||Math.abs(b.pageY-this.touchStartY)>c?!0:!1},a.prototype.onTouchMove=function(a){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(a.target)||this.touchHasMoved(a))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},a.prototype.findControl=function(a){return void 0!==a.control?a.control:a.htmlFor?document.getElementById(a.htmlFor):a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},a.prototype.onTouchEnd=function(a){var b,g,h,i,j,k=this.targetElement;if(!this.trackingClick)return!0;if(a.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=a.timeStamp,g=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,f&&(j=a.changedTouches[0],k=document.elementFromPoint(j.pageX-window.pageXOffset,j.pageY-window.pageYOffset)||k,k.fastClickScrollParent=this.targetElement.fastClickScrollParent),h=k.tagName.toLowerCase(),"label"===h){if(b=this.findControl(k)){if(this.focus(k),c)return!1;k=b}}else if(this.needsFocus(k))return a.timeStamp-g>100||d&&window.top!==window&&"input"===h?(this.targetElement=null,!1):(this.focus(k),this.sendClick(k,a),d&&"select"===h||(this.targetElement=null,a.preventDefault()),!1);return d&&!e&&(i=k.fastClickScrollParent,i&&i.fastClickLastScrollTop!==i.scrollTop)?!0:(this.needsClick(k)||(a.preventDefault(),this.sendClick(k,a)),!1)},a.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},a.prototype.onMouse=function(a){return this.targetElement?a.forwardedTouchEvent?!0:a.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(a.stopImmediatePropagation?a.stopImmediatePropagation():a.propagationStopped=!0,a.stopPropagation(),a.preventDefault(),!1):!0:!0},a.prototype.onClick=function(a){var b;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===a.target.type&&0===a.detail?!0:(b=this.onMouse(a),b||(this.targetElement=null),b)},a.prototype.destroy=function(){var a=this.layer;c&&(a.removeEventListener("mouseover",this.onMouse,!0),a.removeEventListener("mousedown",this.onMouse,!0),a.removeEventListener("mouseup",this.onMouse,!0)),a.removeEventListener("click",this.onClick,!0),a.removeEventListener("touchstart",this.onTouchStart,!1),a.removeEventListener("touchmove",this.onTouchMove,!1),a.removeEventListener("touchend",this.onTouchEnd,!1),a.removeEventListener("touchcancel",this.onTouchCancel,!1)},a.notNeeded=function(a){var b,d,e,f;if("undefined"==typeof window.ontouchstart)return!0;if(d=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!c)return!0;if(b=document.querySelector("meta[name=viewport]")){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(d>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(g&&(e=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),e[1]>=10&&e[2]>=3&&(b=document.querySelector("meta[name=viewport]")))){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===a.style.msTouchAction||"manipulation"===a.style.touchAction?!0:(f=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],f>=27&&(b=document.querySelector("meta[name=viewport]"),b&&(-1!==b.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===a.style.touchAction||"manipulation"===a.style.touchAction?!0:!1)},a.attach=function(b,c){return new a(b,c)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return a}):"undefined"!=typeof module&&module.exports?(module.exports=a.attach,module.exports.FastClick=a):window.FastClick=a}(); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/jquery.cookie.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/jquery.cookie.js new file mode 100644 index 00000000..5be813ad --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/jquery.cookie.js @@ -0,0 +1,8 @@ +/*! + * jQuery Cookie Plugin v1.4.1 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2013 Klaus Hartl + * Released under the MIT license + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}}); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/jquery.js b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/jquery.js new file mode 100644 index 00000000..92b06d15 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/foundation/js/vendor/jquery.js @@ -0,0 +1,26 @@ +/*! + * jQuery JavaScript Library v2.1.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-18T15:11Z + */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b=a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(hb.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=ob[a]={};return _.each(a.match(nb)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ub,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:tb.test(c)?_.parseJSON(c):c}catch(e){}sb.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Kb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)rb.set(a[c],"globalEval",!b||rb.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(rb.hasData(a)&&(f=rb.access(a),g=rb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sb.hasData(a)&&(h=sb.access(a),i=_.extend({},h),sb.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&yb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Ob[a];return c||(c=t(a,b),"none"!==c&&c||(Nb=(Nb||_("', + '{afterIFrameTpl}', + { + disableFormats: true + } + ], + + subTplInsertions: [ + /** + * @cfg {String/Array/Ext.XTemplate} beforeTextAreaTpl + * An optional string or `XTemplate` configuration to insert in the field markup + * before the textarea element. If an `XTemplate` is used, the component's + * {@link Ext.form.field.Base#getSubTplData subTpl data} serves as the context. + */ + 'beforeTextAreaTpl', + + /** + * @cfg {String/Array/Ext.XTemplate} afterTextAreaTpl + * An optional string or `XTemplate` configuration to insert in the field markup + * after the textarea element. If an `XTemplate` is used, the component's + * {@link Ext.form.field.Base#getSubTplData subTpl data} serves as the context. + */ + 'afterTextAreaTpl', + + /** + * @cfg {String/Array/Ext.XTemplate} beforeIFrameTpl + * An optional string or `XTemplate` configuration to insert in the field markup + * before the iframe element. If an `XTemplate` is used, the component's + * {@link Ext.form.field.Base#getSubTplData subTpl data} serves as the context. + */ + 'beforeIFrameTpl', + + /** + * @cfg {String/Array/Ext.XTemplate} afterIFrameTpl + * An optional string or `XTemplate` configuration to insert in the field markup + * after the iframe element. If an `XTemplate` is used, the component's + * {@link Ext.form.field.Base#getSubTplData subTpl data} serves as the context. + */ + 'afterIFrameTpl', + + /** + * @cfg {String/Array/Ext.XTemplate} iframeAttrTpl + * An optional string or `XTemplate` configuration to insert in the field markup + * inside the iframe element (as attributes). If an `XTemplate` is used, the component's + * {@link Ext.form.field.Base#getSubTplData subTpl data} serves as the context. + */ + 'iframeAttrTpl', + + // inherited + 'inputAttrTpl' + ], + + /** + * @cfg {Boolean} enableFormat + * Enable the bold, italic and underline buttons + */ + enableFormat : true, + /** + * @cfg {Boolean} enableFontSize + * Enable the increase/decrease font size buttons + */ + enableFontSize : true, + /** + * @cfg {Boolean} enableColors + * Enable the fore/highlight color buttons + */ + enableColors : true, + /** + * @cfg {Boolean} enableAlignments + * Enable the left, center, right alignment buttons + */ + enableAlignments : true, + /** + * @cfg {Boolean} enableLists + * Enable the bullet and numbered list buttons. Not available in Safari. + */ + enableLists : true, + /** + * @cfg {Boolean} enableSourceEdit + * Enable the switch to source edit button. Not available in Safari. + */ + enableSourceEdit : true, + /** + * @cfg {Boolean} enableLinks + * Enable the create link button. Not available in Safari. + */ + enableLinks : true, + /** + * @cfg {Boolean} enableFont + * Enable font selection. Not available in Safari. + */ + enableFont : true, + // + /** + * @cfg {String} createLinkText + * The default text for the create link prompt + */ + createLinkText : 'Please enter the URL for the link:', + // + /** + * @cfg {String} [defaultLinkValue='http://'] + * The default value for the create link prompt + */ + defaultLinkValue : 'http:/'+'/', + /** + * @cfg {String[]} fontFamilies + * An array of available font families + */ + fontFamilies : [ + 'Arial', + 'Courier New', + 'Tahoma', + 'Times New Roman', + 'Verdana' + ], + defaultFont: 'tahoma', + /** + * @cfg {String} defaultValue + * A default value to be put into the editor to resolve focus issues. + * + * Defaults to (Non-breaking space) in Opera and IE6, + * (Zero-width space) in all other browsers. + */ + defaultValue: (Ext.isOpera || Ext.isIE6) ? ' ' : '​', + + editorWrapCls: Ext.baseCSSPrefix + 'html-editor-wrap', + + componentLayout: 'htmleditor', + + // private properties + initialized : false, + activated : false, + sourceEditMode : false, + iframePad:3, + hideMode:'offsets', + + afterBodyEl: '
    ', + + maskOnDisable: true, + + // private + initComponent : function(){ + var me = this; + + me.addEvents( + /** + * @event initialize + * Fires when the editor is fully initialized (including the iframe) + * @param {Ext.form.field.HtmlEditor} this + */ + 'initialize', + /** + * @event activate + * Fires when the editor is first receives the focus. Any insertion must wait until after this event. + * @param {Ext.form.field.HtmlEditor} this + */ + 'activate', + /** + * @event beforesync + * Fires before the textarea is updated with content from the editor iframe. Return false to cancel the + * sync. + * @param {Ext.form.field.HtmlEditor} this + * @param {String} html + */ + 'beforesync', + /** + * @event beforepush + * Fires before the iframe editor is updated with content from the textarea. Return false to cancel the + * push. + * @param {Ext.form.field.HtmlEditor} this + * @param {String} html + */ + 'beforepush', + /** + * @event sync + * Fires when the textarea is updated with content from the editor iframe. + * @param {Ext.form.field.HtmlEditor} this + * @param {String} html + */ + 'sync', + /** + * @event push + * Fires when the iframe editor is updated with content from the textarea. + * @param {Ext.form.field.HtmlEditor} this + * @param {String} html + */ + 'push', + /** + * @event editmodechange + * Fires when the editor switches edit modes + * @param {Ext.form.field.HtmlEditor} this + * @param {Boolean} sourceEdit True if source edit, false if standard editing. + */ + 'editmodechange' + ); + + me.callParent(arguments); + me.createToolbar(me); + + // Init mixins + me.initLabelable(); + me.initField(); + }, + + /** + * @private + * Must define this function to allow the Layout base class to collect all descendant layouts to be run. + */ + getRefItems: function() { + return [ this.toolbar ]; + }, + + /* + * Called when the editor creates its toolbar. Override this method if you need to + * add custom toolbar buttons. + * @param {Ext.form.field.HtmlEditor} editor + * @protected + */ + createToolbar : function(editor){ + var me = this, + items = [], i, + tipsEnabled = Ext.tip.QuickTipManager && Ext.tip.QuickTipManager.isEnabled(), + baseCSSPrefix = Ext.baseCSSPrefix, + fontSelectItem, toolbar, undef; + + function btn(id, toggle, handler){ + return { + itemId : id, + cls : baseCSSPrefix + 'btn-icon', + iconCls: baseCSSPrefix + 'edit-'+id, + enableToggle:toggle !== false, + scope: editor, + handler:handler||editor.relayBtnCmd, + clickEvent: 'mousedown', + tooltip: tipsEnabled ? editor.buttonTips[id] || undef : undef, + overflowText: editor.buttonTips[id].title || undef, + tabIndex: -1 + }; + } + + + if (me.enableFont && !Ext.isSafari2) { + fontSelectItem = Ext.widget('component', { + renderTpl: [ + '' + ], + renderData: { + cls: baseCSSPrefix + 'font-select', + fonts: me.fontFamilies, + defaultFont: me.defaultFont + }, + childEls: ['selectEl'], + afterRender: function() { + me.fontSelect = this.selectEl; + Ext.Component.prototype.afterRender.apply(this, arguments); + }, + onDisable: function() { + var selectEl = this.selectEl; + if (selectEl) { + selectEl.dom.disabled = true; + } + Ext.Component.prototype.onDisable.apply(this, arguments); + }, + onEnable: function() { + var selectEl = this.selectEl; + if (selectEl) { + selectEl.dom.disabled = false; + } + Ext.Component.prototype.onEnable.apply(this, arguments); + }, + listeners: { + change: function() { + me.relayCmd('fontname', me.fontSelect.dom.value); + me.deferFocus(); + }, + element: 'selectEl' + } + }); + + items.push( + fontSelectItem, + '-' + ); + } + + if (me.enableFormat) { + items.push( + btn('bold'), + btn('italic'), + btn('underline') + ); + } + + if (me.enableFontSize) { + items.push( + '-', + btn('increasefontsize', false, me.adjustFont), + btn('decreasefontsize', false, me.adjustFont) + ); + } + + if (me.enableColors) { + items.push( + '-', { + itemId: 'forecolor', + cls: baseCSSPrefix + 'btn-icon', + iconCls: baseCSSPrefix + 'edit-forecolor', + overflowText: editor.buttonTips.forecolor.title, + tooltip: tipsEnabled ? editor.buttonTips.forecolor || undef : undef, + tabIndex:-1, + menu : Ext.widget('menu', { + plain: true, + items: [{ + xtype: 'colorpicker', + allowReselect: true, + focus: Ext.emptyFn, + value: '000000', + plain: true, + clickEvent: 'mousedown', + handler: function(cp, color) { + me.execCmd('forecolor', Ext.isWebKit || Ext.isIE ? '#'+color : color); + me.deferFocus(); + this.up('menu').hide(); + } + }] + }) + }, { + itemId: 'backcolor', + cls: baseCSSPrefix + 'btn-icon', + iconCls: baseCSSPrefix + 'edit-backcolor', + overflowText: editor.buttonTips.backcolor.title, + tooltip: tipsEnabled ? editor.buttonTips.backcolor || undef : undef, + tabIndex:-1, + menu : Ext.widget('menu', { + plain: true, + items: [{ + xtype: 'colorpicker', + focus: Ext.emptyFn, + value: 'FFFFFF', + plain: true, + allowReselect: true, + clickEvent: 'mousedown', + handler: function(cp, color) { + if (Ext.isGecko) { + me.execCmd('useCSS', false); + me.execCmd('hilitecolor', color); + me.execCmd('useCSS', true); + me.deferFocus(); + } else { + me.execCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isWebKit || Ext.isIE ? '#'+color : color); + me.deferFocus(); + } + this.up('menu').hide(); + } + }] + }) + } + ); + } + + if (me.enableAlignments) { + items.push( + '-', + btn('justifyleft'), + btn('justifycenter'), + btn('justifyright') + ); + } + + if (!Ext.isSafari2) { + if (me.enableLinks) { + items.push( + '-', + btn('createlink', false, me.createLink) + ); + } + + if (me.enableLists) { + items.push( + '-', + btn('insertorderedlist'), + btn('insertunorderedlist') + ); + } + if (me.enableSourceEdit) { + items.push( + '-', + btn('sourceedit', true, function(btn){ + me.toggleSourceEdit(!me.sourceEditMode); + }) + ); + } + } + + // Everything starts disabled. + for (i = 0; i < items.length; i++) { + if (items[i].itemId !== 'sourceedit') { + items[i].disabled = true; + } + } + + // build the toolbar + // Automatically rendered in AbstractComponent.afterRender's renderChildren call + toolbar = Ext.widget('toolbar', { + id: me.id + '-toolbar', + ownerCt: me, + cls: Ext.baseCSSPrefix + 'html-editor-tb', + enableOverflow: true, + items: items, + ownerLayout: me.getComponentLayout(), + + // stop form submits + listeners: { + click: function(e){ + e.preventDefault(); + }, + element: 'el' + } + }); + + me.toolbar = toolbar; + }, + + getMaskTarget: function(){ + return this.bodyEl; + }, + + /** + * Sets the read only state of this field. + * @param {Boolean} readOnly Whether the field should be read only. + */ + setReadOnly: function(readOnly) { + var me = this, + textareaEl = me.textareaEl, + iframeEl = me.iframeEl, + body; + + me.readOnly = readOnly; + + if (textareaEl) { + textareaEl.dom.readOnly = readOnly; + } + + if (me.initialized) { + body = me.getEditorBody(); + if (Ext.isIE) { + // Hide the iframe while setting contentEditable so it doesn't grab focus + iframeEl.setDisplayed(false); + body.contentEditable = !readOnly; + iframeEl.setDisplayed(true); + } else { + me.setDesignMode(!readOnly); + } + if (body) { + body.style.cursor = readOnly ? 'default' : 'text'; + } + me.disableItems(readOnly); + } + }, + + /** + * Called when the editor initializes the iframe with HTML contents. Override this method if you + * want to change the initialization markup of the iframe (e.g. to add stylesheets). + * + * **Note:** IE8-Standards has unwanted scroller behavior, so the default meta tag forces IE7 compatibility. + * Also note that forcing IE7 mode works when the page is loaded normally, but if you are using IE's Web + * Developer Tools to manually set the document mode, that will take precedence and override what this + * code sets by default. This can be confusing when developing, but is not a user-facing issue. + * @protected + */ + getDocMarkup: function() { + var me = this, + h = me.iframeEl.getHeight() - me.iframePad * 2; + return Ext.String.format('', me.iframePad, h); + }, + + // private + getEditorBody: function() { + var doc = this.getDoc(); + return doc.body || doc.documentElement; + }, + + // private + getDoc: function() { + return (!Ext.isIE && this.iframeEl.dom.contentDocument) || this.getWin().document; + }, + + // private + getWin: function() { + return Ext.isIE ? this.iframeEl.dom.contentWindow : window.frames[this.iframeEl.dom.name]; + }, + + // Do the job of a container layout at this point even though we are not a Container. + // TODO: Refactor as a Container. + finishRenderChildren: function () { + this.callParent(); + this.toolbar.finishRender(); + }, + + // private + onRender: function() { + var me = this; + + me.callParent(arguments); + + // The input element is interrogated by the layout to extract height when labelAlign is 'top' + // It must be set, and then switched between the iframe and the textarea + me.inputEl = me.iframeEl; + + // Start polling for when the iframe document is ready to be manipulated + me.monitorTask = Ext.TaskManager.start({ + run: me.checkDesignMode, + scope: me, + interval: 100 + }); + }, + + initRenderTpl: function() { + var me = this; + if (!me.hasOwnProperty('renderTpl')) { + me.renderTpl = me.getTpl('labelableRenderTpl'); + } + return me.callParent(); + }, + + initRenderData: function() { + this.beforeSubTpl = '
    ' + Ext.DomHelper.markup(this.toolbar.getRenderTree()); + return Ext.applyIf(this.callParent(), this.getLabelableRenderData()); + }, + + getSubTplData: function() { + return { + $comp : this, + cmpId : this.id, + id : this.getInputId(), + textareaCls : Ext.baseCSSPrefix + 'hidden', + value : this.value, + iframeName : Ext.id(), + iframeSrc : Ext.SSL_SECURE_URL, + size : 'height:100px;width:100%' + }; + }, + + getSubTplMarkup: function() { + return this.getTpl('fieldSubTpl').apply(this.getSubTplData()); + }, + + initFrameDoc: function() { + var me = this, + doc, task; + + Ext.TaskManager.stop(me.monitorTask); + + doc = me.getDoc(); + me.win = me.getWin(); + + doc.open(); + doc.write(me.getDocMarkup()); + doc.close(); + + task = { // must defer to wait for browser to be ready + run: function() { + var doc = me.getDoc(); + if (doc.body || doc.readyState === 'complete') { + Ext.TaskManager.stop(task); + me.setDesignMode(true); + Ext.defer(me.initEditor, 10, me); + } + }, + interval : 10, + duration:10000, + scope: me + }; + Ext.TaskManager.start(task); + }, + + checkDesignMode: function() { + var me = this, + doc = me.getDoc(); + if (doc && (!doc.editorInitialized || me.getDesignMode() !== 'on')) { + me.initFrameDoc(); + } + }, + + /** + * @private + * Sets current design mode. To enable, mode can be true or 'on', off otherwise + */ + setDesignMode: function(mode) { + var me = this, + doc = me.getDoc(); + if (doc) { + if (me.readOnly) { + mode = false; + } + doc.designMode = (/on|true/i).test(String(mode).toLowerCase()) ?'on':'off'; + } + }, + + // private + getDesignMode: function() { + var doc = this.getDoc(); + return !doc ? '' : String(doc.designMode).toLowerCase(); + }, + + disableItems: function(disabled) { + var items = this.getToolbar().items.items, + i, + iLen = items.length, + item; + + for (i = 0; i < iLen; i++) { + item = items[i]; + + if (item.getItemId() !== 'sourceedit') { + item.setDisabled(disabled); + } + } + }, + + /** + * Toggles the editor between standard and source edit mode. + * @param {Boolean} [sourceEditMode] True for source edit, false for standard + */ + toggleSourceEdit: function(sourceEditMode) { + var me = this, + iframe = me.iframeEl, + textarea = me.textareaEl, + hiddenCls = Ext.baseCSSPrefix + 'hidden', + btn = me.getToolbar().getComponent('sourceedit'); + + if (!Ext.isBoolean(sourceEditMode)) { + sourceEditMode = !me.sourceEditMode; + } + me.sourceEditMode = sourceEditMode; + + if (btn.pressed !== sourceEditMode) { + btn.toggle(sourceEditMode); + } + if (sourceEditMode) { + me.disableItems(true); + me.syncValue(); + iframe.addCls(hiddenCls); + textarea.removeCls(hiddenCls); + textarea.dom.removeAttribute('tabIndex'); + textarea.focus(); + me.inputEl = textarea; + } + else { + if (me.initialized) { + me.disableItems(me.readOnly); + } + me.pushValue(); + iframe.removeCls(hiddenCls); + textarea.addCls(hiddenCls); + textarea.dom.setAttribute('tabIndex', -1); + me.deferFocus(); + me.inputEl = iframe; + } + me.fireEvent('editmodechange', me, sourceEditMode); + me.updateLayout(); + }, + + // private used internally + createLink : function() { + var url = prompt(this.createLinkText, this.defaultLinkValue); + if (url && url !== 'http:/'+'/') { + this.relayCmd('createlink', url); + } + }, + + clearInvalid: Ext.emptyFn, + + // docs inherit from Field + setValue: function(value) { + var me = this, + textarea = me.textareaEl; + me.mixins.field.setValue.call(me, value); + if (value === null || value === undefined) { + value = ''; + } + if (textarea) { + textarea.dom.value = value; + } + me.pushValue(); + return this; + }, + + /** + * If you need/want custom HTML cleanup, this is the method you should override. + * @param {String} html The HTML to be cleaned + * @return {String} The cleaned HTML + * @protected + */ + cleanHtml: function(html) { + html = String(html); + if (Ext.isWebKit) { // strip safari nonsense + html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, ''); + } + + /* + * Neat little hack. Strips out all the non-digit characters from the default + * value and compares it to the character code of the first character in the string + * because it can cause encoding issues when posted to the server. We need the + * parseInt here because charCodeAt will return a number. + */ + if (html.charCodeAt(0) === parseInt(this.defaultValue.replace(/\D/g, ''), 10)) { + html = html.substring(1); + } + return html; + }, + + /** + * Syncs the contents of the editor iframe with the textarea. + * @protected + */ + syncValue : function(){ + var me = this, + body, changed, html, bodyStyle, match; + + if (me.initialized) { + body = me.getEditorBody(); + html = body.innerHTML; + if (Ext.isWebKit) { + bodyStyle = body.getAttribute('style'); // Safari puts text-align styles on the body element! + match = bodyStyle.match(/text-align:(.*?);/i); + if (match && match[1]) { + html = '
    ' + html + '
    '; + } + } + html = me.cleanHtml(html); + if (me.fireEvent('beforesync', me, html) !== false) { + if (me.textareaEl.dom.value != html) { + me.textareaEl.dom.value = html; + changed = true; + } + + me.fireEvent('sync', me, html); + + if (changed) { + // we have to guard this to avoid infinite recursion because getValue + // calls this method... + me.checkChange(); + } + } + } + }, + + //docs inherit from Field + getValue : function() { + var me = this, + value; + if (!me.sourceEditMode) { + me.syncValue(); + } + value = me.rendered ? me.textareaEl.dom.value : me.value; + me.value = value; + return value; + }, + + /** + * Pushes the value of the textarea into the iframe editor. + * @protected + */ + pushValue: function() { + var me = this, + v; + if(me.initialized){ + v = me.textareaEl.dom.value || ''; + if (!me.activated && v.length < 1) { + v = me.defaultValue; + } + if (me.fireEvent('beforepush', me, v) !== false) { + me.getEditorBody().innerHTML = v; + if (Ext.isGecko) { + // Gecko hack, see: https://bugzilla.mozilla.org/show_bug.cgi?id=232791#c8 + me.setDesignMode(false); //toggle off first + me.setDesignMode(true); + } + me.fireEvent('push', me, v); + } + } + }, + + // private + deferFocus : function(){ + this.focus(false, true); + }, + + getFocusEl: function() { + var me = this, + win = me.win; + return win && !me.sourceEditMode ? win : me.textareaEl; + }, + + // private + initEditor : function(){ + //Destroying the component during/before initEditor can cause issues. + try { + var me = this, + dbody = me.getEditorBody(), + ss = me.textareaEl.getStyles('font-size', 'font-family', 'background-image', 'background-repeat', 'background-color', 'color'), + doc, + fn; + + ss['background-attachment'] = 'fixed'; // w3c + dbody.bgProperties = 'fixed'; // ie + + Ext.DomHelper.applyStyles(dbody, ss); + + doc = me.getDoc(); + + if (doc) { + try { + Ext.EventManager.removeAll(doc); + } catch(e) {} + } + + /* + * We need to use createDelegate here, because when using buffer, the delayed task is added + * as a property to the function. When the listener is removed, the task is deleted from the function. + * Since onEditorEvent is shared on the prototype, if we have multiple html editors, the first time one of the editors + * is destroyed, it causes the fn to be deleted from the prototype, which causes errors. Essentially, we're just anonymizing the function. + */ + fn = Ext.Function.bind(me.onEditorEvent, me); + Ext.EventManager.on(doc, { + mousedown: fn, + dblclick: fn, + click: fn, + keyup: fn, + buffer:100 + }); + + // These events need to be relayed from the inner document (where they stop + // bubbling) up to the outer document. This has to be done at the DOM level so + // the event reaches listeners on elements like the document body. The effected + // mechanisms that depend on this bubbling behavior are listed to the right + // of the event. + fn = me.onRelayedEvent; + Ext.EventManager.on(doc, { + mousedown: fn, // menu dismisal (MenuManager) and Window onMouseDown (toFront) + mousemove: fn, // window resize drag detection + mouseup: fn, // window resize termination + click: fn, // not sure, but just to be safe + dblclick: fn, // not sure again + scope: me + }); + + if (Ext.isGecko) { + Ext.EventManager.on(doc, 'keypress', me.applyCommand, me); + } + if (me.fixKeys) { + Ext.EventManager.on(doc, 'keydown', me.fixKeys, me); + } + + // We need to be sure we remove all our events from the iframe on unload or we're going to LEAK! + Ext.EventManager.on(window, 'unload', me.beforeDestroy, me); + doc.editorInitialized = true; + + me.initialized = true; + me.pushValue(); + me.setReadOnly(me.readOnly); + me.fireEvent('initialize', me); + } catch(ex) { + // ignore (why?) + } + }, + + // private + beforeDestroy : function(){ + var me = this, + monitorTask = me.monitorTask, + doc, prop; + + if (monitorTask) { + Ext.TaskManager.stop(monitorTask); + } + if (me.rendered) { + try { + doc = me.getDoc(); + if (doc) { + // removeAll() doesn't currently know how to handle iframe document, + // so for now we have to wrap it in an Ext.Element using Ext.fly, + // or else IE6/7 will leak big time when the page is refreshed. + // TODO: this may not be needed once we find a more permanent fix. + // see EXTJSIV-5891. + Ext.EventManager.removeAll(Ext.fly(doc)); + for (prop in doc) { + if (doc.hasOwnProperty && doc.hasOwnProperty(prop)) { + delete doc[prop]; + } + } + } + } catch(e) { + // ignore (why?) + } + Ext.destroyMembers(me, 'toolbar', 'iframeEl', 'textareaEl'); + } + me.callParent(); + }, + + // private + onRelayedEvent: function (event) { + // relay event from the iframe's document to the document that owns the iframe... + + var iframeEl = this.iframeEl, + iframeXY = iframeEl.getXY(), + eventXY = event.getXY(); + + // the event from the inner document has XY relative to that document's origin, + // so adjust it to use the origin of the iframe in the outer document: + event.xy = [iframeXY[0] + eventXY[0], iframeXY[1] + eventXY[1]]; + + event.injectEvent(iframeEl); // blame the iframe for the event... + + event.xy = eventXY; // restore the original XY (just for safety) + }, + + // private + onFirstFocus : function(){ + var me = this, + selection, range; + me.activated = true; + me.disableItems(me.readOnly); + if (Ext.isGecko) { // prevent silly gecko errors + me.win.focus(); + selection = me.win.getSelection(); + if (!selection.focusNode || selection.focusNode.nodeType !== 3) { + range = selection.getRangeAt(0); + range.selectNodeContents(me.getEditorBody()); + range.collapse(true); + me.deferFocus(); + } + try { + me.execCmd('useCSS', true); + me.execCmd('styleWithCSS', false); + } catch(e) { + // ignore (why?) + } + } + me.fireEvent('activate', me); + }, + + // private + adjustFont: function(btn) { + var adjust = btn.getItemId() === 'increasefontsize' ? 1 : -1, + size = this.getDoc().queryCommandValue('FontSize') || '2', + isPxSize = Ext.isString(size) && size.indexOf('px') !== -1, + isSafari; + size = parseInt(size, 10); + if (isPxSize) { + // Safari 3 values + // 1 = 10px, 2 = 13px, 3 = 16px, 4 = 18px, 5 = 24px, 6 = 32px + if (size <= 10) { + size = 1 + adjust; + } + else if (size <= 13) { + size = 2 + adjust; + } + else if (size <= 16) { + size = 3 + adjust; + } + else if (size <= 18) { + size = 4 + adjust; + } + else if (size <= 24) { + size = 5 + adjust; + } + else { + size = 6 + adjust; + } + size = Ext.Number.constrain(size, 1, 6); + } else { + isSafari = Ext.isSafari; + if (isSafari) { // safari + adjust *= 2; + } + size = Math.max(1, size + adjust) + (isSafari ? 'px' : 0); + } + this.execCmd('FontSize', size); + }, + + // private + onEditorEvent: function(e) { + this.updateToolbar(); + }, + + /** + * Triggers a toolbar update by reading the markup state of the current selection in the editor. + * @protected + */ + updateToolbar: function() { + var me = this, + btns, doc, name, fontSelect; + + if (me.readOnly) { + return; + } + + if (!me.activated) { + me.onFirstFocus(); + return; + } + + btns = me.getToolbar().items.map; + doc = me.getDoc(); + + if (me.enableFont && !Ext.isSafari2) { + name = (doc.queryCommandValue('FontName') || me.defaultFont).toLowerCase(); + fontSelect = me.fontSelect.dom; + if (name !== fontSelect.value) { + fontSelect.value = name; + } + } + + function updateButtons() { + for (var i = 0, l = arguments.length, name; i < l; i++) { + name = arguments[i]; + btns[name].toggle(doc.queryCommandState(name)); + } + } + if(me.enableFormat){ + updateButtons('bold', 'italic', 'underline'); + } + if(me.enableAlignments){ + updateButtons('justifyleft', 'justifycenter', 'justifyright'); + } + if(!Ext.isSafari2 && me.enableLists){ + updateButtons('insertorderedlist', 'insertunorderedlist'); + } + + Ext.menu.Manager.hideAll(); + + me.syncValue(); + }, + + // private + relayBtnCmd: function(btn) { + this.relayCmd(btn.getItemId()); + }, + + /** + * Executes a Midas editor command on the editor document and performs necessary focus and toolbar updates. + * **This should only be called after the editor is initialized.** + * @param {String} cmd The Midas command + * @param {String/Boolean} [value=null] The value to pass to the command + */ + relayCmd: function(cmd, value) { + Ext.defer(function() { + var me = this; + me.focus(); + me.execCmd(cmd, value); + me.updateToolbar(); + }, 10, this); + }, + + /** + * Executes a Midas editor command directly on the editor document. For visual commands, you should use + * {@link #relayCmd} instead. **This should only be called after the editor is initialized.** + * @param {String} cmd The Midas command + * @param {String/Boolean} [value=null] The value to pass to the command + */ + execCmd : function(cmd, value){ + var me = this, + doc = me.getDoc(), + undef; + doc.execCommand(cmd, false, value === undef ? null : value); + me.syncValue(); + }, + + // private + applyCommand : function(e){ + if (e.ctrlKey) { + var me = this, + c = e.getCharCode(), cmd; + if (c > 0) { + c = String.fromCharCode(c); + switch (c) { + case 'b': + cmd = 'bold'; + break; + case 'i': + cmd = 'italic'; + break; + case 'u': + cmd = 'underline'; + break; + } + if (cmd) { + me.win.focus(); + me.execCmd(cmd); + me.deferFocus(); + e.preventDefault(); + } + } + } + }, + + /** + * Inserts the passed text at the current cursor position. + * Note: the editor must be initialized and activated to insert text. + * @param {String} text + */ + insertAtCursor : function(text){ + var me = this, + range; + + if (me.activated) { + me.win.focus(); + if (Ext.isIE) { + range = me.getDoc().selection.createRange(); + if (range) { + range.pasteHTML(text); + me.syncValue(); + me.deferFocus(); + } + }else{ + me.execCmd('InsertHTML', text); + me.deferFocus(); + } + } + }, + + // private + fixKeys: (function() { // load time branching for fastest keydown performance + if (Ext.isIE) { + return function(e){ + var me = this, + k = e.getKey(), + doc = me.getDoc(), + readOnly = me.readOnly, + range, target; + + if (k === e.TAB) { + e.stopEvent(); + if (!readOnly) { + range = doc.selection.createRange(); + if(range){ + range.collapse(true); + range.pasteHTML('    '); + me.deferFocus(); + } + } + } + else if (k === e.ENTER) { + if (!readOnly) { + range = doc.selection.createRange(); + if (range) { + target = range.parentElement(); + if(!target || target.tagName.toLowerCase() !== 'li'){ + e.stopEvent(); + range.pasteHTML('
    '); + range.collapse(false); + range.select(); + } + } + } + } + }; + } + + if (Ext.isOpera) { + return function(e){ + var me = this; + if (e.getKey() === e.TAB) { + e.stopEvent(); + if (!me.readOnly) { + me.win.focus(); + me.execCmd('InsertHTML','    '); + me.deferFocus(); + } + } + }; + } + + if (Ext.isWebKit) { + return function(e){ + var me = this, + k = e.getKey(), + readOnly = me.readOnly; + + if (k === e.TAB) { + e.stopEvent(); + if (!readOnly) { + me.execCmd('InsertText','\t'); + me.deferFocus(); + } + } + else if (k === e.ENTER) { + e.stopEvent(); + if (!readOnly) { + me.execCmd('InsertHtml','

    '); + me.deferFocus(); + } + } + }; + } + + return null; // not needed, so null + }()), + + /** + * Returns the editor's toolbar. **This is only available after the editor has been rendered.** + * @return {Ext.toolbar.Toolbar} + */ + getToolbar : function(){ + return this.toolbar; + }, + + // + /** + * @property {Object} buttonTips + * Object collection of toolbar tooltips for the buttons in the editor. The key is the command id associated with + * that button and the value is a valid QuickTips object. For example: + * + * { + * bold : { + * title: 'Bold (Ctrl+B)', + * text: 'Make the selected text bold.', + * cls: 'x-html-editor-tip' + * }, + * italic : { + * title: 'Italic (Ctrl+I)', + * text: 'Make the selected text italic.', + * cls: 'x-html-editor-tip' + * }, + * ... + */ + buttonTips : { + bold : { + title: 'Bold (Ctrl+B)', + text: 'Make the selected text bold.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + italic : { + title: 'Italic (Ctrl+I)', + text: 'Make the selected text italic.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + underline : { + title: 'Underline (Ctrl+U)', + text: 'Underline the selected text.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + increasefontsize : { + title: 'Grow Text', + text: 'Increase the font size.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + decreasefontsize : { + title: 'Shrink Text', + text: 'Decrease the font size.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + backcolor : { + title: 'Text Highlight Color', + text: 'Change the background color of the selected text.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + forecolor : { + title: 'Font Color', + text: 'Change the color of the selected text.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + justifyleft : { + title: 'Align Text Left', + text: 'Align text to the left.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + justifycenter : { + title: 'Center Text', + text: 'Center text in the editor.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + justifyright : { + title: 'Align Text Right', + text: 'Align text to the right.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + insertunorderedlist : { + title: 'Bullet List', + text: 'Start a bulleted list.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + insertorderedlist : { + title: 'Numbered List', + text: 'Start a numbered list.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + createlink : { + title: 'Hyperlink', + text: 'Make the selected text a hyperlink.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + }, + sourceedit : { + title: 'Source Edit', + text: 'Switch to source editing mode.', + cls: Ext.baseCSSPrefix + 'html-editor-tip' + } + } + // + + // hide stuff that is not compatible + /** + * @event blur + * @private + */ + /** + * @event focus + * @private + */ + /** + * @event specialkey + * @private + */ + /** + * @cfg {String} fieldCls + * @private + */ + /** + * @cfg {String} focusCls + * @private + */ + /** + * @cfg {String} autoCreate + * @private + */ + /** + * @cfg {String} inputType + * @private + */ + /** + * @cfg {String} invalidCls + * @private + */ + /** + * @cfg {String} invalidText + * @private + */ + /** + * @cfg {String} msgFx + * @private + */ + /** + * @cfg {Boolean} allowDomMove + * @private + */ + /** + * @cfg {String} applyTo + * @private + */ + /** + * @cfg {String} readOnly + * @private + */ + /** + * @cfg {String} tabIndex + * @private + */ + /** + * @method validate + * @private + */ +}); + +/** + * @docauthor Robert Dougan + * + * Single radio field. Similar to checkbox, but automatically handles making sure only one radio is checked + * at a time within a group of radios with the same name. + * + * # Labeling + * + * In addition to the {@link Ext.form.Labelable standard field labeling options}, radio buttons + * may be given an optional {@link #boxLabel} which will be displayed immediately to the right of the input. Also + * see {@link Ext.form.RadioGroup} for a convenient method of grouping related radio buttons. + * + * # Values + * + * The main value of a Radio field is a boolean, indicating whether or not the radio is checked. + * + * The following values will check the radio: + * + * - `true` + * - `'true'` + * - `'1'` + * - `'on'` + * + * Any other value will uncheck it. + * + * In addition to the main boolean value, you may also specify a separate {@link #inputValue}. This will be sent + * as the parameter value when the form is {@link Ext.form.Basic#submit submitted}. You will want to set this + * value if you have multiple radio buttons with the same {@link #name}, as is almost always the case. + * + * # Example usage + * + * @example + * Ext.create('Ext.form.Panel', { + * title : 'Order Form', + * width : 300, + * bodyPadding: 10, + * renderTo : Ext.getBody(), + * items: [ + * { + * xtype : 'fieldcontainer', + * fieldLabel : 'Size', + * defaultType: 'radiofield', + * defaults: { + * flex: 1 + * }, + * layout: 'hbox', + * items: [ + * { + * boxLabel : 'M', + * name : 'size', + * inputValue: 'm', + * id : 'radio1' + * }, { + * boxLabel : 'L', + * name : 'size', + * inputValue: 'l', + * id : 'radio2' + * }, { + * boxLabel : 'XL', + * name : 'size', + * inputValue: 'xl', + * id : 'radio3' + * } + * ] + * }, + * { + * xtype : 'fieldcontainer', + * fieldLabel : 'Color', + * defaultType: 'radiofield', + * defaults: { + * flex: 1 + * }, + * layout: 'hbox', + * items: [ + * { + * boxLabel : 'Blue', + * name : 'color', + * inputValue: 'blue', + * id : 'radio4' + * }, { + * boxLabel : 'Grey', + * name : 'color', + * inputValue: 'grey', + * id : 'radio5' + * }, { + * boxLabel : 'Black', + * name : 'color', + * inputValue: 'black', + * id : 'radio6' + * } + * ] + * } + * ], + * bbar: [ + * { + * text: 'Smaller Size', + * handler: function() { + * var radio1 = Ext.getCmp('radio1'), + * radio2 = Ext.getCmp('radio2'), + * radio3 = Ext.getCmp('radio3'); + * + * //if L is selected, change to M + * if (radio2.getValue()) { + * radio1.setValue(true); + * return; + * } + * + * //if XL is selected, change to L + * if (radio3.getValue()) { + * radio2.setValue(true); + * return; + * } + * + * //if nothing is set, set size to S + * radio1.setValue(true); + * } + * }, + * { + * text: 'Larger Size', + * handler: function() { + * var radio1 = Ext.getCmp('radio1'), + * radio2 = Ext.getCmp('radio2'), + * radio3 = Ext.getCmp('radio3'); + * + * //if M is selected, change to L + * if (radio1.getValue()) { + * radio2.setValue(true); + * return; + * } + * + * //if L is selected, change to XL + * if (radio2.getValue()) { + * radio3.setValue(true); + * return; + * } + * + * //if nothing is set, set size to XL + * radio3.setValue(true); + * } + * }, + * '-', + * { + * text: 'Select color', + * menu: { + * indent: false, + * items: [ + * { + * text: 'Blue', + * handler: function() { + * var radio = Ext.getCmp('radio4'); + * radio.setValue(true); + * } + * }, + * { + * text: 'Grey', + * handler: function() { + * var radio = Ext.getCmp('radio5'); + * radio.setValue(true); + * } + * }, + * { + * text: 'Black', + * handler: function() { + * var radio = Ext.getCmp('radio6'); + * radio.setValue(true); + * } + * } + * ] + * } + * } + * ] + * }); + */ +Ext.define('Ext.form.field.Radio', { + extend:'Ext.form.field.Checkbox', + alias: ['widget.radiofield', 'widget.radio'], + alternateClassName: 'Ext.form.Radio', + requires: ['Ext.form.RadioManager'], + + /** + * @property {Boolean} isRadio + * `true` in this class to identify an object as an instantiated Radio, or subclass thereof. + */ + isRadio: true, + + /** + * @cfg {String} uncheckedValue + * @private + */ + + // private + inputType: 'radio', + ariaRole: 'radio', + + formId: null, + + /** + * If this radio is part of a group, it will return the selected value + * @return {String} + */ + getGroupValue: function() { + var selected = this.getManager().getChecked(this.name, this.getFormId()); + return selected ? selected.inputValue : null; + }, + + /** + * @private Handle click on the radio button + */ + onBoxClick: function(e) { + var me = this; + if (!me.disabled && !me.readOnly) { + this.setValue(true); + } + }, + + onRemoved: function(){ + this.callParent(arguments); + this.formId = null; + }, + + /** + * Sets either the checked/unchecked status of this Radio, or, if a string value is passed, checks a sibling Radio + * of the same name whose value is the value specified. + * @param {String/Boolean} value Checked value, or the value of the sibling radio button to check. + * @return {Ext.form.field.Radio} this + */ + setValue: function(v) { + var me = this, + active; + + if (Ext.isBoolean(v)) { + me.callParent(arguments); + } else { + active = me.getManager().getWithValue(me.name, v, me.getFormId()).getAt(0); + if (active) { + active.setValue(true); + } + } + return me; + }, + + /** + * Returns the submit value for the checkbox which can be used when submitting forms. + * @return {Boolean/Object} True if checked, null if not. + */ + getSubmitValue: function() { + return this.checked ? this.inputValue : null; + }, + + getModelData: function() { + return this.getSubmitData(); + }, + + // inherit docs + onChange: function(newVal, oldVal) { + var me = this, + r, rLen, radio, radios; + + me.callParent(arguments); + + if (newVal) { + radios = me.getManager().getByName(me.name, me.getFormId()).items; + rLen = radios.length; + + for (r = 0; r < rLen; r++) { + radio = radios[r]; + + if (radio !== me) { + radio.setValue(false); + } + } + } + }, + + // inherit docs + getManager: function() { + return Ext.form.RadioManager; + } +}); + +/** + * A time picker which provides a list of times from which to choose. This is used by the Ext.form.field.Time + * class to allow browsing and selection of valid times, but could also be used with other components. + * + * By default, all times starting at midnight and incrementing every 15 minutes will be presented. This list of + * available times can be controlled using the {@link #minValue}, {@link #maxValue}, and {@link #increment} + * configuration properties. The format of the times presented in the list can be customized with the {@link #format} + * config. + * + * To handle when the user selects a time from the list, you can subscribe to the {@link #selectionchange} event. + * + * @example + * Ext.create('Ext.picker.Time', { + * width: 60, + * minValue: Ext.Date.parse('04:30:00 AM', 'h:i:s A'), + * maxValue: Ext.Date.parse('08:00:00 AM', 'h:i:s A'), + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.picker.Time', { + extend: 'Ext.view.BoundList', + alias: 'widget.timepicker', + requires: ['Ext.data.Store', 'Ext.Date'], + + /** + * @cfg {Date} minValue + * The minimum time to be shown in the list of times. This must be a Date object (only the time fields will be + * used); no parsing of String values will be done. + */ + + /** + * @cfg {Date} maxValue + * The maximum time to be shown in the list of times. This must be a Date object (only the time fields will be + * used); no parsing of String values will be done. + */ + + /** + * @cfg {Number} increment + * The number of minutes between each time value in the list. + */ + increment: 15, + + // + /** + * @cfg {String} [format=undefined] + * The default time format string which can be overriden for localization support. The format must be valid + * according to {@link Ext.Date#parse}. + * + * Defaults to `'g:i A'`, e.g., `'3:15 PM'`. For 24-hour time format try `'H:i'` instead. + */ + format : "g:i A", + // + + /** + * @private + * The field in the implicitly-generated Model objects that gets displayed in the list. This is + * an internal field name only and is not useful to change via config. + */ + displayField: 'disp', + + /** + * @private + * Year, month, and day that all times will be normalized into internally. + */ + initDate: [2008,0,1], + + componentCls: Ext.baseCSSPrefix + 'timepicker', + + /** + * @cfg + * @private + */ + loadMask: false, + + initComponent: function() { + var me = this, + dateUtil = Ext.Date, + clearTime = dateUtil.clearTime, + initDate = me.initDate; + + // Set up absolute min and max for the entire day + me.absMin = clearTime(new Date(initDate[0], initDate[1], initDate[2])); + me.absMax = dateUtil.add(clearTime(new Date(initDate[0], initDate[1], initDate[2])), 'mi', (24 * 60) - 1); + + me.store = me.createStore(); + me.updateList(); + + me.callParent(); + }, + + /** + * Set the {@link #minValue} and update the list of available times. This must be a Date object (only the time + * fields will be used); no parsing of String values will be done. + * @param {Date} value + */ + setMinValue: function(value) { + this.minValue = value; + this.updateList(); + }, + + /** + * Set the {@link #maxValue} and update the list of available times. This must be a Date object (only the time + * fields will be used); no parsing of String values will be done. + * @param {Date} value + */ + setMaxValue: function(value) { + this.maxValue = value; + this.updateList(); + }, + + /** + * @private + * Sets the year/month/day of the given Date object to the {@link #initDate}, so that only + * the time fields are significant. This makes values suitable for time comparison. + * @param {Date} date + */ + normalizeDate: function(date) { + var initDate = this.initDate; + date.setFullYear(initDate[0], initDate[1], initDate[2]); + return date; + }, + + /** + * Update the list of available times in the list to be constrained within the {@link #minValue} + * and {@link #maxValue}. + */ + updateList: function() { + var me = this, + min = me.normalizeDate(me.minValue || me.absMin), + max = me.normalizeDate(me.maxValue || me.absMax); + + me.store.filterBy(function(record) { + var date = record.get('date'); + return date >= min && date <= max; + }); + }, + + /** + * @private + * Creates the internal {@link Ext.data.Store} that contains the available times. The store + * is loaded with all possible times, and it is later filtered to hide those times outside + * the minValue/maxValue. + */ + createStore: function() { + var me = this, + utilDate = Ext.Date, + times = [], + min = me.absMin, + max = me.absMax; + + while(min <= max){ + times.push({ + disp: utilDate.dateFormat(min, me.format), + date: min + }); + min = utilDate.add(min, 'mi', me.increment); + } + + return new Ext.data.Store({ + fields: ['disp', 'date'], + data: times + }); + } + +}); + +/** + * Provides a time input field with a time dropdown and automatic time validation. + * + * This field recognizes and uses JavaScript Date objects as its main {@link #value} type (only the time portion of the + * date is used; the month/day/year are ignored). In addition, it recognizes string values which are parsed according to + * the {@link #format} and/or {@link #altFormats} configs. These may be reconfigured to use time formats appropriate for + * the user's locale. + * + * The field may be limited to a certain range of times by using the {@link #minValue} and {@link #maxValue} configs, + * and the interval between time options in the dropdown can be changed with the {@link #increment} config. + * + * Example usage: + * + * @example + * Ext.create('Ext.form.Panel', { + * title: 'Time Card', + * width: 300, + * bodyPadding: 10, + * renderTo: Ext.getBody(), + * items: [{ + * xtype: 'timefield', + * name: 'in', + * fieldLabel: 'Time In', + * minValue: '6:00 AM', + * maxValue: '8:00 PM', + * increment: 30, + * anchor: '100%' + * }, { + * xtype: 'timefield', + * name: 'out', + * fieldLabel: 'Time Out', + * minValue: '6:00 AM', + * maxValue: '8:00 PM', + * increment: 30, + * anchor: '100%' + * }] + * }); + */ +Ext.define('Ext.form.field.Time', { + extend:'Ext.form.field.ComboBox', + alias: 'widget.timefield', + requires: ['Ext.form.field.Date', 'Ext.picker.Time', 'Ext.view.BoundListKeyNav', 'Ext.Date'], + alternateClassName: ['Ext.form.TimeField', 'Ext.form.Time'], + + /** + * @cfg {String} [triggerCls='x-form-time-trigger'] + * An additional CSS class used to style the trigger button. The trigger will always get the {@link #triggerBaseCls} + * by default and triggerCls will be **appended** if specified. + */ + triggerCls: Ext.baseCSSPrefix + 'form-time-trigger', + + /** + * @cfg {Date/String} minValue + * The minimum allowed time. Can be either a Javascript date object with a valid time value or a string time in a + * valid format -- see {@link #format} and {@link #altFormats}. + */ + + /** + * @cfg {Date/String} maxValue + * The maximum allowed time. Can be either a Javascript date object with a valid time value or a string time in a + * valid format -- see {@link #format} and {@link #altFormats}. + */ + + // + /** + * @cfg {String} minText + * The error text to display when the entered time is before {@link #minValue}. + */ + minText : "The time in this field must be equal to or after {0}", + // + + // + /** + * @cfg {String} maxText + * The error text to display when the entered time is after {@link #maxValue}. + */ + maxText : "The time in this field must be equal to or before {0}", + // + + // + /** + * @cfg {String} invalidText + * The error text to display when the time in the field is invalid. + */ + invalidText : "{0} is not a valid time", + // + + // + /** + * @cfg {String} [format=undefined] + * The default time format string which can be overriden for localization support. The format must be valid + * according to {@link Ext.Date#parse}. + * + * Defaults to `'g:i A'`, e.g., `'3:15 PM'`. For 24-hour time format try `'H:i'` instead. + */ + format : "g:i A", + // + + // + /** + * @cfg {String} [submitFormat=undefined] + * The date format string which will be submitted to the server. The format must be valid according to + * {@link Ext.Date#parse}. + * + * Defaults to {@link #format}. + */ + // + + // + /** + * @cfg {String} altFormats + * Multiple date formats separated by "|" to try when parsing a user input value and it doesn't match the defined + * format. + */ + altFormats : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|gi a|hi a|giA|hiA|gi A|hi A", + // + + /** + * @cfg {Number} increment + * The number of minutes between each time value in the list. + */ + increment: 15, + + /** + * @cfg {Number} pickerMaxHeight + * The maximum height of the {@link Ext.picker.Time} dropdown. + */ + pickerMaxHeight: 300, + + /** + * @cfg {Boolean} selectOnTab + * Whether the Tab key should select the currently highlighted item. + */ + selectOnTab: true, + + /** + * @cfg {Boolean} [snapToIncrement=false] + * Specify as `true` to enforce that only values on the {@link #increment} boundary are accepted. + */ + snapToIncrement: false, + + /** + * @private + * This is the date to use when generating time values in the absence of either minValue + * or maxValue. Using the current date causes DST issues on DST boundary dates, so this is an + * arbitrary "safe" date that can be any date aside from DST boundary dates. + */ + initDate: '1/1/2008', + initDateFormat: 'j/n/Y', + + ignoreSelection: 0, + + queryMode: 'local', + + displayField: 'disp', + + valueField: 'date', + + initComponent: function() { + var me = this, + min = me.minValue, + max = me.maxValue; + if (min) { + me.setMinValue(min); + } + if (max) { + me.setMaxValue(max); + } + me.displayTpl = new Ext.XTemplate( + '' + + '{[typeof values === "string" ? values : this.formatDate(values["' + me.displayField + '"])]}' + + '' + me.delimiter + '' + + '', { + formatDate: Ext.Function.bind(me.formatDate, me) + }); + this.callParent(); + }, + + /** + * @private + */ + transformOriginalValue: function(value) { + if (Ext.isString(value)) { + return this.rawToValue(value); + } + return value; + }, + + /** + * @private + */ + isEqual: function(v1, v2) { + return Ext.Date.isEqual(v1, v2); + }, + + /** + * Replaces any existing {@link #minValue} with the new time and refreshes the picker's range. + * @param {Date/String} value The minimum time that can be selected + */ + setMinValue: function(value) { + var me = this, + picker = me.picker; + me.setLimit(value, true); + if (picker) { + picker.setMinValue(me.minValue); + } + }, + + /** + * Replaces any existing {@link #maxValue} with the new time and refreshes the picker's range. + * @param {Date/String} value The maximum time that can be selected + */ + setMaxValue: function(value) { + var me = this, + picker = me.picker; + me.setLimit(value, false); + if (picker) { + picker.setMaxValue(me.maxValue); + } + }, + + /** + * @private + * Updates either the min or max value. Converts the user's value into a Date object whose + * year/month/day is set to the {@link #initDate} so that only the time fields are significant. + */ + setLimit: function(value, isMin) { + var me = this, + d, val; + if (Ext.isString(value)) { + d = me.parseDate(value); + } + else if (Ext.isDate(value)) { + d = value; + } + if (d) { + val = Ext.Date.clearTime(new Date(me.initDate)); + val.setHours(d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()); + } + // Invalid min/maxValue config should result in a null so that defaulting takes over + else { + val = null; + } + me[isMin ? 'minValue' : 'maxValue'] = val; + }, + + rawToValue: function(rawValue) { + return this.parseDate(rawValue) || rawValue || null; + }, + + valueToRaw: function(value) { + return this.formatDate(this.parseDate(value)); + }, + + /** + * Runs all of Time's validations and returns an array of any errors. Note that this first runs Text's validations, + * so the returned array is an amalgamation of all field errors. The additional validation checks are testing that + * the time format is valid, that the chosen time is within the {@link #minValue} and {@link #maxValue} constraints + * set. + * @param {Object} [value] The value to get errors for (defaults to the current field value) + * @return {String[]} All validation errors for this field + */ + getErrors: function(value) { + var me = this, + format = Ext.String.format, + errors = me.callParent(arguments), + minValue = me.minValue, + maxValue = me.maxValue, + date; + + value = me.formatDate(value || me.processRawValue(me.getRawValue())); + + if (value === null || value.length < 1) { // if it's blank and textfield didn't flag it then it's valid + return errors; + } + + date = me.parseDate(value); + if (!date) { + errors.push(format(me.invalidText, value, Ext.Date.unescapeFormat(me.format))); + return errors; + } + + if (minValue && date < minValue) { + errors.push(format(me.minText, me.formatDate(minValue))); + } + + if (maxValue && date > maxValue) { + errors.push(format(me.maxText, me.formatDate(maxValue))); + } + + return errors; + }, + + formatDate: function() { + return Ext.form.field.Date.prototype.formatDate.apply(this, arguments); + }, + + /** + * @private + * Parses an input value into a valid Date object. + * @param {String/Date} value + */ + parseDate: function(value) { + var me = this, + val = value, + altFormats = me.altFormats, + altFormatsArray = me.altFormatsArray, + i = 0, + len; + + if (value && !Ext.isDate(value)) { + val = me.safeParse(value, me.format); + + if (!val && altFormats) { + altFormatsArray = altFormatsArray || altFormats.split('|'); + len = altFormatsArray.length; + for (; i < len && !val; ++i) { + val = me.safeParse(value, altFormatsArray[i]); + } + } + } + + // If configured to snap, snap resulting parsed Date to the closest increment. + if (val && me.snapToIncrement) { + val = new Date(Ext.Number.snap(val.getTime(), me.increment * 60 * 1000)); + } + return val; + }, + + safeParse: function(value, format){ + var me = this, + utilDate = Ext.Date, + parsedDate, + result = null; + + if (utilDate.formatContainsDateInfo(format)) { + // assume we've been given a full date + result = utilDate.parse(value, format); + } else { + // Use our initial safe date + parsedDate = utilDate.parse(me.initDate + ' ' + value, me.initDateFormat + ' ' + format); + if (parsedDate) { + result = parsedDate; + } + } + return result; + }, + + // @private + getSubmitValue: function() { + var me = this, + format = me.submitFormat || me.format, + value = me.getValue(); + + return value ? Ext.Date.format(value, format) : null; + }, + + /** + * @private + * Creates the {@link Ext.picker.Time} + */ + createPicker: function() { + var me = this, + picker; + + me.listConfig = Ext.apply({ + xtype: 'timepicker', + selModel: { + mode: 'SINGLE' + }, + cls: undefined, + minValue: me.minValue, + maxValue: me.maxValue, + increment: me.increment, + format: me.format, + maxHeight: me.pickerMaxHeight + }, me.listConfig); + picker = me.callParent(); + me.store = picker.store; + return picker; + }, + + onItemClick: function(picker, record){ + // The selection change events won't fire when clicking on the selected element. Detect it here. + var me = this, + selected = picker.getSelectionModel().getSelection(); + + if (selected.length > 0) { + selected = selected[0]; + if (selected && Ext.Date.isEqual(record.get('date'), selected.get('date'))) { + me.collapse(); + } + } + }, + + /** + * @private + * Handles a time being selected from the Time picker. + */ + onListSelectionChange: function(list, recordArray) { + var me = this, + record = recordArray[0], + val = record ? record.get('date') : null; + + if (!me.ignoreSelection) { + me.skipSync = true; + me.setValue(val); + me.skipSync = false; + me.fireEvent('select', me, val); + me.picker.clearHighlight(); + me.collapse(); + me.inputEl.focus(); + } + }, + + /** + * @private + * Synchronizes the selection in the picker to match the current value + */ + syncSelection: function() { + var me = this, + picker = me.picker, + toSelect, + selModel, + value, + data, d, dLen, rec; + + if (picker && !me.skipSync) { + picker.clearHighlight(); + value = me.getValue(); + selModel = picker.getSelectionModel(); + // Update the selection to match + me.ignoreSelection++; + if (value === null) { + selModel.deselectAll(); + } else if(Ext.isDate(value)) { + // find value, select it + data = picker.store.data.items; + dLen = data.length; + + for (d = 0; d < dLen; d++) { + rec = data[d]; + + if (Ext.Date.isEqual(rec.get('date'), value)) { + toSelect = rec; + break; + } + } + + selModel.select(toSelect); + } + me.ignoreSelection--; + } + }, + + postBlur: function() { + var me = this; + + me.callParent(arguments); + me.setRawValue(me.formatDate(me.getValue())); + }, + + setValue: function() { + + // Store MUST be created for parent setValue to function + this.getPicker(); + + this.callParent(arguments); + }, + + getValue: function() { + return this.parseDate(this.callParent(arguments)); + } +}); + +/** + * Internal utility class that provides default configuration for cell editing. + * @private + */ +Ext.define('Ext.grid.CellEditor', { + extend: 'Ext.Editor', + constructor: function(config) { + config = Ext.apply({}, config); + + if (config.field) { + config.field.monitorTab = false; + } + this.callParent([config]); + }, + + /** + * @private + * Hide the grid cell text when editor is shown. + * + * There are 2 reasons this needs to happen: + * + * 1. checkbox editor does not take up enough space to hide the underlying text. + * + * 2. When columnLines are turned off in browsers that don't support text-overflow: + * ellipsis (firefox 6 and below and IE quirks), the text extends to the last pixel + * in the cell, however the right border of the cell editor is always positioned 1px + * offset from the edge of the cell (to give it the appearance of being "inside" the + * cell. This results in 1px of the underlying cell text being visible to the right + * of the cell editor if the text is not hidden. + * + * We can't just hide the entire cell, because then treecolumn's icons would be hidden + * as well. We also can't just set "color: transparent" to hide the text because it is + * not supported by IE8 and below. The only remaining solution is to remove the text + * from the text node and then add it back when the editor is hidden. + */ + onShow: function() { + var me = this, + innerCell = me.boundEl.first(), + lastChild, + textNode; + + if (innerCell) { + lastChild = innerCell.dom.lastChild; + if(lastChild && lastChild.nodeType === 3) { + // if the cell has a text node, save a reference to it + textNode = me.cellTextNode = innerCell.dom.lastChild; + // save the cell text so we can add it back when we're done editing + me.cellTextValue = textNode.nodeValue; + // The text node has to have at least one character in it, or the cell borders + // in IE quirks mode will not show correctly, so let's use a non-breaking space. + textNode.nodeValue = '\u00a0'; + } + } + me.callParent(arguments); + }, + + /** + * @private + * Show the grid cell text when the editor is hidden by adding the text back to the text node + */ + onHide: function() { + var me = this, + innerCell = me.boundEl.first(); + + if (innerCell && me.cellTextNode) { + me.cellTextNode.nodeValue = me.cellTextValue; + delete me.cellTextNode; + delete me.cellTextValue; + } + me.callParent(arguments); + }, + + /** + * @private + * Fix checkbox blur when it is clicked. + */ + afterRender: function() { + var me = this, + field = me.field; + + me.callParent(arguments); + if (field.isXType('checkboxfield')) { + field.mon(field.inputEl, { + mousedown: me.onCheckBoxMouseDown, + click: me.onCheckBoxClick, + scope: me + }); + } + }, + + /** + * @private + * Because when checkbox is clicked it loses focus completeEdit is bypassed. + */ + onCheckBoxMouseDown: function() { + this.completeEdit = Ext.emptyFn; + }, + + /** + * @private + * Restore checkbox focus and completeEdit method. + */ + onCheckBoxClick: function() { + delete this.completeEdit; + this.field.focus(false, 10); + }, + + /** + * @private + * Realigns the Editor to the grid cell, or to the text node in the grid inner cell + * if the inner cell contains multiple child nodes. + */ + realign: function(autoSize) { + var me = this, + boundEl = me.boundEl, + innerCell = boundEl.first(), + children = innerCell.dom.childNodes, + childCount = children.length, + offsets = Ext.Array.clone(me.offsets), + inputEl = me.field.inputEl, + lastChild, leftBound, rightBound, width; + + // If the inner cell has more than one child, or the first child node is not a text node, + // let's assume this cell contains additional elements before the text node. + // This is the case for tree cells, but could also be used to accomodate grid cells that + // have a custom renderer that render, say, an icon followed by some text for example + // For now however, this support will only be used for trees. + if(me.isForTree && (childCount > 1 || (childCount === 1 && children[0].nodeType !== 3))) { + // get the inner cell's last child + lastChild = innerCell.last(); + // calculate the left bound of the text node + leftBound = lastChild.getOffsetsTo(innerCell)[0] + lastChild.getWidth(); + // calculate the right bound of the text node (this is assumed to be the right edge of + // the inner cell, since we are assuming the text node is always the last node in the + // inner cell) + rightBound = innerCell.getWidth(); + // difference between right and left bound is the text node's allowed "width", + // this will be used as the width for the editor. + width = rightBound - leftBound; + // adjust width for column lines - this ensures the editor will be the same width + // regardless of columLines config + if(!me.editingPlugin.grid.columnLines) { + width --; + } + // set the editor's x offset to the left bound position + offsets[0] += leftBound; + + me.addCls(Ext.baseCSSPrefix + 'grid-editor-on-text-node'); + } else { + width = boundEl.getWidth() - 1; + } + + if (autoSize === true) { + me.field.setWidth(width); + } + + me.alignTo(boundEl, me.alignment, offsets); + }, + + onEditorTab: function(e){ + var field = this.field; + if (field.onEditorTab) { + field.onEditorTab(e); + } + }, + + alignment: "tl-tl", + hideEl : false, + cls: Ext.baseCSSPrefix + "small-editor " + Ext.baseCSSPrefix + "grid-editor", + shim: false, + shadow: false +}); + +/** + * Component layout for grid column headers which have a title element at the top followed by content. + * @private + */ +Ext.define('Ext.grid.ColumnComponentLayout', { + extend: 'Ext.layout.component.Auto', + alias: 'layout.columncomponent', + + type: 'columncomponent', + + setWidthInDom: true, + + getContentHeight : function(ownerContext) { + // If we are a group header return container layout's contentHeight, else default to AutoComponent's answer + return this.owner.isGroupHeader ? ownerContext.getProp('contentHeight') : this.callParent(arguments); + }, + + calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) { + var result = this.callParent(arguments); + if (this.owner.isGroupHeader) { + result += this.owner.titleEl.dom.offsetHeight; + } + return result; + }, + + getContentWidth : function(ownerContext) { + // If we are a group header return container layout's contentHeight, else default to AutoComponent's answer + return this.owner.isGroupHeader ? ownerContext.getProp('contentWidth') : this.callParent(arguments); + }, + + calculateOwnerWidthFromContentWidth: function (ownerContext, contentWidth) { + return contentWidth + ownerContext.getPaddingInfo().width; + } +}); + +/** + * @private + * + * This class is used only by the grid's HeaderContainer docked child. + * + * It adds the ability to shrink the vertical size of the inner container element back if a grouped + * column header has all its child columns dragged out, and the whole HeaderContainer needs to shrink back down. + * + * Also, after every layout, after all headers have attained their 'stretchmax' height, it goes through and calls + * `setPadding` on the columns so that they lay out correctly. + */ +Ext.define('Ext.grid.ColumnLayout', { + extend: 'Ext.layout.container.HBox', + alias: 'layout.gridcolumn', + type : 'gridcolumn', + + reserveOffset: false, + + firstHeaderCls: Ext.baseCSSPrefix + 'column-header-first', + lastHeaderCls: Ext.baseCSSPrefix + 'column-header-last', + + initLayout: function() { + this.grid = this.owner.up('[scrollerOwner]'); + this.callParent(); + }, + + // Collect the height of the table of data upon layout begin + beginLayout: function (ownerContext) { + var me = this, + grid = me.grid, + view = grid.view, + i = 0, + items = me.getVisibleItems(), + len = items.length, + item; + + ownerContext.gridContext = ownerContext.context.getCmp(me.grid); + + // If we are one side of a locking grid, then if we are on the "normal" side, we have to grab the normal view + // for use in determining whether to subtract scrollbar width from available width. + // The locked side does not have scrollbars, so it should not look at the view. + if (grid.lockable) { + if (me.owner.up('tablepanel') === view.normalGrid) { + view = view.normalGrid.getView(); + } else { + view = null; + } + } + + me.callParent(arguments); + + // Unstretch child items before the layout which stretches them. + for (; i < len; i++) { + item = items[i]; + item.removeCls([me.firstHeaderCls, me.lastHeaderCls]); + item.el.setStyle({ + height: 'auto' + }); + item.titleEl.setStyle({ + height: 'auto', + paddingTop: '' // reset back to default padding of the style + }); + } + + // Add special first/last classes + if (len > 0) { + items[0].addCls(me.firstHeaderCls); + items[len - 1].addCls(me.lastHeaderCls); + } + + // If the owner is the grid's HeaderContainer, and the UI displays old fashioned scrollbars and there is a rendered View with data in it, + // AND we are scrolling vertically: + // collect the View context to interrogate it for overflow, and possibly invalidate it if there is overflow + if (!me.owner.isHeader && Ext.getScrollbarSize().width && !grid.collapsed && view && + view.table.dom && (view.autoScroll || view.overflowY)) { + ownerContext.viewContext = ownerContext.context.getCmp(view); + } + }, + + roundFlex: function(width) { + return Math.floor(width); + }, + + calculate: function(ownerContext) { + var me = this, + viewContext = ownerContext.viewContext, + tableHeight, + viewHeight; + + me.callParent(arguments); + + if (ownerContext.state.parallelDone) { + ownerContext.setProp('columnWidthsDone', true); + } + + // If we have a viewContext (Only created if there is an existing within the view, AND we are scolling vertically AND scrollbars take up space) + // we are not already in the second pass, and we are not shrinkWrapping... + // Then we have to see if we know enough to determine whether there is vertical opverflow so that we can + // invalidate and loop back for the second pass with a narrower target width. + if (viewContext && !ownerContext.state.overflowAdjust.width && !ownerContext.gridContext.heightModel.shrinkWrap) { + tableHeight = viewContext.tableContext.getProp('height'); + viewHeight = viewContext.getProp('height'); + + // Heights of both view and its table content have not both been published; we cannot complete + if (isNaN(tableHeight + viewHeight)) { + me.done = false; + } + + // Heights have been published, and there is vertical overflow; invalidate with a width adjustment to allow for the scrollbar + else if (tableHeight >= viewHeight) { + ownerContext.gridContext.invalidate({ + after: function() { + ownerContext.state.overflowAdjust = { + width: Ext.getScrollbarSize().width, + height: 0 + }; + } + }); + } + } + }, + + completeLayout: function(ownerContext) { + var me = this, + owner = me.owner, + state = ownerContext.state, + needsInvalidate = false, + calculated = me.sizeModels.calculated, + childItems, len, i, childContext, item; + + me.callParent(arguments); + + // If we have not been through this already, and the owning Container is configured + // forceFit, is not a group column and and there is a valid width, then convert + // widths to flexes, and loop back. + if (!state.flexesCalculated && owner.forceFit && !owner.isHeader) { + childItems = ownerContext.childItems; + len = childItems.length; + + for (i = 0; i < len; i++) { + childContext = childItems[i]; + item = childContext.target; + + // For forceFit, just use allocated width as the flex value, and the proportions + // will end up the same whatever HeaderContainer width they are being forced into. + if (item.width) { + item.flex = ownerContext.childItems[i].flex = item.width; + delete item.width; + childContext.widthModel = calculated; + needsInvalidate = true; + } + } + + // Recalculate based upon all columns now being flexed instead of sized. + // Set flag, so that we do not do this infinitely + if (needsInvalidate) { + me.cacheFlexes(ownerContext); + ownerContext.invalidate({ + state: { + flexesCalculated: true + } + }); + } + } + }, + + finalizeLayout: function() { + var me = this, + i = 0, + items, + len, + itemsHeight, + owner = me.owner, + titleEl = owner.titleEl; + + // Set up padding in items + items = me.getVisibleItems(); + len = items.length; + // header container's items take up the whole height + itemsHeight = owner.el.getViewSize().height; + if (titleEl) { + // if owner is a grouped column with children, we need to subtract the titleEl's height + // to determine the remaining available height for the child items + itemsHeight -= titleEl.getHeight(); + } + for (; i < len; i++) { + items[i].setPadding(itemsHeight); + } + }, + + // FIX: when flexing we actually don't have enough space as we would + // typically because of the scrollOffset on the GridView, must reserve this + publishInnerCtSize: function(ownerContext) { + var me = this, + size = ownerContext.state.boxPlan.targetSize, + cw = ownerContext.peek('contentWidth'), + view; + + // InnerCt MUST stretch to accommodate all columns so that left/right scrolling is enabled in the header container. + if ((cw != null) && !me.owner.isHeader) { + size.width = cw; + + // innerCt must also encompass any vertical scrollbar width if there may be one + view = me.owner.ownerCt.view; + if (view.autoScroll || view.overflowY) { + size.width += Ext.getScrollbarSize().width; + } + } + + return me.callParent(arguments); + } +}); + +/** + * This class is used internally to provide a single interface when using + * a locking grid. Internally, the locking grid creates two separate grids, + * so this class is used to map calls appropriately. + * @private + */ +Ext.define('Ext.grid.LockingView', { + + mixins: { + observable: 'Ext.util.Observable' + }, + + eventRelayRe: /^(beforeitem|beforecontainer|item|container|cell)/, + + constructor: function(config){ + var me = this, + eventNames = [], + eventRe = me.eventRelayRe, + locked = config.locked.getView(), + normal = config.normal.getView(), + events, + event; + + Ext.apply(me, { + lockedView: locked, + normalView: normal, + lockedGrid: config.locked, + normalGrid: config.normal, + panel: config.panel + }); + me.mixins.observable.constructor.call(me, config); + + // relay events + events = locked.events; + for (event in events) { + if (events.hasOwnProperty(event) && eventRe.test(event)) { + eventNames.push(event); + } + } + me.relayEvents(locked, eventNames); + me.relayEvents(normal, eventNames); + + normal.on({ + scope: me, + itemmouseleave: me.onItemMouseLeave, + itemmouseenter: me.onItemMouseEnter + }); + + locked.on({ + scope: me, + itemmouseleave: me.onItemMouseLeave, + itemmouseenter: me.onItemMouseEnter + }); + }, + + getGridColumns: function() { + var cols = this.lockedGrid.headerCt.getGridColumns(); + return cols.concat(this.normalGrid.headerCt.getGridColumns()); + }, + + getEl: function(column){ + return this.getViewForColumn(column).getEl(); + }, + + getViewForColumn: function(column) { + var view = this.lockedView, + inLocked; + + view.headerCt.cascade(function(col){ + if (col === column) { + inLocked = true; + return false; + } + }); + + return inLocked ? view : this.normalView; + }, + + onItemMouseEnter: function(view, record){ + var me = this, + locked = me.lockedView, + other = me.normalView, + item; + + if (view.trackOver) { + if (view !== locked) { + other = locked; + } + item = other.getNode(record); + other.highlightItem(item); + } + }, + + onItemMouseLeave: function(view, record){ + var me = this, + locked = me.lockedView, + other = me.normalView; + + if (view.trackOver) { + if (view !== locked) { + other = locked; + } + other.clearHighlight(); + } + }, + + relayFn: function(name, args){ + args = args || []; + + var view = this.lockedView; + view[name].apply(view, args || []); + view = this.normalView; + view[name].apply(view, args || []); + }, + + getSelectionModel: function(){ + return this.panel.getSelectionModel(); + }, + + getStore: function(){ + return this.panel.store; + }, + + getNode: function(nodeInfo){ + // default to the normal view + return this.normalView.getNode(nodeInfo); + }, + + getCell: function(record, column){ + var view = this.getViewForColumn(column), + row; + + row = view.getNode(record); + return Ext.fly(row).down(column.getCellSelector()); + }, + + getRecord: function(node){ + var result = this.lockedView.getRecord(node); + if (!node) { + result = this.normalView.getRecord(node); + } + return result; + }, + + addElListener: function(eventName, fn, scope){ + this.relayFn('addElListener', arguments); + }, + + refreshNode: function(){ + this.relayFn('refreshNode', arguments); + }, + + refresh: function(){ + this.relayFn('refresh', arguments); + }, + + bindStore: function(){ + this.relayFn('bindStore', arguments); + }, + + addRowCls: function(){ + this.relayFn('addRowCls', arguments); + }, + + removeRowCls: function(){ + this.relayFn('removeRowCls', arguments); + } + +}); + +/** + * Component layout for {@link Ext.view.Table} + * @private + * + */ +Ext.define('Ext.view.TableLayout', { + extend: 'Ext.layout.component.Auto', + + alias: ['layout.tableview'], + type: 'tableview', + + beginLayout: function(ownerContext) { + var me = this; + + me.callParent(arguments); + + // Grab ContextItem for the driving HeaderContainer and the table only if their is a table to size + if (me.owner.table.dom) { + ownerContext.tableContext = ownerContext.getEl(me.owner.table); + + // Grab a ContextItem for the header container + ownerContext.headerContext = ownerContext.context.getCmp(me.headerCt); + } + }, + + calculate: function(ownerContext) { + var me = this; + + me.callParent(arguments); + + if (ownerContext.tableContext) { + if (ownerContext.state.columnWidthsSynced) { + if (ownerContext.hasProp('columnWidthsFlushed')) { + ownerContext.tableContext.setHeight(ownerContext.tableContext.el.dom.offsetHeight, false); + } else { + me.done = false; + } + } else { + if (ownerContext.headerContext.hasProp('columnWidthsDone')) { + ownerContext.context.queueFlush(me); + ownerContext.state.columnWidthsSynced = true; + } + + // Either our base class (Auto) needs to measureContentHeight + // if we are shrinkWrapHeight OR we need to measure the table + // element height if we are not shrinkWrapHeight + me.done = false; + } + } + }, + + measureContentHeight: function(ownerContext) { + // Only able to produce a valid contentHeight if we have flushed all column widths to the table (or there's no table at all). + if (!ownerContext.headerContext || ownerContext.hasProp('columnWidthsFlushed')) { + return this.callParent(arguments); + } + }, + + flush: function() { + var me = this, + context = me.ownerContext.context, + columns = me.headerCt.getGridColumns(), + i = 0, len = columns.length, + el = me.owner.el, + tableWidth = 0, + colWidth; + + // So that the setProp can trigger this layout. + context.currentLayout = me; + + // Set column width corresponding to each header + for (i = 0; i < len; i++) { + colWidth = columns[i].hidden ? 0 : context.getCmp(columns[i]).props.width; + tableWidth += colWidth; + + // Grab the col and set the width. + // CSS class is generated in TableChunker. + // Select composites because there may be several chunks. + el.select(me.getColumnSelector(columns[i])).setWidth(colWidth); + } + el.select('table.' + Ext.baseCSSPrefix + 'grid-table-resizer').setWidth(tableWidth); + + // Now we can measure contentHeight if necessary (if we are height shrinkwrapped) + me.ownerContext.setProp('columnWidthsFlushed', true); + }, + + finishedLayout: function(){ + var me = this, + first; + + me.callParent(arguments); + // In FF, in some cases during a resize or column hide/show, the '); + }, + + embedColSpan: function() { + return '{colspan}'; + }, + + embedFullWidth: function() { + return '{fullWidth}'; + }, + + getAdditionalData: function(data, idx, record, orig) { + var headerCt = this.view.headerCt, + colspan = headerCt.getColumnCount(), + fullWidth = headerCt.getFullWidth(), + items = headerCt.query('gridcolumn'), + itemsLn = items.length, + i = 0, + o = { + colspan: colspan, + fullWidth: fullWidth + }, + id, + tdClsKey, + colResizerCls; + + for (; i < itemsLn; i++) { + id = items[i].id; + tdClsKey = id + '-tdCls'; + colResizerCls = Ext.baseCSSPrefix + 'grid-col-resizer-'+id; + // give the inner td's the resizer class + // while maintaining anything a user may have injected via a custom + // renderer + o[tdClsKey] = colResizerCls + " " + (orig[tdClsKey] ? orig[tdClsKey] : ''); + // TODO: Unhackify the initial rendering width's + o[id+'-tdAttr'] = " style=\"width: " + (items[i].hidden ? 0 : items[i].getDesiredWidth()) + "px;\" "/* + (i === 0 ? " rowspan=\"2\"" : "")*/; + if (orig[id+'-tdAttr']) { + o[id+'-tdAttr'] += orig[id+'-tdAttr']; + } + } + + return o; + }, + + getMetaRowTplFragments: function() { + return { + embedFullWidth: this.embedFullWidth, + embedColSpan: this.embedColSpan + }; + }, + + getColumnSelector: function(header) { + var s = Ext.baseCSSPrefix + 'grid-col-resizer-' + header.id; + return 'th.' + s + ',td.' + s; + } +}); + +/** + * This feature is used to place a summary row at the bottom of the grid. If using a grouping, + * see {@link Ext.grid.feature.GroupingSummary}. There are 2 aspects to calculating the summaries, + * calculation and rendering. + * + * ## Calculation + * The summary value needs to be calculated for each column in the grid. This is controlled + * by the summaryType option specified on the column. There are several built in summary types, + * which can be specified as a string on the column configuration. These call underlying methods + * on the store: + * + * - {@link Ext.data.Store#count count} + * - {@link Ext.data.Store#sum sum} + * - {@link Ext.data.Store#min min} + * - {@link Ext.data.Store#max max} + * - {@link Ext.data.Store#average average} + * + * Alternatively, the summaryType can be a function definition. If this is the case, + * the function is called with an array of records to calculate the summary value. + * + * ## Rendering + * Similar to a column, the summary also supports a summaryRenderer function. This + * summaryRenderer is called before displaying a value. The function is optional, if + * not specified the default calculated value is shown. The summaryRenderer is called with: + * + * - value {Object} - The calculated value. + * - summaryData {Object} - Contains all raw summary values for the row. + * - field {String} - The name of the field we are calculating + * + * ## Example Usage + * + * @example + * Ext.define('TestResult', { + * extend: 'Ext.data.Model', + * fields: ['student', { + * name: 'mark', + * type: 'int' + * }] + * }); + * + * Ext.create('Ext.grid.Panel', { + * width: 200, + * height: 140, + * renderTo: document.body, + * features: [{ + * ftype: 'summary' + * }], + * store: { + * model: 'TestResult', + * data: [{ + * student: 'Student 1', + * mark: 84 + * },{ + * student: 'Student 2', + * mark: 72 + * },{ + * student: 'Student 3', + * mark: 96 + * },{ + * student: 'Student 4', + * mark: 68 + * }] + * }, + * columns: [{ + * dataIndex: 'student', + * text: 'Name', + * summaryType: 'count', + * summaryRenderer: function(value, summaryData, dataIndex) { + * return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : ''); + * } + * }, { + * dataIndex: 'mark', + * text: 'Mark', + * summaryType: 'average' + * }] + * }); + */ +Ext.define('Ext.grid.feature.Summary', { + + /* Begin Definitions */ + + extend: 'Ext.grid.feature.AbstractSummary', + + alias: 'feature.summary', + + /* End Definitions */ + + /** + * Gets any fragments needed for the template. + * @private + * @return {Object} The fragments + */ + getFragmentTpl: function() { + // this gets called before render, so we'll setup the data here. + this.summaryData = this.generateSummaryData(); + return this.getSummaryFragments(); + }, + + /** + * Overrides the closeRows method on the template so we can include our own custom + * footer. + * @private + * @return {Object} The custom fragments + */ + getTableFragments: function(){ + if (this.showSummaryRow) { + return { + closeRows: this.closeRows + }; + } + }, + + /** + * Provide our own custom footer for the grid. + * @private + * @return {String} The custom footer + */ + closeRows: function() { + return '{[this.printSummaryRow()]}'; + }, + + /** + * Gets the data for printing a template row + * @private + * @param {Number} index The index in the template + * @return {Array} The template values + */ + getPrintData: function(index){ + var me = this, + columns = me.view.headerCt.getColumnsForTpl(), + i = 0, + length = columns.length, + data = [], + active = me.summaryData, + column; + + for (; i < length; ++i) { + column = columns[i]; + column.gridSummaryValue = this.getColumnValue(column, active); + data.push(column); + } + return data; + }, + + /** + * Generates all of the summary data to be used when processing the template + * @private + * @return {Object} The summary data + */ + generateSummaryData: function(){ + var me = this, + data = {}, + store = me.view.store, + columns = me.view.headerCt.getColumnsForTpl(), + i = 0, + length = columns.length, + fieldData, + key, + comp; + + for (i = 0, length = columns.length; i < length; ++i) { + comp = Ext.getCmp(columns[i].id); + data[comp.id] = me.getSummary(store, comp.summaryType, comp.dataIndex, false); + } + return data; + } +}); + +/** + * This class provides an abstract grid editing plugin on selected {@link Ext.grid.column.Column columns}. + * The editable columns are specified by providing an {@link Ext.grid.column.Column#editor editor} + * in the {@link Ext.grid.column.Column column configuration}. + * + * **Note:** This class should not be used directly. See {@link Ext.grid.plugin.CellEditing} and + * {@link Ext.grid.plugin.RowEditing}. + */ +Ext.define('Ext.grid.plugin.Editing', { + alias: 'editing.editing', + extend: 'Ext.AbstractPlugin', + + requires: [ + 'Ext.grid.column.Column', + 'Ext.util.KeyNav' + ], + + mixins: { + observable: 'Ext.util.Observable' + }, + + /** + * @cfg {Number} clicksToEdit + * The number of clicks on a grid required to display the editor. + * The only accepted values are **1** and **2**. + */ + clicksToEdit: 2, + + /** + * @cfg {String} triggerEvent + * The event which triggers editing. Supercedes the {@link #clicksToEdit} configuration. Maybe one of: + * + * * cellclick + * * celldblclick + * * cellfocus + * * rowfocus + */ + triggerEvent: undefined, + + // private + defaultFieldXType: 'textfield', + + // cell, row, form + editStyle: '', + + constructor: function(config) { + var me = this; + + me.addEvents( + /** + * @event beforeedit + * Fires before editing is triggered. Return false from event handler to stop the editing. + * + * @param {Ext.grid.plugin.Editing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record being edited + * - field - The field name being edited + * - value - The value for the field being edited. + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that is being edited. + * - rowIdx - The row index that is being edited + * - colIdx - The column index that is being edited + * - cancel - Set this to true to cancel the edit or return false from your handler. + * - originalValue - Alias for value (only when using {@link Ext.grid.plugin.CellEditing CellEditing}). + */ + 'beforeedit', + + /** + * @event edit + * Fires after a editing. Usage example: + * + * grid.on('edit', function(editor, e) { + * // commit the changes right after editing finished + * e.record.commit(); + * }); + * + * @param {Ext.grid.plugin.Editing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record that was edited + * - field - The field name that was edited + * - value - The value being set + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that was edited. + * - rowIdx - The row index that was edited + * - colIdx - The column index that was edited + * - originalValue - The original value for the field, before the edit (only when using {@link Ext.grid.plugin.CellEditing CellEditing}) + * - originalValues - The original values for the field, before the edit (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + * - newValues - The new values being set (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + * - view - The grid view (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + * - store - The grid store (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + */ + 'edit', + + /** + * @event validateedit + * Fires after editing, but before the value is set in the record. Return false from event handler to + * cancel the change. + * + * Usage example showing how to remove the red triangle (dirty record indicator) from some records (not all). By + * observing the grid's validateedit event, it can be cancelled if the edit occurs on a targeted row (for example) + * and then setting the field's new value in the Record directly: + * + * grid.on('validateedit', function(editor, e) { + * var myTargetRow = 6; + * + * if (e.rowIdx == myTargetRow) { + * e.cancel = true; + * e.record.data[e.field] = e.value; + * } + * }); + * + * @param {Ext.grid.plugin.Editing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record being edited + * - field - The field name being edited + * - value - The value being set + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that is being edited. + * - rowIdx - The row index that is being edited + * - colIdx - The column index that is being edited + * - cancel - Set this to true to cancel the edit or return false from your handler. + * - originalValue - The original value for the field, before the edit (only when using {@link Ext.grid.plugin.CellEditing CellEditing}) + * - originalValues - The original values for the field, before the edit (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + * - newValues - The new values being set (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + * - view - The grid view (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + * - store - The grid store (only when using {@link Ext.grid.plugin.RowEditing RowEditing}) + */ + 'validateedit', + /** + * @event canceledit + * Fires when the user started editing but then cancelled the edit. + * @param {Ext.grid.plugin.Editing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record that was edited + * - field - The field name that was edited + * - value - The value being set + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that was edited. + * - rowIdx - The row index that was edited + * - colIdx - The column index that was edited + * - view - The grid view + * - store - The grid store + */ + 'canceledit' + + ); + me.callParent(arguments); + me.mixins.observable.constructor.call(me); + // TODO: Deprecated, remove in 5.0 + me.on("edit", function(editor, e) { + me.fireEvent("afteredit", editor, e); + }); + }, + + // private + init: function(grid) { + var me = this; + + me.grid = grid; + me.view = grid.view; + me.initEvents(); + me.mon(grid, 'reconfigure', me.onReconfigure, me); + me.onReconfigure(); + + grid.relayEvents(me, [ + /** + * @event beforeedit + * Forwarded event from Ext.grid.plugin.Editing. + * @member Ext.panel.Table + * @inheritdoc Ext.grid.plugin.Editing#beforeedit + */ + 'beforeedit', + /** + * @event edit + * Forwarded event from Ext.grid.plugin.Editing. + * @member Ext.panel.Table + * @inheritdoc Ext.grid.plugin.Editing#edit + */ + 'edit', + /** + * @event validateedit + * Forwarded event from Ext.grid.plugin.Editing. + * @member Ext.panel.Table + * @inheritdoc Ext.grid.plugin.Editing#validateedit + */ + 'validateedit', + /** + * @event canceledit + * Forwarded event from Ext.grid.plugin.Editing. + * @member Ext.panel.Table + * @inheritdoc Ext.grid.plugin.Editing#canceledit + */ + 'canceledit' + ]); + // Marks the grid as editable, so that the SelectionModel + // can make appropriate decisions during navigation + grid.isEditable = true; + grid.editingPlugin = grid.view.editingPlugin = me; + }, + + /** + * Fires after the grid is reconfigured + * @private + */ + onReconfigure: function() { + this.initFieldAccessors(this.view.getGridColumns()); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + var me = this, + grid = me.grid; + + Ext.destroy(me.keyNav); + me.removeFieldAccessors(grid.getView().getGridColumns()); + + // Clear all listeners from all our events, clear all managed listeners we added to other Observables + me.clearListeners(); + + delete me.grid.editingPlugin; + delete me.grid.view.editingPlugin; + delete me.grid; + delete me.view; + delete me.editor; + delete me.keyNav; + }, + + // private + getEditStyle: function() { + return this.editStyle; + }, + + // private + initFieldAccessors: function(columns) { + columns = [].concat(columns); + + var me = this, + c, + cLen = columns.length, + column; + + for (c = 0; c < cLen; c++) { + column = columns[c]; + + Ext.applyIf(column, { + getEditor: function(record, defaultField) { + return me.getColumnField(this, defaultField); + }, + + setEditor: function(field) { + me.setColumnField(this, field); + } + }); + } + }, + + // private + removeFieldAccessors: function(columns) { + columns = [].concat(columns); + + var c, + cLen = columns.length, + column; + + for (c = 0; c < cLen; c++) { + column = columns[c]; + + delete column.getEditor; + delete column.setEditor; + } + }, + + // private + // remaps to the public API of Ext.grid.column.Column.getEditor + getColumnField: function(columnHeader, defaultField) { + var field = columnHeader.field; + + if (!field && columnHeader.editor) { + field = columnHeader.editor; + delete columnHeader.editor; + } + + if (!field && defaultField) { + field = defaultField; + } + + if (field) { + if (Ext.isString(field)) { + field = { xtype: field }; + } + if (!field.isFormField) { + field = Ext.ComponentManager.create(field, this.defaultFieldXType); + } + columnHeader.field = field; + + Ext.apply(field, { + name: columnHeader.dataIndex + }); + + return field; + } + }, + + // private + // remaps to the public API of Ext.grid.column.Column.setEditor + setColumnField: function(column, field) { + if (Ext.isObject(field) && !field.isFormField) { + field = Ext.ComponentManager.create(field, this.defaultFieldXType); + } + column.field = field; + }, + + // private + initEvents: function() { + var me = this; + me.initEditTriggers(); + me.initCancelTriggers(); + }, + + // @abstract + initCancelTriggers: Ext.emptyFn, + + // private + initEditTriggers: function() { + var me = this, + view = me.view; + + // Listen for the edit trigger event. + if (me.triggerEvent == 'cellfocus') { + me.mon(view, 'cellfocus', me.onCellFocus, me); + } else if (me.triggerEvent == 'rowfocus') { + me.mon(view, 'rowfocus', me.onRowFocus, me); + } else { + + // Prevent the View from processing when the SelectionModel focuses. + // This is because the SelectionModel processes the mousedown event, and + // focusing causes a scroll which means that the subsequent mouseup might + // take place at a different document XY position, and will therefore + // not trigger a click. + // This Editor must call the View's focusCell method directly when we recieve a request to edit + if (view.selModel.isCellModel) { + view.onCellFocus = Ext.Function.bind(me.beforeViewCellFocus, me); + } + + // Listen for whichever click event we are configured to use + me.mon(view, me.triggerEvent || ('cell' + (me.clicksToEdit === 1 ? 'click' : 'dblclick')), me.onCellClick, me); + } + + // add/remove header event listeners need to be added immediately because + // columns can be added/removed before render + me.initAddRemoveHeaderEvents() + // wait until render to initialize keynav events since they are attached to an element + view.on('render', me.initKeyNavHeaderEvents, me, {single: true}); + }, + + // Override of View's method so that we can pre-empt the View's processing if the view is being triggered by a mousedown + beforeViewCellFocus: function(position) { + // Pass call on to view if the navigation is from the keyboard, or we are not going to edit this cell. + if (this.view.selModel.keyNavigation || !this.editing || !this.isCellEditable || !this.isCellEditable(position.row, position.columnHeader)) { + this.view.focusCell.apply(this.view, arguments); + } + }, + + // private. Used if we are triggered by the rowfocus event + onRowFocus: function(record, row, rowIdx) { + this.startEdit(row, 0); + }, + + // private. Used if we are triggered by the cellfocus event + onCellFocus: function(record, cell, position) { + this.startEdit(position.row, position.column); + }, + + // private. Used if we are triggered by a cellclick event + onCellClick: function(view, cell, colIdx, record, row, rowIdx, e) { + // cancel editing if the element that was clicked was a tree expander + if(!view.expanderSelector || !e.getTarget(view.expanderSelector)) { + this.startEdit(record, view.getHeaderAtIndex(colIdx)); + } + }, + + initAddRemoveHeaderEvents: function(){ + var me = this; + me.mon(me.grid.headerCt, { + scope: me, + add: me.onColumnAdd, + remove: me.onColumnRemove + }); + }, + + initKeyNavHeaderEvents: function() { + var me = this; + + me.keyNav = Ext.create('Ext.util.KeyNav', me.view.el, { + enter: me.onEnterKey, + esc: me.onEscKey, + scope: me + }); + }, + + // private + onColumnAdd: function(ct, column) { + if (column.isHeader) { + this.initFieldAccessors(column); + } + }, + + // private + onColumnRemove: function(ct, column) { + if (column.isHeader) { + this.removeFieldAccessors(column); + } + }, + + // private + onEnterKey: function(e) { + var me = this, + grid = me.grid, + selModel = grid.getSelectionModel(), + record, + pos, + columnHeader = grid.headerCt.getHeaderAtIndex(0); + + // Calculate editing start position from SelectionModel + // CellSelectionModel + if (selModel.getCurrentPosition) { + pos = selModel.getCurrentPosition(); + if (pos) { + record = grid.store.getAt(pos.row); + columnHeader = grid.headerCt.getHeaderAtIndex(pos.column); + } + } + // RowSelectionModel + else { + record = selModel.getLastSelected(); + } + + // If there was a selection to provide a starting context... + if (record && columnHeader) { + me.startEdit(record, columnHeader); + } + }, + + // private + onEscKey: function(e) { + this.cancelEdit(); + }, + + /** + * @private + * @template + * Template method called before editing begins. + * @param {Object} context The current editing context + * @return {Boolean} Return false to cancel the editing process + */ + beforeEdit: Ext.emptyFn, + + /** + * Starts editing the specified record, using the specified Column definition to define which field is being edited. + * @param {Ext.data.Model/Number} record The Store data record which backs the row to be edited, or index of the record in Store. + * @param {Ext.grid.column.Column/Number} columnHeader The Column object defining the column to be edited, or index of the column. + */ + startEdit: function(record, columnHeader) { + var me = this, + context = me.getEditingContext(record, columnHeader); + + if (context == null || me.beforeEdit(context) === false || me.fireEvent('beforeedit', me, context) === false || context.cancel || !me.grid.view.isVisible(true)) { + return false; + } + + me.context = context; + + /** + * @property {Boolean} editing + * Set to `true` while the editing plugin is active and an Editor is visible. + */ + me.editing = true; + }, + + // TODO: Have this use a new class Ext.grid.CellContext for use here, and in CellSelectionModel + /** + * @private + * Collects all information necessary for any subclasses to perform their editing functions. + * @param record + * @param columnHeader + * @returns {Object/undefined} The editing context based upon the passed record and column + */ + getEditingContext: function(record, columnHeader) { + var me = this, + grid = me.grid, + view = grid.getView(), + node = view.getNode(record), + rowIdx, colIdx; + + // An intervening listener may have deleted the Record + if (!node) { + return; + } + + // Coerce the column index to the closest visible column + columnHeader = grid.headerCt.getVisibleHeaderClosestToIndex(Ext.isNumber(columnHeader) ? columnHeader : columnHeader.getIndex()); + + // No corresponding column. Possible if all columns have been moved to the other side of a lockable grid pair + if (!columnHeader) { + return; + } + + colIdx = columnHeader.getIndex(); + + if (Ext.isNumber(record)) { + // look up record if numeric row index was passed + rowIdx = record; + record = view.getRecord(node); + } else { + rowIdx = view.indexOf(node); + } + + return { + grid : grid, + record : record, + field : columnHeader.dataIndex, + value : record.get(columnHeader.dataIndex), + row : view.getNode(rowIdx), + column : columnHeader, + rowIdx : rowIdx, + colIdx : colIdx + }; + }, + + /** + * Cancels any active edit that is in progress. + */ + cancelEdit: function() { + var me = this; + + me.editing = false; + me.fireEvent('canceledit', me, me.context); + }, + + /** + * Completes the edit if there is an active edit in progress. + */ + completeEdit: function() { + var me = this; + + if (me.editing && me.validateEdit()) { + me.fireEvent('edit', me, me.context); + } + + delete me.context; + me.editing = false; + }, + + // @abstract + validateEdit: function() { + var me = this, + context = me.context; + + return me.fireEvent('validateedit', me, context) !== false && !context.cancel; + } +}); + +/** + * The Ext.grid.plugin.CellEditing plugin injects editing at a cell level for a Grid. Only a single + * cell will be editable at a time. The field that will be used for the editor is defined at the + * {@link Ext.grid.column.Column#editor editor}. The editor can be a field instance or a field configuration. + * + * If an editor is not specified for a particular column then that cell will not be editable and it will + * be skipped when activated via the mouse or the keyboard. + * + * The editor may be shared for each column in the grid, or a different one may be specified for each column. + * An appropriate field type should be chosen to match the data structure that it will be editing. For example, + * to edit a date, it would be useful to specify {@link Ext.form.field.Date} as the editor. + * + * ## Example + * + * A grid with editor for the name and the email columns: + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'simpsonsStore', + * fields:['name', 'email', 'phone'], + * data:{'items':[ + * {"name":"Lisa", "email":"lisa@simpsons.com", "phone":"555-111-1224"}, + * {"name":"Bart", "email":"bart@simpsons.com", "phone":"555-222-1234"}, + * {"name":"Homer", "email":"home@simpsons.com", "phone":"555-222-1244"}, + * {"name":"Marge", "email":"marge@simpsons.com", "phone":"555-222-1254"} + * ]}, + * proxy: { + * type: 'memory', + * reader: { + * type: 'json', + * root: 'items' + * } + * } + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Simpsons', + * store: Ext.data.StoreManager.lookup('simpsonsStore'), + * columns: [ + * {header: 'Name', dataIndex: 'name', editor: 'textfield'}, + * {header: 'Email', dataIndex: 'email', flex:1, + * editor: { + * xtype: 'textfield', + * allowBlank: false + * } + * }, + * {header: 'Phone', dataIndex: 'phone'} + * ], + * selType: 'cellmodel', + * plugins: [ + * Ext.create('Ext.grid.plugin.CellEditing', { + * clicksToEdit: 1 + * }) + * ], + * height: 200, + * width: 400, + * renderTo: Ext.getBody() + * }); + * + * This requires a little explanation. We're passing in `store` and `columns` as normal, but + * we also specify a {@link Ext.grid.column.Column#field field} on two of our columns. For the + * Name column we just want a default textfield to edit the value, so we specify 'textfield'. + * For the Email column we customized the editor slightly by passing allowBlank: false, which + * will provide inline validation. + * + * To support cell editing, we also specified that the grid should use the 'cellmodel' + * {@link Ext.grid.Panel#selType selType}, and created an instance of the CellEditing plugin, + * which we configured to activate each editor after a single click. + * + */ +Ext.define('Ext.grid.plugin.CellEditing', { + alias: 'plugin.cellediting', + extend: 'Ext.grid.plugin.Editing', + requires: ['Ext.grid.CellEditor', 'Ext.util.DelayedTask'], + + constructor: function() { + /** + * @event beforeedit + * Fires before cell editing is triggered. Return false from event handler to stop the editing. + * + * @param {Ext.grid.plugin.CellEditing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record being edited + * - field - The field name being edited + * - value - The value for the field being edited. + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that is being edited. + * - rowIdx - The row index that is being edited + * - colIdx - The column index that is being edited + * - cancel - Set this to true to cancel the edit or return false from your handler. + */ + /** + * @event edit + * Fires after a cell is edited. Usage example: + * + * grid.on('edit', function(editor, e) { + * // commit the changes right after editing finished + * e.record.commit(); + * }); + * + * @param {Ext.grid.plugin.CellEditing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record that was edited + * - field - The field name that was edited + * - value - The value being set + * - originalValue - The original value for the field, before the edit. + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that was edited. + * - rowIdx - The row index that was edited + * - colIdx - The column index that was edited + */ + /** + * @event validateedit + * Fires after a cell is edited, but before the value is set in the record. Return false from event handler to + * cancel the change. + * + * Usage example showing how to remove the red triangle (dirty record indicator) from some records (not all). By + * observing the grid's validateedit event, it can be cancelled if the edit occurs on a targeted row (for + * example) and then setting the field's new value in the Record directly: + * + * grid.on('validateedit', function(editor, e) { + * var myTargetRow = 6; + * + * if (e.row == myTargetRow) { + * e.cancel = true; + * e.record.data[e.field] = e.value; + * } + * }); + * + * @param {Ext.grid.plugin.CellEditing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record being edited + * - field - The field name being edited + * - value - The value being set + * - originalValue - The original value for the field, before the edit. + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that is being edited. + * - rowIdx - The row index that is being edited + * - colIdx - The column index that is being edited + * - cancel - Set this to true to cancel the edit or return false from your handler. + */ + /** + * @event canceledit + * Fires when the user started editing a cell but then cancelled the edit. + * @param {Ext.grid.plugin.CellEditing} editor + * @param {Object} e An edit event with the following properties: + * + * - grid - The grid + * - record - The record that was edited + * - field - The field name that was edited + * - value - The value being set + * - row - The grid table row + * - column - The grid {@link Ext.grid.column.Column Column} defining the column that was edited. + * - rowIdx - The row index that was edited + * - colIdx - The column index that was edited + */ + + this.callParent(arguments); + this.editors = new Ext.util.MixedCollection(false, function(editor) { + return editor.editorId; + }); + this.editTask = new Ext.util.DelayedTask(); + }, + + onReconfigure: function(){ + this.editors.clear(); + this.callParent(); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + var me = this; + me.editTask.cancel(); + me.editors.each(Ext.destroy, Ext); + me.editors.clear(); + me.callParent(arguments); + }, + + onBodyScroll: function() { + var me = this, + ed = me.getActiveEditor(), + scroll = me.view.el.getScroll(); + + // Scroll happened during editing... + if (ed && ed.editing) { + // Terminate editing only on vertical scroll. Horiz scroll can be caused by tabbing between cells. + if (scroll.top !== me.scroll.top) { + if (ed.field) { + if (ed.field.triggerBlur) { + ed.field.triggerBlur(); + } else { + ed.field.blur(); + } + } + } + // Horiz scroll just requires that the editor be realigned. + else { + ed.realign(); + } + } + me.scroll = scroll; + }, + + // private + // Template method called from base class's initEvents + initCancelTriggers: function() { + var me = this, + grid = me.grid, + view = grid.view; + + view.addElListener('mousewheel', me.cancelEdit, me); + me.mon(view, 'bodyscroll', me.onBodyScroll, me); + me.mon(grid, { + columnresize: me.cancelEdit, + columnmove: me.cancelEdit, + scope: me + }); + }, + + isCellEditable: function(record, columnHeader) { + var me = this, + context = me.getEditingContext(record, columnHeader); + + if (me.grid.view.isVisible(true) && context) { + columnHeader = context.column; + record = context.record; + if (columnHeader && me.getEditor(record, columnHeader)) { + return true; + } + } + }, + + /** + * Starts editing the specified record, using the specified Column definition to define which field is being edited. + * @param {Ext.data.Model} record The Store data record which backs the row to be edited. + * @param {Ext.grid.column.Column} columnHeader The Column object defining the column to be edited. + * @return `true` if editing was started, `false` otherwise. + */ + startEdit: function(record, columnHeader) { + var me = this, + context = me.getEditingContext(record, columnHeader), + value, ed; + + // Complete the edit now, before getting the editor's target + // cell DOM element. Completing the edit causes a row refresh. + // Also allows any post-edit events to take effect before continuing + me.completeEdit(); + + // Cancel editing if EditingContext could not be found (possibly because record has been deleted by an intervening listener), or if the grid view is not currently visible + if (!context || !me.grid.view.isVisible(true)) { + return false; + } + + record = context.record; + columnHeader = context.column; + + // See if the field is editable for the requested record + if (columnHeader && !columnHeader.getEditor(record)) { + return false; + } + + value = record.get(columnHeader.dataIndex); + context.originalValue = context.value = value; + if (me.beforeEdit(context) === false || me.fireEvent('beforeedit', me, context) === false || context.cancel) { + return false; + } + + ed = me.getEditor(record, columnHeader); + + // Whether we are going to edit or not, ensure the edit cell is scrolled into view + me.grid.view.cancelFocus(); + me.view.focusCell({ + row: context.rowIdx, + column: context.colIdx + }); + if (ed) { + me.editTask.delay(15, me.showEditor, me, [ed, context, value]); + return true; + } + return false; + }, + + showEditor: function(ed, context, value) { + var me = this, + record = context.record, + columnHeader = context.column, + sm = me.grid.getSelectionModel(), + selection = sm.getCurrentPosition(); + + me.context = context; + me.setActiveEditor(ed); + me.setActiveRecord(record); + me.setActiveColumn(columnHeader); + + // Select cell on edit only if it's not the currently selected cell + if (sm.selectByPosition && (!selection || selection.column !== context.colIdx || selection.row !== context.rowIdx)) { + sm.selectByPosition({ + row: context.rowIdx, + column: context.colIdx + }); + } + + ed.startEdit(me.getCell(record, columnHeader), value); + me.editing = true; + me.scroll = me.view.el.getScroll(); + }, + + completeEdit: function() { + var activeEd = this.getActiveEditor(); + if (activeEd) { + activeEd.completeEdit(); + this.editing = false; + } + }, + + // internal getters/setters + setActiveEditor: function(ed) { + this.activeEditor = ed; + }, + + getActiveEditor: function() { + return this.activeEditor; + }, + + setActiveColumn: function(column) { + this.activeColumn = column; + }, + + getActiveColumn: function() { + return this.activeColumn; + }, + + setActiveRecord: function(record) { + this.activeRecord = record; + }, + + getActiveRecord: function() { + return this.activeRecord; + }, + + getEditor: function(record, column) { + var me = this, + editors = me.editors, + editorId = column.getItemId(), + editor = editors.getByKey(editorId); + + if (editor) { + return editor; + } else { + editor = column.getEditor(record); + if (!editor) { + return false; + } + + // Allow them to specify a CellEditor in the Column + // Either way, the Editor is a floating Component, and must be attached to an ownerCt + // which it uses to traverse upwards to find a ZIndexManager at render time. + if (!(editor instanceof Ext.grid.CellEditor)) { + editor = new Ext.grid.CellEditor({ + editorId: editorId, + field: editor, + ownerCt: me.grid + }); + } else { + editor.ownerCt = me.grid; + } + editor.editingPlugin = me; + editor.isForTree = me.grid.isTree; + editor.on({ + scope: me, + specialkey: me.onSpecialKey, + complete: me.onEditComplete, + canceledit: me.cancelEdit + }); + editors.add(editor); + return editor; + } + }, + + // inherit docs + setColumnField: function(column, field) { + var ed = this.editors.getByKey(column.getItemId()); + Ext.destroy(ed, column.field); + this.editors.removeAtKey(column.getItemId()); + this.callParent(arguments); + }, + + /** + * Gets the cell (td) for a particular record and column. + * @param {Ext.data.Model} record + * @param {Ext.grid.column.Column} column + * @private + */ + getCell: function(record, column) { + return this.grid.getView().getCell(record, column); + }, + + onSpecialKey: function(ed, field, e) { + var me = this, + grid = me.grid, + sm; + + if (e.getKey() === e.TAB) { + e.stopEvent(); + + if (ed) { + // Allow the field to act on tabs before onEditorTab, which ends + // up calling completeEdit. This is useful for picker type fields. + ed.onEditorTab(e); + } + + sm = grid.getSelectionModel(); + if (sm.onEditorTab) { + sm.onEditorTab(me, e); + } + } + }, + + onEditComplete : function(ed, value, startValue) { + var me = this, + grid = me.grid, + activeColumn = me.getActiveColumn(), + sm = grid.getSelectionModel(), + record; + + if (activeColumn) { + record = me.context.record; + + me.setActiveEditor(null); + me.setActiveColumn(null); + me.setActiveRecord(null); + + if (!me.validateEdit()) { + return; + } + + // Only update the record if the new value is different than the + // startValue. When the view refreshes its el will gain focus + if (!record.isEqual(value, startValue)) { + record.set(activeColumn.dataIndex, value); + } + + // Restore focus back to the view's element. + if (sm.setCurrentPosition) { + sm.setCurrentPosition(sm.getCurrentPosition()); + } + grid.getView().getEl(activeColumn).focus(); + + me.context.value = value; + me.fireEvent('edit', me, me.context); + } + }, + + /** + * Cancels any active editing. + */ + cancelEdit: function() { + var me = this, + activeEd = me.getActiveEditor(), + viewEl = me.grid.getView().getEl(me.getActiveColumn()); + + me.setActiveEditor(null); + me.setActiveColumn(null); + me.setActiveRecord(null); + if (activeEd) { + activeEd.cancelEdit(); + viewEl.focus(); + me.callParent(arguments); + } + }, + + /** + * Starts editing by position (row/column) + * @param {Object} position A position with keys of row and column. + */ + startEditByPosition: function(position) { + + // Coerce the edit column to the closest visible column + position.column = this.view.getHeaderCt().getVisibleHeaderClosestToIndex(position.column).getIndex(); + + return this.startEdit(position.row, position.column); + } +}); + +/** + * This plugin provides drag and/or drop functionality for a GridView. + * + * It creates a specialized instance of {@link Ext.dd.DragZone DragZone} which knows how to drag out of a {@link + * Ext.grid.View GridView} and loads the data object which is passed to a cooperating {@link Ext.dd.DragZone DragZone}'s + * methods with the following properties: + * + * - `copy` : Boolean + * + * The value of the GridView's `copy` property, or `true` if the GridView was configured with `allowCopy: true` _and_ + * the control key was pressed when the drag operation was begun. + * + * - `view` : GridView + * + * The source GridView from which the drag originated. + * + * - `ddel` : HtmlElement + * + * The drag proxy element which moves with the mouse + * + * - `item` : HtmlElement + * + * The GridView node upon which the mousedown event was registered. + * + * - `records` : Array + * + * An Array of {@link Ext.data.Model Model}s representing the selected data being dragged from the source GridView. + * + * It also creates a specialized instance of {@link Ext.dd.DropZone} which cooperates with other DropZones which are + * members of the same ddGroup which processes such data objects. + * + * Adding this plugin to a view means that two new events may be fired from the client GridView, `{@link #beforedrop + * beforedrop}` and `{@link #drop drop}` + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'simpsonsStore', + * fields:['name'], + * data: [["Lisa"], ["Bart"], ["Homer"], ["Marge"]], + * proxy: { + * type: 'memory', + * reader: 'array' + * } + * }); + * + * Ext.create('Ext.grid.Panel', { + * store: 'simpsonsStore', + * columns: [ + * {header: 'Name', dataIndex: 'name', flex: true} + * ], + * viewConfig: { + * plugins: { + * ptype: 'gridviewdragdrop', + * dragText: 'Drag and drop to reorganize' + * } + * }, + * height: 200, + * width: 400, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.grid.plugin.DragDrop', { + extend: 'Ext.AbstractPlugin', + alias: 'plugin.gridviewdragdrop', + + uses: [ + 'Ext.view.DragZone', + 'Ext.grid.ViewDropZone' + ], + + /** + * @event beforedrop + * **This event is fired through the GridView. Add listeners to the GridView object** + * + * Fired when a drop gesture has been triggered by a mouseup event in a valid drop position in the GridView. + * + * @param {HTMLElement} node The GridView node **if any** over which the mouse was positioned. + * + * Returning `false` to this event signals that the drop gesture was invalid, and if the drag proxy will animate + * back to the point from which the drag began. + * + * Returning `0` To this event signals that the data transfer operation should not take place, but that the gesture + * was valid, and that the repair operation should not take place. + * + * Any other return value continues with the data transfer operation. + * + * @param {Object} data The data object gathered at mousedown time by the cooperating {@link Ext.dd.DragZone + * DragZone}'s {@link Ext.dd.DragZone#getDragData getDragData} method it contains the following properties: + * + * - copy : Boolean + * + * The value of the GridView's `copy` property, or `true` if the GridView was configured with `allowCopy: true` and + * the control key was pressed when the drag operation was begun + * + * - view : GridView + * + * The source GridView from which the drag originated. + * + * - ddel : HtmlElement + * + * The drag proxy element which moves with the mouse + * + * - item : HtmlElement + * + * The GridView node upon which the mousedown event was registered. + * + * - records : Array + * + * An Array of {@link Ext.data.Model Model}s representing the selected data being dragged from the source GridView. + * + * @param {Ext.data.Model} overModel The Model over which the drop gesture took place. + * + * @param {String} dropPosition `"before"` or `"after"` depending on whether the mouse is above or below the midline + * of the node. + * + * @param {Function} dropFunction + * + * A function to call to complete the data transfer operation and either move or copy Model instances from the + * source View's Store to the destination View's Store. + * + * This is useful when you want to perform some kind of asynchronous processing before confirming the drop, such as + * an {@link Ext.window.MessageBox#confirm confirm} call, or an Ajax request. + * + * Return `0` from this event handler, and call the `dropFunction` at any time to perform the data transfer. + */ + + /** + * @event drop + * **This event is fired through the GridView. Add listeners to the GridView object** Fired when a drop operation + * has been completed and the data has been moved or copied. + * + * @param {HTMLElement} node The GridView node **if any** over which the mouse was positioned. + * + * @param {Object} data The data object gathered at mousedown time by the cooperating {@link Ext.dd.DragZone + * DragZone}'s {@link Ext.dd.DragZone#getDragData getDragData} method it contains the following properties: + * + * - copy : Boolean + * + * The value of the GridView's `copy` property, or `true` if the GridView was configured with `allowCopy: true` and + * the control key was pressed when the drag operation was begun + * + * - view : GridView + * + * The source GridView from which the drag originated. + * + * - ddel : HtmlElement + * + * The drag proxy element which moves with the mouse + * + * - item : HtmlElement + * + * The GridView node upon which the mousedown event was registered. + * + * - records : Array + * + * An Array of {@link Ext.data.Model Model}s representing the selected data being dragged from the source GridView. + * + * @param {Ext.data.Model} overModel The Model over which the drop gesture took place. + * + * @param {String} dropPosition `"before"` or `"after"` depending on whether the mouse is above or below the midline + * of the node. + */ + // + /** + * @cfg + * The text to show while dragging. + * + * Two placeholders can be used in the text: + * + * - `{0}` The number of selected items. + * - `{1}` 's' when more than 1 items (only useful for English). + */ + dragText : '{0} selected row{1}', + // + + /** + * @cfg {String} ddGroup + * A named drag drop group to which this object belongs. If a group is specified, then both the DragZones and + * DropZone used by this plugin will only interact with other drag drop objects in the same group. + */ + ddGroup : "GridDD", + + /** + * @cfg {String} dragGroup + * The ddGroup to which the DragZone will belong. + * + * This defines which other DropZones the DragZone will interact with. Drag/DropZones only interact with other + * Drag/DropZones which are members of the same ddGroup. + */ + + /** + * @cfg {String} dropGroup + * The ddGroup to which the DropZone will belong. + * + * This defines which other DragZones the DropZone will interact with. Drag/DropZones only interact with other + * Drag/DropZones which are members of the same ddGroup. + */ + + /** + * @cfg {Boolean} enableDrop + * False to disallow the View from accepting drop gestures. + */ + enableDrop: true, + + /** + * @cfg {Boolean} enableDrag + * False to disallow dragging items from the View. + */ + enableDrag: true, + + init : function(view) { + view.on('render', this.onViewRender, this, {single: true}); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + Ext.destroy(this.dragZone, this.dropZone); + }, + + enable: function() { + var me = this; + if (me.dragZone) { + me.dragZone.unlock(); + } + if (me.dropZone) { + me.dropZone.unlock(); + } + me.callParent(); + }, + + disable: function() { + var me = this; + if (me.dragZone) { + me.dragZone.lock(); + } + if (me.dropZone) { + me.dropZone.lock(); + } + me.callParent(); + }, + + onViewRender : function(view) { + var me = this; + + if (me.enableDrag) { + me.dragZone = new Ext.view.DragZone({ + view: view, + ddGroup: me.dragGroup || me.ddGroup, + dragText: me.dragText + }); + } + + if (me.enableDrop) { + me.dropZone = new Ext.grid.ViewDropZone({ + view: view, + ddGroup: me.dropGroup || me.ddGroup + }); + } + } +}); + +/** + * The Ext.grid.plugin.RowEditing plugin injects editing at a row level for a Grid. When editing begins, + * a small floating dialog will be shown for the appropriate row. Each editable column will show a field + * for editing. There is a button to save or cancel all changes for the edit. + * + * The field that will be used for the editor is defined at the + * {@link Ext.grid.column.Column#editor editor}. The editor can be a field instance or a field configuration. + * If an editor is not specified for a particular column then that column won't be editable and the value of + * the column will be displayed. To provide a custom renderer for non-editable values, use the + * {@link Ext.grid.column.Column#editRenderer editRenderer} configuration on the column. + * + * The editor may be shared for each column in the grid, or a different one may be specified for each column. + * An appropriate field type should be chosen to match the data structure that it will be editing. For example, + * to edit a date, it would be useful to specify {@link Ext.form.field.Date} as the editor. + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'simpsonsStore', + * fields:['name', 'email', 'phone'], + * data: [ + * {"name":"Lisa", "email":"lisa@simpsons.com", "phone":"555-111-1224"}, + * {"name":"Bart", "email":"bart@simpsons.com", "phone":"555-222-1234"}, + * {"name":"Homer", "email":"home@simpsons.com", "phone":"555-222-1244"}, + * {"name":"Marge", "email":"marge@simpsons.com", "phone":"555-222-1254"} + * ] + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Simpsons', + * store: Ext.data.StoreManager.lookup('simpsonsStore'), + * columns: [ + * {header: 'Name', dataIndex: 'name', editor: 'textfield'}, + * {header: 'Email', dataIndex: 'email', flex:1, + * editor: { + * xtype: 'textfield', + * allowBlank: false + * } + * }, + * {header: 'Phone', dataIndex: 'phone'} + * ], + * selType: 'rowmodel', + * plugins: [ + * Ext.create('Ext.grid.plugin.RowEditing', { + * clicksToEdit: 1 + * }) + * ], + * height: 200, + * width: 400, + * renderTo: Ext.getBody() + * }); + * + */ +Ext.define('Ext.grid.plugin.RowEditing', { + extend: 'Ext.grid.plugin.Editing', + alias: 'plugin.rowediting', + + requires: [ + 'Ext.grid.RowEditor' + ], + + editStyle: 'row', + + /** + * @cfg {Boolean} autoCancel + * True to automatically cancel any pending changes when the row editor begins editing a new row. + * False to force the user to explicitly cancel the pending changes. Defaults to true. + */ + autoCancel: true, + + /** + * @cfg {Number} clicksToMoveEditor + * The number of clicks to move the row editor to a new row while it is visible and actively editing another row. + * This will default to the same value as {@link Ext.grid.plugin.Editing#clicksToEdit clicksToEdit}. + */ + + /** + * @cfg {Boolean} errorSummary + * True to show a {@link Ext.tip.ToolTip tooltip} that summarizes all validation errors present + * in the row editor. Set to false to prevent the tooltip from showing. Defaults to true. + */ + errorSummary: true, + + constructor: function() { + var me = this; + + me.callParent(arguments); + + if (!me.clicksToMoveEditor) { + me.clicksToMoveEditor = me.clicksToEdit; + } + + me.autoCancel = !!me.autoCancel; + }, + + init: function(grid) { + this.callParent([grid]); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + var me = this; + Ext.destroy(me.editor); + me.callParent(arguments); + }, + + /** + * Starts editing the specified record, using the specified Column definition to define which field is being edited. + * @param {Ext.data.Model} record The Store data record which backs the row to be edited. + * @param {Ext.data.Model} columnHeader The Column object defining the column to be edited. + * @return `true` if editing was started, `false` otherwise. + */ + startEdit: function(record, columnHeader) { + var me = this, + editor = me.getEditor(); + + if ((editor.beforeEdit() !== false) && (me.callParent(arguments) !== false)) { + editor.startEdit(me.context.record, me.context.column); + return true; + } + return false; + }, + + // private + cancelEdit: function() { + var me = this; + + if (me.editing) { + me.getEditor().cancelEdit(); + me.callParent(arguments); + } + }, + + // private + completeEdit: function() { + var me = this; + + if (me.editing && me.validateEdit()) { + me.editing = false; + me.fireEvent('edit', me, me.context); + } + }, + + // private + validateEdit: function() { + var me = this, + editor = me.editor, + context = me.context, + record = context.record, + newValues = {}, + originalValues = {}, + editors = editor.items.items, + e, + eLen = editors.length, + name, item; + + for (e = 0; e < eLen; e++) { + item = editors[e]; + name = item.name; + + newValues[name] = item.getValue(); + originalValues[name] = record.get(name); + } + + Ext.apply(context, { + newValues : newValues, + originalValues : originalValues + }); + + return me.callParent(arguments) && me.getEditor().completeEdit(); + }, + + // private + getEditor: function() { + var me = this; + + if (!me.editor) { + me.editor = me.initEditor(); + } + return me.editor; + }, + + // private + initEditor: function() { + var me = this, + grid = me.grid, + view = me.view, + headerCt = grid.headerCt, + btns = ['saveBtnText', 'cancelBtnText', 'errorsText', 'dirtyText'], + b, + bLen = btns.length, + cfg = { + autoCancel: me.autoCancel, + errorSummary: me.errorSummary, + fields: headerCt.getGridColumns(), + hidden: true, + view: view, + // keep a reference.. + editingPlugin: me, + renderTo: view.el + }, + item; + + for (b = 0; b < bLen; b++) { + item = btns[b]; + + if (Ext.isDefined(me[item])) { + cfg[item] = me[item]; + } + } + + return Ext.create('Ext.grid.RowEditor', cfg); + }, + + // private + initEditTriggers: function() { + var me = this, + view = me.view, + moveEditorEvent = me.clicksToMoveEditor === 1 ? 'click' : 'dblclick'; + + me.callParent(arguments); + + if (me.clicksToMoveEditor !== me.clicksToEdit) { + me.mon(view, 'cell' + moveEditorEvent, me.moveEditorByClick, me); + } + + view.on({ + render: function() { + me.mon(me.grid.headerCt, { + scope: me, + columnresize: me.onColumnResize, + columnhide: me.onColumnHide, + columnshow: me.onColumnShow, + columnmove: me.onColumnMove + }); + }, + single: true + }); + }, + + startEditByClick: function() { + var me = this; + if (!me.editing || me.clicksToMoveEditor === me.clicksToEdit) { + me.callParent(arguments); + } + }, + + moveEditorByClick: function() { + var me = this; + if (me.editing) { + me.superclass.onCellClick.apply(me, arguments); + } + }, + + // private + onColumnAdd: function(ct, column) { + if (column.isHeader) { + var me = this, + editor; + + me.initFieldAccessors(column); + + // Only inform the editor about a new column if the editor has already been instantiated, + // so do not use getEditor which instantiates the editor if not present. + editor = me.editor; + if (editor && editor.onColumnAdd) { + editor.onColumnAdd(column); + } + } + }, + + // private + onColumnRemove: function(ct, column) { + if (column.isHeader) { + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnRemove) { + editor.onColumnRemove(column); + } + me.removeFieldAccessors(column); + } + }, + + // private + onColumnResize: function(ct, column, width) { + if (column.isHeader) { + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnResize) { + editor.onColumnResize(column, width); + } + } + }, + + // private + onColumnHide: function(ct, column) { + // no isHeader check here since its already a columnhide event. + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnHide) { + editor.onColumnHide(column); + } + }, + + // private + onColumnShow: function(ct, column) { + // no isHeader check here since its already a columnshow event. + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnShow) { + editor.onColumnShow(column); + } + }, + + // private + onColumnMove: function(ct, column, fromIdx, toIdx) { + // no isHeader check here since its already a columnmove event. + var me = this, + editor = me.getEditor(); + + if (editor && editor.onColumnMove) { + // Must adjust the toIdx to account for removal if moving rightwards + // because RowEditor.onColumnMove just calls Container.move which does not do this. + editor.onColumnMove(column, fromIdx, toIdx - (toIdx > fromIdx ? 1 : 0)); + } + }, + + // private + setColumnField: function(column, field) { + var me = this, + editor = me.getEditor(); + + editor.removeField(column); + me.callParent(arguments); + me.getEditor().setField(column); + } +}); + +/** + * A specialized grid implementation intended to mimic the traditional property grid as typically seen in + * development IDEs. Each row in the grid represents a property of some object, and the data is stored + * as a set of name/value pairs in {@link Ext.grid.property.Property Properties}. Example usage: + * + * @example + * Ext.create('Ext.grid.property.Grid', { + * title: 'Properties Grid', + * width: 300, + * renderTo: Ext.getBody(), + * source: { + * "(name)": "My Object", + * "Created": Ext.Date.parse('10/15/2006', 'm/d/Y'), + * "Available": false, + * "Version": 0.01, + * "Description": "A test object" + * } + * }); + */ +Ext.define('Ext.grid.property.Grid', { + + extend: 'Ext.grid.Panel', + + alias: 'widget.propertygrid', + + alternateClassName: 'Ext.grid.PropertyGrid', + + uses: [ + 'Ext.grid.plugin.CellEditing', + 'Ext.grid.property.Store', + 'Ext.grid.property.HeaderContainer', + 'Ext.XTemplate', + 'Ext.grid.CellEditor', + 'Ext.form.field.Date', + 'Ext.form.field.Text', + 'Ext.form.field.Number', + 'Ext.form.field.ComboBox' + ], + + /** + * @cfg {Object} propertyNames + * An object containing custom property name/display name pairs. + * If specified, the display name will be shown in the name column instead of the property name. + */ + + /** + * @cfg {Object} source + * A data object to use as the data source of the grid (see {@link #setSource} for details). + */ + + /** + * @cfg {Object} customEditors + * An object containing name/value pairs of custom editor type definitions that allow + * the grid to support additional types of editable fields. By default, the grid supports strongly-typed editing + * of strings, dates, numbers and booleans using built-in form editors, but any custom type can be supported and + * associated with a custom input control by specifying a custom editor. The name of the editor + * type should correspond with the name of the property that will use the editor. Example usage: + * + * var grid = new Ext.grid.property.Grid({ + * + * // Custom editors for certain property names + * customEditors: { + * evtStart: Ext.create('Ext.form.TimeField', {selectOnFocus: true}) + * }, + * + * // Displayed name for property names in the source + * propertyNames: { + * evtStart: 'Start Time' + * }, + * + * // Data object containing properties to edit + * source: { + * evtStart: '10:00 AM' + * } + * }); + */ + + /** + * @cfg {Object} customRenderers + * An object containing name/value pairs of custom renderer type definitions that allow + * the grid to support custom rendering of fields. By default, the grid supports strongly-typed rendering + * of strings, dates, numbers and booleans using built-in form editors, but any custom type can be supported and + * associated with the type of the value. The name of the renderer type should correspond with the name of the property + * that it will render. Example usage: + * + * var grid = Ext.create('Ext.grid.property.Grid', { + * customRenderers: { + * Available: function(v){ + * if (v) { + * return 'Yes'; + * } else { + * return 'No'; + * } + * } + * }, + * source: { + * Available: true + * } + * }); + */ + + /** + * @cfg {String} valueField + * The name of the field from the property store to use as the value field name. + * This may be useful if you do not configure the property Grid from an object, but use your own store configuration. + */ + valueField: 'value', + + /** + * @cfg {String} nameField + * The name of the field from the property store to use as the property field name. + * This may be useful if you do not configure the property Grid from an object, but use your own store configuration. + */ + nameField: 'name', + + /** + * @cfg {Number} [nameColumnWidth=115] + * Specify the width for the name column. The value column will take any remaining space. + */ + + // private config overrides + enableColumnMove: false, + columnLines: true, + stripeRows: false, + trackMouseOver: false, + clicksToEdit: 1, + enableHdMenu: false, + + // private + initComponent : function(){ + var me = this; + + me.addCls(Ext.baseCSSPrefix + 'property-grid'); + me.plugins = me.plugins || []; + + // Enable cell editing. Inject a custom startEdit which always edits column 1 regardless of which column was clicked. + me.plugins.push(new Ext.grid.plugin.CellEditing({ + clicksToEdit: me.clicksToEdit, + + // Inject a startEdit which always edits the value column + startEdit: function(record, column) { + // Maintainer: Do not change this 'this' to 'me'! It is the CellEditing object's own scope. + return this.self.prototype.startEdit.call(this, record, me.headerCt.child('#' + me.valueField)); + } + })); + + me.selModel = { + selType: 'cellmodel', + onCellSelect: function(position) { + if (position.column != 1) { + position.column = 1; + } + return this.self.prototype.onCellSelect.call(this, position); + } + }; + me.customRenderers = me.customRenderers || {}; + me.customEditors = me.customEditors || {}; + + // Create a property.Store from the source object unless configured with a store + if (!me.store) { + me.propStore = me.store = new Ext.grid.property.Store(me, me.source); + } + + if (me.sortableColumns) { + me.store.sort('name', 'ASC'); + } + me.columns = new Ext.grid.property.HeaderContainer(me, me.store); + + me.addEvents( + /** + * @event beforepropertychange + * Fires before a property value changes. Handlers can return false to cancel the property change + * (this will internally call {@link Ext.data.Model#reject} on the property's record). + * @param {Object} source The source data object for the grid (corresponds to the same object passed in + * as the {@link #source} config property). + * @param {String} recordId The record's id in the data store + * @param {Object} value The current edited property value + * @param {Object} oldValue The original property value prior to editing + */ + 'beforepropertychange', + /** + * @event propertychange + * Fires after a property value has changed. + * @param {Object} source The source data object for the grid (corresponds to the same object passed in + * as the {@link #source} config property). + * @param {String} recordId The record's id in the data store + * @param {Object} value The current edited property value + * @param {Object} oldValue The original property value prior to editing + */ + 'propertychange' + ); + me.callParent(); + + // Inject a custom implementation of walkCells which only goes up or down + me.getView().walkCells = this.walkCells; + + // Set up our default editor set for the 4 atomic data types + me.editors = { + 'date' : new Ext.grid.CellEditor({ field: new Ext.form.field.Date({selectOnFocus: true})}), + 'string' : new Ext.grid.CellEditor({ field: new Ext.form.field.Text({selectOnFocus: true})}), + 'number' : new Ext.grid.CellEditor({ field: new Ext.form.field.Number({selectOnFocus: true})}), + 'boolean' : new Ext.grid.CellEditor({ field: new Ext.form.field.ComboBox({ + editable: false, + store: [[ true, me.headerCt.trueText ], [false, me.headerCt.falseText ]] + })}) + }; + + // Track changes to the data so we can fire our events. + me.store.on('update', me.onUpdate, me); + }, + + // private + onUpdate : function(store, record, operation) { + var me = this, + v, oldValue; + + if (me.rendered && operation == Ext.data.Model.EDIT) { + v = record.get(me.valueField); + oldValue = record.modified.value; + if (me.fireEvent('beforepropertychange', me.source, record.getId(), v, oldValue) !== false) { + if (me.source) { + me.source[record.getId()] = v; + } + record.commit(); + me.fireEvent('propertychange', me.source, record.getId(), v, oldValue); + } else { + record.reject(); + } + } + }, + + // Custom implementation of walkCells which only goes up and down. + walkCells: function(pos, direction, e, preventWrap, verifierFn, scope) { + if (direction == 'left') { + direction = 'up'; + } else if (direction == 'right') { + direction = 'down'; + } + pos = Ext.view.Table.prototype.walkCells.call(this, pos, direction, e, preventWrap, verifierFn, scope); + if (!pos.column) { + pos.column = 1; + } + return pos; + }, + + // private + // returns the correct editor type for the property type, or a custom one keyed by the property name + getCellEditor : function(record, column) { + var me = this, + propName = record.get(me.nameField), + val = record.get(me.valueField), + editor = me.customEditors[propName]; + + // A custom editor was found. If not already wrapped with a CellEditor, wrap it, and stash it back + // If it's not even a Field, just a config object, instantiate it before wrapping it. + if (editor) { + if (!(editor instanceof Ext.grid.CellEditor)) { + if (!(editor instanceof Ext.form.field.Base)) { + editor = Ext.ComponentManager.create(editor, 'textfield'); + } + editor = me.customEditors[propName] = new Ext.grid.CellEditor({ field: editor }); + } + } else if (Ext.isDate(val)) { + editor = me.editors.date; + } else if (Ext.isNumber(val)) { + editor = me.editors.number; + } else if (Ext.isBoolean(val)) { + editor = me.editors['boolean']; + } else { + editor = me.editors.string; + } + + // Give the editor a unique ID because the CellEditing plugin caches them + editor.editorId = propName; + return editor; + }, + + beforeDestroy: function() { + var me = this; + me.callParent(); + me.destroyEditors(me.editors); + me.destroyEditors(me.customEditors); + delete me.source; + }, + + destroyEditors: function (editors) { + for (var ed in editors) { + if (editors.hasOwnProperty(ed)) { + Ext.destroy(editors[ed]); + } + } + }, + + /** + * Sets the source data object containing the property data. The data object can contain one or more name/value + * pairs representing all of the properties of an object to display in the grid, and this data will automatically + * be loaded into the grid's {@link #store}. The values should be supplied in the proper data type if needed, + * otherwise string type will be assumed. If the grid already contains data, this method will replace any + * existing data. See also the {@link #source} config value. Example usage: + * + * grid.setSource({ + * "(name)": "My Object", + * "Created": Ext.Date.parse('10/15/2006', 'm/d/Y'), // date type + * "Available": false, // boolean type + * "Version": .01, // decimal type + * "Description": "A test object" + * }); + * + * @param {Object} source The data object + */ + setSource: function(source) { + this.source = source; + this.propStore.setSource(source); + }, + + /** + * Gets the source data object containing the property data. See {@link #setSource} for details regarding the + * format of the data object. + * @return {Object} The data object + */ + getSource: function() { + return this.propStore.getSource(); + }, + + /** + * Sets the value of a property. + * @param {String} prop The name of the property to set + * @param {Object} value The value to test + * @param {Boolean} [create=false] True to create the property if it doesn't already exist. + */ + setProperty: function(prop, value, create) { + this.propStore.setValue(prop, value, create); + }, + + /** + * Removes a property from the grid. + * @param {String} prop The name of the property to remove + */ + removeProperty: function(prop) { + this.propStore.remove(prop); + } + + /** + * @cfg store + * @private + */ + /** + * @cfg columns + * @private + */ +}); + +/** + * A custom HeaderContainer for the {@link Ext.grid.property.Grid}. + * Generally it should not need to be used directly. + */ +Ext.define('Ext.grid.property.HeaderContainer', { + + extend: 'Ext.grid.header.Container', + + alternateClassName: 'Ext.grid.PropertyColumnModel', + + nameWidth: 115, + + // private - strings used for locale support + // + nameText : 'Name', + // + // + valueText : 'Value', + // + // + dateFormat : 'm/j/Y', + // + // + trueText: 'true', + // + // + falseText: 'false', + // + + // private + nameColumnCls: Ext.baseCSSPrefix + 'grid-property-name', + + /** + * Creates new HeaderContainer. + * @param {Ext.grid.property.Grid} grid The grid this store will be bound to + * @param {Object} source The source data config object + */ + constructor : function(grid, store) { + var me = this; + + me.grid = grid; + me.store = store; + me.callParent([{ + items: [{ + header: me.nameText, + width: grid.nameColumnWidth || me.nameWidth, + sortable: grid.sortableColumns, + dataIndex: grid.nameField, + renderer: Ext.Function.bind(me.renderProp, me), + itemId: grid.nameField, + menuDisabled :true, + tdCls: me.nameColumnCls + }, { + header: me.valueText, + renderer: Ext.Function.bind(me.renderCell, me), + getEditor: Ext.Function.bind(me.getCellEditor, me), + sortable: grid.sortableColumns, + flex: 1, + fixed: true, + dataIndex: grid.valueField, + itemId: grid.valueField, + menuDisabled: true + }] + }]); + }, + + getCellEditor: function(record){ + return this.grid.getCellEditor(record, this); + }, + + // private + // Render a property name cell + renderProp : function(v) { + return this.getPropertyName(v); + }, + + // private + // Render a property value cell + renderCell : function(val, meta, rec) { + var me = this, + renderer = me.grid.customRenderers[rec.get(me.grid.nameField)], + result = val; + + if (renderer) { + return renderer.apply(me, arguments); + } + if (Ext.isDate(val)) { + result = me.renderDate(val); + } else if (Ext.isBoolean(val)) { + result = me.renderBool(val); + } + return Ext.util.Format.htmlEncode(result); + }, + + // private + renderDate : Ext.util.Format.date, + + // private + renderBool : function(bVal) { + return this[bVal ? 'trueText' : 'falseText']; + }, + + // private + // Renders custom property names instead of raw names if defined in the Grid + getPropertyName : function(name) { + var pn = this.grid.propertyNames; + return pn && pn[name] ? pn[name] : name; + } +}); + +/** + * A specific {@link Ext.data.Model} type that represents a name/value pair and is made to work with the + * {@link Ext.grid.property.Grid}. Typically, Properties do not need to be created directly as they can be + * created implicitly by simply using the appropriate data configs either via the + * {@link Ext.grid.property.Grid#source} config property or by calling {@link Ext.grid.property.Grid#setSource}. + * However, if the need arises, these records can also be created explicitly as shown below. Example usage: + * + * var rec = new Ext.grid.property.Property({ + * name: 'birthday', + * value: Ext.Date.parse('17/06/1962', 'd/m/Y') + * }); + * // Add record to an already populated grid + * grid.store.addSorted(rec); + * + * @constructor + * Creates new property. + * @param {Object} config A data object in the format: + * @param {String/String[]} config.name A name or names for the property. + * @param {Mixed/Mixed[]} config.value A value or values for the property. + * The specified value's type will be read automatically by the grid to determine the type of editor to use when + * displaying it. + * @return {Object} + */ +Ext.define('Ext.grid.property.Property', { + extend: 'Ext.data.Model', + + alternateClassName: 'Ext.PropGridProperty', + + fields: [{ + name: 'name', + type: 'string' + }, { + name: 'value' + }], + idProperty: 'name' +}); + +/** + * A custom {@link Ext.data.Store} for the {@link Ext.grid.property.Grid}. This class handles the mapping + * between the custom data source objects supported by the grid and the {@link Ext.grid.property.Property} format + * used by the {@link Ext.data.Store} base class. + */ +Ext.define('Ext.grid.property.Store', { + + extend: 'Ext.data.Store', + + alternateClassName: 'Ext.grid.PropertyStore', + + sortOnLoad: false, + + uses: ['Ext.data.reader.Reader', 'Ext.data.proxy.Proxy', 'Ext.data.ResultSet', 'Ext.grid.property.Property'], + + /** + * Creates new property store. + * @param {Ext.grid.Panel} grid The grid this store will be bound to + * @param {Object} source The source data config object + */ + constructor : function(grid, source){ + var me = this; + + me.grid = grid; + me.source = source; + me.callParent([{ + data: source, + model: Ext.grid.property.Property, + proxy: me.getProxy() + }]); + }, + + // Return a singleton, customized Proxy object which configures itself with a custom Reader + getProxy: function() { + if (!this.proxy) { + Ext.grid.property.Store.prototype.proxy = new Ext.data.proxy.Memory({ + model: Ext.grid.property.Property, + reader: this.getReader() + }); + } + return this.proxy; + }, + + // Return a singleton, customized Reader object which reads Ext.grid.property.Property records from an object. + getReader: function() { + if (!this.reader) { + Ext.grid.property.Store.prototype.reader = new Ext.data.reader.Reader({ + model: Ext.grid.property.Property, + + buildExtractors: Ext.emptyFn, + + read: function(dataObject) { + return this.readRecords(dataObject); + }, + + readRecords: function(dataObject) { + var val, + propName, + result = { + records: [], + success: true + }; + + for (propName in dataObject) { + if (dataObject.hasOwnProperty(propName)) { + val = dataObject[propName]; + if (this.isEditableValue(val)) { + result.records.push(new Ext.grid.property.Property({ + name: propName, + value: val + }, propName)); + } + } + } + result.total = result.count = result.records.length; + return new Ext.data.ResultSet(result); + }, + + // private + isEditableValue: function(val){ + return Ext.isPrimitive(val) || Ext.isDate(val); + } + }); + } + return this.reader; + }, + + // protected - should only be called by the grid. Use grid.setSource instead. + setSource : function(dataObject) { + var me = this; + + me.source = dataObject; + me.suspendEvents(); + me.removeAll(); + me.proxy.data = dataObject; + me.load(); + me.resumeEvents(); + me.fireEvent('datachanged', me); + me.fireEvent('refresh', me); + }, + + // private + getProperty : function(row) { + return Ext.isNumber(row) ? this.getAt(row) : this.getById(row); + }, + + // private + setValue : function(prop, value, create){ + var me = this, + rec = me.getRec(prop); + + if (rec) { + rec.set('value', value); + me.source[prop] = value; + } else if (create) { + // only create if specified. + me.source[prop] = value; + rec = new Ext.grid.property.Property({name: prop, value: value}, prop); + me.add(rec); + } + }, + + // private + remove : function(prop) { + var rec = this.getRec(prop); + if (rec) { + this.callParent([rec]); + delete this.source[prop]; + } + }, + + // private + getRec : function(prop) { + return this.getById(prop); + }, + + // protected - should only be called by the grid. Use grid.getSource instead. + getSource : function() { + return this.source; + } +}); + +/** + * This class provides a DOM ClassList API to buffer access to an element's class. + * Instances of this class are created by {@link Ext.layout.ContextItem#getClassList}. + */ +Ext.define('Ext.layout.ClassList', (function () { + + var splitWords = Ext.String.splitWords, + toMap = Ext.Array.toMap; + + return { + dirty: false, + + constructor: function (owner) { + this.owner = owner; + this.map = toMap(this.classes = splitWords(owner.el.className)); + }, + + /** + * Adds a single class to the class list. + */ + add: function (cls) { + var me = this; + + if (!me.map[cls]) { + me.map[cls] = true; + me.classes.push(cls); + if (!me.dirty) { + me.dirty = true; + me.owner.markDirty(); + } + } + }, + + /** + * Adds one or more classes in an array or space-delimited string to the class list. + */ + addMany: function (classes) { + Ext.each(splitWords(classes), this.add, this); + }, + + contains: function (cls) { + return this.map[cls]; + }, + + flush: function () { + this.owner.el.className = this.classes.join(' '); + this.dirty = false; + }, + + /** + * Removes a single class from the class list. + */ + remove: function (cls) { + var me = this; + + if (me.map[cls]) { + delete me.map[cls]; + me.classes = Ext.Array.filter(me.classes, function (c) { + return c != cls; + }); + if (!me.dirty) { + me.dirty = true; + me.owner.markDirty(); + } + } + }, + + /** + * Removes one or more classes in an array or space-delimited string from the class + * list. + */ + removeMany: function (classes) { + var me = this, + remove = toMap(splitWords(classes)); + + me.classes = Ext.Array.filter(me.classes, function (c) { + if (!remove[c]) { + return true; + } + + delete me.map[c]; + if (!me.dirty) { + me.dirty = true; + me.owner.markDirty(); + } + return false; + }); + } + }; +}())); + +/** + * An internal Queue class. + * @private + */ +Ext.define('Ext.util.Queue', { + + constructor: function() { + this.clear(); + }, + + add : function(obj) { + var me = this, + key = me.getKey(obj); + + if (!me.map[key]) { + ++me.length; + me.items.push(obj); + me.map[key] = obj; + } + + return obj; + }, + + /** + * Removes all items from the collection. + */ + clear : function(){ + var me = this, + items = me.items; + + me.items = []; + me.map = {}; + me.length = 0; + + return items; + }, + + contains: function (obj) { + var key = this.getKey(obj); + + return this.map.hasOwnProperty(key); + }, + + /** + * Returns the number of items in the collection. + * @return {Number} the number of items in the collection. + */ + getCount : function(){ + return this.length; + }, + + getKey : function(obj){ + return obj.id; + }, + + /** + * Remove an item from the collection. + * @param {Object} obj The item to remove. + * @return {Object} The item removed or false if no item was removed. + */ + remove : function(obj){ + var me = this, + key = me.getKey(obj), + items = me.items, + index; + + if (me.map[key]) { + index = Ext.Array.indexOf(items, obj); + Ext.Array.erase(items, index, 1); + delete me.map[key]; + --me.length; + } + + return obj; + } +}); + +/** + * This class manages state information for a component or element during a layout. + * + * # Blocks + * + * A "block" is a required value that is preventing further calculation. When a layout has + * encountered a situation where it cannot possibly calculate results, it can associate + * itself with the context item and missing property so that it will not be rescheduled + * until that property is set. + * + * Blocks are a one-shot registration. Once the property changes, the block is removed. + * + * Be careful with blocks. If *any* further calculations can be made, a block is not the + * right choice. + * + * # Triggers + * + * Whenever any call to {@link #getProp}, {@link #getDomProp}, {@link #hasProp} or + * {@link #hasDomProp} is made, the current layout is automatically registered as being + * dependent on that property in the appropriate state. Any changes to the property will + * trigger the layout and it will be queued in the {@link Ext.layout.Context}. + * + * Triggers, once added, remain for the entire layout. Any changes to the property will + * reschedule all unfinished layouts in their trigger set. + * + * @private + */ +Ext.define('Ext.layout.ContextItem', { + + requires: ['Ext.layout.ClassList'], + + heightModel: null, + widthModel: null, + sizeModel: null, + + boxChildren: null, + + boxParent: null, + + children: [], + + dirty: null, + + // The number of dirty properties + dirtyCount: 0, + + hasRawContent: true, + + isContextItem: true, + + isTopLevel: false, + + consumersContentHeight: 0, + consumersContentWidth: 0, + consumersContainerHeight: 0, + consumersContainerWidth: 0, + consumersHeight: 0, + consumersWidth: 0, + + ownerCtContext: null, + + remainingChildLayouts: 0, + remainingComponentChildLayouts: 0, + remainingContainerChildLayouts: 0, + + // the current set of property values: + props: null, + + /** + * @property {Object} state + * State variables that are cleared when invalidated. Only applies to component items. + */ + state: null, + + /** + * @property {Boolean} wrapsComponent + * True if this item wraps a Component (rather than an Element). + * @readonly + */ + wrapsComponent: false, + + constructor: function (config) { + var me = this, + el, ownerCt, ownerCtContext, sizeModel, target; + + Ext.apply(me, config); + + el = me.el; + me.id = el.id; + me.lastBox = el.lastBox; + + // These hold collections of layouts that are either blocked or triggered by sets + // to our properties (either ASAP or after flushing to the DOM). All of them have + // the same structure: + // + // me.blocks = { + // width: { + // 'layout-1001': layout1001 + // } + // } + // + // The property name is the primary key which yields an object keyed by layout id + // with the layout instance as the value. This prevents duplicate entries for one + // layout and gives O(1) access to the layout instance when we need to iterate and + // process them. + // + // me.blocks = {}; + // me.domBlocks = {}; + // me.domTriggers = {}; + // me.triggers = {}; + + me.flushedProps = {}; + me.props = {}; + + // the set of cached styles for the element: + me.styles = {}; + + target = me.target; + if (target.isComponent) { + me.wrapsComponent = true; + + // These items are created top-down, so the ContextItem of our ownerCt should + // be available (if it is part of this layout run). + ownerCt = target.ownerCt; + if (ownerCt && (ownerCtContext = me.context.items[ownerCt.el.id])) { + me.ownerCtContext = ownerCtContext; + } + + // If our ownerCtContext is in the run, it will have a SizeModel that we use to + // optimize the determination of our sizeModel. + me.sizeModel = sizeModel = target.getSizeModel(ownerCtContext && + ownerCtContext.widthModel.pairsByHeightOrdinal[ownerCtContext.heightModel.ordinal]); + + me.widthModel = sizeModel.width; + me.heightModel = sizeModel.height; + + // NOTE: The initial determination of sizeModel is valid (thankfully) and is + // needed to cope with adding components to a layout run on-the-fly (e.g., in + // the menu overflow handler of a box layout). Since this is the case, we do + // not need to recompute the sizeModel in init unless it is a "full" init (as + // our ownerCt's sizeModel could have changed in that case). + } + }, + + /** + * Clears all properties on this object except (perhaps) those not calculated by this + * component. This is more complex than it would seem because a layout can decide to + * invalidate its results and run the component's layouts again, but since some of the + * values may be calculated by the container, care must be taken to preserve those + * values. + * + * @param {Boolean} full True if all properties are to be invalidated, false to keep + * those calculated by the ownerCt. + * @return {Mixed} A value to pass as the first argument to {@link #initContinue}. + * @private + */ + init: function (full, options) { + var me = this, + oldProps = me.props, + oldDirty = me.dirty, + ownerCtContext = me.ownerCtContext, + ownerLayout = me.target.ownerLayout, + firstTime = !me.state, + ret = full || firstTime, + children, i, n, ownerCt, sizeModel, target, + oldHeightModel = me.heightModel, + oldWidthModel = me.widthModel, + newHeightModel, newWidthModel; + + me.dirty = me.invalid = false; + me.props = {}; + + if (me.boxChildren) { + me.boxChildren.length = 0; // keep array (more GC friendly) + } + + if (!firstTime) { + me.clearAllBlocks('blocks'); + me.clearAllBlocks('domBlocks'); + } + + // For Element wrappers, we are done... + if (!me.wrapsComponent) { + return ret; + } + + // From here on, we are only concerned with Component wrappers... + target = me.target; + me.state = {}; // only Component wrappers need a "state" + + if (firstTime) { + // This must occur before we proceed since it can do many things (like add + // child items perhaps): + if (target.beforeLayout) { + target.beforeLayout(); + } + + // Determine the ownerCtContext if we aren't given one. Normally the firstTime + // we meet a component is before the context is run, but it is possible for + // components to be added to a run that is already in progress. If so, we have + // to lookup the ownerCtContext since the odds are very high that the new + // component is a child of something already in the run. It is currently + // unsupported to drag in the owner of a running component (needs testing). + if (!ownerCtContext && (ownerCt = target.ownerCt)) { + ownerCtContext = me.context.items[ownerCt.el.id]; + } + + if (ownerCtContext) { + me.ownerCtContext = ownerCtContext; + me.isBoxParent = target.ownerLayout.isItemBoxParent(me); + } else { + me.isTopLevel = true; // this is used by initAnimation... + } + + me.frameBodyContext = me.getEl('frameBody'); + } else { + ownerCtContext = me.ownerCtContext; + + // In theory (though untested), this flag can change on-the-fly... + me.isTopLevel = !ownerCtContext; + + // Init the children element items since they may have dirty state (no need to + // do this the firstTime). + children = me.children; + for (i = 0, n = children.length; i < n; ++i) { + children[i].init(true); + } + } + + // We need to know how we will determine content size: containers can look at the + // results of their items but non-containers or item-less containers with just raw + // markup need to be measured in the DOM: + me.hasRawContent = !(target.isContainer && target.items.items.length > 0); + + if (full) { + // We must null these out or getSizeModel will assume they are the correct, + // dynamic size model and return them (the previous dynamic sizeModel). + me.widthModel = me.heightModel = null; + sizeModel = target.getSizeModel(ownerCtContext && + ownerCtContext.widthModel.pairsByHeightOrdinal[ownerCtContext.heightModel.ordinal]); + + if (firstTime) { + me.sizeModel = sizeModel; + } + + me.widthModel = sizeModel.width; + me.heightModel = sizeModel.height; + } else if (oldProps) { + // these are almost always calculated by the ownerCt (we might need to track + // this at some point more carefully): + me.recoverProp('x', oldProps, oldDirty); + me.recoverProp('y', oldProps, oldDirty); + + // if these are calculated by the ownerCt, don't trash them: + if (me.widthModel.calculated) { + me.recoverProp('width', oldProps, oldDirty); + } + if (me.heightModel.calculated) { + me.recoverProp('height', oldProps, oldDirty); + } + } + + if (oldProps && ownerLayout && ownerLayout.manageMargins) { + me.recoverProp('margin-top', oldProps, oldDirty); + me.recoverProp('margin-right', oldProps, oldDirty); + me.recoverProp('margin-bottom', oldProps, oldDirty); + me.recoverProp('margin-left', oldProps, oldDirty); + } + + // Process any invalidate options present. These can only come from explicit calls + // to the invalidate() method. + if (options) { + // Consider a container box with wrapping text. If the box is made wider, the + // text will take up less height (until there is no more wrapping). Conversely, + // if the box is made narrower, the height starts to increase due to wrapping. + // + // Imposing a minWidth constraint would increase the width. This may decrease + // the height. If the box is shrinkWrap, however, the width will already be + // such that there is no wrapping, so the height will not further decrease. + // Since the height will also not increase if we widen the box, there is no + // problem simultaneously imposing a minHeight or maxHeight constraint. + // + // When we impose as maxWidth constraint, however, we are shrinking the box + // which may increase the height. If we are imposing a maxHeight constraint, + // that is fine because a further increased height will still need to be + // constrained. But if we are imposing a minHeight constraint, we cannot know + // whether the increase in height due to wrapping will be greater than the + // minHeight. If we impose a minHeight constraint at the same time, then, we + // could easily be locking in the wrong height. + // + // It is important to note that this logic applies to simultaneously *adding* + // both a maxWidth and a minHeight constraint. It is perfectly fine to have + // a state with both constraints, but we cannot add them both at once. + newHeightModel = options.heightModel; + newWidthModel = options.widthModel; + if (newWidthModel && newHeightModel && oldWidthModel && oldHeightModel) { + if (oldWidthModel.shrinkWrap && oldHeightModel.shrinkWrap) { + if (newWidthModel.constrainedMax && newHeightModel.constrainedMin) { + newHeightModel = null; + } + } + } + + // Apply size model updates (if any) and state updates (if any). + if (newWidthModel) { + me.widthModel = newWidthModel; + } + if (newHeightModel) { + me.heightModel = newHeightModel; + } + + if (options.state) { + Ext.apply(me.state, options.state); + } + } + + return ret; + }, + + /** + * @private + */ + initContinue: function (full) { + var me = this, + ownerCtContext = me.ownerCtContext, + widthModel = me.widthModel, + boxParent; + + if (full) { + if (ownerCtContext && widthModel.shrinkWrap) { + boxParent = ownerCtContext.isBoxParent ? ownerCtContext : ownerCtContext.boxParent; + if (boxParent) { + boxParent.addBoxChild(me); + } + } else if (widthModel.natural) { + me.boxParent = ownerCtContext; + } + } + + return full; + }, + + /** + * @private + */ + initDone: function (full, componentChildrenDone, containerChildrenDone, containerLayoutDone) { + var me = this, + props = me.props, + state = me.state; + + // These properties are only set when they are true: + if (componentChildrenDone) { + props.componentChildrenDone = true; + } + if (containerChildrenDone) { + props.containerChildrenDone = true; + } + if (containerLayoutDone) { + props.containerLayoutDone = true; + } + + if (me.boxChildren && me.boxChildren.length && me.widthModel.shrinkWrap) { + // set a very large width to allow the children to measure their natural + // widths (this is cleared once all children have been measured): + me.el.setWidth(10000); + + // don't run layouts for this component until we clear this width... + state.blocks = (state.blocks || 0) + 1; + } + }, + + /** + * @private + */ + initAnimation: function() { + var me = this, + target = me.target, + ownerCtContext = me.ownerCtContext; + + if (ownerCtContext && ownerCtContext.isTopLevel) { + // See which properties we are supposed to animate to their new state. + // If there are any, queue ourself to be animated by the owning Context + me.animatePolicy = target.ownerLayout.getAnimatePolicy(me); + } else if (!ownerCtContext && target.isCollapsingOrExpanding && target.animCollapse) { + // Collapsing/expnding a top level Panel with animation. We need to fabricate + // an animatePolicy depending on which dimension the collapse is using, + // isCollapsingOrExpanding is set during the collapse/expand process. + me.animatePolicy = target.componentLayout.getAnimatePolicy(me); + } + + if (me.animatePolicy) { + me.context.queueAnimation(me); + } + }, + + noFraming: { left: 0, top: 0, right: 0, bottom: 0, width: 0, height: 0 }, + + /** + * Queue the addition of a class name (or array of class names) to this ContextItem's target when next flushed. + */ + addCls: function(newCls) { + this.getClassList().addMany(newCls); + }, + + /** + * Queue the removal of a class name (or array of class names) from this ContextItem's target when next flushed. + */ + removeCls: function(removeCls) { + this.getClassList().removeMany(removeCls); + }, + + /** + * Adds a block. + * + * @param {String} name The name of the block list ('blocks' or 'domBlocks'). + * @param {Ext.layout.Layout} layout The layout that is blocked. + * @param {String} propName The property name that blocked the layout (e.g., 'width'). + * @private + */ + addBlock: function (name, layout, propName) { + var me = this, + collection = me[name] || (me[name] = {}), + blockedLayouts = collection[propName] || (collection[propName] = {}); + + if (!blockedLayouts[layout.id]) { + blockedLayouts[layout.id] = layout; + ++layout.blockCount; + ++me.context.blockCount; + } + }, + + addBoxChild: function (boxChildItem) { + var me = this, + children, + widthModel = boxChildItem.widthModel; + + boxChildItem.boxParent = this; + + // Children that are widthModel.auto (regardless of heightModel) that measure the + // DOM (by virtue of hasRawContent), need to wait for their "box parent" to be sized. + // If they measure too early, they will be wrong results. In the widthModel.shrinkWrap + // case, the boxParent "crushes" the child. In the case of widthModel.natural, the + // boxParent's width is likely a key part of the child's width (e.g., "50%" or just + // normal block-level behavior of 100% width) + boxChildItem.measuresBox = widthModel.shrinkWrap ? boxChildItem.hasRawContent : widthModel.natural; + + if (boxChildItem.measuresBox) { + children = me.boxChildren; + + if (children) { + children.push(boxChildItem); + } else { + me.boxChildren = [ boxChildItem ]; + } + } + }, + + /** + * Adds a trigger. + * + * @param {String} propName The property name that triggers the layout (e.g., 'width'). + * @param {Boolean} inDom True if the trigger list is `domTriggers`, false if `triggers`. + * @private + */ + addTrigger: function (propName, inDom) { + var me = this, + name = inDom ? 'domTriggers' : 'triggers', + collection = me[name] || (me[name] = {}), + context = me.context, + layout = context.currentLayout, + triggers = collection[propName] || (collection[propName] = {}); + + if (!triggers[layout.id]) { + triggers[layout.id] = layout; + ++layout.triggerCount; + + triggers = context.triggers[inDom ? 'dom' : 'data']; + (triggers[layout.id] || (triggers[layout.id] = [])).push({ + item: this, + prop: propName + }); + + if (me.props[propName] !== undefined) { + if (!inDom || !(me.dirty && (propName in me.dirty))) { + ++layout.firedTriggers; + } + } + } + }, + + boxChildMeasured: function () { + var me = this, + state = me.state, + count = (state.boxesMeasured = (state.boxesMeasured || 0) + 1); + + if (count == me.boxChildren.length) { + // all of our children have measured themselves, so we can clear the width + // and resume layouts for this component... + state.clearBoxWidth = 1; + ++me.context.progressCount; + me.markDirty(); + } + }, + + borderNames: [ 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width'], + marginNames: [ 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ], + paddingNames: [ 'padding-top', 'padding-right', 'padding-bottom', 'padding-left' ], + trblNames: [ 'top', 'right', 'bottom', 'left' ], + + cacheMissHandlers: { + borderInfo: function (me) { + var info = me.getStyles(me.borderNames, me.trblNames); + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + + return info; + }, + + marginInfo: function (me) { + var info = me.getStyles(me.marginNames, me.trblNames); + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + + return info; + }, + + paddingInfo: function (me) { + // if this context item's target is a framed component the padding is on the frameBody, not on the main el + var item = me.frameBodyContext || me, + info = item.getStyles(me.paddingNames, me.trblNames); + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + + return info; + } + }, + + checkCache: function (entry) { + return this.cacheMissHandlers[entry](this); + }, + + clearAllBlocks: function (name) { + var collection = this[name], + propName; + + if (collection) { + for (propName in collection) { + this.clearBlocks(name, propName); + } + } + }, + + /** + * Removes any blocks on a property in the specified set. Any layouts that were blocked + * by this property and are not still blocked (by other properties) will be rescheduled. + * + * @param {String} name The name of the block list ('blocks' or 'domBlocks'). + * @param {String} propName The property name that blocked the layout (e.g., 'width'). + * @private + */ + clearBlocks: function (name, propName) { + var collection = this[name], + blockedLayouts = collection && collection[propName], + context, layout, layoutId; + + if (blockedLayouts) { + delete collection[propName]; + + context = this.context; + + for (layoutId in blockedLayouts) { + layout = blockedLayouts[layoutId]; + + --context.blockCount; + if (! --layout.blockCount && !layout.pending && !layout.done) { + context.queueLayout(layout); + } + } + } + }, + + /** + * Registers a layout in the block list for the given property. Once the property is + * set in the {@link Ext.layout.Context}, the layout is unblocked. + * + * @param {Ext.layout.Layout} layout + * @param {String} propName The property name that blocked the layout (e.g., 'width'). + */ + block: function (layout, propName) { + this.addBlock('blocks', layout, propName); + }, + + /** + * Registers a layout in the DOM block list for the given property. Once the property + * flushed to the DOM by the {@link Ext.layout.Context}, the layout is unblocked. + * + * @param {Ext.layout.Layout} layout + * @param {String} propName The property name that blocked the layout (e.g., 'width'). + */ + domBlock: function (layout, propName) { + this.addBlock('domBlocks', layout, propName); + }, + + /** + * Reschedules any layouts associated with a given trigger. + * + * @param {String} name The name of the trigger list ('triggers' or 'domTriggers'). + * @param {String} propName The property name that triggers the layout (e.g., 'width'). + * @private + */ + fireTriggers: function (name, propName) { + var collection = this[name], + triggers = collection && collection[propName], + context = this.context, + layout, layoutId; + + if (triggers) { + for (layoutId in triggers) { + layout = triggers[layoutId]; + ++layout.firedTriggers; + if (!layout.done && !layout.blockCount && !layout.pending) { + context.queueLayout(layout); + } + } + } + }, + + /** + * Flushes any updates in the dirty collection to the DOM. This is only called if there + * are dirty entries because this object is only added to the flushQueue of the + * {@link Ext.layout.Context} when entries become dirty. + */ + flush: function () { + var me = this, + dirty = me.dirty, + state = me.state, + targetEl = me.el; + + me.dirtyCount = 0; + + // Flush added/removed classes + if (me.classList && me.classList.dirty) { + me.classList.flush(); + } + + // Set any queued DOM attributes + if ('attributes' in me) { + targetEl.set(me.attributes); + delete me.attributes; + } + + // Set any queued DOM HTML content + if ('innerHTML' in me) { + targetEl.innerHTML = me.innerHTML; + delete me.innerHTML; + } + + if (state && state.clearBoxWidth) { + state.clearBoxWidth = 0; + me.el.setStyle('width', null); + + if (! --state.blocks) { + me.context.queueItemLayouts(me); + } + } + + if (dirty) { + delete me.dirty; + me.writeProps(dirty, true); + } + }, + + /** + * @private + */ + flushAnimations: function() { + var me = this, + animateFrom = me.lastBox, + target, targetAnim, duration, animateProps, anim, + changeCount, j, propsLen, propName, oldValue, newValue; + + // Only animate if the Component has been previously layed out: first layout should not animate + if (animateFrom) { + target = me.target; + targetAnim = target.layout && target.layout.animate; + if (targetAnim) { + duration = Ext.isNumber(targetAnim) ? targetAnim : targetAnim.duration; + } + animateProps = Ext.Object.getKeys(me.animatePolicy); + + // Create an animation block using the targetAnim configuration to provide defaults. + // They may want custom duration, or easing, or listeners. + anim = Ext.apply({}, { + from: {}, + to: {}, + duration: duration || Ext.fx.Anim.prototype.duration + }, targetAnim); + + for (changeCount = 0, j = 0, propsLen = animateProps.length; j < propsLen; j++) { + propName = animateProps[j]; + oldValue = animateFrom[propName]; + newValue = me.peek(propName); + if (oldValue != newValue) { + propName = me.translateProps[propName]||propName; + anim.from[propName] = oldValue; + anim.to[propName] = newValue; + ++changeCount; + } + } + + // If any values have changed, kick off animation from the cached old values to the new values + if (changeCount) { + // It'a Panel being collapsed. rollback, and then fix the class name string + if (me.isCollapsingOrExpanding === 1) { + target.componentLayout.undoLayout(me); + } + + // Otherwise, undo just the animated properties so the animation can proceed from the old layout. + else { + me.writeProps(anim.from); + } + me.el.animate(anim); + + Ext.fx.Manager.getFxQueue(me.el.id)[0].on({ + afteranimate: function() { + if (me.isCollapsingOrExpanding === 1) { + target.componentLayout.redoLayout(me); + target.afterCollapse(true); + } else if (me.isCollapsingOrExpanding === 2) { + target.afterExpand(true); + } + } + }); + } + } + }, + + /** + * Gets the border information for the element as an object with left, top, right and + * bottom properties holding border size in pixels. This object is only read from the + * DOM on first request and is cached. + * @return {Object} + */ + getBorderInfo: function () { + var me = this, + info = me.borderInfo; + + if (!info) { + me.borderInfo = info = me.checkCache('borderInfo'); + } + + return info; + }, + + /** + * Returns a ClassList-like object to buffer access to this item's element's classes. + */ + getClassList: function () { + return this.classList || (this.classList = new Ext.layout.ClassList(this)); + }, + + /** + * Returns the context item for an owned element. This should only be called on a + * component's item. The list of child items is used to manage invalidating calculated + * results. + */ + getEl: function (nameOrEl, owner) { + var me = this, + src, el, elContext; + + if (nameOrEl) { + if (nameOrEl.dom) { + el = nameOrEl; + } else { + src = me.target; + if (owner) { + src = owner; + } + + el = src[nameOrEl]; + if (typeof el == 'function') { // ex 'getTarget' + el = el.call(src); + if (el === me.el) { + return this; // comp.getTarget() often returns comp.el + } + } + } + + if (el) { + elContext = me.context.getEl(me, el); + } + } + + return elContext || null; + }, + + getFraming: function () { + var me = this; + if (!me.framingInfo) { + me.framingInfo = me.target.frameSize || me.noFraming; + } + return me.framingInfo; + }, + + /** + * Gets the "frame" information for the element as an object with left, top, right and + * bottom properties holding border+framing size in pixels. This object is calculated + * on first request and is cached. + * @return {Object} + */ + getFrameInfo: function () { + var me = this, + info = me.frameInfo, + frame, border; + + if (!info) { + frame = me.getFraming(); + border = me.getBorderInfo(); + + me.frameInfo = info = { + top : frame.top + border.top, + right : frame.right + border.right, + bottom: frame.bottom + border.bottom, + left : frame.left + border.left, + width : frame.width + border.width, + height: frame.height + border.height + }; + } + + return info; + }, + + /** + * Gets the margin information for the element as an object with left, top, right and + * bottom properties holding margin size in pixels. This object is only read from the + * DOM on first request and is cached. + * @return {Object} + */ + getMarginInfo: function () { + var me = this, + info = me.marginInfo, + comp, manageMargins, margins, ownerLayout, ownerLayoutId; + + if (!info) { + if (!me.wrapsComponent) { + info = me.checkCache('marginInfo'); + } else { + comp = me.target; + ownerLayout = comp.ownerLayout; + ownerLayoutId = ownerLayout ? ownerLayout.id : null; + manageMargins = ownerLayout && ownerLayout.manageMargins; + + // Option #1 for configuring margins on components is the "margin" config + // property. When supplied, this config is written to the DOM during the + // render process (see AbstractComponent#initStyles). + // + // Option #2 is available to some layouts (e.g., Box, Border, Fit) that + // handle margin calculations themselves. These layouts support a "margins" + // config property on their items and they have a "defaultMargins" config + // property. These margin values are added to the "natural" margins read + // from the DOM and 0's are written to the DOM after they are added. + + // To avoid having to do all this on every layout, we cache the results on + // the component in the (private) "margin$" property. We identify the cache + // results as belonging to the appropriate ownerLayout in case items are + // moved around. + + info = comp.margin$; + if (info && info.ownerId !== ownerLayoutId) { + // got one but from the wrong owner + info = null; + + // if (manageMargins) { + // TODO: clear inline margins (the 0's we wrote last time)??? + // } + } + + if (!info) { // if (no cache) + // CSS margins are only checked if there isn't a margin property on the component + info = me.parseMargins(comp.margin) || me.checkCache('marginInfo'); + + // Some layouts also support margins and defaultMargins, e.g. Fit, Border, Box + if (manageMargins) { + margins = me.parseMargins(comp.margins, ownerLayout.defaultMargins); + + if (margins) { // if (using 'margins' and/or 'defaultMargins') + // margin and margins can both be present at the same time and must be combined + info = { + top: info.top + margins.top, + right: info.right + margins.right, + bottom: info.bottom + margins.bottom, + left: info.left + margins.left + }; + } + + me.setProp('margin-top', 0); + me.setProp('margin-right', 0); + me.setProp('margin-bottom', 0); + me.setProp('margin-left', 0); + } + + // cache the layout margins and tag them with the layout id: + info.ownerId = ownerLayoutId; + comp.margin$ = info; + } + + info.width = info.left + info.right; + info.height = info.top + info.bottom; + } + + me.marginInfo = info; + } + + return info; + }, + + /** + * clears the margin cache so that marginInfo get re-read from the dom on the next call to getMarginInfo() + * This is needed in some special cases where the margins have changed since the last layout, making the cached + * values invalid. For example collapsed window headers have different margin than expanded ones. + */ + clearMarginCache: function() { + delete this.marginInfo; + delete this.target.margin$; + }, + + /** + * Gets the padding information for the element as an object with left, top, right and + * bottom properties holding padding size in pixels. This object is only read from the + * DOM on first request and is cached. + * @return {Object} + */ + getPaddingInfo: function () { + var me = this, + info = me.paddingInfo; + + if (!info) { + me.paddingInfo = info = me.checkCache('paddingInfo'); + } + + return info; + }, + + /** + * Gets a property of this object. Also tracks the current layout as dependent on this + * property so that changes to it will trigger the layout to be recalculated. + * @param {String} propName The property name that blocked the layout (e.g., 'width'). + * @return {Object} The property value or undefined if not yet set. + */ + getProp: function (propName) { + var me = this, + result = me.props[propName]; + + me.addTrigger(propName); + return result; + }, + + /** + * Gets a property of this object if it is correct in the DOM. Also tracks the current + * layout as dependent on this property so that DOM writes of it will trigger the + * layout to be recalculated. + * @param {String} propName The property name (e.g., 'width'). + * @return {Object} The property value or undefined if not yet set or is dirty. + */ + getDomProp: function (propName) { + var me = this, + result = (me.dirty && (propName in me.dirty)) ? undefined : me.props[propName]; + + me.addTrigger(propName, true); + return result; + }, + + /** + * Returns a style for this item. Each style is read from the DOM only once on first + * request and is then cached. If the value is an integer, it is parsed automatically + * (so '5px' is not returned, but rather 5). + * + * @param {String} styleName The CSS style name. + * @return {Object} The value of the DOM style (parsed as necessary). + */ + getStyle: function (styleName) { + var me = this, + styles = me.styles, + info, value; + + if (styleName in styles) { + value = styles[styleName]; + } else { + info = me.styleInfo[styleName]; + value = me.el.getStyle(styleName); + + if (info && info.parseInt) { + value = parseInt(value, 10) || 0; + } + + styles[styleName] = value; + } + + return value; + }, + + /** + * Returns styles for this item. Each style is read from the DOM only once on first + * request and is then cached. If the value is an integer, it is parsed automatically + * (so '5px' is not returned, but rather 5). + * + * @param {String[]} styleNames The CSS style names. + * @param {String[]} [altNames] The alternate names for the returned styles. If given, + * these names must correspond one-for-one to the `styleNames`. + * @return {Object} The values of the DOM styles (parsed as necessary). + */ + getStyles: function (styleNames, altNames) { + var me = this, + styleCache = me.styles, + values = {}, + hits = 0, + n = styleNames.length, + i, missing, missingAltNames, name, info, styleInfo, styles, value; + + altNames = altNames || styleNames; + + // We are optimizing this for all hits or all misses. If we hit on all styles, we + // don't create a missing[]. If we miss on all styles, we also don't create one. + for (i = 0; i < n; ++i) { + name = styleNames[i]; + + if (name in styleCache) { + values[altNames[i]] = styleCache[name]; + ++hits; + + if (i && hits==1) { // if (first hit was after some misses) + missing = styleNames.slice(0, i); + missingAltNames = altNames.slice(0, i); + } + } else if (hits) { + (missing || (missing = [])).push(name); + (missingAltNames || (missingAltNames = [])).push(altNames[i]); + } + } + + if (hits < n) { + missing = missing || styleNames; + missingAltNames = missingAltNames || altNames; + styleInfo = me.styleInfo; + + styles = me.el.getStyle(missing); + + for (i = missing.length; i--; ) { + name = missing[i]; + info = styleInfo[name]; + value = styles[name]; + + if (info && info.parseInt) { + value = parseInt(value, 10) || 0; + } + + values[missingAltNames[i]] = value; + styleCache[name] = value; + } + } + + return values; + }, + + /** + * Returns true if the given property has been set. This is equivalent to calling + * {@link #getProp} and not getting an undefined result. In particular, this call + * registers the current layout to be triggered by changes to this property. + * + * @param {String} propName The property name (e.g., 'width'). + * @return {Boolean} + */ + hasProp: function (propName) { + var value = this.getProp(propName); + return typeof value != 'undefined'; + }, + + /** + * Returns true if the given property is correct in the DOM. This is equivalent to + * calling {@link #getDomProp} and not getting an undefined result. In particular, + * this call registers the current layout to be triggered by flushes of this property. + * + * @param {String} propName The property name (e.g., 'width'). + * @return {Boolean} + */ + hasDomProp: function (propName) { + var value = this.getDomProp(propName); + return typeof value != 'undefined'; + }, + + /** + * Invalidates the component associated with this item. The layouts for this component + * and all of its contained items will be re-run after first clearing any computed + * values. + * + * If state needs to be carried forward beyond the invalidation, the `options` parameter + * can be used. + * + * @param {Object} options An object describing how to handle the invalidation. + * @param {Object} options.state An object to {@link Ext#apply} to the {@link #state} + * of this item after invalidation clears all other properties. + * @param {Function} options.before A function to call after the context data is cleared + * and before the {@link Ext.layout.Layout#beginLayoutCycle} methods are called. + * @param {Ext.layout.ContextItem} options.before.item This ContextItem. + * @param {Object} options.before.options The options object passed to {@link #invalidate}. + * @param {Function} options.after A function to call after the context data is cleared + * and after the {@link Ext.layout.Layout#beginLayoutCycle} methods are called. + * @param {Ext.layout.ContextItem} options.after.item This ContextItem. + * @param {Object} options.after.options The options object passed to {@link #invalidate}. + * @param {Object} options.scope The scope to use when calling the callback functions. + */ + invalidate: function (options) { + this.context.queueInvalidate(this, options); + }, + + markDirty: function () { + if (++this.dirtyCount == 1) { + // our first dirty property... queue us for flush + this.context.queueFlush(this); + } + }, + + onBoxMeasured: function () { + var boxParent = this.boxParent, + state = this.state; + + if (boxParent && boxParent.widthModel.shrinkWrap && !state.boxMeasured && this.measuresBox) { + // since an autoWidth boxParent is holding a width on itself to allow each + // child to measure + state.boxMeasured = 1; // best to only call once per child + boxParent.boxChildMeasured(); + } + }, + + parseMargins: function (margins, defaultMargins) { + if (margins === true) { + margins = 5; + } + + var type = typeof margins, + ret; + + if (type == 'string' || type == 'number') { + ret = Ext.util.Format.parseBox(margins); + } else if (margins || defaultMargins) { + ret = { top: 0, right: 0, bottom: 0, left: 0 }; // base defaults + + if (defaultMargins) { + Ext.apply(ret, this.parseMargins(defaultMargins)); // + layout defaults + } + + Ext.apply(ret, margins); // + config + } + + return ret; + }, + + peek: function (propName) { + return this.props[propName]; + }, + + /** + * Recovers a property value from the last computation and restores its value and + * dirty state. + * + * @param {String} propName The name of the property to recover. + * @param {Object} oldProps The old "props" object from which to recover values. + * @param {Object} oldDirty The old "dirty" object from which to recover state. + */ + recoverProp: function (propName, oldProps, oldDirty) { + var me = this, + props = me.props, + dirty; + + if (propName in oldProps) { + props[propName] = oldProps[propName]; + + if (oldDirty && propName in oldDirty) { + dirty = me.dirty || (me.dirty = {}); + dirty[propName] = oldDirty[propName]; + } + } + }, + + redo: function(deep) { + var me = this, + items, len, i; + + me.revertProps(me.props); + + if (deep && me.wrapsComponent) { + // Rollback the state of child Components + if (me.childItems) { + for (i = 0, items = me.childItems, len = items.length; i < len; i++) { + items[i].redo(deep); + } + } + + // Rollback the state of child Elements + for (i = 0, items = me.children, len = items.length; i < len; i++) { + items[i].redo(); + } + } + }, + + revertProps: function (props) { + var name, + flushed = this.flushedProps, + reverted = {}; + + for (name in props) { + if (flushed.hasOwnProperty(name)) { + reverted[name] = props[name]; + } + } + + this.writeProps(reverted); + }, + + /** + * Queue the setting of a DOM attribute on this ContextItem's target when next flushed. + */ + setAttribute: function(name, value) { + var me = this; + if (!me.attributes) { + me.attributes = {}; + } + me.attributes[name] = value; + me.markDirty(); + }, + + setBox: function (box) { + var me = this; + + if ('left' in box) { + me.setProp('x', box.left); + } + if ('top' in box) { + me.setProp('y', box.top); + } + + // if sizeModel says we should not be setting these, the appropriate calls will be + // null operations... otherwise, we must set these values, so what we have in box + // is what we go with (undefined, NaN and no change are handled at a lower level): + me.setSize(box.width, box.height); + }, + + /** + * Sets the contentHeight property. If the component uses raw content, then only the + * measured height is acceptable. + * + * Calculated values can sometimes be NaN or undefined, which generally mean the + * calculation is not done. To indicate that such as value was passed, 0 is returned. + * Otherwise, 1 is returned. + * + * If the caller is not measuring (i.e., they are calculating) and the component has raw + * content, 1 is returned indicating that the caller is done. + */ + setContentHeight: function (height, measured) { + if (!measured && this.hasRawContent) { + return 1; + } + + return this.setProp('contentHeight', height); + }, + + /** + * Sets the contentWidth property. If the component uses raw content, then only the + * measured width is acceptable. + * + * Calculated values can sometimes be NaN or undefined, which generally means that the + * calculation is not done. To indicate that such as value was passed, 0 is returned. + * Otherwise, 1 is returned. + * + * If the caller is not measuring (i.e., they are calculating) and the component has raw + * content, 1 is returned indicating that the caller is done. + */ + setContentWidth: function (width, measured) { + if (!measured && this.hasRawContent) { + return 1; + } + + return this.setProp('contentWidth', width); + }, + + /** + * Sets the contentWidth and contentHeight properties. If the component uses raw content, + * then only the measured values are acceptable. + * + * Calculated values can sometimes be NaN or undefined, which generally means that the + * calculation is not done. To indicate that either passed value was such a value, false + * returned. Otherwise, true is returned. + * + * If the caller is not measuring (i.e., they are calculating) and the component has raw + * content, true is returned indicating that the caller is done. + */ + setContentSize: function (width, height, measured) { + return this.setContentWidth(width, measured) + + this.setContentHeight(height, measured) == 2; + }, + + /** + * Sets a property value. This will unblock and/or trigger dependent layouts if the + * property value is being changed. Values of NaN and undefined are not accepted by + * this method. + * + * @param {String} propName The property name (e.g., 'width'). + * @param {Object} value The new value of the property. + * @param {Boolean} dirty Optionally specifies if the value is currently in the DOM + * (default is `true` which indicates the value is not in the DOM and must be flushed + * at some point). + * @return {Number} 1 if this call specified the property value, 0 if not. + */ + setProp: function (propName, value, dirty) { + var me = this, + valueType = typeof value, + borderBox, info; + + if (valueType == 'undefined' || (valueType === 'number' && isNaN(value))) { + return 0; + } + if (me.props[propName] === value) { + return 1; + } + + me.props[propName] = value; + ++me.context.progressCount; + + if (dirty === false) { + // if the prop is equivalent to what is in the DOM (we won't be writing it), + // we need to clear hard blocks (domBlocks) on that property. + me.fireTriggers('domTriggers', propName); + me.clearBlocks('domBlocks', propName); + } else { + info = me.styleInfo[propName]; + if (info) { + if (!me.dirty) { + me.dirty = {}; + } + + if (propName == 'width' || propName == 'height') { + borderBox = me.isBorderBoxValue; + if (borderBox == null) { + me.isBorderBoxValue = borderBox = !!me.el.isBorderBox(); + } + + if (!borderBox) { + me.borderInfo || me.getBorderInfo(); + me.paddingInfo || me.getPaddingInfo(); + } + } + me.dirty[propName] = value; + me.markDirty(); + } + } + + // we always clear soft blocks on set + me.fireTriggers('triggers', propName); + me.clearBlocks('blocks', propName); + return 1; + }, + + /** + * Sets the height and constrains the height to min/maxHeight range. + * + * @param {Number} height The height. + * @param {Boolean} [dirty=true] Specifies if the value is currently in the DOM. A + * value of `false` indicates that the value is already in the DOM. + * @return {Number} The actual height after constraining. + */ + setHeight: function (height, dirty /*, private {Boolean} force */) { + var me = this, + comp = me.target, + frameBody, frameInfo, padding; + + if (height < 0) { + height = 0; + } + if (!me.wrapsComponent) { + if (!me.setProp('height', height, dirty)) { + return NaN; + } + } else { + height = Ext.Number.constrain(height, comp.minHeight || 0, comp.maxHeight); + if (!me.setProp('height', height, dirty)) { + return NaN; + } + + frameBody = me.frameBodyContext; + if (frameBody){ + frameInfo = me.getFrameInfo(); + frameBody.setHeight(height - frameInfo.height, dirty); + } + } + + return height; + }, + + /** + * Sets the height and constrains the width to min/maxWidth range. + * + * @param {Number} width The width. + * @param {Boolean} [dirty=true] Specifies if the value is currently in the DOM. A + * value of `false` indicates that the value is already in the DOM. + * @return {Number} The actual width after constraining. + */ + setWidth: function (width, dirty /*, private {Boolean} force */) { + var me = this, + comp = me.target, + frameBody, frameInfo, padding; + + if (width < 0) { + width = 0; + } + if (!me.wrapsComponent) { + if (!me.setProp('width', width, dirty)) { + return NaN; + } + } else { + width = Ext.Number.constrain(width, comp.minWidth || 0, comp.maxWidth); + if (!me.setProp('width', width, dirty)) { + return NaN; + } + + //if ((frameBody = me.target.frameBody) && (frameBody = me.getEl(frameBody))){ + frameBody = me.frameBodyContext; + if (frameBody) { + frameInfo = me.getFrameInfo(); + frameBody.setWidth(width - frameInfo.width, dirty); + } + + /*if (owner.frameMC) { + frameContext = ownerContext.frameContext || + (ownerContext.frameContext = ownerContext.getEl('frameMC')); + width += (frameContext.paddingInfo || frameContext.getPaddingInfo()).width; + }*/ + } + + return width; + }, + + setSize: function (width, height, dirty) { + this.setWidth(width, dirty); + this.setHeight(height, dirty); + }, + + translateProps: { + x: 'left', + y: 'top' + }, + + undo: function(deep) { + var me = this, + items, len, i; + + me.revertProps(me.lastBox); + + if (deep && me.wrapsComponent) { + // Rollback the state of child Components + if (me.childItems) { + for (i = 0, items = me.childItems, len = items.length; i < len; i++) { + items[i].undo(deep); + } + } + + // Rollback the state of child Elements + for (i = 0, items = me.children, len = items.length; i < len; i++) { + items[i].undo(); + } + } + }, + + unsetProp: function (propName) { + var dirty = this.dirty; + + delete this.props[propName]; + if (dirty) { + delete dirty[propName]; + } + }, + + writeProps: function(dirtyProps, flushing) { + if (!(dirtyProps && typeof dirtyProps == 'object')) { + Ext.Logger.warn('writeProps expected dirtyProps to be an object'); + return; + } + + var me = this, + el = me.el, + styles = {}, + styleCount = 0, // used as a boolean, the exact count doesn't matter + styleInfo = me.styleInfo, + + info, + propName, + numericValue, + + dirtyX = 'x' in dirtyProps, + dirtyY = 'y' in dirtyProps, + x = dirtyProps.x, + y = dirtyProps.y, + + width = dirtyProps.width, + height = dirtyProps.height, + isBorderBox = me.isBorderBoxValue, + target = me.target, + max = Math.max, + paddingWidth = 0, + paddingHeight = 0, + hasWidth, hasHeight, isAbsolute, scrollbarSize, style, targetEl; + + // Process non-style properties: + if ('displayed' in dirtyProps) { + el.setDisplayed(dirtyProps.displayed); + } + + // Unblock any hard blocks (domBlocks) and copy dom styles into 'styles' + for (propName in dirtyProps) { + if (flushing) { + me.fireTriggers('domTriggers', propName); + me.clearBlocks('domBlocks', propName); + me.flushedProps[propName] = 1; + } + + info = styleInfo[propName]; + if (info && info.dom) { + // Numeric dirty values should have their associated suffix added + if (info.suffix && (numericValue = parseInt(dirtyProps[propName], 10))) { + styles[propName] = numericValue + info.suffix; + } + // Non-numeric (eg "auto") go in unchanged. + else { + styles[propName] = dirtyProps[propName]; + } + ++styleCount; + } + } + + // convert x/y into setPosition (for a component) or left/top styles (for an el) + if (dirtyX || dirtyY) { + if (target.isComponent) { + // Ensure we always pass the current coordinate in if one coordinate has not been dirtied by a calculation cycle. + target.setPosition(x||me.props.x, y||me.props.y); + } else { + // we wrap an element, so convert x/y to styles: + if (dirtyX) { + styles.left = x + 'px'; + ++styleCount; + } + if (dirtyY) { + styles.top = y + 'px'; + ++styleCount; + } + } + } + + // Support for the content-box box model... + if (!isBorderBox && (width > 0 || height > 0)) { // no need to subtract from 0 + // The width and height values assume the border-box box model, + // so we must remove the padding & border to calculate the content-box. + if (!(me.borderInfo && me.paddingInfo)) { + throw Error("Needed to have gotten the borderInfo and paddingInfo when the width or height was setProp'd"); + } + if(!me.frameBodyContext) { + // Padding needs to be removed only if the element is not framed. + paddingWidth = me.paddingInfo.width; + paddingHeight = me.paddingInfo.height; + } + if (width) { + width = max(parseInt(width, 10) - (me.borderInfo.width + paddingWidth), 0); + styles.width = width + 'px'; + ++styleCount; + } + if (height) { + height = max(parseInt(height, 10) - (me.borderInfo.height + paddingHeight), 0); + styles.height = height + 'px'; + ++styleCount; + } + } + + // IE9 strict subtracts the scrollbar size from the element size when the element + // is absolutely positioned and uses box-sizing: border-box. To workaround this + // issue we have to add the the scrollbar size. + // + // See http://social.msdn.microsoft.com/Forums/da-DK/iewebdevelopment/thread/47c5148f-a142-4a99-9542-5f230c78cb3b + // + if (me.wrapsComponent && Ext.isIE9 && Ext.isStrict) { + // when we set a width and we have a vertical scrollbar (overflowY), we need + // to add the scrollbar width... conversely for the height and overflowX + if ((hasWidth = width !== undefined && me.hasOverflowY) || + (hasHeight = height !== undefined && me.hasOverflowX)) { + // check that the component is absolute positioned and border-box: + isAbsolute = me.isAbsolute; + if (isAbsolute === undefined) { + isAbsolute = false; + targetEl = me.target.getTargetEl(); + style = targetEl.getStyle('position'); + + if (style == 'absolute') { + style = targetEl.getStyle('box-sizing'); + isAbsolute = (style == 'border-box'); + } + + me.isAbsolute = isAbsolute; // cache it + } + + if (isAbsolute) { + scrollbarSize = Ext.getScrollbarSize(); + + if (hasWidth) { + width = parseInt(width, 10) + scrollbarSize.width; + styles.width = width + 'px'; + ++styleCount; + } + if (hasHeight) { + height = parseInt(height, 10) + scrollbarSize.height; + styles.height = height + 'px'; + ++styleCount; + } + } + } + } + + // we make only one call to setStyle to allow it to optimize itself: + if (styleCount) { + el.setStyle(styles); + } + } +}, function () { + + var px = { dom: true, parseInt: true, suffix: 'px' }, + isDom = { dom: true }, + faux = { dom: false }; + + // If a property exists in styleInfo, it participates in some way with the DOM. It may + // be virtualized (like 'x' and y') and be indirect, but still requires a flush cycle + // to reach the DOM. Properties (like 'contentWidth' and 'contentHeight') have no real + // presence in the DOM and hence have no flush intanglements. + // + // For simple styles, the object value on the right contains properties that help in + // decoding values read by getStyle and preparing values to pass to setStyle. + // + this.prototype.styleInfo = { + childrenDone: faux, + componentChildrenDone: faux, + containerChildrenDone: faux, + containerLayoutDone: faux, + displayed: faux, + done: faux, + x: faux, + y: faux, + + // For Ext.grid.ColumnLayout + columnWidthsDone: faux, + + left: px, + top: px, + right: px, + bottom: px, + width: px, + height: px, + + 'border-top-width': px, + 'border-right-width': px, + 'border-bottom-width': px, + 'border-left-width': px, + + 'margin-top': px, + 'margin-right': px, + 'margin-bottom': px, + 'margin-left': px, + + 'padding-top': px, + 'padding-right': px, + 'padding-bottom': px, + 'padding-left': px, + + 'line-height': isDom, + display: isDom + }; +}); + +/** + * Manages context information during a layout. + * + * # Algorithm + * + * This class performs the following jobs: + * + * - Cache DOM reads to avoid reading the same values repeatedly. + * - Buffer DOM writes and flush them as a block to avoid read/write interleaving. + * - Track layout dependencies so each layout does not have to figure out the source of + * its dependent values. + * - Intelligently run layouts when the values on which they depend change (a trigger). + * - Allow layouts to avoid processing when required values are unavailable (a block). + * + * Work done during layout falls into either a "read phase" or a "write phase" and it is + * essential to always be aware of the current phase. Most methods in + * {@link Ext.layout.Layout Layout} are called during a read phase: + * {@link Ext.layout.Layout#calculate calculate}, + * {@link Ext.layout.Layout#completeLayout completeLayout} and + * {@link Ext.layout.Layout#finalizeLayout finalizeLayout}. The exceptions to this are + * {@link Ext.layout.Layout#beginLayout beginLayout}, + * {@link Ext.layout.Layout#beginLayoutCycle beginLayoutCycle} and + * {@link Ext.layout.Layout#finishedLayout finishedLayout} which are called during + * a write phase. While {@link Ext.layout.Layout#finishedLayout finishedLayout} is called + * a write phase, it is really intended to be a catch-all for post-processing after a + * layout run. + * + * In a read phase, it is OK to read the DOM but this should be done using the appropriate + * {@link Ext.layout.ContextItem ContextItem} where possible since that provides a cache + * to avoid redundant reads. No writes should be made to the DOM in a read phase! Instead, + * the values should be written to the proper ContextItem for later write-back. + * + * The rules flip-flop in a write phase. The only difference is that ContextItem methods + * like {@link Ext.layout.ContextItem#getStyle getStyle} will still read the DOM unless the + * value was previously read. This detail is unknowable from the outside of ContextItem, so + * read calls to ContextItem should also be avoided in a write phase. + * + * Calculating interdependent layouts requires a certain amount of iteration. In a given + * cycle, some layouts will contribute results that allow other layouts to proceed. The + * general flow then is to gather all of the layouts (both component and container) in a + * component tree and queue them all for processing. The initial queue order is bottom-up + * and component layout first, then container layout (if applicable) for each component. + * + * This initial step also calls the beginLayout method on all layouts to clear any values + * from the DOM that might interfere with calculations and measurements. In other words, + * this is a "write phase" and reads from the DOM should be strictly avoided. + * + * Next the layout enters into its iterations or "cycles". Each cycle consists of calling + * the {@link Ext.layout.Layout#calculate calculate} method on all layouts in the + * {@link #layoutQueue}. These calls are part of a "read phase" and writes to the DOM should + * be strictly avoided. + * + * # Considerations + * + * **RULE 1**: Respect the read/write cycles. Always use the {@link Ext.layout.ContextItem#getProp getProp} + * or {@link Ext.layout.ContextItem#getDomProp getDomProp} methods to get calculated values; + * only use the {@link Ext.layout.ContextItem#getStyle getStyle} method to read styles; use + * {@link Ext.layout.ContextItem#setProp setProp} to set DOM values. Some reads will, of + * course, still go directly to the DOM, but if there is a method in + * {@link Ext.layout.ContextItem ContextItem} to do a certain job, it should be used instead + * of a lower-level equivalent. + * + * The basic logic flow in {@link Ext.layout.Layout#calculate calculate} consists of gathering + * values by calling {@link Ext.layout.ContextItem#getProp getProp} or + * {@link Ext.layout.ContextItem#getDomProp getDomProp}, calculating results and publishing + * them by calling {@link Ext.layout.ContextItem#setProp setProp}. It is important to realize + * that {@link Ext.layout.ContextItem#getProp getProp} will return `undefined` if the value + * is not yet known. But the act of calling the method is enough to track the fact that the + * calling layout depends (in some way) on this value. In other words, the calling layout is + * "triggered" by the properties it requests. + * + * **RULE 2**: Avoid calling {@link Ext.layout.ContextItem#getProp getProp} unless the value + * is needed. Gratuitous calls cause inefficiency because the layout will appear to depend on + * values that it never actually uses. This applies equally to + * {@link Ext.layout.ContextItem#getDomProp getDomProp} and the test-only methods + * {@link Ext.layout.ContextItem#hasProp hasProp} and {@link Ext.layout.ContextItem#hasDomProp hasDomProp}. + * + * Because {@link Ext.layout.ContextItem#getProp getProp} can return `undefined`, it is often + * the case that subsequent math will produce NaN's. This is usually not a problem as the + * NaN's simply propagate along and result in final results that are NaN. Both `undefined` + * and NaN are ignored by {@link Ext.layout.ContextItem#setProp}, so it is often not necessary + * to even know that this is happening. It does become important for determining if a layout + * is not done or if it might lead to publishing an incorrect (but not NaN or `undefined`) + * value. + * + * **RULE 3**: If a layout has not calculated all the values it is required to calculate, it + * must set {@link Ext.layout.Layout#done done} to `false` before returning from + * {@link Ext.layout.Layout#calculate calculate}. This value is always `true` on entry because + * it is simpler to detect the incomplete state rather than the complete state (especially up + * and down a class hierarchy). + * + * **RULE 4**: A layout must never publish an incomplete (wrong) result. Doing so would cause + * dependent layouts to run their calculations on those wrong values, producing more wrong + * values and some layouts may even incorrectly flag themselves as {@link Ext.layout.Layout#done done} + * before the correct values are determined and republished. Doing this will poison the + * calculations. + * + * **RULE 5**: Each value should only be published by one layout. If multiple layouts attempt + * to publish the same values, it would be nearly impossible to avoid breaking **RULE 4**. To + * help detect this problem, the layout diagnostics will trap on an attempt to set a value + * from different layouts. + * + * Complex layouts can produce many results as part of their calculations. These values are + * important for other layouts to proceed and need to be published by the earliest possible + * call to {@link Ext.layout.Layout#calculate} to avoid unnecessary cycles and poor performance. It is + * also possible, however, for some results to be related in a way such that publishing them + * may be an all-or-none proposition (typically to avoid breaking *RULE 4*). + * + * **RULE 6**: Publish results as soon as they are known to be correct rather than wait for + * all values to be calculated. Waiting for everything to be complete can lead to deadlock. + * The key here is not to forget **RULE 4** in the process. + * + * Some layouts depend on certain critical values as part of their calculations. For example, + * HBox depends on width and cannot do anything until the width is known. In these cases, it + * is best to use {@link Ext.layout.ContextItem#block block} or + * {@link Ext.layout.ContextItem#domBlock domBlock} and thereby avoid processing the layout + * until the needed value is available. + * + * **RULE 7**: Use {@link Ext.layout.ContextItem#block block} or + * {@link Ext.layout.ContextItem#domBlock domBlock} when values are required to make progress. + * This will mimize wasted recalculations. + * + * **RULE 8**: Blocks should only be used when no forward progress can be made. If even one + * value could still be calculated, a block could result in a deadlock. + * + * Historically, layouts have been invoked directly by component code, sometimes in places + * like an `afterLayout` method for a child component. With the flexibility now available + * to solve complex, iterative issues, such things should be done in a responsible layout + * (be it component or container). + * + * **RULE 9**: Use layouts to solve layout issues and don't wait for the layout to finish to + * perform further layouts. This is especially important now that layouts process entire + * component trees and not each layout in isolation. + * + * # Sequence Diagram + * + * The simplest sequence diagram for a layout run looks roughly like this: + * + * Context Layout 1 Item 1 Layout 2 Item 2 + * | | | | | + * ---->X-------------->X | | | + * run X---------------|-----------|---------->X | + * X beginLayout | | | | + * X | | | | + * A X-------------->X | | | + * X calculate X---------->X | | + * X C X getProp | | | + * B X X---------->X | | + * X | setProp | | | + * X | | | | + * D X---------------|-----------|---------->X | + * X calculate | | X---------->X + * X | | | setProp | + * E X | | | | + * X---------------|-----------|---------->X | + * X completeLayout| | F | | + * X | | | | + * G X | | | | + * H X-------------->X | | | + * X calculate X---------->X | | + * X I X getProp | | | + * X X---------->X | | + * X | setProp | | | + * J X-------------->X | | | + * X completeLayout| | | | + * X | | | | + * K X-------------->X | | | + * X---------------|-----------|---------->X | + * X finalizeLayout| | | | + * X | | | | + * L X-------------->X | | | + * X---------------|-----------|---------->X | + * X finishedLayout| | | | + * X | | | | + * M X-------------->X | | | + * X---------------|-----------|---------->X | + * X notifyOwner | | | | + * N | | | | | + * - - - - - + * + * + * Notes: + * + * **A.** This is a call from the {@link #run} method to the {@link #runCycle} method. + * Each layout in the queue will have its {@link Ext.layout.Layout#calculate calculate} + * method called. + * + * **B.** After each {@link Ext.layout.Layout#calculate calculate} method is called the + * {@link Ext.layout.Layout#done done} flag is checked to see if the Layout has completed. + * If it has completed and that layout object implements a + * {@link Ext.layout.Layout#completeLayout completeLayout} method, this layout is queued to + * receive its call. Otherwise, the layout will be queued again unless there are blocks or + * triggers that govern its requeueing. + * + * **C.** The call to {@link Ext.layout.ContextItem#getProp getProp} is made to the Item + * and that will be tracked as a trigger (keyed by the name of the property being requested). + * Changes to this property will cause this layout to be requeued. The call to + * {@link Ext.layout.ContextItem#setProp setProp} will place a value in the item and not + * directly into the DOM. + * + * **D.** Call the other layouts now in the first cycle (repeat **B** and **C** for each + * layout). + * + * **E.** After completing a cycle, if progress was made (new properties were written to + * the context) and if the {@link #layoutQueue} is not empty, the next cycle is run. If no + * progress was made or no layouts are ready to run, all buffered values are written to + * the DOM (a flush). + * + * **F.** After flushing, any layouts that were marked as {@link Ext.layout.Layout#done done} + * that also have a {@link Ext.layout.Layout#completeLayout completeLayout} method are called. + * This can cause them to become no longer done (see {@link #invalidate}). As with + * {@link Ext.layout.Layout#calculate calculate}, this is considered a "read phase" and + * direct DOM writes should be avoided. + * + * **G.** Flushing and calling any pending {@link Ext.layout.Layout#completeLayout completeLayout} + * methods will likely trigger layouts that called {@link Ext.layout.ContextItem#getDomProp getDomProp} + * and unblock layouts that have called {@link Ext.layout.ContextItem#domBlock domBlock}. + * These variants are used when a layout needs the value to be correct in the DOM and not + * simply known. If this does not cause at least one layout to enter the queue, we have a + * layout FAILURE. Otherwise, we continue with the next cycle. + * + * **H.** Call {@link Ext.layout.Layout#calculate calculate} on any layouts in the queue + * at the start of this cycle. Just a repeat of **B** through **G**. + * + * **I.** Once the layout has calculated all that it is resposible for, it can leave itself + * in the {@link Ext.layout.Layout#done done} state. This is the value on entry to + * {@link Ext.layout.Layout#calculate calculate} and must be cleared in that call if the + * layout has more work to do. + * + * **J.** Now that all layouts are done, flush any DOM values and + * {@link Ext.layout.Layout#completeLayout completeLayout} calls. This can again cause + * layouts to become not done, and so we will be back on another cycle if that happens. + * + * **K.** After all layouts are done, call the {@link Ext.layout.Layout#finalizeLayout finalizeLayout} + * method on any layouts that have one. As with {@link Ext.layout.Layout#completeLayout completeLayout}, + * this can cause layouts to become no longer done. This is less desirable than using + * {@link Ext.layout.Layout#completeLayout completeLayout} because it will cause all + * {@link Ext.layout.Layout#finalizeLayout finalizeLayout} methods to be called again + * when we think things are all wrapped up. + * + * **L.** After finishing the last iteration, layouts that have a + * {@link Ext.layout.Layout#finishedLayout finishedLayout} method will be called. This + * call will only happen once per run and cannot cause layouts to be run further. + * + * **M.** After calling finahedLayout, layouts that have a + * {@link Ext.layout.Layout#notifyOwner notifyOwner} method will be called. This + * call will only happen once per run and cannot cause layouts to be run further. + * + * **N.** One last flush to make sure everything has been written to the DOM. + * + * # Inter-Layout Collaboration + * + * Many layout problems require collaboration between multiple layouts. In some cases, this + * is as simple as a component's container layout providing results used by its component + * layout or vise-versa. A slightly more distant collaboration occurs in a box layout when + * stretchmax is used: the child item's component layout provides results that are consumed + * by the ownerCt's box layout to determine the size of the children. + * + * The various forms of interdependence between a container and its children are described by + * each components' {@link Ext.AbstractComponent#getSizeModel size model}. + * + * To facilitate this collaboration, the following pairs of properties are published to the + * component's {@link Ext.layout.ContextItem ContextItem}: + * + * - width/height: These hold the final size of the component. The layout indicated by the + * {@link Ext.AbstractComponent#getSizeModel size model} is responsible for setting these. + * - contentWidth/contentHeight: These hold size information published by the container + * layout or from DOM measurement. These describe the content only. These values are + * used by the component layout to determine the outer width/height when that component + * is {@link Ext.AbstractComponent#shrinkWrap shrink-wrapped}. They are also used to + * determine overflow. All container layouts must publish these values for dimensions + * that are shrink-wrapped. If a component has raw content (not container items), the + * componentLayout must publish these values instead. + * + * @protected + */ +Ext.define('Ext.layout.Context', { + requires: [ + 'Ext.util.Queue', + 'Ext.layout.ContextItem', + 'Ext.layout.Layout', + 'Ext.fx.Anim', + 'Ext.fx.Manager' + ], + + remainingLayouts: 0, + + /** + * @property {Number} state One of these values: + * + * - 0 - Before run + * - 1 - Running + * - 2 - Run complete + */ + state: 0, + + constructor: function (config) { + var me = this; + + Ext.apply(me, config); + + // holds the ContextItem collection, keyed by element id + me.items = {}; + + // a collection of layouts keyed by layout id + me.layouts = {}; + + // the number of blocks of any kind: + me.blockCount = 0; + // the number of cycles that have been run: + me.cycleCount = 0; + // the number of flushes to the DOM: + me.flushCount = 0; + // the number of layout calculate calls: + me.calcCount = 0; + + me.animateQueue = me.newQueue(); + me.completionQueue = me.newQueue(); + me.finalizeQueue = me.newQueue(); + me.finishQueue = me.newQueue(); + me.flushQueue = me.newQueue(); + + me.invalidateData = {}; + + /** + * @property {Ext.util.Queue} layoutQueue + * List of layouts to perform. + */ + me.layoutQueue = me.newQueue(); + + // this collection is special because we ensure that there are no parent/child pairs + // present, only distinct top-level components + me.invalidQueue = []; + + me.triggers = { + data: { + /* + layoutId: [ + { item: contextItem, prop: propertyName } + ] + */ + }, + dom: {} + }; + }, + + callLayout: function (layout, methodName) { + this.currentLayout = layout; + layout[methodName](this.getCmp(layout.owner)); + }, + + cancelComponent: function (comp, isChild, isDestroying) { + var me = this, + components = comp, + isArray = !comp.isComponent, + length = isArray ? components.length : 1, + i, k, klen, items, layout, newQueue, oldQueue, entry, temp, + ownerCtContext; + + for (i = 0; i < length; ++i) { + if (isArray) { + comp = components[i]; + } + + // If the component is being destroyed, remove the component's ContextItem from its parent's contextItem.childItems array + if (isDestroying && comp.ownerCt) { + ownerCtContext = this.items[comp.ownerCt.el.id]; + if (ownerCtContext) { + Ext.Array.remove(ownerCtContext.childItems, me.getCmp(comp)); + } + } + + if (!isChild) { + oldQueue = me.invalidQueue; + klen = oldQueue.length; + + if (klen) { + me.invalidQueue = newQueue = []; + for (k = 0; k < klen; ++k) { + entry = oldQueue[k]; + temp = entry.item.target; + if (temp != comp && !temp.isDescendant(comp)) { + newQueue.push(entry); + } + } + } + } + + layout = comp.componentLayout; + me.cancelLayout(layout); + + if (layout.getLayoutItems) { + items = layout.getLayoutItems(); + if (items.length) { + me.cancelComponent(items, true); + } + } + + if (comp.isContainer && !comp.collapsed) { + layout = comp.layout; + me.cancelLayout(layout); + + items = layout.getVisibleItems(); + if (items.length) { + me.cancelComponent(items, true); + } + } + } + }, + + cancelLayout: function (layout) { + var me = this; + + me.completionQueue.remove(layout); + me.finalizeQueue.remove(layout); + me.finishQueue.remove(layout); + me.layoutQueue.remove(layout); + + if (layout.running) { + me.layoutDone(layout); + } + + layout.ownerContext = null; + }, + + clearTriggers: function (layout, inDom) { + var id = layout.id, + collection = this.triggers[inDom ? 'dom' : 'data'], + triggers = collection && collection[id], + length = (triggers && triggers.length) || 0, + collection, i, item, trigger; + + for (i = 0; i < length; ++i) { + trigger = triggers[i]; + item = trigger.item; + + collection = inDom ? item.domTriggers : item.triggers; + delete collection[trigger.prop][id]; + } + }, + + /** + * Flushes any pending writes to the DOM by calling each ContextItem in the flushQueue. + */ + flush: function () { + var me = this, + items = me.flushQueue.clear(), + length = items.length, i; + + if (length) { + ++me.flushCount; + + for (i = 0; i < length; ++i) { + items[i].flush(); + } + } + }, + + flushAnimations: function() { + var me = this, + items = me.animateQueue.clear(), + len = items.length, + i; + + if (len) { + for (i = 0; i < len; i++) { + // Each Component may refuse to participate in animations. + // This is used by the BoxReorder plugin which drags a Component, + // during which that Component must be exempted from layout positioning. + if (items[i].target.animate !== false) { + items[i].flushAnimations(); + } + } + + // Ensure the first frame fires now to avoid a browser repaint with the elements in the "to" state + // before they are returned to their "from" state by the animation. + Ext.fx.Manager.runner(); + } + }, + + flushInvalidates: function () { + var me = this, + queue = me.invalidQueue, + length = queue && queue.length, + comp, components, entry, i; + + me.invalidQueue = []; + + if (length) { + components = []; + for (i = 0; i < length; ++i) { + comp = (entry = queue[i]).item.target; + // we filter out-of-body components here but allow them into the queue to + // ensure that their child components are coalesced out (w/no additional + // cost beyond our normal effort to avoid parent/child components in the + // queue) + if (!comp.container.isDetachedBody) { + components.push(comp); + + if (entry.options) { + me.invalidateData[comp.id] = entry.options; + } + } + } + + me.invalidate(components, null); + } + }, + + flushLayouts: function (queueName, methodName, dontClear) { + var me = this, + layouts = dontClear ? me[queueName].items : me[queueName].clear(), + length = layouts.length, + i, layout; + + if (length) { + for (i = 0; i < length; ++i) { + layout = layouts[i]; + if (!layout.running) { + me.callLayout(layout, methodName); + } + } + me.currentLayout = null; + } + }, + + /** + * Returns the ContextItem for a component. + * @param {Ext.Component} cmp + */ + getCmp: function (cmp) { + return this.getItem(cmp, cmp.el); + }, + + /** + * Returns the ContextItem for an element. + * @param {Ext.layout.ContextItem} parent + * @param {Ext.dom.Element} el + */ + getEl: function (parent, el) { + var item = this.getItem(el, el); + + if (!item.parent) { + item.parent = parent; + + // all items share an empty children array (to avoid null checks), so we can + // only push on to the children array if there is already something there (we + // copy-on-write): + if (parent.children.length) { + parent.children.push(item); + } else { + parent.children = [ item ]; // now parent has its own children[] (length=1) + } + } + + return item; + }, + + getItem: function (target, el) { + var id = el.id, + items = this.items, + item = items[id] || + (items[id] = new Ext.layout.ContextItem({ + context: this, + target: target, + el: el + })); + + return item; + }, + + handleFailure: function () { + // This method should never be called, but is need when layouts fail (hence the + // "should never"). We just disconnect any of the layouts from the run and return + // them to the state they would be in had the layout completed properly. + var layouts = this.layouts, + layout, key; + + Ext.failedLayouts = (Ext.failedLayouts || 0) + 1; + Ext.log('Layout run failed'); + + for (key in layouts) { + layout = layouts[key]; + + if (layouts.hasOwnProperty(key)) { + layout.running = false; + layout.ownerContext = null; + } + } + }, + + /** + * Invalidates one or more components' layouts (component and container). This can be + * called before run to identify the components that need layout or during the run to + * restart the layout of a component. This is called internally to flush any queued + * invalidations at the start of a cycle. If called during a run, it is not expected + * that new components will be introduced to the layout. + * + * @param {Ext.Component/Array} components An array of Components or a single Component. + * @param {Ext.layout.ContextItem} ownerCtContext The ownerCt's ContextItem. + * @param {Boolean} full True if all properties should be invalidated, otherwise only + * those calculated by the component should be invalidated. + */ + invalidate: function (components, full) { + var me = this, + isArray = !components.isComponent, + componentChildrenDone, containerChildrenDone, containerLayoutDone, + firstTime, i, comp, item, items, length, componentLayout, layout, + invalidateOptions, token; + + for (i = 0, length = isArray ? components.length : 1; i < length; ++i) { + comp = isArray ? components[i] : components; + + if (comp.rendered && !comp.hidden) { + item = me.getCmp(comp); + componentLayout = comp.componentLayout; + firstTime = !componentLayout.ownerContext; + layout = (comp.isContainer && !comp.collapsed) ? comp.layout : null; + + // Extract any invalidate() options for this item. + invalidateOptions = me.invalidateData[item.id]; + delete me.invalidateData[item.id]; + + // We invalidate the contextItem's in a top-down manner so that SizeModel + // info for containers is available to their children. This is a critical + // optimization since sizeModel determination often requires knowing the + // sizeModel of the ownerCt. If this weren't cached as we descend, this + // would be an O(N^2) operation! (where N=number of components, or 300+/- + // in Themes) + token = item.init(full, invalidateOptions); + + if (invalidateOptions) { + me.processInvalidate(invalidateOptions, item, 'before'); + } + + // Allow the component layout a chance to effect its size model before we + // recurse down the component hierarchy (since children need to know the + // size model of their ownerCt). + if (componentLayout.beforeLayoutCycle) { + componentLayout.beforeLayoutCycle(item); + } + + // Finish up the item-level processing that is based on the size model of + // the component. + token = item.initContinue(token); + + // Start these state variables at true, since that is the value we want if + // they do not apply (i.e., no work of this kind on which to wait). + componentChildrenDone = containerChildrenDone = containerLayoutDone = true; + + // A ComponentLayout MUST implement getLayoutItems to allow its children + // to be collected. Ext.container.Container does this, but non-Container + // Components which manage Components as part of their structure (e.g., + // HtmlEditor) must still return child Components via getLayoutItems. + if (componentLayout.getLayoutItems) { + componentLayout.renderChildren(); + + items = componentLayout.getLayoutItems(); + if (items.length) { + me.invalidate(items, true); + componentChildrenDone = false; + } + } + + if (layout) { + containerLayoutDone = false; + layout.renderChildren(); + + items = layout.getVisibleItems(); + if (items.length) { + me.invalidate(items, true); + containerChildrenDone = false; + } + } + + // Finish the processing that requires the size models of child items to + // be determined (and some misc other stuff). + item.initDone(token, componentChildrenDone, containerChildrenDone, + containerLayoutDone); + + // Inform the layouts that we are about to begin (or begin again) now that + // the size models of the component and its children are setup. + me.resetLayout(componentLayout, item, firstTime); + if (layout) { + me.resetLayout(layout, item, firstTime); + } + + // This has to occur after the component layout has had a chance to begin + // so that we can determine what kind of animation might be needed. TODO- + // move this determination into the layout itself. + item.initAnimation(); + + if (invalidateOptions) { + me.processInvalidate(invalidateOptions, item, 'after'); + } + } + } + + me.currentLayout = null; + }, + + layoutDone: function (layout) { + var ownerContext = layout.ownerContext, + ownerCtContext; + + layout.running = false; + + // Once a component layout completes, we can mark it as "done" but we can also + // decrement the remainingChildLayouts property on the ownerCtContext. When that + // goes to 0, we can mark the ownerCtContext as "childrenDone". + if (layout.isComponentLayout) { + if (ownerContext.measuresBox) { + ownerContext.onBoxMeasured(); // be sure to release our boxParent + } + + ownerContext.setProp('done', true); + + ownerCtContext = ownerContext.ownerCtContext; + if (ownerCtContext) { + if (ownerContext.target.ownerLayout.isComponentLayout) { + if (! --ownerCtContext.remainingComponentChildLayouts) { + ownerCtContext.setProp('componentChildrenDone', true); + } + } else { + if (! --ownerCtContext.remainingContainerChildLayouts) { + ownerCtContext.setProp('containerChildrenDone', true); + } + } + if (! --ownerCtContext.remainingChildLayouts) { + ownerCtContext.setProp('childrenDone', true); + } + } + } else { + ownerContext.setProp('containerLayoutDone', true); + } + + --this.remainingLayouts; + ++this.progressCount; // a layout completion is progress + }, + + newQueue: function () { + return new Ext.util.Queue(); + }, + + processInvalidate: function (options, item, name) { + // When calling a callback, the currentLayout needs to be adjusted so + // that whichever layout caused the invalidate is the currentLayout... + if (options[name]) { + var me = this, + currentLayout = me.currentLayout; + + me.currentLayout = options.layout || null; + + options[name](item, options); + + me.currentLayout = currentLayout; + } + }, + + /** + * Queues a ContextItem to have its {@link Ext.layout.ContextItem#flushAnimations} method called. + * + * @param {Ext.layout.ContextItem} item + * @private + */ + queueAnimation: function (item) { + this.animateQueue.add(item); + }, + + /** + * Queues a layout to have its {@link Ext.layout.Layout#completeLayout} method called. + * + * @param {Ext.layout.Layout} layout + * @private + */ + queueCompletion: function (layout) { + this.completionQueue.add(layout); + }, + + /** + * Queues a layout to have its {@link Ext.layout.Layout#finalizeLayout} method called. + * + * @param {Ext.layout.Layout} layout + * @private + */ + queueFinalize: function (layout) { + this.finalizeQueue.add(layout); + }, + + /** + * Queues a ContextItem for the next flush to the DOM. This should only be called by + * the {@link Ext.layout.ContextItem} class. + * + * @param {Ext.layout.ContextItem} item + * @private + */ + queueFlush: function (item) { + this.flushQueue.add(item); + }, + + chainFns: function (oldOptions, newOptions, funcName) { + var me = this, + oldLayout = oldOptions.layout, + newLayout = newOptions.layout, + oldFn = oldOptions[funcName], + newFn = newOptions[funcName]; + + // Call newFn last so it can get the final word on things... also, the "this" + // pointer will be passed correctly by createSequence with oldFn first. + return function (contextItem) { + var prev = me.currentLayout; + if (oldFn) { + me.currentLayout = oldLayout; + oldFn.call(oldOptions.scope || oldOptions, contextItem, oldOptions); + } + me.currentLayout = newLayout; + newFn.call(newOptions.scope || newOptions, contextItem, newOptions); + me.currentLayout = prev; + }; + }, + + /** + * Queue a component (and its tree) to be invalidated on the next cycle. + * + * @param {Ext.Component/Ext.layout.ContextItem} item The component or ContextItem to invalidate. + * @param {Object} options An object describing how to handle the invalidation (see + * {@link Ext.layout.ContextItem#invalidate} for details). + * @private + */ + queueInvalidate: function (item, options) { + var me = this, + newQueue = [], + oldQueue = me.invalidQueue, + index = oldQueue.length, + comp, old, oldComp, oldOptions, oldState; + + if (item.isComponent) { + item = me.getCmp(comp = item); + } else { + comp = item.target; + } + + item.invalid = true; + + // See if comp is contained by any component already in the queue (ignore comp if + // that is the case). Eliminate any components in the queue that are contained by + // comp (by not adding them to newQueue). + while (index--) { + old = oldQueue[index]; + oldComp = old.item.target; + + if (comp.isDescendant(oldComp)) { + return; // oldComp contains comp, so this invalidate is redundant + } + + if (oldComp == comp) { + // if already in the queue, update the options... + if (!(oldOptions = old.options)) { + old.options = options; + } else if (options) { + if (options.widthModel) { + oldOptions.widthModel = options.widthModel; + } + if (options.heightModel) { + oldOptions.heightModel = options.heightModel; + } + if (!(oldState = oldOptions.state)) { + oldOptions.state = options.state; + } else if (options.state) { + Ext.apply(oldState, options.state); + } + + if (options.before) { + oldOptions.before = me.chainFns(oldOptions, options, 'before'); + } + if (options.after) { + oldOptions.after = me.chainFns(oldOptions, options, 'after'); + } + } + + // leave the old queue alone now that we've update this comp's entry... + return; + } + + if (!oldComp.isDescendant(comp)) { + newQueue.push(old); // comp does not contain oldComp + } + // else if (oldComp isDescendant of comp) skip + } + // newQueue contains only those components not a descendant of comp + + // to get here, comp must not be a child of anything already in the queue, so it + // needs to be added along with its "options": + newQueue.push({ item: item, options: options }); + + me.invalidQueue = newQueue; + }, + + queueItemLayouts: function (item) { + var comp = item.isComponent ? item : item.target, + layout = comp.componentLayout; + + if (!layout.pending && !layout.invalid && !layout.done) { + this.queueLayout(layout); + } + + layout = comp.layout; + if (layout && !layout.pending && !layout.invalid && !layout.done) { + this.queueLayout(layout); + } + }, + + /** + * Queues a layout for the next calculation cycle. This should not be called if the + * layout is done, blocked or already in the queue. The only classes that should call + * this method are this class and {@link Ext.layout.ContextItem}. + * + * @param {Ext.layout.Layout} layout The layout to add to the queue. + * @private + */ + queueLayout: function (layout) { + this.layoutQueue.add(layout); + layout.pending = true; + }, + + /** + * Resets the given layout object. This is called at the start of the run and can also + * be called during the run by calling {@link #invalidate}. + */ + resetLayout: function (layout, ownerContext, firstTime) { + var me = this, + ownerCtContext; + + me.currentLayout = layout; + + layout.done = false; + layout.pending = true; + layout.firedTriggers = 0; + + me.layoutQueue.add(layout); + + if (firstTime) { + me.layouts[layout.id] = layout; // track the layout for this run by its id + layout.running = true; + + if (layout.finishedLayout) { + me.finishQueue.add(layout); + } + + // reset or update per-run counters: + + ++me.remainingLayouts; + ++layout.layoutCount; // the number of whole layouts run for the layout + + layout.ownerContext = ownerContext; + layout.beginCount = 0; // the number of beginLayout calls + layout.blockCount = 0; // the number of blocks set for the layout + layout.calcCount = 0; // the number of times calculate is called + layout.triggerCount = 0; // the number of triggers set for the layout + + // Count the children of each ownerCt so we can tell when they are all done: + if (layout.isComponentLayout && (ownerCtContext = ownerContext.ownerCtContext)) { + // This layout's ownerCt is in this run... The component associated with + // this layout (the "target") could be owned by the ownerCt's container + // layout or component layout (e.g. docked items)! To manage this, we keep + // two counters for these and one for the combined total: + if (ownerContext.target.ownerLayout.isComponentLayout) { + ++ownerCtContext.remainingComponentChildLayouts; + } else { + ++ownerCtContext.remainingContainerChildLayouts; + } + ++ownerCtContext.remainingChildLayouts; + } + + if (!layout.initialized) { + layout.initLayout(); + } + + layout.beginLayout(ownerContext); + } else { + ++layout.beginCount; + + if (!layout.running) { + // back into the mahem with this one: + ++me.remainingLayouts; + layout.running = true; + + if (layout.isComponentLayout) { + // this one is fun... if we call setProp('done', false) that would still + // trigger/unblock layouts, but what layouts are really looking for with + // this property is for it to go to true, not just be set to a value... + ownerContext.unsetProp('done'); + + // On subsequent resets we increment the child layout count properties + // on ownerCtContext and clear 'childrenDone' and the appropriate other + // indicator as we transition to 1: + ownerCtContext = ownerContext.ownerCtContext; + if (ownerCtContext) { + if (ownerContext.target.ownerLayout.isComponentLayout) { + if (++ownerCtContext.remainingComponentChildLayouts == 1) { + ownerCtContext.unsetProp('componentChildrenDone'); + } + } else { + if (++ownerCtContext.remainingContainerChildLayouts == 1) { + ownerCtContext.unsetProp('containerChildrenDone'); + } + } + if (++ownerCtContext.remainingChildLayouts == 1) { + ownerCtContext.unsetProp('childrenDone'); + } + } + } + + // and it needs to be removed from the completion and/or finalize queues... + me.completionQueue.remove(layout); + me.finalizeQueue.remove(layout); + } + } + + layout.beginLayoutCycle(ownerContext, firstTime); + }, + + /** + * Runs the layout calculations. This can be called only once on this object. + * @return {Boolean} True if all layouts were completed, false if not. + */ + run: function () { + var me = this, + flushed = false, + watchDog = 100; + + me.flushInvalidates(); + + me.state = 1; + me.totalCount = me.layoutQueue.getCount(); + + // We may start with unflushed data placed by beginLayout calls. Since layouts may + // use setProp as a convenience, even in a write phase, we don't want to transition + // to a read phase with unflushed data since we can write it now "cheaply". Also, + // these value could easily be needed in the DOM in order to really get going with + // the calculations. In particular, fixed (configured) dimensions fall into this + // category. + me.flush(); + + // While we have layouts that have not completed... + while ((me.remainingLayouts || me.invalidQueue.length) && watchDog--) { + if (me.invalidQueue.length) { + me.flushInvalidates(); + } + + // if any of them can run right now, run them + if (me.runCycle()) { + flushed = false; // progress means we probably need to flush something + // but not all progress appears in the flushQueue (e.g. 'contentHeight') + } else if (!flushed) { + // as long as we are making progress, flush updates to the DOM and see if + // that triggers or unblocks any layouts... + me.flush(); + flushed = true; // all flushed now, so more progress is required + + me.flushLayouts('completionQueue', 'completeLayout'); + } else { + // after a flush, we must make progress or something is WRONG + me.state = 2; + break; + } + + if (!(me.remainingLayouts || me.invalidQueue.length)) { + me.flush(); + me.flushLayouts('completionQueue', 'completeLayout'); + me.flushLayouts('finalizeQueue', 'finalizeLayout'); + } + } + + return me.runComplete(); + }, + + runComplete: function () { + var me = this; + + me.state = 2; + + if (me.remainingLayouts) { + me.handleFailure(); + return false; + } + + me.flush(); + + // Call finishedLayout on all layouts, but do not clear the queue. + me.flushLayouts('finishQueue', 'finishedLayout', true); + + // Call notifyOwner on all layouts and then clear the queue. + me.flushLayouts('finishQueue', 'notifyOwner'); + + me.flush(); // in case any setProp calls were made + + me.flushAnimations(); + + return true; + }, + + /** + * Performs one layout cycle by calling each layout in the layout queue. + * @return {Boolean} True if some progress was made, false if not. + * @protected + */ + runCycle: function () { + var me = this, + layouts = me.layoutQueue.clear(), + length = layouts.length, + i; + + ++me.cycleCount; + + // This value is incremented by ContextItem#setProp whenever new values are set + // (thereby detecting forward progress): + me.progressCount = 0; + + for (i = 0; i < length; ++i) { + me.runLayout(me.currentLayout = layouts[i]); + } + + me.currentLayout = null; + + return me.progressCount > 0; + }, + + /** + * Runs one layout as part of a cycle. + * @private + */ + runLayout: function (layout) { + var me = this, + ownerContext = me.getCmp(layout.owner); + + layout.pending = false; + + if (ownerContext.state.blocks) { + return; + } + + // We start with the assumption that the layout will finish and if it does not, it + // must clear this flag. It turns out this is much simpler than knowing when a layout + // is done (100% correctly) when base classes and derived classes are collaborating. + // Knowing that some part of the layout is not done is much more obvious. + layout.done = true; + + ++layout.calcCount; + ++me.calcCount; + + layout.calculate(ownerContext); + + if (layout.done) { + me.layoutDone(layout); + + if (layout.completeLayout) { + me.queueCompletion(layout); + } + if (layout.finalizeLayout) { + me.queueFinalize(layout); + } + } else if (!layout.pending && !layout.invalid && !(layout.blockCount + layout.triggerCount - layout.firedTriggers)) { + // A layout that is not done and has no blocks or triggers that will queue it + // automatically, must be queued now: + me.queueLayout(layout); + } + }, + + /** + * Set the size of a component, element or composite or an array of components or elements. + * @param {Ext.Component/Ext.Component[]/Ext.dom.Element/Ext.dom.Element[]/Ext.dom.CompositeElement} + * The item(s) to size. + * @param {Number} width The new width to set (ignored if undefined or NaN). + * @param {Number} height The new height to set (ignored if undefined or NaN). + */ + setItemSize: function(item, width, height) { + var items = item, + len = 1, + contextItem, i; + + // NOTE: we don't pre-check for validity because: + // - maybe only one dimension is valid + // - the diagnostics layer will track the setProp call to help find who is trying + // (but failing) to set a property + // - setProp already checks this anyway + + if (item.isComposite) { + items = item.elements; + len = items.length; + item = items[0]; + } else if (!item.dom && !item.el) { // array by process of elimination + len = items.length; + item = items[0]; + } + // else len = 1 and items = item (to avoid error on "items[++i]") + + for (i = 0; i < len; ) { + contextItem = this.get(item); + contextItem.setSize(width, height); + + item = items[++i]; // this accomodation avoids making an array of 1 + } + } +}); + +/** + * Component layout for tabs + * @private + */ +Ext.define('Ext.layout.component.Tab', { + + extend: 'Ext.layout.component.Button', + alias: 'layout.tab', + + beginLayout: function(ownerContext) { + var me = this, + closable = me.owner.closable; + + // Changing the close button visibility causes our cached measurements to be wrong, + // so we must convince our base class to re-cache those adjustments... + if (me.lastClosable !== closable) { + me.lastClosable = closable; + me.clearTargetCache(); + } + + me.callParent(arguments); + } +}); + +/** + * @private + */ +Ext.define('Ext.layout.component.field.Slider', { + + /* Begin Definitions */ + + alias: ['layout.sliderfield'], + + extend: 'Ext.layout.component.field.Field', + + /* End Definitions */ + + type: 'sliderfield', + + beginLayout: function(ownerContext) { + this.callParent(arguments); + + ownerContext.endElContext = ownerContext.getEl('endEl'); + ownerContext.innerElContext = ownerContext.getEl('innerEl'); + ownerContext.bodyElContext = ownerContext.getEl('bodyEl'); + }, + + publishInnerHeight: function (ownerContext, height) { + var innerHeight = height - this.measureLabelErrorHeight(ownerContext), + endElPad, + inputPad; + if (this.owner.vertical) { + endElPad = ownerContext.endElContext.getPaddingInfo(); + inputPad = ownerContext.inputContext.getPaddingInfo(); + ownerContext.innerElContext.setHeight(innerHeight - inputPad.height - endElPad.height); + } else { + ownerContext.bodyElContext.setHeight(innerHeight); + } + }, + + publishInnerWidth: function (ownerContext, width) { + if (!this.owner.vertical) { + var endElPad = ownerContext.endElContext.getPaddingInfo(), + inputPad = ownerContext.inputContext.getPaddingInfo(); + + ownerContext.innerElContext.setWidth(width - inputPad.left - endElPad.right - ownerContext.labelContext.getProp('width')); + } + }, + + beginLayoutFixed: function(ownerContext, width, suffix) { + var me = this, + ieInputWidthAdjustment = me.ieInputWidthAdjustment; + + if (ieInputWidthAdjustment) { + // adjust for IE 6/7 strict content-box model + // RTL: This might have to be padding-left unless the senses of the padding styles switch when in RTL mode. + me.owner.bodyEl.setStyle('padding-right', ieInputWidthAdjustment + 'px'); + } + + me.callParent(arguments); + } +}); + +/** + * This is a layout that inherits the anchoring of {@link Ext.layout.container.Anchor} and adds the + * ability for x/y positioning using the standard x and y component config options. + * + * This class is intended to be extended or created via the {@link Ext.container.Container#layout layout} + * configuration property. See {@link Ext.container.Container#layout} for additional details. + * + * @example + * Ext.create('Ext.form.Panel', { + * title: 'Absolute Layout', + * width: 300, + * height: 275, + * layout: { + * type: 'absolute' + * // layout-specific configs go here + * //itemCls: 'x-abs-layout-item', + * }, + * url:'save-form.php', + * defaultType: 'textfield', + * items: [{ + * x: 10, + * y: 10, + * xtype:'label', + * text: 'Send To:' + * },{ + * x: 80, + * y: 10, + * name: 'to', + * anchor:'90%' // anchor width by percentage + * },{ + * x: 10, + * y: 40, + * xtype:'label', + * text: 'Subject:' + * },{ + * x: 80, + * y: 40, + * name: 'subject', + * anchor: '90%' // anchor width by percentage + * },{ + * x:0, + * y: 80, + * xtype: 'textareafield', + * name: 'msg', + * anchor: '100% 100%' // anchor width and height + * }], + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.layout.container.Absolute', { + + /* Begin Definitions */ + + alias: 'layout.absolute', + extend: 'Ext.layout.container.Anchor', + alternateClassName: 'Ext.layout.AbsoluteLayout', + + /* End Definitions */ + + targetCls: Ext.baseCSSPrefix + 'abs-layout-ct', + itemCls: Ext.baseCSSPrefix + 'abs-layout-item', + + /** + * @cfg {Boolean} ignoreOnContentChange + * True indicates that changes to one item in this layout do not effect the layout in + * general. This may need to be set to false if {@link Ext.Component#autoScroll} + * is enabled for the container. + */ + ignoreOnContentChange: true, + + type: 'absolute', + + // private + adjustWidthAnchor: function(value, childContext) { + var padding = this.targetPadding, + x = childContext.getStyle('left'); + + return value - x + padding.left; + }, + + // private + adjustHeightAnchor: function(value, childContext) { + var padding = this.targetPadding, + y = childContext.getStyle('top'); + + return value - y + padding.top; + }, + + isItemLayoutRoot: function (item) { + return this.ignoreOnContentChange || this.callParent(arguments); + }, + + isItemShrinkWrap: function (item) { + return true; + }, + + beginLayout: function (ownerContext) { + var me = this, + target = me.getTarget(); + + me.callParent(arguments); + + // Do not set position: relative; when the absolute layout target is the body + if (target.dom !== document.body) { + target.position(); + } + + me.targetPadding = ownerContext.targetContext.getPaddingInfo(); + }, + + isItemBoxParent: function (itemContext) { + return true; + }, + + onContentChange: function () { + if (this.ignoreOnContentChange) { + return false; + } + return this.callParent(arguments); + } +}); + +/** + * This is a layout that manages multiple Panels in an expandable accordion style such that by default only + * one Panel can be expanded at any given time (set {@link #multi} config to have more open). Each Panel has + * built-in support for expanding and collapsing. + * + * Note: Only Ext Panels and all subclasses of Ext.panel.Panel may be used in an accordion layout Container. + * + * @example + * Ext.create('Ext.panel.Panel', { + * title: 'Accordion Layout', + * width: 300, + * height: 300, + * defaults: { + * // applied to each contained panel + * bodyStyle: 'padding:15px' + * }, + * layout: { + * // layout-specific configs go here + * type: 'accordion', + * titleCollapse: false, + * animate: true, + * activeOnTop: true + * }, + * items: [{ + * title: 'Panel 1', + * html: 'Panel content!' + * },{ + * title: 'Panel 2', + * html: 'Panel content!' + * },{ + * title: 'Panel 3', + * html: 'Panel content!' + * }], + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.layout.container.Accordion', { + extend: 'Ext.layout.container.VBox', + alias: ['layout.accordion'], + alternateClassName: 'Ext.layout.AccordionLayout', + + itemCls: [Ext.baseCSSPrefix + 'box-item', Ext.baseCSSPrefix + 'accordion-item'], + + align: 'stretch', + + /** + * @cfg {Boolean} fill + * True to adjust the active item's height to fill the available space in the container, false to use the + * item's current height, or auto height if not explicitly set. + */ + fill : true, + + /** + * @cfg {Boolean} autoWidth + * Child Panels have their width actively managed to fit within the accordion's width. + * @removed This config is ignored in ExtJS 4 + */ + + /** + * @cfg {Boolean} titleCollapse + * True to allow expand/collapse of each contained panel by clicking anywhere on the title bar, false to allow + * expand/collapse only when the toggle tool button is clicked. When set to false, + * {@link #hideCollapseTool} should be false also. + */ + titleCollapse : true, + + /** + * @cfg {Boolean} hideCollapseTool + * True to hide the contained Panels' collapse/expand toggle buttons, false to display them. + * When set to true, {@link #titleCollapse} is automatically set to true. + */ + hideCollapseTool : false, + + /** + * @cfg {Boolean} collapseFirst + * True to make sure the collapse/expand toggle button always renders first (to the left of) any other tools + * in the contained Panels' title bars, false to render it last. + */ + collapseFirst : false, + + /** + * @cfg {Boolean} animate + * True to slide the contained panels open and closed during expand/collapse using animation, false to open and + * close directly with no animation. Note: The layout performs animated collapsing + * and expanding, *not* the child Panels. + */ + animate : true, + /** + * @cfg {Boolean} activeOnTop + * Only valid when {@link #multi} is `false` and {@link #animate} is `false`. + * + * True to swap the position of each panel as it is expanded so that it becomes the first item in the container, + * false to keep the panels in the rendered order. + */ + activeOnTop : false, + /** + * @cfg {Boolean} multi + * Set to true to enable multiple accordion items to be open at once. + */ + multi: false, + + defaultAnimatePolicy: { + y: true, + height: true + }, + + constructor: function() { + var me = this; + + me.callParent(arguments); + + if (me.animate) { + me.animatePolicy = Ext.apply({}, me.defaultAnimatePolicy); + } else { + me.animatePolicy = null; + } + }, + + beforeRenderItems: function (items) { + var me = this, + ln = items.length, + i = 0, + comp; + + for (; i < ln; i++) { + comp = items[i]; + if (!comp.rendered) { + // Set up initial properties for Panels in an accordion. + if (me.collapseFirst) { + comp.collapseFirst = me.collapseFirst; + } + if (me.hideCollapseTool) { + comp.hideCollapseTool = me.hideCollapseTool; + comp.titleCollapse = true; + } + else if (me.titleCollapse) { + comp.titleCollapse = me.titleCollapse; + } + + delete comp.hideHeader; + delete comp.width; + comp.collapsible = true; + comp.title = comp.title || ' '; + comp.addBodyCls(Ext.baseCSSPrefix + 'accordion-body'); + + // If only one child Panel is allowed to be expanded + // then collapse all except the first one found with collapsed:false + if (!me.multi) { + // If there is an expanded item, all others must be rendered collapsed. + if (me.expandedItem !== undefined) { + comp.collapsed = true; + } + // Otherwise expand the first item with collapsed explicitly configured as false + else if (comp.hasOwnProperty('collapsed') && comp.collapsed === false) { + me.expandedItem = i; + } else { + comp.collapsed = true; + } + + // If only one child Panel may be expanded, then intercept expand/show requests. + me.owner.mon(comp, { + show: me.onComponentShow, + beforeexpand: me.onComponentExpand, + scope: me + }); + } + + // If we must fill available space, a collapse must be listened for and a sibling must + // be expanded. + if (me.fill) { + me.owner.mon(comp, { + beforecollapse: me.onComponentCollapse, + scope: me + }); + } + } + } + + // If no collapsed:false Panels found, make the first one expanded. + if (ln && me.expandedItem === undefined) { + me.expandedItem = 0; + items[0].collapsed = false; + } + }, + + getItemsRenderTree: function(items) { + this.beforeRenderItems(items); + + return this.callParent(arguments); + }, + + renderItems : function(items, target) { + this.beforeRenderItems(items); + + this.callParent(arguments); + }, + + configureItem: function(item) { + this.callParent(arguments); + + // We handle animations for the expand/collapse of items. + // Items do not have individual borders + item.animCollapse = item.border = false; + + // If filling available space, all Panels flex. + if (this.fill) { + item.flex = 1; + } + }, + + onChildPanelRender: function(panel) { + panel.header.addCls(Ext.baseCSSPrefix + 'accordion-hd'); + }, + + beginLayout: function (ownerContext) { + this.callParent(arguments); + this.updatePanelClasses(ownerContext); + }, + + updatePanelClasses: function(ownerContext) { + var children = ownerContext.visibleItems, + ln = children.length, + siblingCollapsed = true, + i, child, header; + + for (i = 0; i < ln; i++) { + child = children[i]; + header = child.header; + header.addCls(Ext.baseCSSPrefix + 'accordion-hd'); + + if (siblingCollapsed) { + header.removeCls(Ext.baseCSSPrefix + 'accordion-hd-sibling-expanded'); + } else { + header.addCls(Ext.baseCSSPrefix + 'accordion-hd-sibling-expanded'); + } + + if (i + 1 == ln && child.collapsed) { + header.addCls(Ext.baseCSSPrefix + 'accordion-hd-last-collapsed'); + } else { + header.removeCls(Ext.baseCSSPrefix + 'accordion-hd-last-collapsed'); + } + + siblingCollapsed = child.collapsed; + } + }, + + // When a Component expands, adjust the heights of the other Components to be just enough to accommodate + // their headers. + // The expanded Component receives the only flex value, and so gets all remaining space. + onComponentExpand: function(toExpand) { + var me = this, + owner = me.owner, + expanded, + expandedCount, i, + previousValue; + + if (!me.processing) { + me.processing = true; + previousValue = owner.deferLayouts; + owner.deferLayouts = true; + expanded = me.multi ? [] : owner.query('>panel:not([collapsed])'); + expandedCount = expanded.length; + + // Collapse all other expanded child items (Won't loop if multi is true) + for (i = 0; i < expandedCount; i++) { + expanded[i].collapse(); + } + owner.deferLayouts = previousValue; + me.processing = false; + } + }, + + onComponentCollapse: function(comp) { + var me = this, + owner = me.owner, + toExpand, + expanded, + previousValue; + + if (me.owner.items.getCount() === 1) { + // do not allow collapse if there is only one item + return false; + } + + if (!me.processing) { + me.processing = true; + previousValue = owner.deferLayouts; + owner.deferLayouts = true; + toExpand = comp.next() || comp.prev(); + + // If we are allowing multi, and the "toCollapse" component is NOT the only expanded Component, + // then ask the box layout to collapse it to its header. + if (me.multi) { + expanded = me.owner.query('>panel:not([collapsed])'); + + // If the collapsing Panel is the only expanded one, expand the following Component. + // All this is handling fill: true, so there must be at least one expanded, + if (expanded.length === 1) { + toExpand.expand(); + } + + } else if (toExpand) { + toExpand.expand(); + } + owner.deferLayouts = previousValue; + me.processing = false; + } + }, + + onComponentShow: function(comp) { + // Showing a Component means that you want to see it, so expand it. + this.onComponentExpand(comp); + } +}); + +/** + * This class functions **between siblings of a {@link Ext.layout.container.VBox VBox} or {@link Ext.layout.container.HBox HBox} + * layout** to resize both immediate siblings. + * + * A Splitter will preserve the flex ratio of any flexed siblings it is required to resize. It does this by setting the `flex` property of *all* flexed siblings + * to equal their pixel size. The actual numerical `flex` property in the Components will change, but the **ratio** to the total flex value will be preserved. + * + * A Splitter may be configured to show a centered mini-collapse tool orientated to collapse the {@link #collapseTarget}. + * The Splitter will then call that sibling Panel's {@link Ext.panel.Panel#method-collapse collapse} or {@link Ext.panel.Panel#method-expand expand} method + * to perform the appropriate operation (depending on the sibling collapse state). To create the mini-collapse tool but take care + * of collapsing yourself, configure the splitter with `{@link #performCollapse}: false`. + */ +Ext.define('Ext.resizer.Splitter', { + extend: 'Ext.Component', + requires: ['Ext.XTemplate'], + uses: ['Ext.resizer.SplitterTracker'], + alias: 'widget.splitter', + + childEls: [ + 'collapseEl' + ], + + renderTpl: [ + '', + '
     
    ', + '
    ' + ], + + baseCls: Ext.baseCSSPrefix + 'splitter', + collapsedClsInternal: Ext.baseCSSPrefix + 'splitter-collapsed', + + // Default to tree, allow internal classes to disable resizing + canResize: true, + + /** + * @cfg {Boolean} collapsible + * True to show a mini-collapse tool in the Splitter to toggle expand and collapse on the {@link #collapseTarget} Panel. + * Defaults to the {@link Ext.panel.Panel#collapsible collapsible} setting of the Panel. + */ + collapsible: false, + + /** + * @cfg {Boolean} performCollapse + * Set to false to prevent this Splitter's mini-collapse tool from managing the collapse + * state of the {@link #collapseTarget}. + */ + + /** + * @cfg {Boolean} collapseOnDblClick + * True to enable dblclick to toggle expand and collapse on the {@link #collapseTarget} Panel. + */ + collapseOnDblClick: true, + + /** + * @cfg {Number} defaultSplitMin + * Provides a default minimum width or height for the two components + * that the splitter is between. + */ + defaultSplitMin: 40, + + /** + * @cfg {Number} defaultSplitMax + * Provides a default maximum width or height for the two components + * that the splitter is between. + */ + defaultSplitMax: 1000, + + /** + * @cfg {String} collapsedCls + * A class to add to the splitter when it is collapsed. See {@link #collapsible}. + */ + + /** + * @cfg {String/Ext.panel.Panel} collapseTarget + * A string describing the relative position of the immediate sibling Panel to collapse. May be 'prev' or 'next'. + * + * Or the immediate sibling Panel to collapse. + * + * The orientation of the mini-collapse tool will be inferred from this setting. + * + * **Note that only Panels may be collapsed.** + */ + collapseTarget: 'next', + + /** + * @property {String} orientation + * Orientation of this Splitter. `'vertical'` when used in an hbox layout, `'horizontal'` + * when used in a vbox layout. + */ + + horizontal: false, + vertical: false, + + /** + * Returns the config object (with an `xclass` property) for the splitter tracker. This + * is overridden by {@link Ext.resizer.BorderSplitter BorderSplitter} to create a + * {@link Ext.resizer.BorderSplitterTracker BorderSplitterTracker}. + * @protected + */ + getTrackerConfig: function () { + return { + xclass: 'Ext.resizer.SplitterTracker', + el: this.el, + splitter: this + }; + }, + + beforeRender: function() { + var me = this, + target = me.getCollapseTarget(), + collapseDir = me.getCollapseDirection(), + vertical = me.vertical, + fixedSizeProp = vertical ? 'width' : 'height', + stretchSizeProp = vertical ? 'height' : 'width', + cls; + + me.callParent(); + + if (!me.hasOwnProperty(stretchSizeProp)) { + me[stretchSizeProp] = '100%'; + } + if (!me.hasOwnProperty(fixedSizeProp)) { + me[fixedSizeProp] = 5; + } + + if (target.collapsed) { + me.addCls(me.collapsedClsInternal); + } + + cls = me.baseCls + '-' + me.orientation; + me.addCls(cls); + if (!me.canResize) { + me.addCls(cls + '-noresize'); + } + + Ext.applyIf(me.renderData, { + collapseDir: collapseDir, + collapsible: me.collapsible || target.collapsible + }); + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + // Add listeners on the mini-collapse tool unless performCollapse is set to false + if (me.performCollapse !== false) { + if (me.renderData.collapsible) { + me.mon(me.collapseEl, 'click', me.toggleTargetCmp, me); + } + if (me.collapseOnDblClick) { + me.mon(me.el, 'dblclick', me.toggleTargetCmp, me); + } + } + + // Ensure the mini collapse icon is set to the correct direction when the target is collapsed/expanded by any means + me.mon(me.getCollapseTarget(), { + collapse: me.onTargetCollapse, + expand: me.onTargetExpand, + scope: me + }); + + me.el.unselectable(); + if (me.canResize) { + me.tracker = Ext.create(me.getTrackerConfig()); + // Relay the most important events to our owner (could open wider later): + me.relayEvents(me.tracker, [ 'beforedragstart', 'dragstart', 'dragend' ]); + } + }, + + getCollapseDirection: function() { + var me = this, + dir = me.collapseDirection, + collapseTarget, idx, items, type; + + if (!dir) { + collapseTarget = me.collapseTarget; + if (collapseTarget.isComponent) { + dir = collapseTarget.collapseDirection; + } + + if (!dir) { + // Avoid duplication of string tests. + // Create a two bit truth table of the configuration of the Splitter: + // Collapse Target | orientation + // 0 0 = next, horizontal + // 0 1 = next, vertical + // 1 0 = prev, horizontal + // 1 1 = prev, vertical + type = me.ownerCt.layout.type; + if (collapseTarget.isComponent) { + items = me.ownerCt.items; + idx = Number(items.indexOf(collapseTarget) == items.indexOf(me) - 1) << 1 | Number(type == 'hbox'); + } else { + idx = Number(me.collapseTarget == 'prev') << 1 | Number(type == 'hbox'); + } + + // Read the data out the truth table + dir = ['bottom', 'right', 'top', 'left'][idx]; + } + + me.collapseDirection = dir; + } + + me.orientation = (dir == 'top' || dir == 'bottom') ? 'horizontal' : 'vertical'; + me[me.orientation] = true; + + return dir; + }, + + getCollapseTarget: function() { + var me = this; + + return me.collapseTarget.isComponent ? me.collapseTarget : me.collapseTarget == 'prev' ? me.previousSibling() : me.nextSibling(); + }, + + onTargetCollapse: function(target) { + this.el.addCls([this.collapsedClsInternal, this.collapsedCls]); + }, + + onTargetExpand: function(target) { + this.el.removeCls([this.collapsedClsInternal, this.collapsedCls]); + }, + + toggleTargetCmp: function(e, t) { + var cmp = this.getCollapseTarget(), + placeholder = cmp.placeholder, + toggle; + + if (placeholder && !placeholder.hidden) { + toggle = true; + } else { + toggle = !cmp.hidden; + } + + if (toggle) { + if (cmp.collapsed) { + cmp.expand(); + } else if (cmp.collapseDirection) { + cmp.collapse(); + } else { + cmp.collapse(this.renderData.collapseDir); + } + } + }, + + /* + * Work around IE bug. %age margins do not get recalculated on element resize unless repaint called. + */ + setSize: function() { + var me = this; + me.callParent(arguments); + if (Ext.isIE && me.el) { + me.el.repaint(); + } + }, + + beforeDestroy: function(){ + Ext.destroy(this.tracker); + this.callParent(); + } +}); + +/** + * Private utility class for Ext.layout.container.Border. + * @private + */ +Ext.define('Ext.resizer.BorderSplitter', { + extend: 'Ext.resizer.Splitter', + + uses: ['Ext.resizer.BorderSplitterTracker'], + + alias: 'widget.bordersplitter', + + // must be configured in by the border layout: + collapseTarget: null, + + getTrackerConfig: function () { + var trackerConfig = this.callParent(); + + trackerConfig.xclass = 'Ext.resizer.BorderSplitterTracker'; + + return trackerConfig; + } +}); + +/** + * This is a multi-pane, application-oriented UI layout style that supports multiple nested panels, automatic bars + * between regions and built-in {@link Ext.panel.Panel#collapsible expanding and collapsing} of regions. + * + * This class is intended to be extended or created via the `layout:'border'` {@link Ext.container.Container#layout} + * config, and should generally not need to be created directly via the new keyword. + * + * @example + * Ext.create('Ext.panel.Panel', { + * width: 500, + * height: 300, + * title: 'Border Layout', + * layout: 'border', + * items: [{ + * title: 'South Region is resizable', + * region: 'south', // position for region + * xtype: 'panel', + * height: 100, + * split: true, // enable resizing + * margins: '0 5 5 5' + * },{ + * // xtype: 'panel' implied by default + * title: 'West Region is collapsible', + * region:'west', + * xtype: 'panel', + * margins: '5 0 0 5', + * width: 200, + * collapsible: true, // make collapsible + * id: 'west-region-container', + * layout: 'fit' + * },{ + * title: 'Center Region', + * region: 'center', // center region is required, no width/height specified + * xtype: 'panel', + * layout: 'fit', + * margins: '5 5 0 0' + * }], + * renderTo: Ext.getBody() + * }); + * + * # Notes + * + * - When using the split option, the layout will automatically insert a {@link Ext.resizer.Splitter} + * into the appropriate place. This will modify the underlying + * {@link Ext.container.Container#property-items items} collection in the container. + * + * - Any Container using the Border layout **must** have a child item with `region:'center'`. + * The child item in the center region will always be resized to fill the remaining space + * not used by the other regions in the layout. + * + * - Any child items with a region of `west` or `east` may be configured with either an initial + * `width`, or a {@link Ext.layout.container.Box#flex} value, or an initial percentage width + * **string** (Which is simply divided by 100 and used as a flex value). + * The 'center' region has a flex value of `1`. + * + * - Any child items with a region of `north` or `south` may be configured with either an initial + * `height`, or a {@link Ext.layout.container.Box#flex} value, or an initial percentage height + * **string** (Which is simply divided by 100 and used as a flex value). + * The 'center' region has a flex value of `1`. + * + * - **There is no BorderLayout.Region class in ExtJS 4.0+** + */ +Ext.define('Ext.layout.container.Border', { + + alias: 'layout.border', + + extend: 'Ext.layout.container.Container', + + requires: ['Ext.resizer.BorderSplitter', 'Ext.Component', 'Ext.fx.Anim'], + + alternateClassName: 'Ext.layout.BorderLayout', + + + targetCls: Ext.baseCSSPrefix + 'border-layout-ct', + + itemCls: [Ext.baseCSSPrefix + 'border-item', Ext.baseCSSPrefix + 'box-item'], + + type: 'border', + + /** + * @cfg {Boolean} split + * This configuration option is to be applied to the **child `items`** managed by this layout. + * Each region with `split:true` will get a {@link Ext.resizer.BorderSplitter Splitter} that + * allows for manual resizing of the container. Except for the `center` region. + */ + + /** + * @cfg {Boolean} [splitterResize=true] + * This configuration option is to be applied to the **child `items`** managed by this layout and + * is used in conjunction with {@link #split}. By default, when specifying {@link #split}, the region + * can be dragged to be resized. Set this option to false to show the split bar but prevent resizing. + */ + + /** + * @cfg {Number/String/Object} padding + * Sets the padding to be applied to all child items managed by this layout. + * + * This property can be specified as a string containing space-separated, numeric + * padding values. The order of the sides associated with each value matches the way + * CSS processes padding values: + * + * - If there is only one value, it applies to all sides. + * - If there are two values, the top and bottom borders are set to the first value + * and the right and left are set to the second. + * - If there are three values, the top is set to the first value, the left and right + * are set to the second, and the bottom is set to the third. + * - If there are four values, they apply to the top, right, bottom, and left, + * respectively. + * + */ + padding: undefined, + + percentageRe: /(\d+)%/, + + /** + * Reused meta-data objects that describe axis properties. + * @private + */ + axisProps: { + horz: { + borderBegin: 'west', + borderEnd: 'east', + horizontal: true, + posProp: 'x', + sizeProp: 'width', + sizePropCap: 'Width' + }, + vert: { + borderBegin: 'north', + borderEnd: 'south', + horizontal: false, + posProp: 'y', + sizeProp: 'height', + sizePropCap: 'Height' + } + }, + + // @private + centerRegion: null, + + /** + * Maps from region name to collapseDirection for panel. + * @private + */ + collapseDirections: { + north: 'top', + south: 'bottom', + east: 'right', + west: 'left' + }, + + manageMargins: true, + + panelCollapseAnimate: true, + + panelCollapseMode: 'placeholder', + + /** + * @cfg {Object} regionWeights + * The default weights to assign to regions in the border layout. These values are + * used when a region does not contain a `weight` property. This object must have + * properties for all regions ("north", "south", "east" and "west"). + * + * **IMPORTANT:** Since this is an object, changing its properties will impact ALL + * instances of Border layout. If this is not desired, provide a replacement object as + * a config option instead: + * + * layout: { + * type: 'border', + * regionWeights: { + * west: 20, + * north: 10, + * south: -10, + * east: -20 + * } + * } + * + * The region with the highest weight is assigned space from the border before other + * regions. Regions of equal weight are assigned space based on their position in the + * owner's items list (first come, first served). + */ + regionWeights: { + north: 20, + south: 10, + center: 0, + west: -10, + east: -20 + }, + + //---------------------------------- + // Layout processing + + /** + * Creates the axis objects for the layout. These are only missing size information + * which is added during {@link #calculate}. + * @private + */ + beginAxis: function (ownerContext, regions, name) { + var me = this, + props = me.axisProps[name], + isVert = !props.horizontal, + sizeProp = props.sizeProp, + totalFlex = 0, + childItems = ownerContext.childItems, + length = childItems.length, + center, i, childContext, centerFlex, comp, region, match, size, type, target, placeholder; + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + comp = childContext.target; + + childContext.layoutPos = {}; + + if (comp.region) { + childContext.region = region = comp.region; + + childContext.isCenter = comp.isCenter; + childContext.isHorz = comp.isHorz; + childContext.isVert = comp.isVert; + + childContext.weight = comp.weight || me.regionWeights[region] || 0; + regions[comp.id] = childContext; + + if (comp.isCenter) { + center = childContext; + centerFlex = comp.flex; + ownerContext.centerRegion = center; + + continue; + } + + if (isVert !== childContext.isVert) { + continue; + } + + // process regions "isVert ? north||south : east||center||west" + + childContext.reverseWeighting = (region == props.borderEnd); + + size = comp[sizeProp]; + type = typeof size; + + if (!comp.collapsed) { + if (type == 'string' && (match = me.percentageRe.exec(size))) { + childContext.percentage = parseInt(match[1], 10); + } else if (comp.flex) { + totalFlex += childContext.flex = comp.flex; + } + } + } + } + + // Special cases for a collapsed center region + if (center) { + target = center.target; + + if (placeholder = target.placeholderFor) { + if (!centerFlex && isVert === placeholder.collapsedVertical()) { + // The center region is a placeholder, collapsed in this axis + centerFlex = 0; + center.collapseAxis = name; + } + } else if (target.collapsed && (isVert === target.collapsedVertical())) { + // The center region is a collapsed header, collapsed in this axis + centerFlex = 0; + center.collapseAxis = name; + } + } + + if (centerFlex == null) { + // If we still don't have a center flex, default to 1 + centerFlex = 1; + } + + totalFlex += centerFlex; + + return Ext.apply({ + before : isVert ? 'top' : 'left', + totalFlex : totalFlex + }, props); + }, + + beginLayout: function (ownerContext) { + var me = this, + items = me.getLayoutItems(), + pad = me.padding, + type = typeof pad, + padOnContainer = false, + childContext, item, length, i, regions, collapseTarget, + doShow, hidden, region; + + // We sync the visibility state of splitters with their region: + if (pad) { + if (type == 'string' || type == 'number') { + pad = Ext.util.Format.parseBox(pad); + } + } else { + pad = ownerContext.getEl('getTargetEl').getPaddingInfo(); + padOnContainer = true; + } + ownerContext.outerPad = pad; + ownerContext.padOnContainer = padOnContainer; + + for (i = 0, length = items.length; i < length; ++i) { + item = items[i]; + collapseTarget = me.getSplitterTarget(item); + if (collapseTarget) { + hidden = !!item.hidden; + if (!collapseTarget.split) { + if (collapseTarget.isCollapsingOrExpanding) { + doShow = !!collapseTarget.collapsed; + } + } else if (hidden !== collapseTarget.hidden) { + doShow = !collapseTarget.hidden; + } + + if (doShow === true) { + item.show(); + } else if (doShow === false) { + item.hide(); + } + } + } + + // The above synchronized visibility of splitters with their regions, so we need + // to make this call after that so that childItems and visibleItems are correct: + // + me.callParent(arguments); + + items = ownerContext.childItems; + length = items.length; + regions = {}; + + ownerContext.borderAxisHorz = me.beginAxis(ownerContext, regions, 'horz'); + ownerContext.borderAxisVert = me.beginAxis(ownerContext, regions, 'vert'); + + // Now that weights are assigned to the region's contextItems, we assign those + // same weights to the contextItem for the splitters. We also cross link the + // contextItems for the collapseTarget and its splitter. + for (i = 0; i < length; ++i) { + childContext = items[i]; + collapseTarget = me.getSplitterTarget(childContext.target); + + if (collapseTarget) { // if (splitter) + region = regions[collapseTarget.id] + if (!region) { + // if the region was hidden it will not be part of childItems, and + // so beginAxis() won't add it to the regions object, so we have + // to create the context item here. + region = ownerContext.getEl(collapseTarget.el, me); + region.region = collapseTarget.region; + } + childContext.collapseTarget = collapseTarget = region; + childContext.weight = collapseTarget.weight; + childContext.reverseWeighting = collapseTarget.reverseWeighting; + collapseTarget.splitter = childContext; + childContext.isHorz = collapseTarget.isHorz; + childContext.isVert = collapseTarget.isVert; + } + } + + // Now we want to sort the childItems by their weight. + me.sortWeightedItems(items, 'reverseWeighting'); + me.setupSplitterNeighbors(items); + }, + + calculate: function (ownerContext) { + var me = this, + containerSize = me.getContainerSize(ownerContext), + childItems = ownerContext.childItems, + length = childItems.length, + horz = ownerContext.borderAxisHorz, + vert = ownerContext.borderAxisVert, + pad = ownerContext.outerPad, + padOnContainer = ownerContext.padOnContainer, + i, childContext, childMargins, size, horzPercentTotal, vertPercentTotal; + + horz.begin = pad.left; + vert.begin = pad.top; + // If the padding is already on the container we need to add it to the space + // If not on the container, it's "virtual" padding. + horzPercentTotal = horz.end = horz.flexSpace = containerSize.width + (padOnContainer ? pad.left : -pad.right); + vertPercentTotal = vert.end = vert.flexSpace = containerSize.height + (padOnContainer ? pad.top : -pad.bottom); + + // Reduce flexSpace on each axis by the fixed/auto sized dimensions of items that + // aren't flexed along that axis. + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + childMargins = childContext.getMarginInfo(); + + // Margins are always fixed size and must be removed from the space used for percentages and flexes + if (childContext.isHorz || childContext.isCenter) { + horz.addUnflexed(childMargins.width); + horzPercentTotal -= childMargins.width; + } + + if (childContext.isVert || childContext.isCenter) { + vert.addUnflexed(childMargins.height); + vertPercentTotal -= childMargins.height; + } + + // Fixed size components must have their sizes removed from the space used for flex + if (!childContext.flex && !childContext.percentage) { + if (childContext.isHorz || (childContext.isCenter && childContext.collapseAxis === 'horz')) { + size = childContext.getProp('width'); + + horz.addUnflexed(size); + + // splitters should not count towards percentages + if (childContext.collapseTarget) { + horzPercentTotal -= size; + } + } else if (childContext.isVert || (childContext.isCenter && childContext.collapseAxis === 'vert')) { + size = childContext.getProp('height'); + + vert.addUnflexed(size); + + // splitters should not count towards percentages + if (childContext.collapseTarget) { + vertPercentTotal -= size; + } + } + // else ignore center since it is fully flexed + } + } + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + childMargins = childContext.getMarginInfo(); + + // Calculate the percentage sizes. After this calculation percentages are very similar to fixed sizes + if (childContext.percentage) { + if (childContext.isHorz) { + size = Math.ceil(horzPercentTotal * childContext.percentage / 100); + size = childContext.setWidth(size); + horz.addUnflexed(size); + } else if (childContext.isVert) { + size = Math.ceil(vertPercentTotal * childContext.percentage / 100); + size = childContext.setHeight(size); + vert.addUnflexed(size); + } + // center shouldn't have a percentage but if it does it should be ignored + } + } + + + // If we haven't gotten sizes for all unflexed dimensions on an axis, the flexSpace + // will be NaN so we won't be calculating flexed dimensions until that is resolved. + + for (i = 0; i < length; ++i) { + childContext = childItems[i]; + + if (!childContext.isCenter) { + me.calculateChildAxis(childContext, horz); + me.calculateChildAxis(childContext, vert); + } + } + + // Once all items are placed, the final size of the center can be determined. If we + // can determine both width and height, we are done. We use '+' instead of '&&' to + // avoid short-circuiting (we want to call both): + if (me.finishAxis(ownerContext, vert) + me.finishAxis(ownerContext, horz) < 2) { + me.done = false; + } else { + // Size information is published as we place regions but position is hard to do + // that way (while avoiding published multiple times) so we publish all the + // positions at the end. + me.finishPositions(childItems); + } + }, + + /** + * Performs the calculations for a region on a specified axis. + * @private + */ + calculateChildAxis: function (childContext, axis) { + var collapseTarget = childContext.collapseTarget, + setSizeMethod = 'set' + axis.sizePropCap, + sizeProp = axis.sizeProp, + childMarginSize = childContext.getMarginInfo()[sizeProp], + region, isBegin, flex, pos, size; + + if (collapseTarget) { // if (splitter) + region = collapseTarget.region; + } else { + region = childContext.region; + flex = childContext.flex; + } + + isBegin = region == axis.borderBegin; + + if (!isBegin && region != axis.borderEnd) { + // a north/south region on the horizontal axis or an east/west region on the + // vertical axis: stretch to fill remaining space: + childContext[setSizeMethod](axis.end - axis.begin - childMarginSize); + pos = axis.begin; + } else { + if (flex) { + size = Math.ceil(axis.flexSpace * (flex / axis.totalFlex)); + size = childContext[setSizeMethod](size); + } else if (childContext.percentage) { + // Like getProp but without registering a dependency - we calculated the size, we don't depend on it + size = childContext.peek(sizeProp); + } else { + size = childContext.getProp(sizeProp); + } + + size += childMarginSize; + + if (isBegin) { + pos = axis.begin; + axis.begin += size; + } else { + axis.end = pos = axis.end - size; + } + } + + childContext.layoutPos[axis.posProp] = pos; + }, + + /** + * Finishes the calculations on an axis. This basically just assigns the remaining + * space to the center region. + * @private + */ + finishAxis: function (ownerContext, axis) { + var size = axis.end - axis.begin, + center = ownerContext.centerRegion; + + if (center) { + center['set' + axis.sizePropCap](size - center.getMarginInfo()[axis.sizeProp]); + center.layoutPos[axis.posProp] = axis.begin; + } + + return Ext.isNumber(size) ? 1 : 0; + }, + + /** + * Finishes by setting the positions on the child items. + * @private + */ + finishPositions: function (childItems) { + var length = childItems.length, + index, childContext; + + for (index = 0; index < length; ++index) { + childContext = childItems[index]; + + childContext.setProp('x', childContext.layoutPos.x + childContext.marginInfo.left); + childContext.setProp('y', childContext.layoutPos.y + childContext.marginInfo.top); + } + }, + + getPlaceholder: function (comp) { + return comp.getPlaceholder && comp.getPlaceholder(); + }, + + getSplitterTarget: function (splitter) { + var collapseTarget = splitter.collapseTarget; + + if (collapseTarget && collapseTarget.collapsed) { + return collapseTarget.placeholder || collapseTarget; + } + + return collapseTarget; + }, + + isItemBoxParent: function (itemContext) { + return true; + }, + + isItemShrinkWrap: function (item) { + return true; + }, + + //---------------------------------- + // Event handlers + + /** + * Inserts the splitter for a given region. A reference to the splitter is also stored + * on the component as "splitter". + * @private + */ + insertSplitter: function (item, index, hidden) { + var region = item.region, + splitter = { + xtype: 'bordersplitter', + collapseTarget: item, + id: item.id + '-splitter', + hidden: hidden, + canResize: item.splitterResize !== false + }, + at = index + ((region == 'south' || region == 'east') ? 0 : 1); + + // remove the default fixed width or height depending on orientation: + if (item.isHorz) { + splitter.height = null; + } else { + splitter.width = null; + } + + if (item.collapseMode == 'mini') { + splitter.collapsedCls = item.collapsedCls; + } + + item.splitter = this.owner.add(at, splitter); + }, + + /** + * Called when a region (actually when any component) is added to the container. The + * region is decorated with some helpful properties (isCenter, isHorz, isVert) and its + * splitter is added if its "split" property is true. + * @private + */ + onAdd: function (item, index) { + var me = this, + placeholderFor = item.placeholderFor, + region = item.region, + split, + hidden; + + me.callParent(arguments); + + if (region) { + Ext.apply(item, me.regionFlags[region]); + + if (region == 'center') { + if (me.centerRegion) { + Ext.Error.raise("Cannot have multiple center regions in a BorderLayout."); + } + me.centerRegion = item; + } else { + item.collapseDirection = this.collapseDirections[region]; + split = item.split; + hidden = !!item.hidden; + if ((item.isHorz || item.isVert) && (split || item.collapseMode == 'mini')) { + me.insertSplitter(item, index, hidden || !split); + } + } + + if (!item.hasOwnProperty('collapseMode')) { + item.collapseMode = me.panelCollapseMode; + } + + if (!item.hasOwnProperty('animCollapse')) { + if (item.collapseMode != 'placeholder') { + // other collapse modes do not animate nicely in a border layout, so + // default them to off: + item.animCollapse = false; + } else { + item.animCollapse = me.panelCollapseAnimate; + } + } + } else if (placeholderFor) { + Ext.apply(item, me.regionFlags[placeholderFor.region]); + item.region = placeholderFor.region; + item.weight = placeholderFor.weight; + } + }, + + onDestroy: function() { + this.centerRegion = null; + this.callParent(); + }, + + onRemove: function (item) { + var me = this, + region = item.region, + splitter = item.splitter; + + if (region) { + if (item.isCenter) { + me.centerRegion = null; + } + + delete item.isCenter; + delete item.isHorz; + delete item.isVert; + + if (splitter) { + me.owner.doRemove(splitter, true); // avoid another layout + delete item.splitter; + } + } + + me.callParent(arguments); + }, + + //---------------------------------- + // Misc + + regionFlags: { + center: { isCenter: true, isHorz: false, isVert: false }, + + north: { isCenter: false, isHorz: false, isVert: true }, + south: { isCenter: false, isHorz: false, isVert: true }, + + west: { isCenter: false, isHorz: true, isVert: false }, + east: { isCenter: false, isHorz: true, isVert: false } + }, + + setupSplitterNeighbors: function (items) { + var edgeRegions = { + //north: null, + //south: null, + //east: null, + //west: null + }, + length = items.length, + touchedRegions = this.touchedRegions, + i, j, center, count, edge, comp, region, splitter, touched; + + for (i = 0; i < length; ++i) { + comp = items[i].target; + region = comp.region; + + if (comp.isCenter) { + center = comp; + } else if (region) { + touched = touchedRegions[region]; + + for (j = 0, count = touched.length; j < count; ++j) { + edge = edgeRegions[touched[j]]; + if (edge) { + edge.neighbors.push(comp); + } + } + + if (comp.placeholderFor) { + // placeholder, so grab the splitter for the actual panel + splitter = comp.placeholderFor.splitter; + } else { + splitter = comp.splitter; + } + if (splitter) { + splitter.neighbors = []; + } + + edgeRegions[region] = splitter; + } + } + + if (center) { + touched = touchedRegions.center; + + for (j = 0, count = touched.length; j < count; ++j) { + edge = edgeRegions[touched[j]]; + if (edge) { + edge.neighbors.push(center); + } + } + } + }, + + /** + * Lists the regions that would consider an interior region a neighbor. For example, + * a north region would consider an east or west region its neighbords (as well as + * an inner north region). + * @private + */ + touchedRegions: { + center: [ 'north', 'south', 'east', 'west' ], + + north: [ 'north', 'east', 'west' ], + south: [ 'south', 'east', 'west' ], + east: [ 'east', 'north', 'south' ], + west: [ 'west', 'north', 'south' ] + }, + + sizePolicies: { + vert: { + setsWidth: 1, + setsHeight: 0 + }, + horz: { + setsWidth: 0, + setsHeight: 1 + }, + flexAll: { + setsWidth: 1, + setsHeight: 1 + } + }, + + getItemSizePolicy: function (item) { + var me = this, + policies = this.sizePolicies, + collapseTarget, size, policy, placeholderFor; + + if (item.isCenter) { + placeholderFor = item.placeholderFor; + + if (placeholderFor) { + if (placeholderFor.collapsedVertical()) { + return policies.vert; + } + return policies.horz; + } + if (item.collapsed) { + if (item.collapsedVertical()) { + return policies.vert; + } + return policies.horz; + } + return policies.flexAll; + } + + collapseTarget = item.collapseTarget; + + if (collapseTarget) { + return collapseTarget.isVert ? policies.vert : policies.horz; + } + + if (item.region) { + if (item.isVert) { + size = item.height; + policy = policies.vert; + } else { + size = item.width; + policy = policies.horz; + } + + if (item.flex || (typeof size == 'string' && me.percentageRe.test(size))) { + return policies.flexAll; + } + + return policy; + } + + return me.autoSizePolicy; + } +}, function () { + var methods = { + addUnflexed: function (px) { + this.flexSpace = Math.max(this.flexSpace - px, 0); + } + }, + props = this.prototype.axisProps; + + Ext.apply(props.horz, methods); + Ext.apply(props.vert, methods); +}); + +/** + * This layout manages multiple child Components, each fitted to the Container, where only a single child Component can be + * visible at any given time. This layout style is most commonly used for wizards, tab implementations, etc. + * This class is intended to be extended or created via the layout:'card' {@link Ext.container.Container#layout} config, + * and should generally not need to be created directly via the new keyword. + * + * The CardLayout's focal method is {@link #setActiveItem}. Since only one panel is displayed at a time, + * the only way to move from one Component to the next is by calling setActiveItem, passing the next panel to display + * (or its id or index). The layout itself does not provide a user interface for handling this navigation, + * so that functionality must be provided by the developer. + * + * To change the active card of a container, call the setActiveItem method of its layout: + * + * @example + * var p = Ext.create('Ext.panel.Panel', { + * layout: 'card', + * items: [ + * { html: 'Card 1' }, + * { html: 'Card 2' } + * ], + * renderTo: Ext.getBody() + * }); + * + * p.getLayout().setActiveItem(1); + * + * In the following example, a simplistic wizard setup is demonstrated. A button bar is added + * to the footer of the containing panel to provide navigation buttons. The buttons will be handled by a + * common navigation routine. Note that other uses of a CardLayout (like a tab control) would require a + * completely different implementation. For serious implementations, a better approach would be to extend + * CardLayout to provide the custom functionality needed. + * + * @example + * var navigate = function(panel, direction){ + * // This routine could contain business logic required to manage the navigation steps. + * // It would call setActiveItem as needed, manage navigation button state, handle any + * // branching logic that might be required, handle alternate actions like cancellation + * // or finalization, etc. A complete wizard implementation could get pretty + * // sophisticated depending on the complexity required, and should probably be + * // done as a subclass of CardLayout in a real-world implementation. + * var layout = panel.getLayout(); + * layout[direction](); + * Ext.getCmp('move-prev').setDisabled(!layout.getPrev()); + * Ext.getCmp('move-next').setDisabled(!layout.getNext()); + * }; + * + * Ext.create('Ext.panel.Panel', { + * title: 'Example Wizard', + * width: 300, + * height: 200, + * layout: 'card', + * bodyStyle: 'padding:15px', + * defaults: { + * // applied to each contained panel + * border: false + * }, + * // just an example of one possible navigation scheme, using buttons + * bbar: [ + * { + * id: 'move-prev', + * text: 'Back', + * handler: function(btn) { + * navigate(btn.up("panel"), "prev"); + * }, + * disabled: true + * }, + * '->', // greedy spacer so that the buttons are aligned to each side + * { + * id: 'move-next', + * text: 'Next', + * handler: function(btn) { + * navigate(btn.up("panel"), "next"); + * } + * } + * ], + * // the panels (or "cards") within the layout + * items: [{ + * id: 'card-0', + * html: '

    Welcome to the Wizard!

    Step 1 of 3

    ' + * },{ + * id: 'card-1', + * html: '

    Step 2 of 3

    ' + * },{ + * id: 'card-2', + * html: '

    Congratulations!

    Step 3 of 3 - Complete

    ' + * }], + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.layout.container.Card', { + + /* Begin Definitions */ + + extend: 'Ext.layout.container.Fit', + + alternateClassName: 'Ext.layout.CardLayout', + + alias: 'layout.card', + + /* End Definitions */ + + type: 'card', + + hideInactive: true, + + /** + * @cfg {Boolean} deferredRender + * True to render each contained item at the time it becomes active, false to render all contained items + * as soon as the layout is rendered (defaults to false). If there is a significant amount of content or + * a lot of heavy controls being rendered into panels that are not displayed by default, setting this to + * true might improve performance. + */ + deferredRender : false, + + getRenderTree: function () { + var me = this, + activeItem = me.getActiveItem(); + + if (activeItem) { + + // If they veto the activate, we have no active item + if (activeItem.hasListeners.beforeactivate && activeItem.fireEvent('beforeactivate', activeItem) === false) { + + // We must null our activeItem reference, AND the one in our owning Container. + // Because upon layout invalidation, renderChildren will use this.getActiveItem which + // uses this.activeItem || this.owner.activeItem + activeItem = me.activeItem = me.owner.activeItem = null; + } + + // Item is to be the active one. Fire event after it is first layed out + else if (activeItem.hasListeners.activate) { + activeItem.on({ + boxready: function() { + activeItem.fireEvent('activate', activeItem); + }, + single: true + }); + } + + if (me.deferredRender) { + if (activeItem) { + return me.getItemsRenderTree([activeItem]); + } + } else { + return me.callParent(arguments); + } + } + }, + + renderChildren: function () { + var me = this, + active = me.getActiveItem(); + + if (!me.deferredRender) { + me.callParent(); + } else if (active) { + // ensure the active item is configured for the layout + me.renderItems([active], me.getRenderTarget()); + } + }, + + isValidParent : function(item, target, position) { + // Note: Card layout does not care about order within the target because only one is ever visible. + // We only care whether the item is a direct child of the target. + var itemEl = item.el ? item.el.dom : Ext.getDom(item); + return (itemEl && itemEl.parentNode === (target.dom || target)) || false; + }, + + /** + * Return the active (visible) component in the layout. + * @returns {Ext.Component} + */ + getActiveItem: function() { + var me = this, + // Ensure the calculated result references a Component + result = me.parseActiveItem(me.activeItem || (me.owner && me.owner.activeItem)); + + // Sanitize the result in case the active item is no longer there. + if (result && me.owner.items.indexOf(result) != -1) { + me.activeItem = result; + } else { + me.activeItem = null; + } + + return me.activeItem; + }, + + // @private + parseActiveItem: function(item) { + if (item && item.isComponent) { + return item; + } else if (typeof item == 'number' || item === undefined) { + return this.getLayoutItems()[item || 0]; + } else { + return this.owner.getComponent(item); + } + }, + + // @private. Called before both dynamic render, and bulk render. + // Ensure that the active item starts visible, and inactive ones start invisible + configureItem: function(item) { + if (item === this.getActiveItem()) { + item.hidden = false; + } else { + item.hidden = true; + } + this.callParent(arguments); + }, + + onRemove: function(component) { + var me = this; + + if (component === me.activeItem) { + me.activeItem = null; + } + }, + + // @private + getAnimation: function(newCard, owner) { + var newAnim = (newCard || {}).cardSwitchAnimation; + if (newAnim === false) { + return false; + } + return newAnim || owner.cardSwitchAnimation; + }, + + /** + * Return the active (visible) component in the layout to the next card + * @returns {Ext.Component} The next component or false. + */ + getNext: function() { + //NOTE: Removed the JSDoc for this function's arguments because it is not actually supported in 4.0. This + //should come back in 4.1 + var wrap = arguments[0], + items = this.getLayoutItems(), + index = Ext.Array.indexOf(items, this.activeItem); + + return items[index + 1] || (wrap ? items[0] : false); + }, + + /** + * Sets the active (visible) component in the layout to the next card + * @return {Ext.Component} the activated component or false when nothing activated. + */ + next: function() { + //NOTE: Removed the JSDoc for this function's arguments because it is not actually supported in 4.0. This + //should come back in 4.1 + var anim = arguments[0], + wrap = arguments[1]; + return this.setActiveItem(this.getNext(wrap), anim); + }, + + /** + * Return the active (visible) component in the layout to the previous card + * @returns {Ext.Component} The previous component or false. + */ + getPrev: function() { + //NOTE: Removed the JSDoc for this function's arguments because it is not actually supported in 4.0. This + //should come back in 4.1 + var wrap = arguments[0], + items = this.getLayoutItems(), + index = Ext.Array.indexOf(items, this.activeItem); + + return items[index - 1] || (wrap ? items[items.length - 1] : false); + }, + + /** + * Sets the active (visible) component in the layout to the previous card + * @return {Ext.Component} the activated component or false when nothing activated. + */ + prev: function() { + //NOTE: Removed the JSDoc for this function's arguments because it is not actually supported in 4.0. This + //should come back in 4.1 + var anim = arguments[0], + wrap = arguments[1]; + return this.setActiveItem(this.getPrev(wrap), anim); + }, + + /** + * Makes the given card active. + * + * var card1 = Ext.create('Ext.panel.Panel', {itemId: 'card-1'}); + * var card2 = Ext.create('Ext.panel.Panel', {itemId: 'card-2'}); + * var panel = Ext.create('Ext.panel.Panel', { + * layout: 'card', + * activeItem: 0, + * items: [card1, card2] + * }); + * // These are all equivalent + * panel.getLayout().setActiveItem(card2); + * panel.getLayout().setActiveItem('card-2'); + * panel.getLayout().setActiveItem(1); + * + * @param {Ext.Component/Number/String} newCard The component, component {@link Ext.Component#id id}, + * {@link Ext.Component#itemId itemId}, or index of component. + * @return {Ext.Component} the activated component or false when nothing activated. + * False is returned also when trying to activate an already active card. + */ + setActiveItem: function(newCard) { + var me = this, + owner = me.owner, + oldCard = me.activeItem, + rendered = owner.rendered, + newIndex; + + newCard = me.parseActiveItem(newCard); + newIndex = owner.items.indexOf(newCard); + + // If the card is not a child of the owner, then add it. + // Without doing a layout! + if (newIndex == -1) { + newIndex = owner.items.items.length; + Ext.suspendLayouts(); + newCard = owner.add(newCard); + Ext.resumeLayouts(); + } + + // Is this a valid, different card? + if (newCard && oldCard != newCard) { + // Fire the beforeactivate and beforedeactivate events on the cards + if (newCard.fireEvent('beforeactivate', newCard, oldCard) === false) { + return false; + } + if (oldCard && oldCard.fireEvent('beforedeactivate', oldCard, newCard) === false) { + return false; + } + + if (rendered) { + Ext.suspendLayouts(); + + // If the card has not been rendered yet, now is the time to do so. + if (!newCard.rendered) { + me.renderItem(newCard, me.getRenderTarget(), owner.items.length); + } + + if (oldCard) { + if (me.hideInactive) { + oldCard.hide(); + oldCard.hiddenByLayout = true; + } + oldCard.fireEvent('deactivate', oldCard, newCard); + } + // Make sure the new card is shown + if (newCard.hidden) { + newCard.show(); + } + + // Layout needs activeItem to be correct, so set it if the show has not been vetoed + if (!newCard.hidden) { + me.activeItem = newCard; + } + Ext.resumeLayouts(true); + } else { + me.activeItem = newCard; + } + + newCard.fireEvent('activate', newCard, oldCard); + + return me.activeItem; + } + return false; + } +}); + +/** + * This is the layout style of choice for creating structural layouts in a multi-column format where the width of each + * column can be specified as a percentage or fixed width, but the height is allowed to vary based on the content. This + * class is intended to be extended or created via the layout:'column' {@link Ext.container.Container#layout} config, + * and should generally not need to be created directly via the new keyword. + * + * ColumnLayout does not have any direct config options (other than inherited ones), but it does support a specific + * config property of `columnWidth` that can be included in the config of any panel added to it. The layout will use + * the columnWidth (if present) or width of each panel during layout to determine how to size each panel. If width or + * columnWidth is not specified for a given panel, its width will default to the panel's width (or auto). + * + * The width property is always evaluated as pixels, and must be a number greater than or equal to 1. The columnWidth + * property is always evaluated as a percentage, and must be a decimal value greater than 0 and less than 1 (e.g., .25). + * + * The basic rules for specifying column widths are pretty simple. The logic makes two passes through the set of + * contained panels. During the first layout pass, all panels that either have a fixed width or none specified (auto) + * are skipped, but their widths are subtracted from the overall container width. + * + * During the second pass, all panels with columnWidths are assigned pixel widths in proportion to their percentages + * based on the total **remaining** container width. In other words, percentage width panels are designed to fill + * the space left over by all the fixed-width and/or auto-width panels. Because of this, while you can specify any + * number of columns with different percentages, the columnWidths must always add up to 1 (or 100%) when added + * together, otherwise your layout may not render as expected. + * + * @example + * // All columns are percentages -- they must add up to 1 + * Ext.create('Ext.panel.Panel', { + * title: 'Column Layout - Percentage Only', + * width: 350, + * height: 250, + * layout:'column', + * items: [{ + * title: 'Column 1', + * columnWidth: 0.25 + * },{ + * title: 'Column 2', + * columnWidth: 0.55 + * },{ + * title: 'Column 3', + * columnWidth: 0.20 + * }], + * renderTo: Ext.getBody() + * }); + * + * // Mix of width and columnWidth -- all columnWidth values must add up + * // to 1. The first column will take up exactly 120px, and the last two + * // columns will fill the remaining container width. + * + * Ext.create('Ext.Panel', { + * title: 'Column Layout - Mixed', + * width: 350, + * height: 250, + * layout:'column', + * items: [{ + * title: 'Column 1', + * width: 120 + * },{ + * title: 'Column 2', + * columnWidth: 0.7 + * },{ + * title: 'Column 3', + * columnWidth: 0.3 + * }], + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.layout.container.Column', { + + extend: 'Ext.layout.container.Container', + alias: ['layout.column'], + alternateClassName: 'Ext.layout.ColumnLayout', + + type: 'column', + + itemCls: Ext.baseCSSPrefix + 'column', + + targetCls: Ext.baseCSSPrefix + 'column-layout-ct', + + // Columns with a columnWidth have their width managed. + columnWidthSizePolicy: { + setsWidth: 1, + setsHeight: 0 + }, + + childEls: [ + 'innerCt' + ], + + manageOverflow: 2, + + renderTpl: [ + '
    ', + '{%this.renderBody(out,values)%}', + '
    ', + '
    ', + '{%this.renderPadder(out,values)%}' + ], + + getItemSizePolicy: function (item) { + if (item.columnWidth) { + return this.columnWidthSizePolicy; + } + return this.autoSizePolicy; + }, + + beginLayout: function() { + this.callParent(arguments); + this.innerCt.dom.style.width = ''; + }, + + calculate: function (ownerContext) { + var me = this, + containerSize = me.getContainerSize(ownerContext), + state = ownerContext.state; + + if (state.calculatedColumns || (state.calculatedColumns = me.calculateColumns(ownerContext))) { + if (me.calculateHeights(ownerContext)) { + me.calculateOverflow(ownerContext, containerSize); + return; + } + } + + me.done = false; + }, + + calculateColumns: function (ownerContext) { + var me = this, + containerSize = me.getContainerSize(ownerContext), + innerCtContext = ownerContext.getEl('innerCt', me), + items = ownerContext.childItems, + len = items.length, + contentWidth = 0, + blocked, availableWidth, i, itemContext, itemMarginWidth, itemWidth; + + // Can never decide upon necessity of vertical scrollbar (and therefore, narrower + // content width) until the component layout has published a height for the target + // element. + if (!ownerContext.heightModel.shrinkWrap && !ownerContext.targetContext.hasProp('height')) { + return false; + } + + // No parallel measurement, cannot lay out boxes. + if (!containerSize.gotWidth) { //\\ TODO: Deal with target padding width + ownerContext.targetContext.block(me, 'width'); + blocked = true; + } else { + availableWidth = containerSize.width; + + innerCtContext.setWidth(availableWidth); + } + + // we need the widths of the columns we don't manage to proceed so we block on them + // if they are not ready... + for (i = 0; i < len; ++i) { + itemContext = items[i]; + + // this is needed below for non-calculated columns, but is also needed in the + // next loop for calculated columns... this way we only call getMarginInfo in + // this loop and use the marginInfo property in the next... + itemMarginWidth = itemContext.getMarginInfo().width; + + if (!itemContext.widthModel.calculated) { + itemWidth = itemContext.getProp('width'); + if (typeof itemWidth != 'number') { + itemContext.block(me, 'width'); + blocked = true; + } + + contentWidth += itemWidth + itemMarginWidth; + } + } + + if (!blocked) { + availableWidth = (availableWidth < contentWidth) ? 0 : availableWidth - contentWidth; + + for (i = 0; i < len; ++i) { + itemContext = items[i]; + if (itemContext.widthModel.calculated) { + itemMarginWidth = itemContext.marginInfo.width; // always set by above loop + itemWidth = itemContext.target.columnWidth; + itemWidth = Math.floor(itemWidth * availableWidth) - itemMarginWidth; + itemWidth = itemContext.setWidth(itemWidth); // constrains to min/maxWidth + contentWidth += itemWidth + itemMarginWidth; + } + } + + ownerContext.setContentWidth(contentWidth); + } + + // we registered all the values that block this calculation, so abort now if blocked... + return !blocked; + }, + + calculateHeights: function (ownerContext) { + var me = this, + items = ownerContext.childItems, + len = items.length, + blocked, i, itemContext; + + // in order for innerCt to have the proper height, all the items must have height + // correct in the DOM... + blocked = false; + for (i = 0; i < len; ++i) { + itemContext = items[i]; + + if (!itemContext.hasDomProp('height')) { + itemContext.domBlock(me, 'height'); + blocked = true; + } + } + + if (!blocked) { + ownerContext.setContentHeight(me.innerCt.getHeight() + ownerContext.targetContext.getPaddingInfo().height); + } + + return !blocked; + }, + + finishedLayout: function (ownerContext) { + var bc = ownerContext.bodyContext; + + // Owner may not have a body - this seems to only be needed for Panels. + if (bc && (Ext.isIE6 || Ext.isIE7 || Ext.isIEQuirks)) { + // Fix for https://sencha.jira.com/browse/EXTJSIV-4979 + bc.el.repaint(); + } + + this.callParent(arguments); + }, + + getRenderTarget : function() { + return this.innerCt; + } +}); + +/** + * This is a layout that will render form Fields, one under the other all stretched to the Container width. + * + * @example + * Ext.create('Ext.Panel', { + * width: 500, + * height: 300, + * title: "FormLayout Panel", + * layout: 'form', + * renderTo: Ext.getBody(), + * bodyPadding: 5, + * defaultType: 'textfield', + * items: [{ + * fieldLabel: 'First Name', + * name: 'first', + * allowBlank:false + * },{ + * fieldLabel: 'Last Name', + * name: 'last' + * },{ + * fieldLabel: 'Company', + * name: 'company' + * }, { + * fieldLabel: 'Email', + * name: 'email', + * vtype:'email' + * }, { + * fieldLabel: 'DOB', + * name: 'dob', + * xtype: 'datefield' + * }, { + * fieldLabel: 'Age', + * name: 'age', + * xtype: 'numberfield', + * minValue: 0, + * maxValue: 100 + * }, { + * xtype: 'timefield', + * fieldLabel: 'Time', + * name: 'time', + * minValue: '8:00am', + * maxValue: '6:00pm' + * }] + * }); + * + * Note that any configured {@link Ext.Component#padding padding} will be ignored on items within a Form layout. + */ +Ext.define('Ext.layout.container.Form', { + + /* Begin Definitions */ + + alias: 'layout.form', + extend: 'Ext.layout.container.Auto', + alternateClassName: 'Ext.layout.FormLayout', + + /* End Definitions */ + + tableCls: Ext.baseCSSPrefix + 'form-layout-table', + + type: 'form', + + manageOverflow: 2, + + childEls: ['formTable'], + + padRow: '', + + renderTpl: [ + '
    cells in + // the grid won't respond to the new width set in the at the top. So we + // force a reflow of the table which seems to correct it. Related to EXTJSIV-6410 + if (Ext.isGecko) { + first = me.headerCt.getGridColumns()[0]; + if (first) { + first = me.owner.el.down(me.getColumnSelector(first)); + if (first) { + first.setStyle('display', 'none'); + first.dom.scrollWidth; + first.setStyle('display', ''); + } + } + } + }, + + getColumnSelector: function(column) { + return 'th.' + Ext.baseCSSPrefix + 'grid-col-resizer-' + column.id; + } +}); + +/** + * This class encapsulates the user interface for a tabular data set. + * It acts as a centralized manager for controlling the various interface + * elements of the view. This includes handling events, such as row and cell + * level based DOM events. It also reacts to events from the underlying {@link Ext.selection.Model} + * to provide visual feedback to the user. + * + * This class does not provide ways to manipulate the underlying data of the configured + * {@link Ext.data.Store}. + * + * This is the base class for both {@link Ext.grid.View} and {@link Ext.tree.View} and is not + * to be used directly. + */ +Ext.define('Ext.view.Table', { + extend: 'Ext.view.View', + alias: 'widget.tableview', + uses: [ + 'Ext.view.TableLayout', + 'Ext.view.TableChunker', + 'Ext.util.DelayedTask', + 'Ext.util.MixedCollection' + ], + + componentLayout: 'tableview', + + baseCls: Ext.baseCSSPrefix + 'grid-view', + + // row + itemSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-row', + // cell + cellSelector: 'td.' + Ext.baseCSSPrefix + 'grid-cell', + + // keep a separate rowSelector, since we may need to select the actual row elements + rowSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-row', + + /** + * @cfg {String} [firstCls='x-grid-cell-first'] + * A CSS class to add to the *first* cell in every row to enable special styling for the first column. + * If no styling is needed on the first column, this may be configured as `null`. + */ + firstCls: Ext.baseCSSPrefix + 'grid-cell-first', + + /** + * @cfg {String} [lastCls='x-grid-cell-last'] + * A CSS class to add to the *last* cell in every row to enable special styling for the last column. + * If no styling is needed on the last column, this may be configured as `null`. + */ + lastCls: Ext.baseCSSPrefix + 'grid-cell-last', + + headerRowSelector: 'tr.' + Ext.baseCSSPrefix + 'grid-header-row', + + selectedItemCls: Ext.baseCSSPrefix + 'grid-row-selected', + selectedCellCls: Ext.baseCSSPrefix + 'grid-cell-selected', + focusedItemCls: Ext.baseCSSPrefix + 'grid-row-focused', + overItemCls: Ext.baseCSSPrefix + 'grid-row-over', + altRowCls: Ext.baseCSSPrefix + 'grid-row-alt', + rowClsRe: new RegExp('(?:^|\\s*)' + Ext.baseCSSPrefix + 'grid-row-(first|last|alt)(?:\\s+|$)', 'g'), + cellRe: new RegExp(Ext.baseCSSPrefix + 'grid-cell-([^\\s]+) ', ''), + + // cfg docs inherited + trackOver: true, + + /** + * Override this function to apply custom CSS classes to rows during rendering. This function should return the + * CSS class name (or empty string '' for none) that will be added to the row's wrapping div. To apply multiple + * class names, simply return them space-delimited within the string (e.g. 'my-class another-class'). + * Example usage: + * + * viewConfig: { + * getRowClass: function(record, rowIndex, rowParams, store){ + * return record.get("valid") ? "row-valid" : "row-error"; + * } + * } + * + * @param {Ext.data.Model} record The record corresponding to the current row. + * @param {Number} index The row index. + * @param {Object} rowParams **DEPRECATED.** For row body use the + * {@link Ext.grid.feature.RowBody#getAdditionalData getAdditionalData} method of the rowbody feature. + * @param {Ext.data.Store} store The store this grid is bound to + * @return {String} a CSS class name to add to the row. + * @method + */ + getRowClass: null, + + /** + * @cfg {Boolean} stripeRows + * True to stripe the rows. + * + * This causes the CSS class **`x-grid-row-alt`** to be added to alternate rows of + * the grid. A default CSS rule is provided which sets a background color, but you can override this + * with a rule which either overrides the **background-color** style using the `!important` + * modifier, or which uses a CSS selector of higher specificity. + */ + stripeRows: true, + + /** + * @cfg {Boolean} markDirty + * True to show the dirty cell indicator when a cell has been modified. + */ + markDirty : true, + + /** + * @cfg {Boolean} enableTextSelection + * True to enable text selections. + */ + + /** + * @private + * Simple initial tpl for TableView just to satisfy the validation within AbstractView.initComponent. + */ + initialTpl: '
    ', + + initComponent: function() { + var me = this, + scroll = me.scroll; + + /** + * @private + * @property {Ext.dom.AbstractElement.Fly} table + * A flyweight Ext.Element which encapsulates a reference to the transient `` element within this View. + * *Note that the `dom` reference will not be present until the first data refresh* + */ + me.table = new Ext.dom.Element.Fly(); + me.table.id = me.id + 'gridTable'; + + // Scrolling within a TableView is controlled by the scroll config of its owning GridPanel + // It must see undefined in this property in order to leave the scroll styles alone at afterRender time + me.autoScroll = undefined; + + // Convert grid scroll config to standard Component scrolling configurations. + if (scroll === true || scroll === 'both') { + me.autoScroll = true; + } else if (scroll === 'horizontal') { + me.overflowX = 'auto'; + } else if (scroll === 'vertical') { + me.overflowY = 'auto'; + } + me.selModel.view = me; + me.headerCt.view = me; + me.headerCt.markDirty = me.markDirty; + + // Features need a reference to the grid. + me.initFeatures(me.grid); + delete me.grid; + + // The real tpl is generated, but AbstractView.initComponent insists upon the presence of a fully instantiated XTemplate at construction time. + me.tpl = me.getTpl('initialTpl'); + me.callParent(); + }, + + /** + * @private + * Move a grid column from one position to another + * @param {Number} fromIdx The index from which to move columns + * @param {Number} toIdx The index at which to insert columns. + * @param {Number} [colsToMove=1] The number of columns to move beginning at the `fromIdx` + */ + moveColumn: function(fromIdx, toIdx, colsToMove) { + var me = this, + fragment = (colsToMove > 1) ? document.createDocumentFragment() : undefined, + destinationCellIdx = toIdx, + colCount = me.getGridColumns().length, + lastIdx = colCount - 1, + doFirstLastClasses = (me.firstCls || me.lastCls) && (toIdx === 0 || toIdx == colCount || fromIdx === 0 || fromIdx == lastIdx), + i, + j, + rows, len, tr, headerRows; + + if (me.rendered) { + // Use select here. In most cases there will only be one row. In + // the case of a grouping grid, each group also has a header. + headerRows = me.el.query(me.headerRowSelector); + rows = me.el.query(me.rowSelector); + + if (toIdx > fromIdx && fragment) { + destinationCellIdx -= colsToMove; + } + + // Move the column sizing header to match + for (i = 0, len = headerRows.length; i < len; ++i) { + tr = headerRows[i]; + if (fragment) { + for (j = 0; j < colsToMove; j++) { + fragment.appendChild(tr.cells[fromIdx]); + } + tr.insertBefore(fragment, tr.cells[destinationCellIdx] || null); + } else { + tr.insertBefore(tr.cells[fromIdx], tr.cells[destinationCellIdx] || null); + } + } + + for (i = 0, len = rows.length; i < len; i++) { + tr = rows[i]; + + // Keep first cell class and last cell class correct *only if needed* + if (doFirstLastClasses) { + + if (fromIdx === 0) { + Ext.fly(tr.cells[0]).removeCls(me.firstCls); + Ext.fly(tr.cells[1]).addCls(me.firstCls); + } else if (fromIdx === lastIdx) { + Ext.fly(tr.cells[lastIdx]).removeCls(me.lastCls); + Ext.fly(tr.cells[lastIdx - 1]).addCls(me.lastCls); + } + if (toIdx === 0) { + Ext.fly(tr.cells[0]).removeCls(me.firstCls); + Ext.fly(tr.cells[fromIdx]).addCls(me.firstCls); + } else if (toIdx === colCount) { + Ext.fly(tr.cells[lastIdx]).removeCls(me.lastCls); + Ext.fly(tr.cells[fromIdx]).addCls(me.lastCls); + } + } + + if (fragment) { + for (j = 0; j < colsToMove; j++) { + fragment.appendChild(tr.cells[fromIdx]); + } + tr.insertBefore(fragment, tr.cells[destinationCellIdx] || null); + } else { + tr.insertBefore(tr.cells[fromIdx], tr.cells[destinationCellIdx] || null); + } + } + me.setNewTemplate(); + } + }, + + // scroll the view to the top + scrollToTop: Ext.emptyFn, + + /** + * Add a listener to the main view element. It will be destroyed with the view. + * @private + */ + addElListener: function(eventName, fn, scope){ + this.mon(this, eventName, fn, scope, { + element: 'el' + }); + }, + + /** + * Get the columns used for generating a template via TableChunker. + * See {@link Ext.grid.header.Container#getGridColumns}. + * @private + */ + getGridColumns: function() { + return this.headerCt.getGridColumns(); + }, + + /** + * Get a leaf level header by index regardless of what the nesting + * structure is. + * @private + * @param {Number} index The index + */ + getHeaderAtIndex: function(index) { + return this.headerCt.getHeaderAtIndex(index); + }, + + /** + * Get the cell (td) for a particular record and column. + * @param {Ext.data.Model} record + * @param {Ext.grid.column.Column} column + * @private + */ + getCell: function(record, column) { + var row = this.getNode(record); + return Ext.fly(row).down(column.getCellSelector()); + }, + + /** + * Get a reference to a feature + * @param {String} id The id of the feature + * @return {Ext.grid.feature.Feature} The feature. Undefined if not found + */ + getFeature: function(id) { + var features = this.featuresMC; + if (features) { + return features.get(id); + } + }, + + /** + * Initializes each feature and bind it to this view. + * @private + */ + initFeatures: function(grid) { + var me = this, + i, + features, + feature, + len; + + me.featuresMC = new Ext.util.MixedCollection(); + features = me.features = me.constructFeatures(); + len = features ? features.length : 0; + for (i = 0; i < len; i++) { + feature = features[i]; + + // inject a reference to view and grid - Features need both + feature.view = me; + feature.grid = grid; + me.featuresMC.add(feature); + feature.init(); + } + }, + + /** + * @private + * Converts the features array as configured, into an array of instantiated Feature objects. + * + * This is borrowed by Lockable which clones and distributes Features to both child grids of a locking grid. + * + * Must have no side effects other than Feature instantiation. + * + * MUST NOT update the this.features property, and MUST NOT update the instantiated Features. + */ + constructFeatures: function() { + var me = this, + features = me.features, + feature, + result, + i = 0, len; + + if (features) { + result = []; + len = features.length; + for (; i < len; i++) { + feature = features[i]; + if (!feature.isFeature) { + feature = Ext.create('feature.' + feature.ftype, feature); + } + result[i] = feature; + } + } + return result; + }, + + /** + * Gives features an injection point to attach events to the markup that + * has been created for this view. + * @private + */ + attachEventsForFeatures: function() { + var features = this.features, + ln = features.length, + i = 0; + + for (; i < ln; i++) { + if (features[i].isFeature) { + features[i].attachEvents(); + } + } + }, + + afterRender: function() { + var me = this; + me.callParent(); + + if (!me.enableTextSelection) { + me.el.unselectable(); + } + me.attachEventsForFeatures(); + }, + + // Private template method implemented starting at the AbstractView class. + onViewScroll: function(e, t) { + this.callParent(arguments); + this.fireEvent('bodyscroll', e, t); + }, + + /** + * Uses the headerCt (Which is the repository of all information relating to Column definitions) + * to transform data from dataIndex keys in a record to headerId keys in each header and then run + * them through each feature to get additional data for variables they have injected into the view template. + * @private + */ + prepareData: function(data, idx, record) { + var me = this, + result = me.headerCt.prepareData(data, idx, record, me, me.ownerCt), + features = me.features, + ln = features.length, + i = 0, + feature; + + for (; i < ln; i++) { + feature = features[i]; + if (feature.isFeature) { + Ext.apply(result, feature.getAdditionalData(data, idx, record, result, me)); + } + } + + return result; + }, + + // TODO: Refactor headerCt dependency here to colModel + collectData: function(records, startIndex) { + var me = this, + preppedRecords = me.callParent(arguments), + headerCt = me.headerCt, + fullWidth = headerCt.getFullWidth(), + features = me.features, + ln = features.length, + o = { + rows: preppedRecords, + fullWidth: fullWidth + }, + i = 0, + feature, + j = 0, + jln, + rowParams, + rec, + cls; + + jln = preppedRecords.length; + // process row classes, rowParams has been deprecated and has been moved + // to the individual features that implement the behavior. + if (me.getRowClass) { + for (; j < jln; j++) { + rowParams = {}; + rec = preppedRecords[j]; + cls = rec.rowCls || ''; + rec.rowCls = this.getRowClass(records[j], j, rowParams, me.store) + ' ' + cls; + if (rowParams.alt) { + Ext.Error.raise("The getRowClass alt property is no longer supported."); + } + if (rowParams.tstyle) { + Ext.Error.raise("The getRowClass tstyle property is no longer supported."); + } + if (rowParams.cells) { + Ext.Error.raise("The getRowClass cells property is no longer supported."); + } + if (rowParams.body) { + Ext.Error.raise("The getRowClass body property is no longer supported. Use the getAdditionalData method of the rowbody feature."); + } + if (rowParams.bodyStyle) { + Ext.Error.raise("The getRowClass bodyStyle property is no longer supported."); + } + if (rowParams.cols) { + Ext.Error.raise("The getRowClass cols property is no longer supported."); + } + } + } + // currently only one feature may implement collectData. This is to modify + // what's returned to the view before its rendered + for (; i < ln; i++) { + feature = features[i]; + if (feature.isFeature && feature.collectData && !feature.disabled) { + o = feature.collectData(records, preppedRecords, startIndex, fullWidth, o); + break; + } + } + return o; + }, + + // Private. Called when the table changes height. + // For example, see examples/grid/group-summary-grid.html + // If we have flexed column headers, we need to update the header layout + // because it may have to accommodate (or cease to accommodate) a vertical scrollbar. + // Only do this on platforms which have a space-consuming scrollbar. + // Only do it when vertical scrolling is enabled. + refreshSize: function() { + var me = this, + cmp; + + // On every update of the layout system due to data update, capture the table's DOM in our private flyweight + me.table.attach(me.el.child('table', true)); + + if (!me.hasLoadingHeight) { + cmp = me.up('tablepanel'); + + // Suspend layouts in case the superclass requests a layout. We might too, so they + // must be coalescsed. + Ext.suspendLayouts(); + + me.callParent(); + + // If the OS displays scrollbars, and we are overflowing vertically, ensure the + // HeaderContainer accounts for the scrollbar. + if (cmp && Ext.getScrollbarSize().width && (me.autoScroll || me.overflowY)) { + cmp.updateLayout(); + } + + Ext.resumeLayouts(true); + } + }, + + /** + * Set a new template based on the current columns displayed in the grid. + * @private + */ + setNewTemplate: function() { + var me = this, + columns = me.headerCt.getColumnsForTpl(true); + + // Template generation requires the rowCount as well as the column definitions and features. + me.tpl = me.getTableChunker().getTableTpl({ + rowCount: me.store.getCount(), + columns: columns, + features: me.features, + enableTextSelection: me.enableTextSelection + }); + }, + + /** + * Returns the configured chunker or default of Ext.view.TableChunker + */ + getTableChunker: function() { + return this.chunker || Ext.view.TableChunker; + }, + + /** + * Adds a CSS Class to a specific row. + * @param {HTMLElement/String/Number/Ext.data.Model} rowInfo An HTMLElement, index or instance of a model + * representing this row + * @param {String} cls + */ + addRowCls: function(rowInfo, cls) { + var row = this.getNode(rowInfo); + if (row) { + Ext.fly(row).addCls(cls); + } + }, + + /** + * Removes a CSS Class from a specific row. + * @param {HTMLElement/String/Number/Ext.data.Model} rowInfo An HTMLElement, index or instance of a model + * representing this row + * @param {String} cls + */ + removeRowCls: function(rowInfo, cls) { + var row = this.getNode(rowInfo); + if (row) { + Ext.fly(row).removeCls(cls); + } + }, + + // GridSelectionModel invokes onRowSelect as selection changes + onRowSelect : function(rowIdx) { + this.addRowCls(rowIdx, this.selectedItemCls); + }, + + // GridSelectionModel invokes onRowDeselect as selection changes + onRowDeselect : function(rowIdx) { + var me = this; + + me.removeRowCls(rowIdx, me.selectedItemCls); + me.removeRowCls(rowIdx, me.focusedItemCls); + }, + + onCellSelect: function(position) { + var cell = this.getCellByPosition(position, true); + if (cell) { + Ext.fly(cell).addCls(this.selectedCellCls); + } + }, + + onCellDeselect: function(position) { + var cell = this.getCellByPosition(position, true); + if (cell) { + Ext.fly(cell).removeCls(this.selectedCellCls); + } + + }, + + onCellFocus: function(position) { + this.focusCell(position); + }, + + getCellByPosition: function(position, returnDom) { + if (position) { + var node = this.getNode(position.row), + header = this.headerCt.getHeaderAtIndex(position.column); + + if (header && node) { + return Ext.fly(node).down(header.getCellSelector(), returnDom); + } + } + return false; + }, + + // GridSelectionModel invokes onRowFocus to 'highlight' + // the last row focused + onRowFocus: function(rowIdx, highlight, supressFocus) { + var me = this; + + if (highlight) { + me.addRowCls(rowIdx, me.focusedItemCls); + if (!supressFocus) { + me.focusRow(rowIdx); + } + //this.el.dom.setAttribute('aria-activedescendant', row.id); + } else { + me.removeRowCls(rowIdx, me.focusedItemCls); + } + }, + + /** + * Focuses a particular row and brings it into view. Will fire the rowfocus event. + * @param {HTMLElement/String/Number/Ext.data.Model} rowIdx + * An HTMLElement template node, index of a template node, the id of a template node or the + * record associated with the node. + */ + focusRow: function(rowIdx) { + var me = this, + row = me.getNode(rowIdx), + el = me.el, + adjustment = 0, + panel = me.ownerCt, + rowRegion, + elTop, + elBottom, + record; + + if (row && el) { + // Viewable region must not include scrollbars, so use + // DOM clientHeight to determine height + elTop = el.getY(); + elBottom = elTop + el.dom.clientHeight; + rowRegion = Ext.fly(row).getRegion(); + // row is above + if (rowRegion.top < elTop) { + adjustment = rowRegion.top - elTop; + // row is below + } else if (rowRegion.bottom > elBottom) { + adjustment = rowRegion.bottom - elBottom; + } + record = me.getRecord(row); + rowIdx = me.store.indexOf(record); + + if (adjustment) { + panel.scrollByDeltaY(adjustment); + } + me.fireEvent('rowfocus', record, row, rowIdx); + } + }, + + focusCell: function(position) { + var me = this, + cell = me.getCellByPosition(position), + el = me.el, + adjustmentY = 0, + adjustmentX = 0, + elRegion = el.getRegion(), + panel = me.ownerCt, + cellRegion, + record; + + // Viewable region must not include scrollbars, so use + // DOM client dimensions + elRegion.bottom = elRegion.top + el.dom.clientHeight; + elRegion.right = elRegion.left + el.dom.clientWidth; + if (cell) { + cellRegion = cell.getRegion(); + // cell is above + if (cellRegion.top < elRegion.top) { + adjustmentY = cellRegion.top - elRegion.top; + // cell is below + } else if (cellRegion.bottom > elRegion.bottom) { + adjustmentY = cellRegion.bottom - elRegion.bottom; + } + + // cell is left + if (cellRegion.left < elRegion.left) { + adjustmentX = cellRegion.left - elRegion.left; + // cell is right + } else if (cellRegion.right > elRegion.right) { + adjustmentX = cellRegion.right - elRegion.right; + } + + if (adjustmentY) { + panel.scrollByDeltaY(adjustmentY); + } + if (adjustmentX) { + panel.scrollByDeltaX(adjustmentX); + } + el.focus(); + me.fireEvent('cellfocus', record, cell, position); + } + }, + + /** + * Scrolls by delta. This affects this individual view ONLY and does not + * synchronize across views or scrollers. + * @param {Number} delta + * @param {String} [dir] Valid values are scrollTop and scrollLeft. Defaults to scrollTop. + * @private + */ + scrollByDelta: function(delta, dir) { + dir = dir || 'scrollTop'; + var elDom = this.el.dom; + elDom[dir] = (elDom[dir] += delta); + }, + + // private + onUpdate : function(store, record, operation, changedFieldNames) { + var me = this, + index, + newRow, newAttrs, attLen, i, attName, oldRow, oldRowDom, + oldCells, newCells, len, i, + columns, overItemCls, + isHovered, row, + // See if an editing plugin is active. + isEditing = me.editingPlugin && me.editingPlugin.editing; + + if (me.viewReady) { + + index = me.store.indexOf(record); + columns = me.headerCt.getGridColumns(); + overItemCls = me.overItemCls; + + // If we have columns which may *need* updating (think lockable grid child with all columns either locked or unlocked) + // and the changed record is within our view, then update the view + if (columns.length && index > -1) { + newRow = me.bufferRender([record], index)[0]; + oldRow = me.all.item(index); + if (oldRow) { + oldRowDom = oldRow.dom; + isHovered = oldRow.hasCls(overItemCls); + + // Copy new row attributes across. Use IE-specific method if possible. + if (oldRowDom.mergeAttributes) { + oldRowDom.mergeAttributes(newRow, true); + } else { + newAttrs = newRow.attributes; + attLen = newAttrs.length; + for (i = 0; i < attLen; i++) { + attName = newAttrs[i].name; + if (attName !== 'id') { + oldRowDom.setAttribute(attName, newAttrs[i].value); + } + } + } + + if (isHovered) { + oldRow.addCls(overItemCls); + } + + // Replace changed cells in the existing row structure with the new version from the rendered row. + oldCells = oldRow.query(me.cellSelector); + newCells = Ext.fly(newRow).query(me.cellSelector); + len = newCells.length; + // row is the element that contains the cells. This will be a different element from oldRow when using a rowwrap feature + row = oldCells[0].parentNode; + for (i = 0; i < len; i++) { + // If the field at this column index was changed, or column has a custom renderer + // (which means value could rely on any other changed field) the update the cell's content. + if (me.shouldUpdateCell(columns[i], changedFieldNames)) { + // If an editor plugin is active, we carefully replace just the *contents* of the cell. + if (isEditing) { + Ext.fly(oldCells[i]).syncContent(newCells[i]); + } + // Otherwise, we simply replace whole TDs with a new version + else { + row.insertBefore(newCells[i], oldCells[i]); + row.removeChild(oldCells[i]); + } + } + } + } + me.fireEvent('itemupdate', record, index, newRow); + } + } + }, + + shouldUpdateCell: function(column, changedFieldNames){ + // Though this may not be the most efficient, a renderer could be dependent on any field in the + // store, so we must always update the cell + if (column.hasCustomRenderer) { + return true; + } + return !changedFieldNames || Ext.Array.contains(changedFieldNames, column.dataIndex); + }, + + /** + * Refreshes the grid view. Saves and restores the scroll state, generates a new template, stripes rows and + * invalidates the scrollers. + */ + refresh: function() { + var me = this; + me.setNewTemplate(); + me.callParent(arguments); + me.doStripeRows(0); + me.headerCt.setSortState(); + }, + + clearViewEl: function() { + this.callParent(); + delete this.table.dom; + }, + + processItemEvent: function(record, row, rowIndex, e) { + var me = this, + cell = e.getTarget(me.cellSelector, row), + cellIndex = cell ? cell.cellIndex : -1, + map = me.statics().EventMap, + selModel = me.getSelectionModel(), + type = e.type, + result; + + if (type == 'keydown' && !cell && selModel.getCurrentPosition) { + // CellModel, otherwise we can't tell which cell to invoke + cell = me.getCellByPosition(selModel.getCurrentPosition()); + if (cell) { + cell = cell.dom; + cellIndex = cell.cellIndex; + } + } + + result = me.fireEvent('uievent', type, me, cell, rowIndex, cellIndex, e, record, row); + + if (result === false || me.callParent(arguments) === false) { + return false; + } + + // Don't handle cellmouseenter and cellmouseleave events for now + if (type == 'mouseover' || type == 'mouseout') { + return true; + } + + if(!cell) { + // if the element whose event is being processed is not an actual cell (for example if using a rowbody + // feature and the rowbody element's event is being processed) then do not fire any "cell" events + return true; + } + + return !( + // We are adding cell and feature events + (me['onBeforeCell' + map[type]](cell, cellIndex, record, row, rowIndex, e) === false) || + (me.fireEvent('beforecell' + type, me, cell, cellIndex, record, row, rowIndex, e) === false) || + (me['onCell' + map[type]](cell, cellIndex, record, row, rowIndex, e) === false) || + (me.fireEvent('cell' + type, me, cell, cellIndex, record, row, rowIndex, e) === false) + ); + }, + + processSpecialEvent: function(e) { + var me = this, + map = me.statics().EventMap, + features = me.features, + ln = features.length, + type = e.type, + i, feature, prefix, featureTarget, + beforeArgs, args, + panel = me.ownerCt; + + me.callParent(arguments); + + if (type == 'mouseover' || type == 'mouseout') { + return; + } + + for (i = 0; i < ln; i++) { + feature = features[i]; + if (feature.hasFeatureEvent) { + featureTarget = e.getTarget(feature.eventSelector, me.getTargetEl()); + if (featureTarget) { + prefix = feature.eventPrefix; + // allows features to implement getFireEventArgs to change the + // fireEvent signature + beforeArgs = feature.getFireEventArgs('before' + prefix + type, me, featureTarget, e); + args = feature.getFireEventArgs(prefix + type, me, featureTarget, e); + + if ( + // before view event + (me.fireEvent.apply(me, beforeArgs) === false) || + // panel grid event + (panel.fireEvent.apply(panel, beforeArgs) === false) || + // view event + (me.fireEvent.apply(me, args) === false) || + // panel event + (panel.fireEvent.apply(panel, args) === false) + ) { + return false; + } + } + } + } + return true; + }, + + onCellMouseDown: Ext.emptyFn, + onCellMouseUp: Ext.emptyFn, + onCellClick: Ext.emptyFn, + onCellDblClick: Ext.emptyFn, + onCellContextMenu: Ext.emptyFn, + onCellKeyDown: Ext.emptyFn, + onBeforeCellMouseDown: Ext.emptyFn, + onBeforeCellMouseUp: Ext.emptyFn, + onBeforeCellClick: Ext.emptyFn, + onBeforeCellDblClick: Ext.emptyFn, + onBeforeCellContextMenu: Ext.emptyFn, + onBeforeCellKeyDown: Ext.emptyFn, + + /** + * Expands a particular header to fit the max content width. + * This will ONLY expand, not contract. + * @private + */ + expandToFit: function(header) { + if (header) { + var maxWidth = this.getMaxContentWidth(header); + delete header.flex; + header.setWidth(maxWidth); + } + }, + + /** + * Returns the max contentWidth of the header's text and all cells + * in the grid under this header. + * @private + */ + getMaxContentWidth: function(header) { + var cellSelector = header.getCellInnerSelector(), + cells = this.el.query(cellSelector), + i = 0, + ln = cells.length, + maxWidth = header.el.dom.scrollWidth, + scrollWidth; + + for (; i < ln; i++) { + scrollWidth = cells[i].scrollWidth; + if (scrollWidth > maxWidth) { + maxWidth = scrollWidth; + } + } + return maxWidth; + }, + + getPositionByEvent: function(e) { + var me = this, + cellNode = e.getTarget(me.cellSelector), + rowNode = e.getTarget(me.itemSelector), + record = me.getRecord(rowNode), + header = me.getHeaderByCell(cellNode); + + return me.getPosition(record, header); + }, + + getHeaderByCell: function(cell) { + if (cell) { + var m = cell.className.match(this.cellRe); + if (m && m[1]) { + return Ext.getCmp(m[1]); + } + } + return false; + }, + + /** + * @param {Object} position The current row and column: an object containing the following properties: + * + * - row - The row index + * - column - The column index + * + * @param {String} direction 'up', 'down', 'right' and 'left' + * @param {Ext.EventObject} e event + * @param {Boolean} preventWrap Set to true to prevent wrap around to the next or previous row. + * @param {Function} verifierFn A function to verify the validity of the calculated position. + * When using this function, you must return true to allow the newPosition to be returned. + * @param {Object} scope Scope to run the verifierFn in + * @returns {Object} newPosition An object containing the following properties: + * + * - row - The row index + * - column - The column index + * + * @private + */ + walkCells: function(pos, direction, e, preventWrap, verifierFn, scope) { + + // Caller (probably CellModel) had no current position. This can happen + // if the main el is focused and any navigation key is presssed. + if (!pos) { + return; + } + + var me = this, + row = pos.row, + column = pos.column, + rowCount = me.store.getCount(), + firstCol = me.getFirstVisibleColumnIndex(), + lastCol = me.getLastVisibleColumnIndex(), + newPos = {row: row, column: column}, + activeHeader = me.headerCt.getHeaderAtIndex(column); + + // no active header or its currently hidden + if (!activeHeader || activeHeader.hidden) { + return false; + } + + e = e || {}; + direction = direction.toLowerCase(); + switch (direction) { + case 'right': + // has the potential to wrap if its last + if (column === lastCol) { + // if bottom row and last column, deny right + if (preventWrap || row === rowCount - 1) { + return false; + } + if (!e.ctrlKey) { + // otherwise wrap to nextRow and firstCol + newPos.row = row + 1; + newPos.column = firstCol; + } + // go right + } else { + if (!e.ctrlKey) { + newPos.column = column + me.getRightGap(activeHeader); + } else { + newPos.column = lastCol; + } + } + break; + + case 'left': + // has the potential to wrap + if (column === firstCol) { + // if top row and first column, deny left + if (preventWrap || row === 0) { + return false; + } + if (!e.ctrlKey) { + // otherwise wrap to prevRow and lastCol + newPos.row = row - 1; + newPos.column = lastCol; + } + // go left + } else { + if (!e.ctrlKey) { + newPos.column = column + me.getLeftGap(activeHeader); + } else { + newPos.column = firstCol; + } + } + break; + + case 'up': + // if top row, deny up + if (row === 0) { + return false; + // go up + } else { + if (!e.ctrlKey) { + newPos.row = row - 1; + } else { + newPos.row = 0; + } + } + break; + + case 'down': + // if bottom row, deny down + if (row === rowCount - 1) { + return false; + // go down + } else { + if (!e.ctrlKey) { + newPos.row = row + 1; + } else { + newPos.row = rowCount - 1; + } + } + break; + } + + if (verifierFn && verifierFn.call(scope || window, newPos) !== true) { + return false; + } else { + return newPos; + } + }, + getFirstVisibleColumnIndex: function() { + var firstVisibleHeader = this.getHeaderCt().getVisibleGridColumns()[0]; + + return firstVisibleHeader ? firstVisibleHeader.getIndex() : -1; + }, + + getLastVisibleColumnIndex: function() { + var visHeaders = this.getHeaderCt().getVisibleGridColumns(), + lastHeader = visHeaders[visHeaders.length - 1]; + + return lastHeader.getIndex(); + }, + + getHeaderCt: function() { + return this.headerCt; + }, + + // TODO: have this use the new Ext.grid.CellContext class + getPosition: function(record, header) { + var me = this, + store = me.store, + gridCols = me.headerCt.getGridColumns(); + + return { + row: store.indexOf(record), + column: Ext.Array.indexOf(gridCols, header) + }; + }, + + /** + * Determines the 'gap' between the closest adjacent header to the right + * that is not hidden. + * @private + */ + getRightGap: function(activeHeader) { + var headerCt = this.getHeaderCt(), + headers = headerCt.getGridColumns(), + activeHeaderIdx = Ext.Array.indexOf(headers, activeHeader), + i = activeHeaderIdx + 1, + nextIdx; + + for (; i <= headers.length; i++) { + if (!headers[i].hidden) { + nextIdx = i; + break; + } + } + + return nextIdx - activeHeaderIdx; + }, + + beforeDestroy: function() { + if (this.rendered) { + this.el.removeAllListeners(); + } + this.callParent(arguments); + }, + + /** + * Determines the 'gap' between the closest adjacent header to the left + * that is not hidden. + * @private + */ + getLeftGap: function(activeHeader) { + var headerCt = this.getHeaderCt(), + headers = headerCt.getGridColumns(), + activeHeaderIdx = Ext.Array.indexOf(headers, activeHeader), + i = activeHeaderIdx - 1, + prevIdx; + + for (; i >= 0; i--) { + if (!headers[i].hidden) { + prevIdx = i; + break; + } + } + + return prevIdx - activeHeaderIdx; + }, + + // after adding a row stripe rows from then on + onAdd: function(ds, records, index) { + this.callParent(arguments); + this.doStripeRows(index); + }, + + // after removing a row stripe rows from then on + onRemove: function(ds, records, index) { + this.callParent(arguments); + this.doStripeRows(index); + }, + + /** + * Stripes rows from a particular row index. + * @param {Number} startRow + * @param {Number} [endRow] argument specifying the last row to process. + * By default process up to the last row. + * @private + */ + doStripeRows: function(startRow, endRow) { + var me = this, + rows, + rowsLn, + i, + row; + + // ensure stripeRows configuration is turned on + if (me.rendered && me.stripeRows) { + rows = me.getNodes(startRow, endRow); + + for (i = 0, rowsLn = rows.length; i < rowsLn; i++) { + row = rows[i]; + // Remove prior applied row classes. + row.className = row.className.replace(me.rowClsRe, ' '); + startRow++; + // Every odd row will get an additional cls + if (startRow % 2 === 0) { + row.className += (' ' + me.altRowCls); + } + } + } + } + +}); + +/** + * @private + * + * Lockable is a private mixin which injects lockable behavior into any + * TablePanel subclass such as GridPanel or TreePanel. TablePanel will + * automatically inject the Ext.grid.Lockable mixin in when one of the + * these conditions are met: + * + * - The TablePanel has the lockable configuration set to true + * - One of the columns in the TablePanel has locked set to true/false + * + * Each TablePanel subclass must register an alias. It should have an array + * of configurations to copy to the 2 separate tablepanel's that will be generated + * to note what configurations should be copied. These are named normalCfgCopy and + * lockedCfgCopy respectively. + * + * Columns which are locked must specify a fixed width. They do NOT support a + * flex width. + * + * Configurations which are specified in this class will be available on any grid or + * tree which is using the lockable functionality. + */ +Ext.define('Ext.grid.Lockable', { + + requires: [ + 'Ext.grid.LockingView', + 'Ext.view.Table' + ], + + /** + * @cfg {Boolean} syncRowHeight Synchronize rowHeight between the normal and + * locked grid view. This is turned on by default. If your grid is guaranteed + * to have rows of all the same height, you should set this to false to + * optimize performance. + */ + syncRowHeight: true, + + /** + * @cfg {String} subGridXType The xtype of the subgrid to specify. If this is + * not specified lockable will determine the subgrid xtype to create by the + * following rule. Use the superclasses xtype if the superclass is NOT + * tablepanel, otherwise use the xtype itself. + */ + + /** + * @cfg {Object} lockedViewConfig A view configuration to be applied to the + * locked side of the grid. Any conflicting configurations between lockedViewConfig + * and viewConfig will be overwritten by the lockedViewConfig. + */ + + /** + * @cfg {Object} normalViewConfig A view configuration to be applied to the + * normal/unlocked side of the grid. Any conflicting configurations between normalViewConfig + * and viewConfig will be overwritten by the normalViewConfig. + */ + + headerCounter: 0, + + /** + * @cfg {Number} scrollDelta + * Number of pixels to scroll when scrolling the locked section with mousewheel. + */ + scrollDelta: 40, + + /** + * @cfg {Object} lockedGridConfig + * Any special configuration options for the locked part of the grid + */ + + /** + * @cfg {Object} normalGridConfig + * Any special configuration options for the normal part of the grid + */ + + // i8n text + // + unlockText: 'Unlock', + // + // + lockText: 'Lock', + // + + determineXTypeToCreate: function() { + var me = this, + typeToCreate, + xtypes, xtypesLn, xtype, superxtype; + + if (me.subGridXType) { + typeToCreate = me.subGridXType; + } else { + xtypes = this.getXTypes().split('/'); + xtypesLn = xtypes.length; + xtype = xtypes[xtypesLn - 1]; + superxtype = xtypes[xtypesLn - 2]; + + if (superxtype !== 'tablepanel') { + typeToCreate = superxtype; + } else { + typeToCreate = xtype; + } + } + + return typeToCreate; + }, + + // injectLockable will be invoked before initComponent's parent class implementation + // is called, so throughout this method this. are configurations + injectLockable: function() { + // ensure lockable is set to true in the TablePanel + this.lockable = true; + // Instruct the TablePanel it already has a view and not to create one. + // We are going to aggregate 2 copies of whatever TablePanel we are using + this.hasView = true; + + var me = this, + // If the OS does not show a space-taking scrollbar, the locked view can be overflow:auto + scrollLocked = Ext.getScrollbarSize().width === 0, + store = me.store = Ext.StoreManager.lookup(me.store), + // xtype of this class, 'treepanel' or 'gridpanel' + // (Note: this makes it a requirement that any subclass that wants to use lockable functionality needs to register an + // alias.) + xtype = me.determineXTypeToCreate(), + // share the selection model + selModel = me.getSelectionModel(), + lockedFeatures, + normalFeatures, + lockedPlugins, + normalPlugins, + lockedGrid, + normalGrid, + i, len, + columns, + lockedHeaderCt, + normalHeaderCt, + lockedView, + normalView, + listeners; + + lockedFeatures = me.constructFeatures(); + + // Clone any Features in the Array which are already instantiated + me.cloneFeatures(); + normalFeatures = me.constructFeatures(); + + lockedPlugins = me.constructPlugins(); + + // Clone any Plugins in the Array which are already instantiated + me.clonePlugins(); + normalPlugins = me.constructPlugins(); + + // The "shell" Panel which just acts as a Container for the two grids must not use the features and plugins + delete me.features; + delete me.plugins; + + // Each Feature must have a reference to its counterpart on the opposite side of the locking view + for (i = 0, len = (lockedFeatures ? lockedFeatures.length : 0); i < len; i++) { + lockedFeatures[i].lockingPartner = normalFeatures[i]; + normalFeatures[i].lockingPartner = lockedFeatures[i]; + } + + lockedGrid = Ext.apply({ + xtype: xtype, + store: store, + scrollerOwner: false, + // Lockable does NOT support animations for Tree + enableAnimations: false, + scroll: scrollLocked ? 'vertical' : false, + selModel: selModel, + border: false, + cls: Ext.baseCSSPrefix + 'grid-inner-locked', + isLayoutRoot: function() { + return false; + }, + features: lockedFeatures, + plugins: lockedPlugins + }, me.lockedGridConfig); + + normalGrid = Ext.apply({ + xtype: xtype, + store: store, + scrollerOwner: false, + enableAnimations: false, + selModel: selModel, + border: false, + isLayoutRoot: function() { + return false; + }, + features: normalFeatures, + plugins: normalPlugins + }, me.normalGridConfig); + + me.addCls(Ext.baseCSSPrefix + 'grid-locked'); + + // copy appropriate configurations to the respective + // aggregated tablepanel instances and then delete them + // from the master tablepanel. + Ext.copyTo(normalGrid, me, me.bothCfgCopy); + Ext.copyTo(lockedGrid, me, me.bothCfgCopy); + Ext.copyTo(normalGrid, me, me.normalCfgCopy); + Ext.copyTo(lockedGrid, me, me.lockedCfgCopy); + for (i = 0; i < me.normalCfgCopy.length; i++) { + delete me[me.normalCfgCopy[i]]; + } + for (i = 0; i < me.lockedCfgCopy.length; i++) { + delete me[me.lockedCfgCopy[i]]; + } + + me.addEvents( + /** + * @event lockcolumn + * Fires when a column is locked. + * @param {Ext.grid.Panel} this The gridpanel. + * @param {Ext.grid.column.Column} column The column being locked. + */ + 'lockcolumn', + + /** + * @event unlockcolumn + * Fires when a column is unlocked. + * @param {Ext.grid.Panel} this The gridpanel. + * @param {Ext.grid.column.Column} column The column being unlocked. + */ + 'unlockcolumn' + ); + + me.addStateEvents(['lockcolumn', 'unlockcolumn']); + + me.lockedHeights = []; + me.normalHeights = []; + + columns = me.processColumns(me.columns); + + lockedGrid.width = columns.lockedWidth + Ext.num(selModel.headerWidth, 0); + lockedGrid.columns = columns.locked; + normalGrid.columns = columns.normal; + + // normal grid should flex the rest of the width + normalGrid.flex = 1; + lockedGrid.viewConfig = me.lockedViewConfig || {}; + lockedGrid.viewConfig.loadingUseMsg = false; + normalGrid.viewConfig = me.normalViewConfig || {}; + + Ext.applyIf(lockedGrid.viewConfig, me.viewConfig); + Ext.applyIf(normalGrid.viewConfig, me.viewConfig); + + me.lockedGrid = Ext.ComponentManager.create(lockedGrid); + lockedView = me.lockedGrid.getView(); + + normalGrid.viewConfig.lockingPartner = lockedView; + me.normalGrid = Ext.ComponentManager.create(normalGrid); + normalView = me.normalGrid.getView(); + + me.view = new Ext.grid.LockingView({ + locked: me.lockedGrid, + normal: me.normalGrid, + panel: me + }); + + // Set up listeners for the locked view. If its SelModel ever scrolls it, the normal view must sync + listeners = { + scroll: { + fn: me.onLockedViewScroll, + element: 'el', + scope: me + } + }; + // If there are system scrollbars, we have to monitor the mousewheel and fake a scroll + if (!scrollLocked) { + listeners.mousewheel = { + fn: me.onLockedViewMouseWheel, + element: 'el', + scope: me + }; + } + if (me.syncRowHeight) { + listeners.refresh = me.onLockedViewRefresh; + listeners.itemupdate = me.onLockedViewItemUpdate; + listeners.scope = me; + } + lockedView.on(listeners); + + // Set up listeners for the normal view + listeners = { + scroll: { + fn: me.onNormalViewScroll, + element: 'el', + scope: me + }, + refresh: me.syncRowHeight ? me.onNormalViewRefresh : me.updateSpacer, + scope: me + }; + normalView.on(listeners); + + lockedHeaderCt = me.lockedGrid.headerCt; + normalHeaderCt = me.normalGrid.headerCt; + + lockedHeaderCt.lockedCt = true; + lockedHeaderCt.lockableInjected = true; + normalHeaderCt.lockableInjected = true; + + lockedHeaderCt.on({ + columnshow: me.onLockedHeaderShow, + columnhide: me.onLockedHeaderHide, + columnmove: me.onLockedHeaderMove, + sortchange: me.onLockedHeaderSortChange, + columnresize: me.onLockedHeaderResize, + scope: me + }); + + normalHeaderCt.on({ + columnmove: me.onNormalHeaderMove, + sortchange: me.onNormalHeaderSortChange, + scope: me + }); + + me.modifyHeaderCt(); + me.items = [me.lockedGrid, me.normalGrid]; + + me.relayHeaderCtEvents(lockedHeaderCt); + me.relayHeaderCtEvents(normalHeaderCt); + + me.layout = { + type: 'hbox', + align: 'stretch' + }; + }, + + processColumns: function(columns){ + // split apart normal and lockedWidths + var i = 0, + len = columns.length, + lockedWidth = 0, + lockedHeaders = [], + normalHeaders = [], + column; + + for (; i < len; ++i) { + column = columns[i]; + // MUST clone the column config because we mutate it, and we must not mutate passed in config objects in case they are re-used + // eg, in an extend-to-configure scenario. + if (!column.isComponent) { + column = Ext.apply({}, columns[i]); + } + + // mark the column as processed so that the locked attribute does not + // trigger trying to aggregate the columns again. + column.processed = true; + if (column.locked) { + if (column.flex) { + Ext.Error.raise("Columns which are locked do NOT support a flex width. You must set a width on the " + columns[i].text + "column."); + } + if (!column.hidden) { + lockedWidth += column.width || Ext.grid.header.Container.prototype.defaultWidth; + } + lockedHeaders.push(column); + } else { + normalHeaders.push(column); + } + if (!column.headerId) { + column.headerId = (column.initialConfig || column).id || ('L' + (++this.headerCounter)); + } + } + return { + lockedWidth: lockedWidth, + locked: { + items: lockedHeaders, + itemId: 'lockedHeaderCt', + stretchMaxPartner: '^^>>#normalHeaderCt' + }, + normal: { + items: normalHeaders, + itemId: 'normalHeaderCt', + stretchMaxPartner: '^^>>#lockedHeaderCt' + } + }; + }, + + /** + * @private + * Listen for mousewheel events on the locked section which does not scroll. + * Scroll it in response, and the other section will automatically sync. + */ + onLockedViewMouseWheel: function(e) { + var me = this, + scrollDelta = -me.scrollDelta, + deltaY = scrollDelta * e.getWheelDeltas().y, + vertScrollerEl = me.lockedGrid.getView().el.dom, + verticalCanScrollDown, verticalCanScrollUp; + + if (vertScrollerEl) { + verticalCanScrollDown = vertScrollerEl.scrollTop !== vertScrollerEl.scrollHeight - vertScrollerEl.clientHeight; + verticalCanScrollUp = vertScrollerEl.scrollTop !== 0; + } + + if ((deltaY < 0 && verticalCanScrollUp) || (deltaY > 0 && verticalCanScrollDown)) { + e.stopEvent(); + + // Inhibit processing of any scroll events we *may* cause here. + // Some OSs do not fire a scroll event when we set the scrollTop of an overflow:hidden element, + // so we invoke the scroll handler programatically below. + me.scrolling = true; + vertScrollerEl.scrollTop += deltaY; + me.normalGrid.getView().el.dom.scrollTop = vertScrollerEl.scrollTop; + me.scrolling = false; + + // Invoke the scroll event handler programatically to sync everything. + me.onNormalViewScroll(); + } + }, + + onLockedViewScroll: function() { + var me = this, + lockedView = me.lockedGrid.getView(), + normalView = me.normalGrid.getView(), + normalTable, + lockedTable; + + // Set a flag so that the scroll even doesn't bounce back when we set the normal view's scroll position + if (!me.scrolling) { + me.scrolling = true; + normalView.el.dom.scrollTop = lockedView.el.dom.scrollTop; + + // For buffered views, the absolute position is important as well as scrollTop + if (me.store.buffered) { + lockedTable = lockedView.el.child('table', true); + normalTable = normalView.el.child('table', true); + lockedTable.style.position = 'absolute'; + } + me.scrolling = false; + } + }, + + onNormalViewScroll: function() { + var me = this, + lockedView = me.lockedGrid.getView(), + normalView = me.normalGrid.getView(), + normalTable, + lockedTable; + + // Set a flag so that the scroll even doesn't bounce back when we set the locked view's scroll position + if (!me.scrolling) { + me.scrolling = true; + lockedView.el.dom.scrollTop = normalView.el.dom.scrollTop; + + // For buffered views, the absolute position is important as well as scrollTop + if (me.store.buffered) { + lockedTable = lockedView.el.child('table', true); + normalTable = normalView.el.child('table', true); + lockedTable.style.position = 'absolute'; + lockedTable.style.top = normalTable.style.top; + } + me.scrolling = false; + } + }, + + // trigger a pseudo refresh on the normal side + onLockedHeaderMove: function() { + if (this.syncRowHeight) { + this.onNormalViewRefresh(); + } + }, + + // trigger a pseudo refresh on the locked side + onNormalHeaderMove: function() { + if (this.syncRowHeight) { + this.onLockedViewRefresh(); + } + }, + + // Create a spacer in lockedsection and store a reference. + // This is to allow the locked section to scroll past the bottom to + // take the mormal section's horizontal scrollbar into account + // TODO: Should destroy before refreshing content + updateSpacer: function() { + var me = this, + // This affects scrolling all the way to the bottom of a locked grid + // additional test, sort a column and make sure it synchronizes + lockedViewEl = me.lockedGrid.getView().el, + normalViewEl = me.normalGrid.getView().el.dom, + spacerId = lockedViewEl.dom.id + '-spacer', + spacerHeight = (normalViewEl.offsetHeight - normalViewEl.clientHeight) + 'px'; + + me.spacerEl = Ext.getDom(spacerId); + if (me.spacerEl) { + me.spacerEl.style.height = spacerHeight; + } else { + Ext.core.DomHelper.append(lockedViewEl, { + id: spacerId, + style: 'height: ' + spacerHeight + }); + } + }, + + // cache the heights of all locked rows and sync rowheights + onLockedViewRefresh: function() { + + // Only bother if there are some columns in the normal grid to sync + if (this.normalGrid.headerCt.getGridColumns().length) { + var me = this, + view = me.lockedGrid.getView(), + el = view.el, + rowEls = el.query(view.getItemSelector()), + ln = rowEls.length, + i = 0; + + // reset heights each time. + me.lockedHeights = []; + + for (; i < ln; i++) { + me.lockedHeights[i] = rowEls[i].offsetHeight; + } + me.syncRowHeights(); + me.updateSpacer(); + } + }, + + // cache the heights of all normal rows and sync rowheights + onNormalViewRefresh: function() { + + // Only bother if there are some columns in the locked grid to sync + if (this.lockedGrid.headerCt.getGridColumns().length) { + var me = this, + view = me.normalGrid.getView(), + el = view.el, + rowEls = el.query(view.getItemSelector()), + ln = rowEls.length, + i = 0; + + // reset heights each time. + me.normalHeights = []; + + for (; i < ln; i++) { + me.normalHeights[i] = rowEls[i].offsetHeight; + } + me.syncRowHeights(); + me.updateSpacer(); + } + }, + + // rows can get bigger/smaller + onLockedViewItemUpdate: function(record, index, node) { + + // Only bother if there are some columns in the normal grid to sync + if (this.normalGrid.headerCt.getGridColumns().length) { + this.lockedHeights[index] = node.offsetHeight; + this.syncRowHeights(); + } + }, + + // rows can get bigger/smaller + onNormalViewItemUpdate: function(record, index, node) { + + // Only bother if there are some columns in the locked grid to sync + if (this.lockedGrid.headerCt.getGridColumns().length) { + this.normalHeights[index] = node.offsetHeight; + this.syncRowHeights(); + } + }, + + /** + * Synchronizes the row heights between the locked and non locked portion of the grid for each + * row. If one row is smaller than the other, the height will be increased to match the larger one. + */ + syncRowHeights: function() { + var me = this, + lockedHeights = me.lockedHeights, + normalHeights = me.normalHeights, + ln = lockedHeights.length, + i = 0, + lockedView, normalView, + lockedRowEls, normalRowEls, + scrollTop; + + // ensure there are an equal num of locked and normal + // rows before synchronization + if (lockedHeights.length && normalHeights.length) { + lockedView = me.lockedGrid.getView(); + normalView = me.normalGrid.getView(); + lockedRowEls = lockedView.el.query(lockedView.getItemSelector()); + normalRowEls = normalView.el.query(normalView.getItemSelector()); + + // loop thru all of the heights and sync to the other side + for (; i < ln; i++) { + // ensure both are numbers + if (!isNaN(lockedHeights[i]) && !isNaN(normalHeights[i])) { + if (lockedHeights[i] > normalHeights[i]) { + Ext.fly(normalRowEls[i]).setHeight(lockedHeights[i]); + } else if (lockedHeights[i] < normalHeights[i]) { + Ext.fly(lockedRowEls[i]).setHeight(normalHeights[i]); + } + } + } + + // Synchronize the scrollTop positions of the two views + scrollTop = normalView.el.dom.scrollTop; + normalView.el.dom.scrollTop = scrollTop; + lockedView.el.dom.scrollTop = scrollTop; + + // reset the heights + me.lockedHeights = []; + me.normalHeights = []; + } + }, + + // inject Lock and Unlock text + modifyHeaderCt: function() { + var me = this; + me.lockedGrid.headerCt.getMenuItems = me.getMenuItems(me.lockedGrid.headerCt.getMenuItems, true); + me.normalGrid.headerCt.getMenuItems = me.getMenuItems(me.normalGrid.headerCt.getMenuItems, false); + }, + + onUnlockMenuClick: function() { + this.unlock(); + }, + + onLockMenuClick: function() { + this.lock(); + }, + + getMenuItems: function(getMenuItems, locked) { + var me = this, + unlockText = me.unlockText, + lockText = me.lockText, + unlockCls = Ext.baseCSSPrefix + 'hmenu-unlock', + lockCls = Ext.baseCSSPrefix + 'hmenu-lock', + unlockHandler = Ext.Function.bind(me.onUnlockMenuClick, me), + lockHandler = Ext.Function.bind(me.onLockMenuClick, me); + + // runs in the scope of headerCt + return function() { + + // We cannot use the method from HeaderContainer's prototype here + // because other plugins or features may already have injected an implementation + var o = getMenuItems.call(this); + o.push('-', { + cls: unlockCls, + text: unlockText, + handler: unlockHandler, + disabled: !locked + }); + o.push({ + cls: lockCls, + text: lockText, + handler: lockHandler, + disabled: locked + }); + return o; + }; + }, + + // going from unlocked section to locked + /** + * Locks the activeHeader as determined by which menu is open OR a header + * as specified. + * @param {Ext.grid.column.Column} [header] Header to unlock from the locked section. + * Defaults to the header which has the menu open currently. + * @param {Number} [toIdx] The index to move the unlocked header to. + * Defaults to appending as the last item. + * @private + */ + lock: function(activeHd, toIdx) { + var me = this, + normalGrid = me.normalGrid, + lockedGrid = me.lockedGrid, + normalHCt = normalGrid.headerCt, + lockedHCt = lockedGrid.headerCt; + + activeHd = activeHd || normalHCt.getMenu().activeHeader; + + // if column was previously flexed, get/set current width + // and remove the flex + if (activeHd.flex) { + activeHd.width = activeHd.getWidth(); + delete activeHd.flex; + } + + Ext.suspendLayouts(); + activeHd.ownerCt.remove(activeHd, false); + activeHd.locked = true; + if (Ext.isDefined(toIdx)) { + lockedHCt.insert(toIdx, activeHd); + } else { + lockedHCt.add(activeHd); + } + me.syncLockedSection(); + Ext.resumeLayouts(true); + me.updateSpacer(); + + me.fireEvent('lockcolumn', me, activeHd); + }, + + syncLockedSection: function() { + var me = this; + me.syncLockedWidth(); + me.lockedGrid.getView().refresh(); + me.normalGrid.getView().refresh(); + }, + + // adjust the locked section to the width of its respective + // headerCt + syncLockedWidth: function() { + var me = this, + locked = me.lockedGrid, + width = locked.headerCt.getFullWidth(true); + + Ext.suspendLayouts(); + if (width > 0) { + locked.setWidth(width); + locked.show(); + } else { + locked.hide(); + } + Ext.resumeLayouts(true); + + return width > 0; + }, + + onLockedHeaderResize: function() { + this.syncLockedWidth(); + }, + + onLockedHeaderHide: function() { + this.syncLockedWidth(); + }, + + onLockedHeaderShow: function() { + this.syncLockedWidth(); + }, + + onLockedHeaderSortChange: function(headerCt, header, sortState) { + if (sortState) { + // no real header, and silence the event so we dont get into an + // infinite loop + this.normalGrid.headerCt.clearOtherSortStates(null, true); + } + }, + + onNormalHeaderSortChange: function(headerCt, header, sortState) { + if (sortState) { + // no real header, and silence the event so we dont get into an + // infinite loop + this.lockedGrid.headerCt.clearOtherSortStates(null, true); + } + }, + + // going from locked section to unlocked + /** + * Unlocks the activeHeader as determined by which menu is open OR a header + * as specified. + * @param {Ext.grid.column.Column} [header] Header to unlock from the locked section. + * Defaults to the header which has the menu open currently. + * @param {Number} [toIdx=0] The index to move the unlocked header to. + * @private + */ + unlock: function(activeHd, toIdx) { + var me = this, + normalGrid = me.normalGrid, + lockedGrid = me.lockedGrid, + normalHCt = normalGrid.headerCt, + lockedHCt = lockedGrid.headerCt, + refreshLocked = false; + + if (!Ext.isDefined(toIdx)) { + toIdx = 0; + } + activeHd = activeHd || lockedHCt.getMenu().activeHeader; + + Ext.suspendLayouts(); + activeHd.ownerCt.remove(activeHd, false); + if (me.syncLockedWidth()) { + refreshLocked = true; + } + activeHd.locked = false; + + // Refresh the locked section first in case it was empty + normalHCt.insert(toIdx, activeHd); + me.normalGrid.getView().refresh(); + + if (refreshLocked) { + me.lockedGrid.getView().refresh(); + } + Ext.resumeLayouts(true); + + me.fireEvent('unlockcolumn', me, activeHd); + }, + + applyColumnsState: function (columns) { + var me = this, + lockedGrid = me.lockedGrid, + lockedHeaderCt = lockedGrid.headerCt, + normalHeaderCt = me.normalGrid.headerCt, + lockedCols = Ext.Array.toMap(lockedHeaderCt.items, 'headerId'), + normalCols = Ext.Array.toMap(normalHeaderCt.items, 'headerId'), + locked = [], + normal = [], + lockedWidth = 1, + length = columns.length, + i, existing, + lockedDefault, + col; + + for (i = 0; i < length; i++) { + col = columns[i]; + + lockedDefault = lockedCols[col.id]; + existing = lockedDefault || normalCols[col.id]; + + if (existing) { + if (existing.applyColumnState) { + existing.applyColumnState(col); + } + if (existing.locked === undefined) { + existing.locked = !!lockedDefault; + } + if (existing.locked) { + locked.push(existing); + if (!existing.hidden && typeof existing.width == 'number') { + lockedWidth += existing.width; + } + } else { + normal.push(existing); + } + } + } + + // state and config must have the same columns (compare counts for now): + if (locked.length + normal.length == lockedHeaderCt.items.getCount() + normalHeaderCt.items.getCount()) { + lockedHeaderCt.removeAll(false); + normalHeaderCt.removeAll(false); + + lockedHeaderCt.add(locked); + normalHeaderCt.add(normal); + + lockedGrid.setWidth(lockedWidth); + } + }, + + getColumnsState: function () { + var me = this, + locked = me.lockedGrid.headerCt.getColumnsState(), + normal = me.normalGrid.headerCt.getColumnsState(); + + return locked.concat(normal); + }, + + // we want to totally override the reconfigure behaviour here, since we're creating 2 sub-grids + reconfigureLockable: function(store, columns) { + var me = this, + lockedGrid = me.lockedGrid, + normalGrid = me.normalGrid; + + if (columns) { + Ext.suspendLayouts(); + lockedGrid.headerCt.removeAll(); + normalGrid.headerCt.removeAll(); + + columns = me.processColumns(columns); + lockedGrid.setWidth(columns.lockedWidth); + lockedGrid.headerCt.add(columns.locked.items); + normalGrid.headerCt.add(columns.normal.items); + Ext.resumeLayouts(true); + } + + if (store) { + store = Ext.data.StoreManager.lookup(store); + me.store = store; + lockedGrid.bindStore(store); + normalGrid.bindStore(store); + } else { + lockedGrid.getView().refresh(); + normalGrid.getView().refresh(); + } + }, + + /** + * Clones items in the features array if they are instantiated Features. If an item + * is just a feature config, it leaves it alone. + * + * This is so that features can be replicated on both sides of the LockingView + * + */ + cloneFeatures: function() { + var me = this, + features = me.features, + feature, + i = 0, len; + + if (features) { + len = features.length; + for (; i < len; i++) { + feature = features[i]; + if (feature.isFeature) { + features[i] = feature.clone(); + } + } + } + }, + + /** + * Clones items in the plugins array if they are instantiated Plugins. If an item + * is just a plugin config, it leaves it alone. + * + * This is so that plugins can be replicated on both sides of the LockingView + * + */ + clonePlugins: function() { + var me = this, + plugins = me.plugins, + plugin, + i = 0, len; + + if (plugins) { + len = plugins.length; + for (; i < len; i++) { + plugin = plugins[i]; + if (typeof plugin.init === 'function') { + plugins[i] = plugin.clone(); + } + } + } + } +}, function() { + this.borrow(Ext.view.Table, ['constructFeatures']); + this.borrow(Ext.AbstractComponent, ['constructPlugins', 'constructPlugin']); +}); + +/** + * Implements infinite scrolling of a grid, allowing users can scroll + * through thousands of records without the performance penalties of + * renderering all the records on screen at once. The grid should be + * bound to a *buffered* store with a pageSize specified. + * + * The number of rows rendered outside the visible area, and the + * buffering of pages of data from the remote server for immediate + * rendering upon scroll can be controlled by configuring the + * {@link Ext.grid.PagingScroller #verticalScroller}. + * + * You can tell it to create a larger table to provide more scrolling + * before a refresh is needed, and also to keep more pages of records + * in memory for faster refreshing when scrolling. + * + * var myStore = Ext.create('Ext.data.Store', { + * // ... + * buffered: true, + * pageSize: 100, + * // ... + * }); + * + * var grid = Ext.create('Ext.grid.Panel', { + * // ... + * autoLoad: true, + * verticalScroller: { + * trailingBufferZone: 200, // Keep 200 records buffered in memory behind scroll + * leadingBufferZone: 5000 // Keep 5000 records buffered in memory ahead of scroll + * }, + * // ... + * }); + * + * ## Implementation notes + * + * This class monitors scrolling of the {@link Ext.view.Table + * TableView} within a {@link Ext.grid.Panel GridPanel} which is using + * a buffered store to only cache and render a small section of a very + * large dataset. + * + * **NB!** The GridPanel will instantiate this to perform monitoring, + * this class should never be instantiated by user code. Always use the + * {@link Ext.panel.Table#verticalScroller verticalScroller} config. + * + */ +Ext.define('Ext.grid.PagingScroller', { + + /** + * @cfg + * @deprecated This config is now ignored. + */ + percentageFromEdge: 0.35, + + /** + * @cfg + * The zone which causes a refresh of the rendered viewport. As soon as the edge + * of the rendered grid is this number of rows from the edge of the viewport, the view is moved. + */ + numFromEdge: 2, + + /** + * @cfg + * The number of extra rows to render on the trailing side of scrolling + * **outside the {@link #numFromEdge}** buffer as scrolling proceeds. + */ + trailingBufferZone: 5, + + /** + * @cfg + * The number of extra rows to render on the leading side of scrolling + * **outside the {@link #numFromEdge}** buffer as scrolling proceeds. + */ + leadingBufferZone: 15, + + /** + * @cfg + * This is the time in milliseconds to buffer load requests when scrolling the PagingScrollbar. + */ + scrollToLoadBuffer: 200, + + // private. Initial value of zero. + viewSize: 0, + // private. Start at default value + rowHeight: 21, + // private. Table extent at startup time + tableStart: 0, + tableEnd: 0, + + constructor: function(config) { + var me = this; + me.variableRowHeight = config.variableRowHeight; + me.bindView(config.view); + Ext.apply(me, config); + me.callParent(arguments); + }, + + bindView: function(view) { + var me = this, + viewListeners = { + scroll: { + fn: me.onViewScroll, + element: 'el', + scope: me + }, + render: me.onViewRender, + resize: me.onViewResize, + boxready: { + fn: me.onViewResize, + scope: me, + single: true + }, + + // If there are variable row heights, then in beforeRefresh, we have to find a common + // row so that we can synchronize the table's top position after the refresh. + // Also flag whether the grid view has focus so that it can be refocused after refresh. + beforerefresh: me.beforeViewRefresh, + + refresh: me.onViewRefresh, + scope: me + }, + storeListeners = { + guaranteedrange: me.onGuaranteedRange, + scope: me + }, + gridListeners = { + reconfigure: me.onGridReconfigure, + scope: me + }, partner; + + // If we need unbinding... + if (me.view) { + if (me.view.el) { + me.view.el.un('scroll', me.onViewScroll, me); // un does not understand the element options + } + + partner = view.lockingPartner; + if (partner) { + partner.un('refresh', me.onLockRefresh, me); + } + + me.view.un(viewListeners); + me.store.un(storeListeners); + if (me.grid) { + me.grid.un(gridListeners); + } + delete me.view.refreshSize; // Remove the injected refreshSize implementation + } + + me.view = view; + me.grid = me.view.up('tablepanel'); + me.store = view.store; + if (view.rendered) { + me.viewSize = me.store.viewSize = Math.ceil(view.getHeight() / me.rowHeight) + me.trailingBufferZone + (me.numFromEdge * 2) + me.leadingBufferZone; + } + + partner = view.lockingPartner; + if (partner) { + partner.on('refresh', me.onLockRefresh, me); + } + + me.view.mon(me.store.pageMap, { + scope: me, + clear: me.onCacheClear + }); + + // During scrolling we do not need to refresh the height - the Grid height must be set by config or layout in order to create a scrollable + // table just larger than that, so removing the layout call improves efficiency and removes the flicker when the + // HeaderContainer is reset to scrollLeft:0, and then resynced on the very next "scroll" event. + me.view.refreshSize = Ext.Function.createInterceptor(me.view.refreshSize, me.beforeViewrefreshSize, me); + + /** + * @property {Number} position + * Current pixel scroll position of the associated {@link Ext.view.Table View}. + */ + me.position = 0; + + // We are created in View constructor. There won't be an ownerCt at this time. + if (me.grid) { + me.grid.on(gridListeners); + } else { + me.view.on({ + added: function() { + me.grid = me.view.up('tablepanel'); + me.grid.on(gridListeners); + }, + single: true + }); + } + + me.view.on(me.viewListeners = viewListeners); + me.store.on(storeListeners); + }, + + onCacheClear: function() { + var me = this; + + // Do not do anything if view is not rendered, or if the reason for cache clearing is store destruction + if (me.view.rendered && !me.store.isDestroyed) { + // Temporarily disable scroll monitoring until the scroll event caused by any following *change* of scrollTop has fired. + // Otherwise it will attempt to process a scroll on a stale view + me.ignoreNextScrollEvent = me.view.el.dom.scrollTop !== 0; + + me.view.el.dom.scrollTop = 0; + delete me.lastScrollDirection; + delete me.scrollOffset; + delete me.scrollProportion; + } + }, + + onGridReconfigure: function (grid) { + this.bindView(grid.view); + }, + + // Ensure that the stretcher element is inserted into the View as the first element. + onViewRender: function() { + var me = this, + view = me.view, + el = me.view.el, + stretcher; + + me.stretcher = me.createStretcher(view); + + view = view.lockingPartner; + if (view) { + stretcher = me.stretcher; + me.stretcher = new Ext.CompositeElement(stretcher); + me.stretcher.add(me.createStretcher(view)); + } + }, + + createStretcher: function(view) { + var el = view.el; + el.setStyle('position', 'relative'); + + return el.createChild({ + style:{ + position: 'absolute', + width: '1px', + height: 0, + top: 0, + left: 0 + } + }, el.dom.firstChild); + }, + + onViewResize: function(view, width, height) { + var me = this, + newViewSize; + + newViewSize = Math.ceil(height / me.rowHeight) + me.trailingBufferZone + (me.numFromEdge * 2) + me.leadingBufferZone; + if (newViewSize > me.viewSize) { + me.viewSize = me.store.viewSize = newViewSize; + me.handleViewScroll(me.lastScrollDirection || 1); + } + }, + + // Used for variable row heights. Try to find the offset from scrollTop of a common row + beforeViewRefresh: function() { + var me = this, + view = me.view, + rows, + direction; + + // Refreshing can cause loss of focus. + me.focusOnRefresh = Ext.Element.getActiveElement === view.el.dom; + + // Only need all this is variableRowHeight + if (me.variableRowHeight) { + direction = me.lastScrollDirection; + me.commonRecordIndex = undefined; + // If we are refreshing in response to a scroll, + // And we know where the previous start was, + // and we're not teleporting out of visible range + // and the view is not empty + if (direction && (me.previousStart !== undefined) && (me.scrollProportion === undefined) && (rows = view.getNodes()).length) { + + // We have scrolled downwards + if (direction === 1) { + + // If the ranges overlap, we are going to be able to position the table exactly + if (me.tableStart <= me.previousEnd) { + me.commonRecordIndex = rows.length - 1; + + } + } + // We have scrolled upwards + else if (direction === -1) { + + // If the ranges overlap, we are going to be able to position the table exactly + if (me.tableEnd >= me.previousStart) { + me.commonRecordIndex = 0; + } + } + // Cache the old offset of the common row from the scrollTop + me.scrollOffset = -view.el.getOffsetsTo(rows[me.commonRecordIndex])[1]; + + // In the new table the common row is at a different index + me.commonRecordIndex -= (me.tableStart - me.previousStart); + } else { + me.scrollOffset = undefined; + } + } + }, + + onLockRefresh: function(view) { + view.table.dom.style.position = 'absolute'; + }, + + // Used for variable row heights. Try to find the offset from scrollTop of a common row + // Ensure, upon each refresh, that the stretcher element is the correct height + onViewRefresh: function() { + var me = this, + store = me.store, + newScrollHeight, + view = me.view, + viewEl = view.el, + viewDom = viewEl.dom, + rows, + newScrollOffset, + scrollDelta, + table = view.table.dom, + tableTop, + scrollTop; + + // Refresh causes loss of focus + if (me.focusOnRefresh) { + viewEl.focus(); + me.focusOnRefresh = false; + } + + // Scroll events caused by processing in here must be ignored, so disable for the duration + me.disabled = true; + + // No scroll monitoring is needed if + // All data is in view OR + // Store is filtered locally. + // - scrolling a locally filtered page is obv a local operation within the context of a huge set of pages + // so local scrolling is appropriate. + if (store.getCount() === store.getTotalCount() || (store.isFiltered() && !store.remoteFilter)) { + me.stretcher.setHeight(0); + me.position = viewDom.scrollTop = 0; + + // Chrome's scrolling went crazy upon zeroing of the stretcher, and left the view's scrollTop stuck at -15 + // This is the only thing that fixes that + me.setTablePosition('absolute'); + + // We remain disabled now because no scrolling is needed - we have the full dataset in the Store + return; + } + + me.stretcher.setHeight(newScrollHeight = me.getScrollHeight()); + + scrollTop = viewDom.scrollTop; + + // Flag to the refreshSize interceptor that regular refreshSize postprocessing should be vetoed. + me.isScrollRefresh = (scrollTop > 0); + + // If we have had to calculate the store position from the pure scroll bar position, + // then we must calculate the table's vertical position from the scrollProportion + if (me.scrollProportion !== undefined) { + me.setTablePosition('absolute'); + me.setTableTop((me.scrollProportion ? (newScrollHeight * me.scrollProportion) - (table.offsetHeight * me.scrollProportion) : 0) + 'px'); + } else { + me.setTablePosition('absolute'); + me.setTableTop((tableTop = (me.tableStart||0) * me.rowHeight) + 'px'); + + // ScrollOffset to a common row was calculated in beforeViewRefresh, so we can synch table position with how it was before + if (me.scrollOffset) { + rows = view.getNodes(); + newScrollOffset = -viewEl.getOffsetsTo(rows[me.commonRecordIndex])[1]; + scrollDelta = newScrollOffset - me.scrollOffset; + me.position = (viewDom.scrollTop += scrollDelta); + } + + // If the table is not fully in view view, scroll to where it is in view. + // This will happen when the page goes out of view unexpectedly, outside the + // control of the PagingScroller. For example, a refresh caused by a remote sort or filter reverting + // back to page 1. + // Note that with buffered Stores, only remote sorting is allowed, otherwise the locally + // sorted page will be out of order with the whole dataset. + else if ((tableTop > scrollTop) || ((tableTop + table.offsetHeight) < scrollTop + viewDom.clientHeight)) { + me.lastScrollDirection = -1; + me.position = viewDom.scrollTop = tableTop; + } + } + + // Re-enable upon function exit + me.disabled = false; + }, + + setTablePosition: function(position) { + this.setViewTableStyle(this.view, 'position', position); + }, + + setTableTop: function(top){ + this.setViewTableStyle(this.view, 'top', top); + }, + + setViewTableStyle: function(view, prop, value) { + view.el.child('table', true).style[prop] = value; + view = view.lockingPartner; + + if (view) { + view.el.child('table', true).style[prop] = value; + } + }, + + beforeViewrefreshSize: function() { + // Veto the refreshSize if the refresh is due to a scroll. + if (this.isScrollRefresh) { + // If we're vetoing refreshSize, attach the table DOM to the View's Flyweight. + this.view.table.attach(this.view.el.child('table', true)); + return (this.isScrollRefresh = false); + } + }, + + onGuaranteedRange: function(range, start, end) { + var me = this, + ds = me.store; + + // this should never happen + if (range.length && me.visibleStart < range[0].index) { + return; + } + + // Cache last table position in dataset so that if we are using variableRowHeight, + // we can attempt to locate a common row to align the table on. + me.previousStart = me.tableStart; + me.previousEnd = me.tableEnd; + + me.tableStart = start; + me.tableEnd = end; + ds.loadRecords(range, { + start: start + }); + }, + + onViewScroll: function(e, t) { + var me = this, + view = me.view, + lastPosition = me.position; + + me.position = view.el.dom.scrollTop; + + // Flag set when the scrollTop is programatically set to zero upon cache clear. + // We must not attempt to process that as a scroll event. + if (me.ignoreNextScrollEvent) { + me.ignoreNextScrollEvent = false; + return; + } + + // Only check for nearing the edge if we are enabled. + // If there is no paging to be done (Store's dataset is all in memory) we will be disabled. + if (!me.disabled) { + me.lastScrollDirection = me.position > lastPosition ? 1 : -1; + // Check the position so we ignore horizontal scrolling + if (lastPosition !== me.position) { + me.handleViewScroll(me.lastScrollDirection); + } + } + }, + + handleViewScroll: function(direction) { + var me = this, + store = me.store, + view = me.view, + viewSize = me.viewSize, + totalCount = store.getTotalCount(), + highestStartPoint = totalCount - viewSize, + visibleStart = me.getFirstVisibleRowIndex(), + visibleEnd = me.getLastVisibleRowIndex(), + el = view.el.dom, + requestStart, + requestEnd; + + // Only process if the total rows is larger than the visible page size + if (totalCount >= viewSize) { + + // This is only set if we are using variable row height, and the thumb is dragged so that + // There are no remaining visible rows to vertically anchor the new table to. + // In this case we use the scrollProprtion to anchor the table to the correct relative + // position on the vertical axis. + me.scrollProportion = undefined; + + // We're scrolling up + if (direction == -1) { + + // If table starts at record zero, we have nothing to do + if (me.tableStart) { + if (visibleStart !== undefined) { + if (visibleStart < (me.tableStart + me.numFromEdge)) { + requestStart = Math.max(0, visibleEnd + me.trailingBufferZone - viewSize); + } + } + + // The only way we can end up without a visible start is if, in variableRowHeight mode, the user drags + // the thumb up out of the visible range. In this case, we have to estimate the start row index + else { + // If we have no visible rows to orientate with, then use the scroll proportion + me.scrollProportion = el.scrollTop / (el.scrollHeight - el.clientHeight); + requestStart = Math.max(0, totalCount * me.scrollProportion - (viewSize / 2) - me.numFromEdge - ((me.leadingBufferZone + me.trailingBufferZone) / 2)); + } + } + } + // We're scrolling down + else { + if (visibleStart !== undefined) { + if (visibleEnd > (me.tableEnd - me.numFromEdge)) { + requestStart = Math.max(0, visibleStart - me.trailingBufferZone); + } + } + + // The only way we can end up without a visible end is if, in variableRowHeight mode, the user drags + // the thumb down out of the visible range. In this case, we have to estimate the start row index + else { + // If we have no visible rows to orientate with, then use the scroll proportion + me.scrollProportion = el.scrollTop / (el.scrollHeight - el.clientHeight); + requestStart = totalCount * me.scrollProportion - (viewSize / 2) - me.numFromEdge - ((me.leadingBufferZone + me.trailingBufferZone) / 2); + } + } + + // We scrolled close to the edge and the Store needs reloading + if (requestStart !== undefined) { + // The calculation walked off the end; Request the highest possible chunk which starts on an even row count (Because of row striping) + if (requestStart > highestStartPoint) { + requestStart = highestStartPoint & ~1; + requestEnd = totalCount - 1; + } + // Make sure first row is even to ensure correct even/odd row striping + else { + requestStart = requestStart & ~1; + requestEnd = requestStart + viewSize - 1; + } + + // If range is satsfied within the prefetch buffer, then just draw it from the prefetch buffer + if (store.rangeCached(requestStart, requestEnd)) { + me.cancelLoad(); + store.guaranteeRange(requestStart, requestEnd); + } + + // Required range is not in the prefetch buffer. Ask the store to prefetch it. + // We will recieve a guaranteedrange event when that is done. + else { + me.attemptLoad(requestStart, requestEnd); + } + } + } + }, + + getFirstVisibleRowIndex: function() { + var me = this, + view = me.view, + scrollTop = view.el.dom.scrollTop, + rows, + count, + i, + rowBottom; + + if (me.variableRowHeight) { + rows = view.getNodes(); + count = rows.length; + if (!count) { + return; + } + rowBottom = Ext.fly(rows[0]).getOffsetsTo(view.el)[1]; + for (i = 0; i < count; i++) { + rowBottom += rows[i].offsetHeight; + + // Searching for the first visible row, and off the bottom of the clientArea, then there's no visible first row! + if (rowBottom > view.el.dom.clientHeight) { + return; + } + + // Return the index *within the total dataset* of the first visible row + // We cannot use the loop index to offset from the table's start index because of possible intervening group headers. + if (rowBottom > 0) { + return view.getRecord(rows[i]).index; + } + } + } else { + return Math.floor(scrollTop / me.rowHeight); + } + }, + + getLastVisibleRowIndex: function() { + var me = this, + store = me.store, + view = me.view, + clientHeight = view.el.dom.clientHeight, + rows, + count, + i, + rowTop; + + if (me.variableRowHeight) { + rows = view.getNodes(); + if (!rows.length) { + return; + } + count = store.getCount() - 1; + rowTop = Ext.fly(rows[count]).getOffsetsTo(view.el)[1] + rows[count].offsetHeight; + for (i = count; i >= 0; i--) { + rowTop -= rows[i].offsetHeight; + + // Searching for the last visible row, and off the top of the clientArea, then there's no visible last row! + if (rowTop < 0) { + return; + } + + // Return the index *within the total dataset* of the last visible row. + // We cannot use the loop index to offset from the table's start index because of possible intervening group headers. + if (rowTop < clientHeight) { + return view.getRecord(rows[i]).index; + } + } + } else { + return me.getFirstVisibleRowIndex() + Math.ceil(clientHeight / me.rowHeight) + 1; + } + }, + + getScrollHeight: function() { + var me = this, + view = me.view, + table, + firstRow, + store = me.store, + deltaHeight = 0, + doCalcHeight = !me.hasOwnProperty('rowHeight'); + + if (me.variableRowHeight) { + table = me.view.table.dom; + if (doCalcHeight) { + me.initialTableHeight = table.offsetHeight; + me.rowHeight = me.initialTableHeight / me.store.getCount(); + } else { + deltaHeight = table.offsetHeight - me.initialTableHeight; + + // Store size has been bumped because of odd end row. + if (store.getCount() > me.viewSize) { + deltaHeight -= me.rowHeight; + } + } + } else if (doCalcHeight) { + firstRow = view.el.down(view.getItemSelector()); + if (firstRow) { + me.rowHeight = firstRow.getHeight(false, true); + } + } + + return Math.floor(store.getTotalCount() * me.rowHeight) + deltaHeight; + }, + + attemptLoad: function(start, end) { + var me = this; + if (me.scrollToLoadBuffer) { + if (!me.loadTask) { + me.loadTask = new Ext.util.DelayedTask(me.doAttemptLoad, me, []); + } + me.loadTask.delay(me.scrollToLoadBuffer, me.doAttemptLoad, me, [start, end]); + } else { + me.store.guaranteeRange(start, end); + } + }, + + cancelLoad: function() { + if (this.loadTask) { + this.loadTask.cancel(); + } + }, + + doAttemptLoad: function(start, end) { + this.store.guaranteeRange(start, end); + }, + + destroy: function() { + var me = this, + scrollListener = me.viewListeners.scroll; + + me.store.un({ + guaranteedrange: me.onGuaranteedRange, + scope: me + }); + me.view.un(me.viewListeners); + if (me.view.rendered) { + me.stretcher.remove(); + me.view.el.un('scroll', scrollListener.fn, scrollListener.scope); + } + } +}); + +/** + * This is a base class for layouts that contain a single item that automatically expands to fill the layout's + * container. This class is intended to be extended or created via the layout:'fit' + * {@link Ext.container.Container#layout} config, and should generally not need to be created directly via the new keyword. + * + * Fit layout does not have any direct config options (other than inherited ones). To fit a panel to a container using + * Fit layout, simply set `layout: 'fit'` on the container and add a single panel to it. + * + * @example + * Ext.create('Ext.panel.Panel', { + * title: 'Fit Layout', + * width: 300, + * height: 150, + * layout:'fit', + * items: { + * title: 'Inner Panel', + * html: 'This is the inner panel content', + * bodyPadding: 20, + * border: false + * }, + * renderTo: Ext.getBody() + * }); + * + * If the container has multiple items, all of the items will all be equally sized. This is usually not + * desired, so to avoid this, place only a **single** item in the container. This sizing of all items + * can be used to provide a background {@link Ext.Img image} that is "behind" another item + * such as a {@link Ext.view.View dataview} if you also absolutely position the items. + */ +Ext.define('Ext.layout.container.Fit', { + + /* Begin Definitions */ + extend: 'Ext.layout.container.Container', + alternateClassName: 'Ext.layout.FitLayout', + + alias: 'layout.fit', + + /* End Definitions */ + + itemCls: Ext.baseCSSPrefix + 'fit-item', + targetCls: Ext.baseCSSPrefix + 'layout-fit', + type: 'fit', + + /** + * @cfg {Object} defaultMargins + * If the individual contained items do not have a margins property specified or margin specified via CSS, the + * default margins from this property will be applied to each item. + * + * This property may be specified as an object containing margins to apply in the format: + * + * { + * top: (top margin), + * right: (right margin), + * bottom: (bottom margin), + * left: (left margin) + * } + * + * This property may also be specified as a string containing space-separated, numeric margin values. The order of + * the sides associated with each value matches the way CSS processes margin values: + * + * - If there is only one value, it applies to all sides. + * - If there are two values, the top and bottom borders are set to the first value and the right and left are + * set to the second. + * - If there are three values, the top is set to the first value, the left and right are set to the second, + * and the bottom is set to the third. + * - If there are four values, they apply to the top, right, bottom, and left, respectively. + * + */ + defaultMargins: { + top: 0, + right: 0, + bottom: 0, + left: 0 + }, + + manageMargins: true, + + sizePolicies: { + 0: { setsWidth: 0, setsHeight: 0 }, + 1: { setsWidth: 1, setsHeight: 0 }, + 2: { setsWidth: 0, setsHeight: 1 }, + 3: { setsWidth: 1, setsHeight: 1 } + }, + + getItemSizePolicy: function (item, ownerSizeModel) { + // this layout's sizePolicy is derived from its owner's sizeModel: + var sizeModel = ownerSizeModel || this.owner.getSizeModel(), + mode = (sizeModel.width.shrinkWrap ? 0 : 1) | + (sizeModel.height.shrinkWrap ? 0 : 2); + + return this.sizePolicies[mode]; + }, + + beginLayoutCycle: function (ownerContext, firstCycle) { + var me = this, + // determine these before the lastSizeModels get updated: + resetHeight = me.lastHeightModel && me.lastHeightModel.calculated, + resetWidth = me.lastWidthModel && me.lastWidthModel.calculated, + resetSizes = resetWidth || resetHeight, + maxChildMinHeight = 0, maxChildMinWidth = 0, + c, childItems, i, item, length, margins, minHeight, minWidth, style, undef; + + me.callParent(arguments); + + // Clear any dimensions which we set before calculation, in case the current + // settings affect the available size. This particularly effects self-sizing + // containers such as fields, in which the target element is naturally sized, + // and should not be stretched by a sized child item. + if (resetSizes && ownerContext.targetContext.el.dom.tagName.toUpperCase() != 'TD') { + resetSizes = resetWidth = resetHeight = false; + } + + childItems = ownerContext.childItems; + length = childItems.length; + + for (i = 0; i < length; ++i) { + item = childItems[i]; + + // On the firstCycle, we determine the max of the minWidth/Height of the items + // since these can cause the container to grow scrollbars despite our attempts + // to fit the child to the container. + if (firstCycle) { + c = item.target; + minHeight = c.minHeight; + minWidth = c.minWidth; + + if (minWidth || minHeight) { + margins = item.marginInfo || item.getMarginInfo(); + // if the child item has undefined minWidth/Height, these will become + // NaN by adding the margins... + minHeight += margins.height; + minWidth += margins.height; + + // if the child item has undefined minWidth/Height, these comparisons + // will evaluate to false... that is, "0 < NaN" == false... + if (maxChildMinHeight < minHeight) { + maxChildMinHeight = minHeight; + } + if (maxChildMinWidth < minWidth) { + maxChildMinWidth = minWidth; + } + } + } + + if (resetSizes) { + style = item.el.dom.style; + + if (resetHeight) { + style.height = ''; + } + if (resetWidth) { + style.width = ''; + } + } + } + + if (firstCycle) { + ownerContext.maxChildMinHeight = maxChildMinHeight; + ownerContext.maxChildMinWidth = maxChildMinWidth; + } + + // Cache the overflowX/Y flags, but make them false in shrinkWrap mode (since we + // won't be triggering overflow in that case) and false if we have no minSize (so + // no child to trigger an overflow). + c = ownerContext.target; + ownerContext.overflowX = (!ownerContext.widthModel.shrinkWrap && + ownerContext.maxChildMinWidth && + (c.autoScroll || c.overflowX)) || undef; + + ownerContext.overflowY = (!ownerContext.heightModel.shrinkWrap && + ownerContext.maxChildMinHeight && + (c.autoScroll || c.overflowY)) || undef; + }, + + calculate : function (ownerContext) { + var me = this, + childItems = ownerContext.childItems, + length = childItems.length, + containerSize = me.getContainerSize(ownerContext), + info = { + length: length, + ownerContext: ownerContext, + targetSize: containerSize + }, + shrinkWrapWidth = ownerContext.widthModel.shrinkWrap, + shrinkWrapHeight = ownerContext.heightModel.shrinkWrap, + overflowX = ownerContext.overflowX, + overflowY = ownerContext.overflowY, + scrollbars, scrollbarSize, padding, i, contentWidth, contentHeight; + + if (overflowX || overflowY) { + // If we have children that have minHeight/Width, we may be forced to overflow + // and gain scrollbars. If so, we want to remove their space from the other + // axis so that we fit things inside the scrollbars rather than under them. + scrollbars = me.getScrollbarsNeeded( + overflowX && containerSize.width, overflowY && containerSize.height, + ownerContext.maxChildMinWidth, ownerContext.maxChildMinHeight); + + if (scrollbars) { + scrollbarSize = Ext.getScrollbarSize(); + if (scrollbars & 1) { // if we need the hscrollbar, remove its height + containerSize.height -= scrollbarSize.height; + } + if (scrollbars & 2) { // if we need the vscrollbar, remove its width + containerSize.width -= scrollbarSize.width; + } + } + } + + // Size the child items to the container (if non-shrinkWrap): + for (i = 0; i < length; ++i) { + info.index = i; + me.fitItem(childItems[i], info); + } + + if (shrinkWrapHeight || shrinkWrapWidth) { + padding = ownerContext.targetContext.getPaddingInfo(); + + if (shrinkWrapWidth) { + if (overflowY && !containerSize.gotHeight) { + // if we might overflow vertically and don't have the container height, + // we don't know if we will need a vscrollbar or not, so we must wait + // for that height so that we can determine the contentWidth... + me.done = false; + } else { + contentWidth = info.contentWidth + padding.width; + // the scrollbar flag (if set) will indicate that an overflow exists on + // the horz(1) or vert(2) axis... if not set, then there could never be + // an overflow... + if (scrollbars & 2) { // if we need the vscrollbar, add its width + contentWidth += scrollbarSize.width; + } + if (!ownerContext.setContentWidth(contentWidth)) { + me.done = false; + } + } + } + + if (shrinkWrapHeight) { + if (overflowX && !containerSize.gotWidth) { + // if we might overflow horizontally and don't have the container width, + // we don't know if we will need a hscrollbar or not, so we must wait + // for that width so that we can determine the contentHeight... + me.done = false; + } else { + contentHeight = info.contentHeight + padding.height; + // the scrollbar flag (if set) will indicate that an overflow exists on + // the horz(1) or vert(2) axis... if not set, then there could never be + // an overflow... + if (scrollbars & 1) { // if we need the hscrollbar, add its height + contentHeight += scrollbarSize.height; + } + if (!ownerContext.setContentHeight(contentHeight)) { + me.done = false; + } + } + } + } + }, + + fitItem: function (itemContext, info) { + var me = this; + + if (itemContext.invalid) { + me.done = false; + return; + } + + info.margins = itemContext.getMarginInfo(); + info.needed = info.got = 0; + + me.fitItemWidth(itemContext, info); + me.fitItemHeight(itemContext, info); + + // If not all required dimensions have been satisfied, we're not done. + if (info.got != info.needed) { + me.done = false; + } + }, + + fitItemWidth: function (itemContext, info) { + var contentWidth, width; + // Attempt to set only dimensions that are being controlled, not shrinkWrap dimensions + if (info.ownerContext.widthModel.shrinkWrap) { + // contentWidth must include the margins to be consistent with setItemWidth + width = itemContext.getProp('width') + info.margins.width; + // because we add margins, width will be NaN or a number (not undefined) + + contentWidth = info.contentWidth; + if (contentWidth === undefined) { + info.contentWidth = width; + } else { + info.contentWidth = Math.max(contentWidth, width); + } + } else if (itemContext.widthModel.calculated) { + ++info.needed; + if (info.targetSize.gotWidth) { + ++info.got; + this.setItemWidth(itemContext, info); + } + } + + this.positionItemX(itemContext, info); + }, + + fitItemHeight: function (itemContext, info) { + var contentHeight, height; + if (info.ownerContext.heightModel.shrinkWrap) { + // contentHeight must include the margins to be consistent with setItemHeight + height = itemContext.getProp('height') + info.margins.height; + // because we add margins, height will be NaN or a number (not undefined) + + contentHeight = info.contentHeight; + if (contentHeight === undefined) { + info.contentHeight = height; + } else { + info.contentHeight = Math.max(contentHeight, height); + } + } else if (itemContext.heightModel.calculated) { + ++info.needed; + if (info.targetSize.gotHeight) { + ++info.got; + this.setItemHeight(itemContext, info); + } + } + + this.positionItemY(itemContext, info); + }, + + positionItemX: function (itemContext, info) { + var margins = info.margins; + + // Adjust position to account for configured margins or if we have multiple items + // (all items should overlap): + if (info.index || margins.left) { + itemContext.setProp('x', margins.left); + } + + if (margins.width) { + // Need the margins for shrink-wrapping but old IE sometimes collapses the left margin into the padding + itemContext.setProp('margin-right', margins.width); + } + }, + + positionItemY: function (itemContext, info) { + var margins = info.margins; + + if (info.index || margins.top) { + itemContext.setProp('y', margins.top); + } + + if (margins.height) { + // Need the margins for shrink-wrapping but old IE sometimes collapses the top margin into the padding + itemContext.setProp('margin-bottom', margins.height); + } + }, + + setItemHeight: function (itemContext, info) { + itemContext.setHeight(info.targetSize.height - info.margins.height); + }, + + setItemWidth: function (itemContext, info) { + itemContext.setWidth(info.targetSize.width - info.margins.width); + } +}); + +/** + * @author Nicolas Ferrero + * + * TablePanel is the basis of both {@link Ext.tree.Panel TreePanel} and {@link Ext.grid.Panel GridPanel}. + * + * TablePanel aggregates: + * + * - a Selection Model + * - a View + * - a Store + * - Scrollers + * - Ext.grid.header.Container + */ +Ext.define('Ext.panel.Table', { + extend: 'Ext.panel.Panel', + + alias: 'widget.tablepanel', + + uses: [ + 'Ext.selection.RowModel', + 'Ext.selection.CellModel', + 'Ext.selection.CheckboxModel', + 'Ext.grid.PagingScroller', + 'Ext.grid.header.Container', + 'Ext.grid.Lockable' + ], + + extraBaseCls: Ext.baseCSSPrefix + 'grid', + extraBodyCls: Ext.baseCSSPrefix + 'grid-body', + + layout: 'fit', + /** + * @property {Boolean} hasView + * True to indicate that a view has been injected into the panel. + */ + hasView: false, + + // each panel should dictate what viewType and selType to use + /** + * @cfg {String} viewType + * An xtype of view to use. This is automatically set to 'gridview' by {@link Ext.grid.Panel Grid} + * and to 'treeview' by {@link Ext.tree.Panel Tree}. + * @protected + */ + viewType: null, + + /** + * @cfg {Object} viewConfig + * A config object that will be applied to the grid's UI view. Any of the config options available for + * {@link Ext.view.Table} can be specified here. This option is ignored if {@link #view} is specified. + */ + + /** + * @cfg {Ext.view.Table} view + * The {@link Ext.view.Table} used by the grid. Use {@link #viewConfig} to just supply some config options to + * view (instead of creating an entire View instance). + */ + + /** + * @cfg {String} selType + * An xtype of selection model to use. Defaults to 'rowmodel'. This is used to create selection model if just + * a config object or nothing at all given in {@link #selModel} config. + */ + selType: 'rowmodel', + + /** + * @cfg {Ext.selection.Model/Object} selModel + * A {@link Ext.selection.Model selection model} instance or config object. In latter case the {@link #selType} + * config option determines to which type of selection model this config is applied. + */ + + /** + * @cfg {Boolean} [multiSelect=false] + * True to enable 'MULTI' selection mode on selection model. + * @deprecated 4.1.1 Use {@link Ext.selection.Model#mode} 'MULTI' instead. + */ + + /** + * @cfg {Boolean} [simpleSelect=false] + * True to enable 'SIMPLE' selection mode on selection model. + * @deprecated 4.1.1 Use {@link Ext.selection.Model#mode} 'SIMPLE' instead. + */ + + /** + * @cfg {Ext.data.Store} store (required) + * The {@link Ext.data.Store Store} the grid should use as its data source. + */ + + /** + * @cfg {String/Boolean} scroll + * Scrollers configuration. Valid values are 'both', 'horizontal' or 'vertical'. + * True implies 'both'. False implies 'none'. + */ + scroll: true, + + /** + * @cfg {Ext.grid.column.Column[]/Object} columns + * An array of {@link Ext.grid.column.Column column} definition objects which define all columns that appear in this + * grid. Each column definition provides the header text for the column, and a definition of where the data for that + * column comes from. + * + * This can also be a configuration object for a {Ext.grid.header.Container HeaderContainer} which may override + * certain default configurations if necessary. For example, the special layout may be overridden to use a simpler + * layout, or one can set default values shared by all columns: + * + * columns: { + * items: [ + * { + * text: "Column A" + * dataIndex: "field_A" + * },{ + * text: "Column B", + * dataIndex: "field_B" + * }, + * ... + * ], + * defaults: { + * flex: 1 + * } + * } + */ + + /** + * @cfg {Boolean} forceFit + * Ttrue to force the columns to fit into the available width. Headers are first sized according to configuration, + * whether that be a specific width, or flex. Then they are all proportionally changed in width so that the entire + * content width is used. For more accurate control, it is more optimal to specify a flex setting on the columns + * that are to be stretched & explicit widths on columns that are not. + */ + + /** + * @cfg {Ext.grid.feature.Feature[]} features + * An array of grid Features to be added to this grid. See {@link Ext.grid.feature.Feature} for usage. + */ + + /** + * @cfg {Boolean} [hideHeaders=false] + * True to hide column headers. + */ + + /** + * @cfg {Boolean} deferRowRender + * Defaults to true to enable deferred row rendering. + * + * This allows the View to execute a refresh quickly, with the expensive update of the row structure deferred so + * that layouts with GridPanels appear, and lay out more quickly. + */ + + /** + * @cfg {Object} verticalScroller + * A config object to be used when configuring the {@link Ext.grid.PagingScroller scroll monitor} to control + * refreshing of data in an "infinite grid". + * + * Configurations of this object allow fine tuning of data caching which can improve performance and usability + * of the infinite grid. + */ + + deferRowRender: true, + + /** + * @cfg {Boolean} sortableColumns + * False to disable column sorting via clicking the header and via the Sorting menu items. + */ + sortableColumns: true, + + /** + * @cfg {Boolean} [enableLocking=false] + * True to enable locking support for this grid. Alternatively, locking will also be automatically + * enabled if any of the columns in the column configuration contain the locked config option. + */ + enableLocking: false, + + // private property used to determine where to go down to find views + // this is here to support locking. + scrollerOwner: true, + + /** + * @cfg {Boolean} [enableColumnMove=true] + * False to disable column dragging within this grid. + */ + enableColumnMove: true, + + /** + * @cfg {Boolean} [sealedColumns=false] + * True to constrain column dragging so that a column cannot be dragged in or out of it's + * current group. Only relevant while {@link #enableColumnMove} is enabled. + */ + sealedColumns: false, + + /** + * @cfg {Boolean} [enableColumnResize=true] + * False to disable column resizing within this grid. + */ + enableColumnResize: true, + + /** + * @cfg {Boolean} [enableColumnHide=true] + * False to disable column hiding within this grid. + */ + enableColumnHide: true, + + /** + * @cfg {Boolean} columnLines Adds column line styling + */ + + /** + * @cfg {Boolean} [rowLines=true] Adds row line styling + */ + rowLines: true, + + /** + * @cfg {Boolean} [disableSelection=false] + * True to disable selection model. + */ + + /** + * @cfg {String} emptyText Default text (html tags are accepted) to display in the Panel body when the Store + * is empty. When specified, and the Store is empty, the text will be rendered inside a DIV with the CSS class "x-grid-empty". + */ + + /** + * @cfg {Boolean} [allowDeselect=false] + * True to allow deselecting a record. This config is forwarded to {@link Ext.selection.Model#allowDeselect}. + */ + + /** + * @property {Boolean} optimizedColumnMove + * If you are writing a grid plugin or a {Ext.grid.feature.Feature Feature} which creates a column-based structure which + * needs a view refresh when columns are moved, then set this property in the grid. + * + * An example is the built in {@link Ext.grid.feature.AbstractSummary Summary} Feature. This creates summary rows, and the + * summary columns must be in the same order as the data columns. This plugin sets the `optimizedColumnMove` to `false. + */ + + initComponent: function() { + if (!this.viewType) { + Ext.Error.raise("You must specify a viewType config."); + } + if (this.headers) { + Ext.Error.raise("The headers config is not supported. Please specify columns instead."); + } + + var me = this, + scroll = me.scroll, + vertical = false, + horizontal = false, + headerCtCfg = me.columns || me.colModel, + view, + border = me.border, + i, len; + + if (me.columnLines) { + me.addCls(Ext.baseCSSPrefix + 'grid-with-col-lines'); + } + + if (me.rowLines) { + me.addCls(Ext.baseCSSPrefix + 'grid-with-row-lines'); + } + + // Look up the configured Store. If none configured, use the fieldless, empty Store defined in Ext.data.Store. + me.store = Ext.data.StoreManager.lookup(me.store || 'ext-empty-store'); + + if (!headerCtCfg) { + Ext.Error.raise("A column configuration must be specified"); + } + + // The columns/colModel config may be either a fully instantiated HeaderContainer, or an array of Column definitions, or a config object of a HeaderContainer + // Either way, we extract a columns property referencing an array of Column definitions. + if (headerCtCfg instanceof Ext.grid.header.Container) { + me.headerCt = headerCtCfg; + me.headerCt.border = border; + me.columns = me.headerCt.items.items; + } else { + if (Ext.isArray(headerCtCfg)) { + headerCtCfg = { + items: headerCtCfg, + border: border + }; + } + Ext.apply(headerCtCfg, { + forceFit: me.forceFit, + sortable: me.sortableColumns, + enableColumnMove: me.enableColumnMove, + enableColumnResize: me.enableColumnResize, + enableColumnHide: me.enableColumnHide, + border: border, + sealed: me.sealedColumns + }); + me.columns = headerCtCfg.items; + + // If any of the Column objects contain a locked property, and are not processed, this is a lockable TablePanel, a + // special view will be injected by the Ext.grid.Lockable mixin, so no processing of . + if (me.enableLocking || Ext.ComponentQuery.query('{locked !== undefined}{processed != true}', me.columns).length) { + me.self.mixin('lockable', Ext.grid.Lockable); + me.injectLockable(); + } + } + + me.scrollTask = new Ext.util.DelayedTask(me.syncHorizontalScroll, me); + + me.addEvents( + // documented on GridPanel + 'reconfigure', + /** + * @event viewready + * Fires when the grid view is available (use this for selecting a default row). + * @param {Ext.panel.Table} this + */ + 'viewready' + ); + + me.bodyCls = me.bodyCls || ''; + me.bodyCls += (' ' + me.extraBodyCls); + + me.cls = me.cls || ''; + me.cls += (' ' + me.extraBaseCls); + + // autoScroll is not a valid configuration + delete me.autoScroll; + + // If this TablePanel is lockable (Either configured lockable, or any of the defined columns has a 'locked' property) + // than a special lockable view containing 2 side-by-side grids will have been injected so we do not need to set up any UI. + if (!me.hasView) { + + // If we were not configured with a ready-made headerCt (either by direct config with a headerCt property, or by passing + // a HeaderContainer instance as the 'columns' property, then go ahead and create one from the config object created above. + if (!me.headerCt) { + me.headerCt = new Ext.grid.header.Container(headerCtCfg); + } + + // Extract the array of Column objects + me.columns = me.headerCt.items.items; + + // If the Store is paging blocks of the dataset in, then it can only be sorted remotely. + if (me.store.buffered && !me.store.remoteSort) { + for (i = 0, len = me.columns.length; i < len; i++) { + me.columns[i].sortable = false; + } + } + + if (me.hideHeaders) { + me.headerCt.height = 0; + me.headerCt.addCls(Ext.baseCSSPrefix + 'grid-header-ct-hidden'); + me.addCls(Ext.baseCSSPrefix + 'grid-header-hidden'); + // IE Quirks Mode fix + // If hidden configuration option was used, several layout calculations will be bypassed. + if (Ext.isIEQuirks) { + me.headerCt.style = { + display: 'none' + }; + } + } + + // turn both on. + if (scroll === true || scroll === 'both') { + vertical = horizontal = true; + } else if (scroll === 'horizontal') { + horizontal = true; + } else if (scroll === 'vertical') { + vertical = true; + } + + me.relayHeaderCtEvents(me.headerCt); + me.features = me.features || []; + if (!Ext.isArray(me.features)) { + me.features = [me.features]; + } + me.dockedItems = [].concat(me.dockedItems || []); + me.dockedItems.unshift(me.headerCt); + me.viewConfig = me.viewConfig || {}; + + // Buffered scrolling must preserve scroll on refresh + if (me.store && me.store.buffered) { + me.viewConfig.preserveScrollOnRefresh = true; + } else if (me.invalidateScrollerOnRefresh !== undefined) { + me.viewConfig.preserveScrollOnRefresh = !me.invalidateScrollerOnRefresh; + } + + // AbstractDataView will look up a Store configured as an object + // getView converts viewConfig into a View instance + view = me.getView(); + + me.items = [view]; + me.hasView = true; + + if (vertical) { + // If the Store is buffered, create a PagingScroller to monitor the View's scroll progress, + // load the Store's prefetch buffer when it detects we are nearing an edge. + if (me.store.buffered) { + me.verticalScroller = new Ext.grid.PagingScroller(Ext.apply({ + panel: me, + store: me.store, + view: me.view + }, me.verticalScroller)); + } + } + + if (horizontal) { + // Add a listener to synchronize the horizontal scroll position of the headers + // with the table view's element... Unless we are not showing headers! + if (!me.hideHeaders) { + view.on({ + scroll: { + fn: me.onHorizontalScroll, + element: 'el', + scope: me + } + }); + } + } + + me.mon(view.store, { + load: me.onStoreLoad, + scope: me + }); + me.mon(view, { + viewready: me.onViewReady, + refresh: me.onRestoreHorzScroll, + scope: me + }); + } + + // Relay events from the View whether it be a LockingView, or a regular GridView + this.relayEvents(me.view, [ + /** + * @event beforeitemmousedown + * @inheritdoc Ext.view.View#beforeitemmousedown + */ + 'beforeitemmousedown', + /** + * @event beforeitemmouseup + * @inheritdoc Ext.view.View#beforeitemmouseup + */ + 'beforeitemmouseup', + /** + * @event beforeitemmouseenter + * @inheritdoc Ext.view.View#beforeitemmouseenter + */ + 'beforeitemmouseenter', + /** + * @event beforeitemmouseleave + * @inheritdoc Ext.view.View#beforeitemmouseleave + */ + 'beforeitemmouseleave', + /** + * @event beforeitemclick + * @inheritdoc Ext.view.View#beforeitemclick + */ + 'beforeitemclick', + /** + * @event beforeitemdblclick + * @inheritdoc Ext.view.View#beforeitemdblclick + */ + 'beforeitemdblclick', + /** + * @event beforeitemcontextmenu + * @inheritdoc Ext.view.View#beforeitemcontextmenu + */ + 'beforeitemcontextmenu', + /** + * @event itemmousedown + * @inheritdoc Ext.view.View#itemmousedown + */ + 'itemmousedown', + /** + * @event itemmouseup + * @inheritdoc Ext.view.View#itemmouseup + */ + 'itemmouseup', + /** + * @event itemmouseenter + * @inheritdoc Ext.view.View#itemmouseenter + */ + 'itemmouseenter', + /** + * @event itemmouseleave + * @inheritdoc Ext.view.View#itemmouseleave + */ + 'itemmouseleave', + /** + * @event itemclick + * @inheritdoc Ext.view.View#itemclick + */ + 'itemclick', + /** + * @event itemdblclick + * @inheritdoc Ext.view.View#itemdblclick + */ + 'itemdblclick', + /** + * @event itemcontextmenu + * @inheritdoc Ext.view.View#itemcontextmenu + */ + 'itemcontextmenu', + /** + * @event beforecontainermousedown + * @inheritdoc Ext.view.View#beforecontainermousedown + */ + 'beforecontainermousedown', + /** + * @event beforecontainermouseup + * @inheritdoc Ext.view.View#beforecontainermouseup + */ + 'beforecontainermouseup', + /** + * @event beforecontainermouseover + * @inheritdoc Ext.view.View#beforecontainermouseover + */ + 'beforecontainermouseover', + /** + * @event beforecontainermouseout + * @inheritdoc Ext.view.View#beforecontainermouseout + */ + 'beforecontainermouseout', + /** + * @event beforecontainerclick + * @inheritdoc Ext.view.View#beforecontainerclick + */ + 'beforecontainerclick', + /** + * @event beforecontainerdblclick + * @inheritdoc Ext.view.View#beforecontainerdblclick + */ + 'beforecontainerdblclick', + /** + * @event beforecontainercontextmenu + * @inheritdoc Ext.view.View#beforecontainercontextmenu + */ + 'beforecontainercontextmenu', + /** + * @event containermouseup + * @inheritdoc Ext.view.View#containermouseup + */ + 'containermouseup', + /** + * @event containermouseover + * @inheritdoc Ext.view.View#containermouseover + */ + 'containermouseover', + /** + * @event containermouseout + * @inheritdoc Ext.view.View#containermouseout + */ + 'containermouseout', + /** + * @event containerclick + * @inheritdoc Ext.view.View#containerclick + */ + 'containerclick', + /** + * @event containerdblclick + * @inheritdoc Ext.view.View#containerdblclick + */ + 'containerdblclick', + /** + * @event containercontextmenu + * @inheritdoc Ext.view.View#containercontextmenu + */ + 'containercontextmenu', + /** + * @event selectionchange + * @inheritdoc Ext.selection.Model#selectionchange + */ + 'selectionchange', + /** + * @event beforeselect + * @inheritdoc Ext.selection.RowModel#beforeselect + */ + 'beforeselect', + /** + * @event select + * @inheritdoc Ext.selection.RowModel#select + */ + 'select', + /** + * @event beforedeselect + * @inheritdoc Ext.selection.RowModel#beforedeselect + */ + 'beforedeselect', + /** + * @event deselect + * @inheritdoc Ext.selection.RowModel#deselect + */ + 'deselect' + ]); + + me.callParent(arguments); + me.addStateEvents(['columnresize', 'columnmove', 'columnhide', 'columnshow', 'sortchange']); + + if (me.headerCt) { + me.headerCt.on('afterlayout', me.onRestoreHorzScroll, me); + } + }, + + relayHeaderCtEvents: function (headerCt) { + this.relayEvents(headerCt, [ + /** + * @event columnresize + * @inheritdoc Ext.grid.header.Container#columnresize + */ + 'columnresize', + /** + * @event columnmove + * @inheritdoc Ext.grid.header.Container#columnmove + */ + 'columnmove', + /** + * @event columnhide + * @inheritdoc Ext.grid.header.Container#columnhide + */ + 'columnhide', + /** + * @event columnshow + * @inheritdoc Ext.grid.header.Container#columnshow + */ + 'columnshow', + /** + * @event sortchange + * @inheritdoc Ext.grid.header.Container#sortchange + */ + 'sortchange' + ]); + }, + + getState: function(){ + var me = this, + state = me.callParent(), + sorter = me.store.sorters.first(); + + state = me.addPropertyToState(state, 'columns', (me.headerCt || me).getColumnsState()); + + if (sorter) { + state = me.addPropertyToState(state, 'sort', { + property: sorter.property, + direction: sorter.direction, + root: sorter.root + }); + } + return state; + }, + + applyState: function(state) { + var me = this, + sorter = state.sort, + store = me.store, + columns = state.columns; + + delete state.columns; + + // Ensure superclass has applied *its* state. + // AbstractComponent saves dimensions (and anchor/flex) plus collapsed state. + me.callParent(arguments); + + if (columns) { + (me.headerCt || me).applyColumnsState(columns); + } + + if (sorter) { + if (store.remoteSort) { + // Pass false to prevent a sort from occurring + store.sort({ + property: sorter.property, + direction: sorter.direction, + root: sorter.root + }, null, false); + } else { + store.sort(sorter.property, sorter.direction); + } + } + }, + + /** + * Returns the store associated with this Panel. + * @return {Ext.data.Store} The store + */ + getStore: function(){ + return this.store; + }, + + /** + * Gets the view for this panel. + * @return {Ext.view.Table} + */ + getView: function() { + var me = this, + sm; + + if (!me.view) { + sm = me.getSelectionModel(); + me.view = Ext.widget(Ext.apply({}, me.viewConfig, { + + // Features need a reference to the grid, so configure a reference into the View + grid: me, + deferInitialRefresh: me.deferRowRender !== false, + scroll: me.scroll, + xtype: me.viewType, + store: me.store, + headerCt: me.headerCt, + selModel: sm, + features: me.features, + panel: me, + emptyText : me.emptyText ? '
    ' + me.emptyText + '
    ' : '' + })); + + // TableView's custom component layout, Ext.view.TableLayout requires a reference to the headerCt because it depends on the headerCt doing its work. + me.view.getComponentLayout().headerCt = me.headerCt; + + me.mon(me.view, { + uievent: me.processEvent, + scope: me + }); + sm.view = me.view; + me.headerCt.view = me.view; + me.relayEvents(me.view, [ + /** + * @event cellclick + * Fired when table cell is clicked. + * @param {Ext.view.Table} this + * @param {HTMLElement} td The TD element that was clicked. + * @param {Number} cellIndex + * @param {Ext.data.Model} record + * @param {HTMLElement} tr The TR element that was clicked. + * @param {Number} rowIndex + * @param {Ext.EventObject} e + */ + 'cellclick', + /** + * @event celldblclick + * Fired when table cell is double clicked. + * @param {Ext.view.Table} this + * @param {HTMLElement} td The TD element that was clicked. + * @param {Number} cellIndex + * @param {Ext.data.Model} record + * @param {HTMLElement} tr The TR element that was clicked. + * @param {Number} rowIndex + * @param {Ext.EventObject} e + */ + 'celldblclick' + ]); + } + return me.view; + }, + + /** + * @private + * autoScroll is never valid for all classes which extend TablePanel. + */ + setAutoScroll: Ext.emptyFn, + + /** + * @private + * Processes UI events from the view. Propagates them to whatever internal Components need to process them. + * @param {String} type Event type, eg 'click' + * @param {Ext.view.Table} view TableView Component + * @param {HTMLElement} cell Cell HtmlElement the event took place within + * @param {Number} recordIndex Index of the associated Store Model (-1 if none) + * @param {Number} cellIndex Cell index within the row + * @param {Ext.EventObject} e Original event + */ + processEvent: function(type, view, cell, recordIndex, cellIndex, e) { + var me = this, + header; + + if (cellIndex !== -1) { + header = me.headerCt.getGridColumns()[cellIndex]; + return header.processEvent.apply(header, arguments); + } + }, + + /** + * This method is obsolete in 4.1. The closest equivalent in + * 4.1 is {@link #doLayout}, but it is also possible that no + * layout is needed. + * @deprecated 4.1 + */ + determineScrollbars: function () { + Ext.log.warn('Obsolete'); + }, + + /** + * This method is obsolete in 4.1. The closest equivalent in 4.1 is + * {@link Ext.AbstractComponent#updateLayout}, but it is also possible that no layout + * is needed. + * @deprecated 4.1 + */ + invalidateScroller: function () { + Ext.log.warn('Obsolete'); + }, + + scrollByDeltaY: function(yDelta, animate) { + this.getView().scrollBy(0, yDelta, animate); + }, + + scrollByDeltaX: function(xDelta, animate) { + this.getView().scrollBy(xDelta, 0, animate); + }, + + afterCollapse: function() { + var me = this; + me.saveScrollPos(); + me.saveScrollPos(); + me.callParent(arguments); + }, + + afterExpand: function() { + var me = this; + me.callParent(arguments); + me.restoreScrollPos(); + me.restoreScrollPos(); + }, + + saveScrollPos: Ext.emptyFn, + + restoreScrollPos: Ext.emptyFn, + + onHeaderResize: function(){ + this.delayScroll(); + }, + + // Update the view when a header moves + onHeaderMove: function(headerCt, header, colsToMove, fromIdx, toIdx) { + var me = this; + + // If there are Features or Plugins which create DOM which must match column order, they set the optimizedColumnMove flag to false. + // In this case we must refresh the view on column move. + if (me.optimizedColumnMove === false) { + me.view.refresh(); + } + + // Simplest case for default DOM structure is just to swap the columns round in the view. + else { + me.view.moveColumn(fromIdx, toIdx, colsToMove); + } + me.delayScroll(); + }, + + // Section onHeaderHide is invoked after view. + onHeaderHide: function(headerCt, header) { + this.delayScroll(); + }, + + onHeaderShow: function(headerCt, header) { + this.delayScroll(); + }, + + delayScroll: function(){ + var target = this.getScrollTarget().el; + if (target) { + this.scrollTask.delay(10, null, null, [target.dom.scrollLeft]); + } + }, + + /** + * @private + * Fires the TablePanel's viewready event when the view declares that its internal DOM is ready + */ + onViewReady: function() { + this.fireEvent('viewready', this); + }, + + /** + * @private + * Tracks when things happen to the view and preserves the horizontal scroll position. + */ + onRestoreHorzScroll: function() { + var left = this.scrollLeftPos; + if (left) { + // We need to restore the body scroll position here + this.syncHorizontalScroll(left, true); + } + }, + + getScrollerOwner: function() { + var rootCmp = this; + if (!this.scrollerOwner) { + rootCmp = this.up('[scrollerOwner]'); + } + return rootCmp; + }, + + /** + * Gets left hand side marker for header resizing. + * @private + */ + getLhsMarker: function() { + var me = this; + return me.lhsMarker || (me.lhsMarker = Ext.DomHelper.append(me.el, { + cls: Ext.baseCSSPrefix + 'grid-resize-marker' + }, true)); + }, + + /** + * Gets right hand side marker for header resizing. + * @private + */ + getRhsMarker: function() { + var me = this; + + return me.rhsMarker || (me.rhsMarker = Ext.DomHelper.append(me.el, { + cls: Ext.baseCSSPrefix + 'grid-resize-marker' + }, true)); + }, + + /** + * Returns the selection model being used and creates it via the configuration if it has not been created already. + * @return {Ext.selection.Model} selModel + */ + getSelectionModel: function(){ + if (!this.selModel) { + this.selModel = {}; + } + + var mode = 'SINGLE', + type; + if (this.simpleSelect) { + mode = 'SIMPLE'; + } else if (this.multiSelect) { + mode = 'MULTI'; + } + + Ext.applyIf(this.selModel, { + allowDeselect: this.allowDeselect, + mode: mode + }); + + if (!this.selModel.events) { + type = this.selModel.selType || this.selType; + this.selModel = Ext.create('selection.' + type, this.selModel); + } + + if (!this.selModel.hasRelaySetup) { + this.relayEvents(this.selModel, [ + 'selectionchange', 'beforeselect', 'beforedeselect', 'select', 'deselect' + ]); + this.selModel.hasRelaySetup = true; + } + + // lock the selection model if user + // has disabled selection + if (this.disableSelection) { + this.selModel.locked = true; + } + return this.selModel; + }, + + getScrollTarget: function(){ + var owner = this.getScrollerOwner(), + items = owner.query('tableview'); + + return items[1] || items[0]; + }, + + onHorizontalScroll: function(event, target) { + this.syncHorizontalScroll(target.scrollLeft); + }, + + syncHorizontalScroll: function(left, setBody) { + var me = this, + scrollTarget; + + setBody = setBody === true; + // Only set the horizontal scroll if we've changed position, + // so that we don't set this on vertical scrolls + if (me.rendered && (setBody || left !== me.scrollLeftPos)) { + // Only set the body position if we're reacting to a refresh, otherwise + // we just need to set the header. + if (setBody) { + scrollTarget = me.getScrollTarget(); + scrollTarget.el.dom.scrollLeft = left; + } + me.headerCt.el.dom.scrollLeft = left; + me.scrollLeftPos = left; + } + }, + + // template method meant to be overriden + onStoreLoad: Ext.emptyFn, + + getEditorParent: function() { + return this.body; + }, + + bindStore: function(store) { + var me = this; + me.store = store; + me.getView().bindStore(store); + }, + + beforeDestroy: function(){ + Ext.destroy(this.verticalScroller); + this.callParent(); + }, + + // documented on GridPanel + reconfigure: function(store, columns) { + var me = this, + headerCt = me.headerCt; + + if (me.lockable) { + me.reconfigureLockable(store, columns); + } else { + Ext.suspendLayouts(); + if (columns) { + // new columns, delete scroll pos + delete me.scrollLeftPos; + headerCt.removeAll(); + headerCt.add(columns); + } + if (store) { + store = Ext.StoreManager.lookup(store); + me.bindStore(store); + } else { + me.getView().refresh(); + } + headerCt.setSortState(); + Ext.resumeLayouts(true); + } + me.fireEvent('reconfigure', me, store, columns); + } +}); + +/** + * The grid View class provides extra {@link Ext.grid.Panel} specific functionality to the + * {@link Ext.view.Table}. In general, this class is not instanced directly, instead a viewConfig + * option is passed to the grid: + * + * Ext.create('Ext.grid.Panel', { + * // other options + * viewConfig: { + * stripeRows: false + * } + * }); + * + * ## Drag Drop + * + * Drag and drop functionality can be achieved in the grid by attaching a {@link Ext.grid.plugin.DragDrop} plugin + * when creating the view. + * + * Ext.create('Ext.grid.Panel', { + * // other options + * viewConfig: { + * plugins: { + * ddGroup: 'people-group', + * ptype: 'gridviewdragdrop', + * enableDrop: false + * } + * } + * }); + */ +Ext.define('Ext.grid.View', { + extend: 'Ext.view.Table', + alias: 'widget.gridview', + + /** + * @cfg + * True to stripe the rows. + * + * This causes the CSS class **`x-grid-row-alt`** to be added to alternate rows of the grid. A default CSS rule is + * provided which sets a background color, but you can override this with a rule which either overrides the + * **background-color** style using the `!important` modifier, or which uses a CSS selector of higher specificity. + */ + stripeRows: true, + + autoScroll: true +}); + +/** + * @author Aaron Conran + * @docauthor Ed Spencer + * + * Grids are an excellent way of showing large amounts of tabular data on the client side. Essentially a supercharged + * `
    `, GridPanel makes it easy to fetch, sort and filter large amounts of data. + * + * Grids are composed of two main pieces - a {@link Ext.data.Store Store} full of data and a set of columns to render. + * + * ## Basic GridPanel + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'simpsonsStore', + * fields:['name', 'email', 'phone'], + * data:{'items':[ + * { 'name': 'Lisa', "email":"lisa@simpsons.com", "phone":"555-111-1224" }, + * { 'name': 'Bart', "email":"bart@simpsons.com", "phone":"555-222-1234" }, + * { 'name': 'Homer', "email":"home@simpsons.com", "phone":"555-222-1244" }, + * { 'name': 'Marge', "email":"marge@simpsons.com", "phone":"555-222-1254" } + * ]}, + * proxy: { + * type: 'memory', + * reader: { + * type: 'json', + * root: 'items' + * } + * } + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Simpsons', + * store: Ext.data.StoreManager.lookup('simpsonsStore'), + * columns: [ + * { text: 'Name', dataIndex: 'name' }, + * { text: 'Email', dataIndex: 'email', flex: 1 }, + * { text: 'Phone', dataIndex: 'phone' } + * ], + * height: 200, + * width: 400, + * renderTo: Ext.getBody() + * }); + * + * The code above produces a simple grid with three columns. We specified a Store which will load JSON data inline. + * In most apps we would be placing the grid inside another container and wouldn't need to use the + * {@link #height}, {@link #width} and {@link #renderTo} configurations but they are included here to make it easy to get + * up and running. + * + * The grid we created above will contain a header bar with a title ('Simpsons'), a row of column headers directly underneath + * and finally the grid rows under the headers. + * + * ## Configuring columns + * + * By default, each column is sortable and will toggle between ASC and DESC sorting when you click on its header. Each + * column header is also reorderable by default, and each gains a drop-down menu with options to hide and show columns. + * It's easy to configure each column - here we use the same example as above and just modify the columns config: + * + * columns: [ + * { + * text: 'Name', + * dataIndex: 'name', + * sortable: false, + * hideable: false, + * flex: 1 + * }, + * { + * text: 'Email', + * dataIndex: 'email', + * hidden: true + * }, + * { + * text: 'Phone', + * dataIndex: 'phone', + * width: 100 + * } + * ] + * + * We turned off sorting and hiding on the 'Name' column so clicking its header now has no effect. We also made the Email + * column hidden by default (it can be shown again by using the menu on any other column). We also set the Phone column to + * a fixed with of 100px and flexed the Name column, which means it takes up all remaining width after the other columns + * have been accounted for. See the {@link Ext.grid.column.Column column docs} for more details. + * + * ## Renderers + * + * As well as customizing columns, it's easy to alter the rendering of individual cells using renderers. A renderer is + * tied to a particular column and is passed the value that would be rendered into each cell in that column. For example, + * we could define a renderer function for the email column to turn each email address into a mailto link: + * + * columns: [ + * { + * text: 'Email', + * dataIndex: 'email', + * renderer: function(value) { + * return Ext.String.format('{1}', value, value); + * } + * } + * ] + * + * See the {@link Ext.grid.column.Column column docs} for more information on renderers. + * + * ## Selection Models + * + * Sometimes all you want is to render data onto the screen for viewing, but usually it's necessary to interact with or + * update that data. Grids use a concept called a Selection Model, which is simply a mechanism for selecting some part of + * the data in the grid. The two main types of Selection Model are RowSelectionModel, where entire rows are selected, and + * CellSelectionModel, where individual cells are selected. + * + * Grids use a Row Selection Model by default, but this is easy to customise like so: + * + * Ext.create('Ext.grid.Panel', { + * selType: 'cellmodel', + * store: ... + * }); + * + * Specifying the `cellmodel` changes a couple of things. Firstly, clicking on a cell now + * selects just that cell (using a {@link Ext.selection.RowModel rowmodel} will select the entire row), and secondly the + * keyboard navigation will walk from cell to cell instead of row to row. Cell-based selection models are usually used in + * conjunction with editing. + * + * ## Sorting & Filtering + * + * Every grid is attached to a {@link Ext.data.Store Store}, which provides multi-sort and filtering capabilities. It's + * easy to set up a grid to be sorted from the start: + * + * var myGrid = Ext.create('Ext.grid.Panel', { + * store: { + * fields: ['name', 'email', 'phone'], + * sorters: ['name', 'phone'] + * }, + * columns: [ + * { text: 'Name', dataIndex: 'name' }, + * { text: 'Email', dataIndex: 'email' } + * ] + * }); + * + * Sorting at run time is easily accomplished by simply clicking each column header. If you need to perform sorting on + * more than one field at run time it's easy to do so by adding new sorters to the store: + * + * myGrid.store.sort([ + * { property: 'name', direction: 'ASC' }, + * { property: 'email', direction: 'DESC' } + * ]); + * + * See {@link Ext.data.Store} for examples of filtering. + * + * ## State saving + * + * When configured {@link #stateful}, grids save their column state (order and width) encapsulated within the default + * Panel state of changed width and height and collapsed/expanded state. + * + * Each {@link #columns column} of the grid may be configured with a {@link Ext.grid.column.Column#stateId stateId} which + * identifies that column locally within the grid. + * + * ## Plugins and Features + * + * Grid supports addition of extra functionality through features and plugins: + * + * - {@link Ext.grid.plugin.CellEditing CellEditing} - editing grid contents one cell at a time. + * + * - {@link Ext.grid.plugin.RowEditing RowEditing} - editing grid contents an entire row at a time. + * + * - {@link Ext.grid.plugin.DragDrop DragDrop} - drag-drop reordering of grid rows. + * + * - {@link Ext.toolbar.Paging Paging toolbar} - paging through large sets of data. + * + * - {@link Ext.grid.PagingScroller Infinite scrolling} - another way to handle large sets of data. + * + * - {@link Ext.grid.RowNumberer RowNumberer} - automatically numbered rows. + * + * - {@link Ext.grid.feature.Grouping Grouping} - grouping together rows having the same value in a particular field. + * + * - {@link Ext.grid.feature.Summary Summary} - a summary row at the bottom of a grid. + * + * - {@link Ext.grid.feature.GroupingSummary GroupingSummary} - a summary row at the bottom of each group. + */ +Ext.define('Ext.grid.Panel', { + extend: 'Ext.panel.Table', + requires: ['Ext.grid.View'], + alias: ['widget.gridpanel', 'widget.grid'], + alternateClassName: ['Ext.list.ListView', 'Ext.ListView', 'Ext.grid.GridPanel'], + viewType: 'gridview', + + lockable: false, + + // Required for the Lockable Mixin. These are the configurations which will be copied to the + // normal and locked sub tablepanels + bothCfgCopy: [ + 'invalidateScrollerOnRefresh', + 'hideHeaders', + 'enableColumnHide', + 'enableColumnMove', + 'enableColumnResize', + 'sortableColumns' + ], + normalCfgCopy: [ + 'verticalScroller', + 'verticalScrollDock', + 'verticalScrollerType', + 'scroll' + ], + lockedCfgCopy: [], + + /** + * @cfg {Boolean} rowLines False to remove row line styling + */ + rowLines: true + + // Columns config is required in Grid + /** + * @cfg {Ext.grid.column.Column[]/Object} columns (required) + * @inheritdoc + */ + + /** + * @event reconfigure + * Fires after a reconfigure. + * @param {Ext.grid.Panel} this + * @param {Ext.data.Store} store The store that was passed to the {@link #method-reconfigure} method + * @param {Object[]} columns The column configs that were passed to the {@link #method-reconfigure} method + */ + + /** + * @method reconfigure + * Reconfigures the grid with a new store/columns. Either the store or the columns can be omitted if you don't wish + * to change them. + * @param {Ext.data.Store} store (Optional) The new store. + * @param {Object[]} columns (Optional) An array of column configs + */ +}); + +// Currently has the following issues: +// - Does not handle postEditValue +// - Fields without editors need to sync with their values in Store +// - starting to edit another record while already editing and dirty should probably prevent it +// - aggregating validation messages +// - tabIndex is not managed bc we leave elements in dom, and simply move via positioning +// - layout issues when changing sizes/width while hidden (layout bug) + +/** + * Internal utility class used to provide row editing functionality. For developers, they should use + * the RowEditing plugin to use this functionality with a grid. + * + * @private + */ +Ext.define('Ext.grid.RowEditor', { + extend: 'Ext.form.Panel', + requires: [ + 'Ext.tip.ToolTip', + 'Ext.util.HashMap', + 'Ext.util.KeyNav' + ], + + // + saveBtnText : 'Update', + // + // + cancelBtnText: 'Cancel', + // + // + errorsText: 'Errors', + // + // + dirtyText: 'You need to commit or cancel your changes', + // + + lastScrollLeft: 0, + lastScrollTop: 0, + + border: false, + + // Change the hideMode to offsets so that we get accurate measurements when + // the roweditor is hidden for laying out things like a TriggerField. + hideMode: 'offsets', + + initComponent: function() { + var me = this, + form; + + me.cls = Ext.baseCSSPrefix + 'grid-row-editor'; + + me.layout = { + type: 'hbox', + align: 'middle' + }; + + // Maintain field-to-column mapping + // It's easy to get a field from a column, but not vice versa + me.columns = new Ext.util.HashMap(); + me.columns.getKey = function(columnHeader) { + var f; + if (columnHeader.getEditor) { + f = columnHeader.getEditor(); + if (f) { + return f.id; + } + } + return columnHeader.id; + }; + me.mon(me.columns, { + add: me.onFieldAdd, + remove: me.onFieldRemove, + replace: me.onFieldReplace, + scope: me + }); + + me.callParent(arguments); + + if (me.fields) { + me.setField(me.fields); + delete me.fields; + } + + me.mon(Ext.container.Container.hierarchyEventSource, { + scope: me, + show: me.repositionIfVisible + }); + + form = me.getForm(); + form.trackResetOnLoad = true; + }, + + onFieldChange: function() { + var me = this, + form = me.getForm(), + valid = form.isValid(); + if (me.errorSummary && me.isVisible()) { + me[valid ? 'hideToolTip' : 'showToolTip'](); + } + me.updateButton(valid); + me.isValid = valid; + }, + + updateButton: function(valid){ + var buttons = this.floatingButtons; + if (buttons) { + buttons.child('#update').setDisabled(!valid); + } + }, + + afterRender: function() { + var me = this, + plugin = me.editingPlugin; + + me.callParent(arguments); + me.mon(me.renderTo, 'scroll', me.onCtScroll, me, { buffer: 100 }); + + // Prevent from bubbling click events to the grid view + me.mon(me.el, { + click: Ext.emptyFn, + stopPropagation: true + }); + + me.el.swallowEvent([ + 'keypress', + 'keydown' + ]); + + me.keyNav = new Ext.util.KeyNav(me.el, { + enter: plugin.completeEdit, + esc: plugin.onEscKey, + scope: plugin + }); + + me.mon(plugin.view, { + beforerefresh: me.onBeforeViewRefresh, + refresh: me.onViewRefresh, + itemremove: me.onViewItemRemove, + scope: me + }); + }, + + onBeforeViewRefresh: function(view) { + var me = this, + viewDom = view.el.dom; + + if (me.el.dom.parentNode === viewDom) { + viewDom.removeChild(me.el.dom); + } + }, + + onViewRefresh: function(view) { + var me = this, + viewDom = view.el.dom, + context = me.context, + idx; + + viewDom.appendChild(me.el.dom); + + // Recover our row node after a view refresh + if (context && (idx = context.store.indexOf(context.record)) >= 0) { + context.row = view.getNode(idx); + me.reposition(); + if (me.tooltip && me.tooltip.isVisible()) { + me.tooltip.setTarget(context.row); + } + } else { + me.editingPlugin.cancelEdit(); + } + }, + + onViewItemRemove: function(record, index) { + var context = this.context; + if (context && record === context.record) { + // if the record being edited was removed, cancel editing + this.editingPlugin.cancelEdit(); + } + }, + + onCtScroll: function(e, target) { + var me = this, + scrollTop = target.scrollTop, + scrollLeft = target.scrollLeft; + + if (scrollTop !== me.lastScrollTop) { + me.lastScrollTop = scrollTop; + if ((me.tooltip && me.tooltip.isVisible()) || me.hiddenTip) { + me.repositionTip(); + } + } + if (scrollLeft !== me.lastScrollLeft) { + me.lastScrollLeft = scrollLeft; + me.reposition(); + } + }, + + onColumnAdd: function(column) { + if (!column.isGroupHeader) { + this.setField(column); + } + }, + + onColumnRemove: function(column) { + this.columns.remove(column); + }, + + onColumnResize: function(column, width) { + if (!column.isGroupHeader) { + column.getEditor().setWidth(width - 2); + this.repositionIfVisible(); + } + }, + + onColumnHide: function(column) { + if (!column.isGroupHeader) { + column.getEditor().hide(); + this.repositionIfVisible(); + } + }, + + onColumnShow: function(column) { + var field = column.getEditor(); + field.setWidth(column.getWidth() - 2).show(); + this.repositionIfVisible(); + }, + + onColumnMove: function(column, fromIdx, toIdx) { + if (!column.isGroupHeader) { + var field = column.getEditor(); + if (this.items.indexOf(field) != toIdx) { + this.move(fromIdx, toIdx); + } + } + }, + + onFieldAdd: function(map, fieldId, column) { + var me = this, + colIdx, + field; + + if (!column.isGroupHeader) { + colIdx = me.editingPlugin.grid.headerCt.getHeaderIndex(column); + field = column.getEditor({ xtype: 'displayfield' }); + me.insert(colIdx, field); + } + }, + + onFieldRemove: function(map, fieldId, column) { + var me = this, + field, + fieldEl; + + if (!column.isGroupHeader) { + field = column.getEditor(); + fieldEl = field.el; + me.remove(field, false); + if (fieldEl) { + fieldEl.remove(); + } + } + }, + + onFieldReplace: function(map, fieldId, column, oldColumn) { + this.onFieldRemove(map, fieldId, oldColumn); + }, + + clearFields: function() { + var map = this.columns, + key; + + for (key in map) { + if (map.hasOwnProperty(key)) { + map.removeAtKey(key); + } + } + }, + + getFloatingButtons: function() { + var me = this, + cssPrefix = Ext.baseCSSPrefix, + btnsCss = cssPrefix + 'grid-row-editor-buttons', + plugin = me.editingPlugin, + minWidth = Ext.panel.Panel.prototype.minButtonWidth, + btns; + + if (!me.floatingButtons) { + btns = me.floatingButtons = new Ext.Container({ + renderTpl: [ + '
    ', + '
    ', + '
    ', + '
    ', + '
    ', + '{%this.renderContainer(out,values)%}' + ], + width: 200, + renderTo: me.el, + baseCls: btnsCss, + layout: { + type: 'hbox', + align: 'middle' + }, + defaults: { + flex: 1, + margins: '0 1 0 1' + }, + items: [{ + itemId: 'update', + xtype: 'button', + handler: plugin.completeEdit, + scope: plugin, + text: me.saveBtnText, + minWidth: minWidth + }, { + xtype: 'button', + handler: plugin.cancelEdit, + scope: plugin, + text: me.cancelBtnText, + minWidth: minWidth + }] + }); + + // Prevent from bubbling click events to the grid view + me.mon(btns.el, { + // BrowserBug: Opera 11.01 + // causes the view to scroll when a button is focused from mousedown + mousedown: Ext.emptyFn, + click: Ext.emptyFn, + stopEvent: true + }); + } + return me.floatingButtons; + }, + + repositionIfVisible: function(c){ + var me = this, + view = me.view; + + // If we're showing ourselves, jump out + // If the component we're showing doesn't contain the view + if (c && (c == me || !view.isDescendantOf(c))) { + return; + } + + if (me.isVisible() && view.isVisible(true)) { + me.reposition(); + } + }, + + reposition: function(animateConfig) { + var me = this, + context = me.context, + row = context && Ext.get(context.row), + btns = me.getFloatingButtons(), + btnEl = btns.el, + grid = me.editingPlugin.grid, + viewEl = grid.view.el, + + // always get data from ColumnModel as its what drives + // the GridView's sizing + mainBodyWidth = grid.headerCt.getFullWidth(), + scrollerWidth = grid.getWidth(), + + // use the minimum as the columns may not fill up the entire grid + // width + width = Math.min(mainBodyWidth, scrollerWidth), + scrollLeft = grid.view.el.dom.scrollLeft, + btnWidth = btns.getWidth(), + left = (width - btnWidth) / 2 + scrollLeft, + y, rowH, newHeight, + + invalidateScroller = function() { + btnEl.scrollIntoView(viewEl, false); + if (animateConfig && animateConfig.callback) { + animateConfig.callback.call(animateConfig.scope || me); + } + }, + + animObj; + + // need to set both top/left + if (row && Ext.isElement(row.dom)) { + // Bring our row into view if necessary, so a row editor that's already + // visible and animated to the row will appear smooth + row.scrollIntoView(viewEl, false); + + // Get the y position of the row relative to its top-most static parent. + // offsetTop will be relative to the table, and is incorrect + // when mixed with certain grid features (e.g., grouping). + y = row.getXY()[1] - 5; + rowH = row.getHeight(); + newHeight = rowH + (me.editingPlugin.grid.rowLines ? 9 : 10); + + // Set editor height to match the row height + if (me.getHeight() != newHeight) { + me.setHeight(newHeight); + me.el.setLeft(0); + } + + if (animateConfig) { + animObj = { + to: { + y: y + }, + duration: animateConfig.duration || 125, + listeners: { + afteranimate: function() { + invalidateScroller(); + y = row.getXY()[1] - 5; + } + } + }; + me.el.animate(animObj); + } else { + me.el.setY(y); + invalidateScroller(); + } + } + if (me.getWidth() != mainBodyWidth) { + me.setWidth(mainBodyWidth); + } + btnEl.setLeft(left); + }, + + getEditor: function(fieldInfo) { + var me = this; + + if (Ext.isNumber(fieldInfo)) { + // Query only form fields. This just future-proofs us in case we add + // other components to RowEditor later on. Don't want to mess with + // indices. + return me.query('>[isFormField]')[fieldInfo]; + } else if (fieldInfo.isHeader && !fieldInfo.isGroupHeader) { + return fieldInfo.getEditor(); + } + }, + + removeField: function(field) { + var me = this; + + // Incase we pass a column instead, which is fine + field = me.getEditor(field); + me.mun(field, 'validitychange', me.onValidityChange, me); + + // Remove field/column from our mapping, which will fire the event to + // remove the field from our container + me.columns.removeAtKey(field.id); + Ext.destroy(field); + }, + + setField: function(column) { + var me = this, + i, + length, field; + + if (Ext.isArray(column)) { + length = column.length; + + for (i = 0; i < length; i++) { + me.setField(column[i]); + } + + return; + } + + // Get a default display field if necessary + field = column.getEditor(null, { + xtype: 'displayfield', + // Override Field's implementation so that the default display fields will not return values. This is done because + // the display field will pick up column renderers from the grid. + getModelData: function() { + return null; + } + }); + field.margins = '0 0 0 2'; + me.mon(field, 'change', me.onFieldChange, me); + + if (me.isVisible() && me.context) { + if (field.is('displayfield')) { + me.renderColumnData(field, me.context.record, column); + } else { + field.suspendEvents(); + field.setValue(me.context.record.get(column.dataIndex)); + field.resumeEvents(); + } + } + + // Maintain mapping of fields-to-columns + // This will fire events that maintain our container items + + me.columns.add(field.id, column); + if (column.hidden) { + me.onColumnHide(column); + } else if (column.rendered) { + // Setting after initial render + me.onColumnShow(column); + } + }, + + loadRecord: function(record) { + var me = this, + form = me.getForm(), + fields = form.getFields(), + items = fields.items, + length = items.length, + i, displayFields, + isValid; + + // temporarily suspend events on form fields before loading record to prevent the fields' change events from firing + for (i = 0; i < length; i++) { + items[i].suspendEvents(); + } + + form.loadRecord(record); + + for (i = 0; i < length; i++) { + items[i].resumeEvents(); + } + + isValid = form.isValid(); + if (me.errorSummary) { + if (isValid) { + me.hideToolTip(); + } else { + me.showToolTip(); + } + } + + me.updateButton(isValid); + + // render display fields so they honor the column renderer/template + displayFields = me.query('>displayfield'); + length = displayFields.length; + + for (i = 0; i < length; i++) { + me.renderColumnData(displayFields[i], record); + } + }, + + renderColumnData: function(field, record, activeColumn) { + var me = this, + grid = me.editingPlugin.grid, + headerCt = grid.headerCt, + view = grid.view, + store = view.store, + column = activeColumn || me.columns.get(field.id), + value = record.get(column.dataIndex), + renderer = column.editRenderer || column.renderer, + metaData, + rowIdx, + colIdx; + + // honor our column's renderer (TemplateHeader sets renderer for us!) + if (renderer) { + metaData = { tdCls: '', style: '' }; + rowIdx = store.indexOf(record); + colIdx = headerCt.getHeaderIndex(column); + + value = renderer.call( + column.scope || headerCt.ownerCt, + value, + metaData, + record, + rowIdx, + colIdx, + store, + view + ); + } + + field.setRawValue(value); + field.resetOriginalValue(); + }, + + beforeEdit: function() { + var me = this; + + if (me.isVisible() && me.errorSummary && !me.autoCancel && me.isDirty()) { + me.showToolTip(); + return false; + } + }, + + /** + * Start editing the specified grid at the specified position. + * @param {Ext.data.Model} record The Store data record which backs the row to be edited. + * @param {Ext.data.Model} columnHeader The Column object defining the column to be edited. + */ + startEdit: function(record, columnHeader) { + var me = this, + grid = me.editingPlugin.grid, + store = grid.store, + context = me.context = Ext.apply(me.editingPlugin.context, { + view: grid.getView(), + store: store + }); + + // make sure our row is selected before editing + context.grid.getSelectionModel().select(record); + + // Reload the record data + me.loadRecord(record); + + if (!me.isVisible()) { + me.show(); + me.focusContextCell(); + } else { + me.reposition({ + callback: this.focusContextCell + }); + } + }, + + // Focus the cell on start edit based upon the current context + focusContextCell: function() { + var field = this.getEditor(this.context.colIdx); + if (field && field.focus) { + field.focus(); + } + }, + + cancelEdit: function() { + var me = this, + form = me.getForm(), + fields = form.getFields(), + items = fields.items, + length = items.length, + i; + + me.hide(); + form.clearInvalid(); + + // temporarily suspend events on form fields before reseting the form to prevent the fields' change events from firing + for (i = 0; i < length; i++) { + items[i].suspendEvents(); + } + + form.reset(); + + for (i = 0; i < length; i++) { + items[i].resumeEvents(); + } + }, + + completeEdit: function() { + var me = this, + form = me.getForm(); + + if (!form.isValid()) { + return; + } + + form.updateRecord(me.context.record); + me.hide(); + return true; + }, + + onShow: function() { + this.callParent(arguments); + this.reposition(); + }, + + onHide: function() { + var me = this; + me.callParent(arguments); + if (me.tooltip) { + me.hideToolTip(); + } + if (me.context) { + me.context.view.focus(); + me.context = null; + } + }, + + isDirty: function() { + var me = this, + form = me.getForm(); + return form.isDirty(); + }, + + getToolTip: function() { + return this.tooltip || (this.tooltip = new Ext.tip.ToolTip({ + cls: Ext.baseCSSPrefix + 'grid-row-editor-errors', + title: this.errorsText, + autoHide: false, + closable: true, + closeAction: 'disable', + anchor: 'left' + })); + }, + + hideToolTip: function() { + var me = this, + tip = me.getToolTip(); + if (tip.rendered) { + tip.disable(); + } + me.hiddenTip = false; + }, + + showToolTip: function() { + var me = this, + tip = me.getToolTip(), + context = me.context, + row = Ext.get(context.row), + viewEl = context.grid.view.el; + + tip.setTarget(row); + tip.showAt([-10000, -10000]); + tip.update(me.getErrors()); + tip.mouseOffset = [viewEl.getWidth() - row.getWidth() + me.lastScrollLeft + 15, 0]; + me.repositionTip(); + tip.doLayout(); + tip.enable(); + }, + + repositionTip: function() { + var me = this, + tip = me.getToolTip(), + context = me.context, + row = Ext.get(context.row), + viewEl = context.grid.view.el, + viewHeight = viewEl.getHeight(), + viewTop = me.lastScrollTop, + viewBottom = viewTop + viewHeight, + rowHeight = row.getHeight(), + rowTop = row.dom.offsetTop, + rowBottom = rowTop + rowHeight; + + if (rowBottom > viewTop && rowTop < viewBottom) { + tip.show(); + me.hiddenTip = false; + } else { + tip.hide(); + me.hiddenTip = true; + } + }, + + getErrors: function() { + var me = this, + dirtyText = !me.autoCancel && me.isDirty() ? me.dirtyText + '
    ' : '', + errors = [], + fields = me.query('>[isFormField]'), + length = fields.length, + i; + + function createListItem(e) { + return '
  4. ' + e + '
  5. '; + } + + for (i = 0; i < length; i++) { + errors = errors.concat( + Ext.Array.map(fields[i].getErrors(), createListItem) + ); + } + + return dirtyText + '
      ' + errors.join('') + '
    '; + }, + + beforeDestroy: function(){ + Ext.destroy(this.floatingButtons, this.tooltip); + this.callParent(); + } +}); + +/** + * Plugin to add header resizing functionality to a HeaderContainer. + * Always resizing header to the left of the splitter you are resizing. + */ +Ext.define('Ext.grid.plugin.HeaderResizer', { + extend: 'Ext.AbstractPlugin', + requires: ['Ext.dd.DragTracker', 'Ext.util.Region'], + alias: 'plugin.gridheaderresizer', + + disabled: false, + + config: { + /** + * @cfg {Boolean} dynamic + * True to resize on the fly rather than using a proxy marker. + * @accessor + */ + dynamic: false + }, + + colHeaderCls: Ext.baseCSSPrefix + 'column-header', + + minColWidth: 40, + maxColWidth: 1000, + wResizeCursor: 'col-resize', + eResizeCursor: 'col-resize', + // not using w and e resize bc we are only ever resizing one + // column + //wResizeCursor: Ext.isWebKit ? 'w-resize' : 'col-resize', + //eResizeCursor: Ext.isWebKit ? 'e-resize' : 'col-resize', + + init: function(headerCt) { + this.headerCt = headerCt; + headerCt.on('render', this.afterHeaderRender, this, {single: true}); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + if (this.tracker) { + this.tracker.destroy(); + } + }, + + afterHeaderRender: function() { + var headerCt = this.headerCt, + el = headerCt.el; + + headerCt.mon(el, 'mousemove', this.onHeaderCtMouseMove, this); + + this.tracker = new Ext.dd.DragTracker({ + disabled: this.disabled, + onBeforeStart: Ext.Function.bind(this.onBeforeStart, this), + onStart: Ext.Function.bind(this.onStart, this), + onDrag: Ext.Function.bind(this.onDrag, this), + onEnd: Ext.Function.bind(this.onEnd, this), + tolerance: 3, + autoStart: 300, + el: el + }); + }, + + // As we mouse over individual headers, change the cursor to indicate + // that resizing is available, and cache the resize target header for use + // if/when they mousedown. + onHeaderCtMouseMove: function(e, t) { + var me = this, + prevSiblings, + headerEl, overHeader, resizeHeader, resizeHeaderOwnerGrid, ownerGrid; + + if (me.headerCt.dragging) { + if (me.activeHd) { + me.activeHd.el.dom.style.cursor = ''; + delete me.activeHd; + } + } else { + headerEl = e.getTarget('.' + me.colHeaderCls, 3, true); + + if (headerEl){ + overHeader = Ext.getCmp(headerEl.id); + + // On left edge, go back to the previous non-hidden header. + if (overHeader.isOnLeftEdge(e)) { + resizeHeader = overHeader.previousNode('gridcolumn:not([hidden]):not([isGroupHeader])') + // There may not *be* a previous non-hidden header. + if (resizeHeader) { + + ownerGrid = me.headerCt.up('tablepanel'); + resizeHeaderOwnerGrid = resizeHeader.up('tablepanel'); + + // Need to check that previousNode didn't go outside the current grid/tree + // But in the case of a Grid which contains a locked and normal grid, allow previousNode to jump + // from the first column of the normalGrid to the last column of the lockedGrid + if (!((resizeHeaderOwnerGrid === ownerGrid) || ((ownerGrid.ownerCt.isXType('tablepanel')) && ownerGrid.ownerCt.view.lockedGrid === resizeHeaderOwnerGrid))) { + resizeHeader = null; + } + } + } + // Else, if on the right edge, we're resizing the column we are over + else if (overHeader.isOnRightEdge(e)) { + resizeHeader = overHeader; + } + // Between the edges: we are not resizing + else { + resizeHeader = null; + } + + // We *are* resizing + if (resizeHeader) { + // If we're attempting to resize a group header, that cannot be resized, + // so find its last visible leaf header; Group headers are sized + // by the size of their child headers. + if (resizeHeader.isGroupHeader) { + prevSiblings = resizeHeader.getGridColumns(); + resizeHeader = prevSiblings[prevSiblings.length - 1]; + } + + // Check if the header is resizable. Continue checking the old "fixed" property, bug also + // check whether the resizablwe property is set to false. + if (resizeHeader && !(resizeHeader.fixed || (resizeHeader.resizable === false) || me.disabled)) { + me.activeHd = resizeHeader; + overHeader.el.dom.style.cursor = me.eResizeCursor; + } + // reset + } else { + overHeader.el.dom.style.cursor = ''; + delete me.activeHd; + } + } + } + }, + + // only start when there is an activeHd + onBeforeStart : function(e){ + var t = e.getTarget(); + // cache the activeHd because it will be cleared. + this.dragHd = this.activeHd; + + if (!!this.dragHd && !Ext.fly(t).hasCls(Ext.baseCSSPrefix + 'column-header-trigger') && !this.headerCt.dragging) { + //this.headerCt.dragging = true; + this.tracker.constrainTo = this.getConstrainRegion(); + return true; + } else { + this.headerCt.dragging = false; + return false; + } + }, + + // get the region to constrain to, takes into account max and min col widths + getConstrainRegion: function() { + var me = this, + dragHdEl = me.dragHd.el, + region = Ext.util.Region.getRegion(dragHdEl), + nextHd; + + // If forceFit, then right constraint is based upon not being able to force the next header + // beyond the minColWidth. If there is no next header, then the header may not be expanded. + if (me.headerCt.forceFit) { + nextHd = me.dragHd.nextNode('gridcolumn:not([hidden]):not([isGroupHeader])'); + } + + return region.adjust( + 0, + me.headerCt.forceFit ? (nextHd ? nextHd.getWidth() - me.minColWidth : 0) : me.maxColWidth - dragHdEl.getWidth(), + 0, + me.minColWidth + ); + }, + + // initialize the left and right hand side markers around + // the header that we are resizing + onStart: function(e){ + var me = this, + dragHd = me.dragHd, + dragHdEl = dragHd.el, + width = dragHdEl.getWidth(), + headerCt = me.headerCt, + t = e.getTarget(), + xy, gridSection, dragHct, firstSection, lhsMarker, rhsMarker, el, offsetLeft, offsetTop, topLeft, markerHeight, top; + + if (me.dragHd && !Ext.fly(t).hasCls(Ext.baseCSSPrefix + 'column-header-trigger')) { + headerCt.dragging = true; + } + + me.origWidth = width; + + // setup marker proxies + if (!me.dynamic) { + xy = dragHdEl.getXY(); + gridSection = headerCt.up('[scrollerOwner]'); + dragHct = me.dragHd.up(':not([isGroupHeader])'); + firstSection = dragHct.up(); + lhsMarker = gridSection.getLhsMarker(); + rhsMarker = gridSection.getRhsMarker(); + el = rhsMarker.parent(); + offsetLeft = el.getLocalX(); + offsetTop = el.getLocalY(); + topLeft = el.translatePoints(xy); + markerHeight = firstSection.body.getHeight() + headerCt.getHeight(); + top = topLeft.top - offsetTop; + + lhsMarker.setTop(top); + rhsMarker.setTop(top); + lhsMarker.setHeight(markerHeight); + rhsMarker.setHeight(markerHeight); + lhsMarker.setLeft(topLeft.left - offsetLeft); + rhsMarker.setLeft(topLeft.left + width - offsetLeft); + } + }, + + // synchronize the rhsMarker with the mouse movement + onDrag: function(e){ + if (!this.dynamic) { + var xy = this.tracker.getXY('point'), + gridSection = this.headerCt.up('[scrollerOwner]'), + rhsMarker = gridSection.getRhsMarker(), + el = rhsMarker.parent(), + topLeft = el.translatePoints(xy), + offsetLeft = el.getLocalX(); + + rhsMarker.setLeft(topLeft.left - offsetLeft); + // Resize as user interacts + } else { + this.doResize(); + } + }, + + onEnd: function(e){ + this.headerCt.dragging = false; + if (this.dragHd) { + if (!this.dynamic) { + var dragHd = this.dragHd, + gridSection = this.headerCt.up('[scrollerOwner]'), + lhsMarker = gridSection.getLhsMarker(), + rhsMarker = gridSection.getRhsMarker(), + offscreen = -9999; + + // hide markers + lhsMarker.setLeft(offscreen); + rhsMarker.setLeft(offscreen); + } + this.doResize(); + } + }, + + doResize: function() { + if (this.dragHd) { + var dragHd = this.dragHd, + nextHd, + offset = this.tracker.getOffset('point'); + + // resize the dragHd + if (dragHd.flex) { + delete dragHd.flex; + } + + Ext.suspendLayouts(); + + // Set the new column width. + dragHd.setWidth(this.origWidth + offset[0]); + + // In the case of forceFit, change the following Header width. + // Constraining so that neither neighbour can be sized to below minWidth is handled in getConstrainRegion + if (this.headerCt.forceFit) { + nextHd = dragHd.nextNode('gridcolumn:not([hidden]):not([isGroupHeader])'); + if (nextHd) { + delete nextHd.flex; + nextHd.setWidth(nextHd.getWidth() - offset[0]); + } + } + + // Apply the two width changes by laying out the owning HeaderContainer + Ext.resumeLayouts(true); + } + }, + + disable: function() { + this.disabled = true; + if (this.tracker) { + this.tracker.disable(); + } + }, + + enable: function() { + this.disabled = false; + if (this.tracker) { + this.tracker.enable(); + } + } +}); + +/** + * @private + */ +Ext.define('Ext.grid.header.DragZone', { + extend: 'Ext.dd.DragZone', + colHeaderCls: Ext.baseCSSPrefix + 'column-header', + maxProxyWidth: 120, + + constructor: function(headerCt) { + this.headerCt = headerCt; + this.ddGroup = this.getDDGroup(); + this.callParent([headerCt.el]); + this.proxy.el.addCls(Ext.baseCSSPrefix + 'grid-col-dd'); + }, + + getDDGroup: function() { + return 'header-dd-zone-' + this.headerCt.up('[scrollerOwner]').id; + }, + + getDragData: function(e) { + var header = e.getTarget('.'+this.colHeaderCls), + headerCmp, + ddel; + + if (header) { + headerCmp = Ext.getCmp(header.id); + if (!this.headerCt.dragging && headerCmp.draggable && !(headerCmp.isOnLeftEdge(e) || headerCmp.isOnRightEdge(e))) { + ddel = document.createElement('div'); + ddel.innerHTML = Ext.getCmp(header.id).text; + return { + ddel: ddel, + header: headerCmp + }; + } + } + return false; + }, + + onBeforeDrag: function() { + return !(this.headerCt.dragging || this.disabled); + }, + + onInitDrag: function() { + this.headerCt.dragging = true; + this.callParent(arguments); + }, + + onDragDrop: function() { + this.headerCt.dragging = false; + this.callParent(arguments); + }, + + afterRepair: function() { + this.callParent(); + this.headerCt.dragging = false; + }, + + getRepairXY: function() { + return this.dragData.header.el.getXY(); + }, + + disable: function() { + this.disabled = true; + }, + + enable: function() { + this.disabled = false; + } +}); + +/** + * @private + */ +Ext.define('Ext.grid.header.DropZone', { + extend: 'Ext.dd.DropZone', + colHeaderCls: Ext.baseCSSPrefix + 'column-header', + proxyOffsets: [-4, -9], + + constructor: function(headerCt){ + this.headerCt = headerCt; + this.ddGroup = this.getDDGroup(); + this.callParent([headerCt.el]); + }, + + getDDGroup: function() { + return 'header-dd-zone-' + this.headerCt.up('[scrollerOwner]').id; + }, + + getTargetFromEvent : function(e){ + return e.getTarget('.' + this.colHeaderCls); + }, + + getTopIndicator: function() { + if (!this.topIndicator) { + this.topIndicator = Ext.DomHelper.append(Ext.getBody(), { + cls: "col-move-top", + html: " " + }, true); + } + return this.topIndicator; + }, + + getBottomIndicator: function() { + if (!this.bottomIndicator) { + this.bottomIndicator = Ext.DomHelper.append(Ext.getBody(), { + cls: "col-move-bottom", + html: " " + }, true); + } + return this.bottomIndicator; + }, + + getLocation: function(e, t) { + var x = e.getXY()[0], + region = Ext.fly(t).getRegion(), + pos, header; + + if ((region.right - x) <= (region.right - region.left) / 2) { + pos = "after"; + } else { + pos = "before"; + } + return { + pos: pos, + header: Ext.getCmp(t.id), + node: t + }; + }, + + positionIndicator: function(draggedHeader, node, e){ + var location = this.getLocation(e, node), + header = location.header, + pos = location.pos, + nextHd = draggedHeader.nextSibling('gridcolumn:not([hidden])'), + prevHd = draggedHeader.previousSibling('gridcolumn:not([hidden])'), + topIndicator, bottomIndicator, topAnchor, bottomAnchor, + topXY, bottomXY, headerCtEl, minX, maxX, + allDropZones, ln, i, dropZone; + + // Cannot drag beyond non-draggable start column + if (!header.draggable && header.getIndex() === 0) { + return false; + } + + this.lastLocation = location; + + if ((draggedHeader !== header) && + ((pos === "before" && nextHd !== header) || + (pos === "after" && prevHd !== header)) && + !header.isDescendantOf(draggedHeader)) { + + // As we move in between different DropZones that are in the same + // group (such as the case when in a locked grid), invalidateDrop + // on the other dropZones. + allDropZones = Ext.dd.DragDropManager.getRelated(this); + ln = allDropZones.length; + i = 0; + + for (; i < ln; i++) { + dropZone = allDropZones[i]; + if (dropZone !== this && dropZone.invalidateDrop) { + dropZone.invalidateDrop(); + } + } + + + this.valid = true; + topIndicator = this.getTopIndicator(); + bottomIndicator = this.getBottomIndicator(); + if (pos === 'before') { + topAnchor = 'tl'; + bottomAnchor = 'bl'; + } else { + topAnchor = 'tr'; + bottomAnchor = 'br'; + } + topXY = header.el.getAnchorXY(topAnchor); + bottomXY = header.el.getAnchorXY(bottomAnchor); + + // constrain the indicators to the viewable section + headerCtEl = this.headerCt.el; + minX = headerCtEl.getLeft(); + maxX = headerCtEl.getRight(); + + topXY[0] = Ext.Number.constrain(topXY[0], minX, maxX); + bottomXY[0] = Ext.Number.constrain(bottomXY[0], minX, maxX); + + // adjust by offsets, this is to center the arrows so that they point + // at the split point + topXY[0] -= 4; + topXY[1] -= 9; + bottomXY[0] -= 4; + + // position and show indicators + topIndicator.setXY(topXY); + bottomIndicator.setXY(bottomXY); + topIndicator.show(); + bottomIndicator.show(); + // invalidate drop operation and hide indicators + } else { + this.invalidateDrop(); + } + }, + + invalidateDrop: function() { + this.valid = false; + this.hideIndicators(); + }, + + onNodeOver: function(node, dragZone, e, data) { + var me = this, + header = me.headerCt, + doPosition = true, + from = data.header, + to; + + if (data.header.el.dom === node) { + doPosition = false; + } else { + to = me.getLocation(e, node).header; + doPosition = (from.ownerCt === to.ownerCt) || (!from.ownerCt.sealed && !to.ownerCt.sealed); + } + + if (doPosition) { + me.positionIndicator(data.header, node, e); + } else { + me.valid = false; + } + return me.valid ? me.dropAllowed : me.dropNotAllowed; + }, + + hideIndicators: function() { + this.getTopIndicator().hide(); + this.getBottomIndicator().hide(); + }, + + onNodeOut: function() { + this.hideIndicators(); + }, + + onNodeDrop: function(node, dragZone, e, data) { + if (this.valid) { + var dragHeader = data.header, + lastLocation = this.lastLocation, + targetHeader = lastLocation.header, + fromCt = dragHeader.ownerCt, + fromHeader = dragHeader.up('headercontainer:not(gridcolumn)'), + localFromIdx = fromCt.items.indexOf(dragHeader), // Container.items is a MixedCollection + toCt = targetHeader.ownerCt, + toHeader = targetHeader.up('headercontainer:not(gridcolumn)'), + localToIdx = toCt.items.indexOf(targetHeader), + headerCt = this.headerCt, + fromIdx = headerCt.getHeaderIndex(dragHeader), + colsToMove = dragHeader.isGroupHeader ? dragHeader.query(':not([isGroupHeader])').length : 1, + toIdx = headerCt.getHeaderIndex(targetHeader), + groupCt, + scrollerOwner; + + // Drop position is to the right of the targetHeader, increment the toIdx correctly + if (lastLocation.pos === 'after') { + localToIdx++; + toIdx += targetHeader.isGroupHeader ? targetHeader.query(':not([isGroupHeader])').length : 1; + } + + // If we are dragging in between two HeaderContainers that have had the lockable + // mixin injected we will lock/unlock headers in between sections, and then continue + // with another execution of onNodeDrop to ensure the header is dropped into the correct group + if (fromHeader !== toHeader && fromHeader.lockableInjected && toHeader.lockableInjected && toHeader.lockedCt) { + scrollerOwner = fromCt.up('[scrollerOwner]'); + scrollerOwner.lock(dragHeader, localToIdx); + + // Now that the header has been transferred into the correct HeaderContainer, recurse, and continue the drop operation with the same dragData + this.onNodeDrop(node, dragZone, e, data); + } else if (fromHeader !== toHeader && fromHeader.lockableInjected && toHeader.lockableInjected && fromHeader.lockedCt) { + scrollerOwner = fromCt.up('[scrollerOwner]'); + scrollerOwner.unlock(dragHeader, localToIdx); + + // Now that the header has been transferred into the correct HeaderContainer, recurse, and continue the drop operation with the same dragData + this.onNodeDrop(node, dragZone, e, data); + } + + // This is a drop within the same HeaderContainer. + else { + this.invalidateDrop(); + + // If dragging rightwards, then after removal, the insertion index will be less when moving + // within the same container. + if ((fromCt === toCt) && (localToIdx > localFromIdx)) { + + // Wer're dragging whole headers, so locally, the adjustment is only one + localToIdx -= 1; + } + + // Suspend layouts while we sort all this out. + Ext.suspendLayouts(); + + // Remove dragged header from where it was. + if (fromCt !== toCt) { + fromCt.remove(dragHeader, false); + + // Dragged the last header out of the fromCt group... The fromCt group must die + if (fromCt.isGroupHeader) { + if (!fromCt.items.getCount()) { + groupCt = fromCt.ownerCt; + groupCt.remove(fromCt, false); + fromCt.el.dom.parentNode.removeChild(fromCt.el.dom); + } + } + } + + // Move dragged header into its drop position + if (fromCt === toCt) { + toCt.move(localFromIdx, localToIdx); + } else { + toCt.insert(localToIdx, dragHeader); + } + + // Group headers acquire the aggregate width of their child headers + // Therefore a child header may not flex; it must contribute a fixed width. + // But we restore the flex value when moving back into the main header container + if (toCt.isGroupHeader) { + // Adjust the width of the "to" group header only if we dragged in from somewhere else. + if (toCt !== fromCt) { + dragHeader.savedFlex = dragHeader.flex; + delete dragHeader.flex; + dragHeader.width = dragHeader.getWidth(); + } + } else { + if (dragHeader.savedFlex) { + dragHeader.flex = dragHeader.savedFlex; + delete dragHeader.width; + } + } + + // Refresh columns cache in case we remove an emptied group column + headerCt.purgeCache(); + Ext.resumeLayouts(true); + headerCt.onHeaderMoved(dragHeader, colsToMove, fromIdx, toIdx); + + // Emptied group header can only be destroyed after the header and grid have been refreshed + if (!fromCt.items.getCount()) { + fromCt.destroy(); + } + } + } + } +}); + +/** + * @private + */ +Ext.define('Ext.grid.plugin.HeaderReorderer', { + extend: 'Ext.AbstractPlugin', + requires: ['Ext.grid.header.DragZone', 'Ext.grid.header.DropZone'], + alias: 'plugin.gridheaderreorderer', + + init: function(headerCt) { + this.headerCt = headerCt; + headerCt.on({ + render: this.onHeaderCtRender, + single: true, + scope: this + }); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + Ext.destroy(this.dragZone, this.dropZone); + }, + + onHeaderCtRender: function() { + var me = this; + + me.dragZone = new Ext.grid.header.DragZone(me.headerCt); + me.dropZone = new Ext.grid.header.DropZone(me.headerCt); + if (me.disabled) { + me.dragZone.disable(); + } + }, + + enable: function() { + this.disabled = false; + if (this.dragZone) { + this.dragZone.enable(); + } + }, + + disable: function() { + this.disabled = true; + if (this.dragZone) { + this.dragZone.disable(); + } + } +}); + +/** + * Container which holds headers and is docked at the top or bottom of a TablePanel. + * The HeaderContainer drives resizing/moving/hiding of columns within the TableView. + * As headers are hidden, moved or resized the headercontainer is responsible for + * triggering changes within the view. + */ +Ext.define('Ext.grid.header.Container', { + extend: 'Ext.container.Container', + requires: [ + 'Ext.grid.ColumnLayout', + 'Ext.grid.plugin.HeaderResizer', + 'Ext.grid.plugin.HeaderReorderer' + ], + uses: [ + 'Ext.grid.column.Column', + 'Ext.menu.Menu', + 'Ext.menu.CheckItem', + 'Ext.menu.Separator' + ], + border: true, + + alias: 'widget.headercontainer', + + baseCls: Ext.baseCSSPrefix + 'grid-header-ct', + dock: 'top', + + /** + * @cfg {Number} weight + * HeaderContainer overrides the default weight of 0 for all docked items to 100. + * This is so that it has more priority over things like toolbars. + */ + weight: 100, + + defaultType: 'gridcolumn', + + detachOnRemove: false, + + /** + * @cfg {Number} defaultWidth + * Width of the header if no width or flex is specified. + */ + defaultWidth: 100, + + /** + * @cfg {Boolean} [sealed=false] + * Specify as `true` to constrain column dragging so that a column cannot be dragged into or out of this column. + * + * **Note that this config is only valid for column headers which contain child column headers, eg:** + * { + * sealed: true + * text: 'ExtJS', + * columns: [{ + * text: '3.0.4', + * dataIndex: 'ext304' + * }, { + * text: '4.1.0', + * dataIndex: 'ext410' + * } + * } + * + */ + + // + sortAscText: 'Sort Ascending', + // + // + sortDescText: 'Sort Descending', + // + // + sortClearText: 'Clear Sort', + // + // + columnsText: 'Columns', + // + + headerOpenCls: Ext.baseCSSPrefix + 'column-header-open', + + // private; will probably be removed by 4.0 + triStateSort: false, + + ddLock: false, + + dragging: false, + + /** + * @property {Boolean} isGroupHeader + * True if this HeaderContainer is in fact a group header which contains sub headers. + */ + + /** + * @cfg {Boolean} sortable + * Provides the default sortable state for all Headers within this HeaderContainer. + * Also turns on or off the menus in the HeaderContainer. Note that the menu is + * shared across every header and therefore turning it off will remove the menu + * items for every header. + */ + sortable: true, + + initComponent: function() { + var me = this; + + me.headerCounter = 0; + me.plugins = me.plugins || []; + + // TODO: Pass in configurations to turn on/off dynamic + // resizing and disable resizing all together + + // Only set up a Resizer and Reorderer for the topmost HeaderContainer. + // Nested Group Headers are themselves HeaderContainers + if (!me.isHeader) { + if (me.enableColumnResize) { + me.resizer = new Ext.grid.plugin.HeaderResizer(); + me.plugins.push(me.resizer); + } + if (me.enableColumnMove) { + me.reorderer = new Ext.grid.plugin.HeaderReorderer(); + me.plugins.push(me.reorderer); + } + } + + // Base headers do not need a box layout + if (me.isHeader && !me.items) { + me.layout = me.layout || 'auto'; + } + // HeaderContainer and Group header needs a gridcolumn layout. + else { + me.layout = Ext.apply({ + type: 'gridcolumn', + align: 'stretchmax' + }, me.initialConfig.layout); + } + me.defaults = me.defaults || {}; + Ext.applyIf(me.defaults, { + triStateSort: me.triStateSort, + sortable: me.sortable + }); + + me.menuTask = new Ext.util.DelayedTask(me.updateMenuDisabledState, me); + me.callParent(); + me.addEvents( + /** + * @event columnresize + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + * @param {Number} width + */ + 'columnresize', + + /** + * @event headerclick + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + * @param {Ext.EventObject} e + * @param {HTMLElement} t + */ + 'headerclick', + + /** + * @event headertriggerclick + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + * @param {Ext.EventObject} e + * @param {HTMLElement} t + */ + 'headertriggerclick', + + /** + * @event columnmove + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + * @param {Number} fromIdx + * @param {Number} toIdx + */ + 'columnmove', + /** + * @event columnhide + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + */ + 'columnhide', + /** + * @event columnshow + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + */ + 'columnshow', + /** + * @event sortchange + * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers. + * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition + * @param {String} direction + */ + 'sortchange', + /** + * @event menucreate + * Fired immediately after the column header menu is created. + * @param {Ext.grid.header.Container} ct This instance + * @param {Ext.menu.Menu} menu The Menu that was created + */ + 'menucreate' + ); + }, + + onDestroy: function() { + var me = this; + + me.menuTask.cancel(); + Ext.destroy(me.resizer, me.reorderer); + me.callParent(); + }, + + applyColumnsState: function(columns) { + if (!columns || !columns.length) { + return; + } + + var me = this, + items = me.items.items, + count = items.length, + i = 0, + length = columns.length, + c, col, columnState, index; + + for (c = 0; c < length; c++) { + columnState = columns[c]; + + for (index = count; index--; ) { + col = items[index]; + if (col.getStateId && col.getStateId() == columnState.id) { + // If a column in the new grid matches up with a saved state... + // Ensure that the column is restored to the state order. + // i is incremented upon every column match, so all persistent + // columns are ordered before any new columns. + if (i !== index) { + me.moveHeader(index, i); + } + + if (col.applyColumnState) { + col.applyColumnState(columnState); + } + ++i; + break; + } + } + } + }, + + getColumnsState: function () { + var me = this, + columns = [], + state; + + me.items.each(function (col) { + state = col.getColumnState && col.getColumnState(); + if (state) { + columns.push(state); + } + }); + + return columns; + }, + + // Invalidate column cache on add + // We cannot refresh the View on every add because this method is called + // when the HeaderDropZone moves Headers around, that will also refresh the view + onAdd: function(c) { + var me = this, + headerCt = me.isHeader ? me.getOwnerHeaderCt() : me; + + if (!c.headerId) { + c.headerId = c.initialConfig.id || Ext.id(null, 'header-'); + } + + if (!c.stateId) { + // This was the headerId generated in 4.0, so to preserve saved state, we now + // assign a default stateId in that same manner. The stateId's of a column are + // not global at the stateProvider, but are local to the grid state data. The + // headerId should still follow our standard naming convention. + c.stateId = c.initialConfig.id || ('h' + (++me.headerCounter)); + } + + if (Ext.global.console && Ext.global.console.warn) { + if (!me._usedIDs) { + me._usedIDs = {}; + } + if (me._usedIDs[c.headerId]) { + Ext.global.console.warn(this.$className, 'attempted to reuse an existing id', c.headerId); + } + me._usedIDs[c.headerId] = true; + } + me.callParent(arguments); + + // Upon add of any column we need to purge the *HeaderContainer's* cache of leaf view columns. + if (headerCt) { + headerCt.purgeCache(); + } + }, + + // Invalidate column cache on remove + // We cannot refresh the View on every remove because this method is called + // when the HeaderDropZone moves Headers around, that will also refresh the view + onRemove: function(c) { + var me = this, + headerCt = me.isHeader ? me.getOwnerHeaderCt() : me; + + me.callParent(arguments); + + if (!me._usedIDs) { + me._usedIDs = {}; + } + delete me._usedIDs[c.headerId]; + + // Upon removal of any column we need to purge the *HeaderContainer's* cache of leaf view columns. + if (headerCt) { + me.purgeCache(); + } + }, + + // @private + applyDefaults: function(config) { + var ret; + /* + * Ensure header.Container defaults don't get applied to a RowNumberer + * if an xtype is supplied. This isn't an ideal solution however it's + * much more likely that a RowNumberer with no options will be created, + * wanting to use the defaults specified on the class as opposed to + * those setup on the Container. + */ + if (config && !config.isComponent && config.xtype == 'rownumberer') { + ret = config; + } else { + ret = this.callParent(arguments); + + // Apply default width unless it's a group header (in which case it must be left to shrinkwrap), or it's flexed + if (!config.isGroupHeader && !('width' in ret) && !ret.flex) { + ret.width = this.defaultWidth; + } + } + return ret; + }, + + afterRender: function() { + this.callParent(); + this.setSortState(); + + }, + + setSortState: function(){ + var store = this.up('[store]').store, + // grab the first sorter, since there may also be groupers + // in this collection + first = store.getFirstSorter(), + hd; + + if (first) { + hd = this.down('gridcolumn[dataIndex=' + first.property +']'); + if (hd) { + hd.setSortState(first.direction, false, true); + } + } else { + this.clearOtherSortStates(null); + } + }, + + getHeaderMenu: function(){ + var menu = this.getMenu(), + item; + + if (menu) { + item = menu.child('#columnItem'); + if (item) { + return item.menu; + } + } + return null; + }, + + onHeaderVisibilityChange: function(header, visible){ + var me = this, + menu = me.getHeaderMenu(), + item; + + if (menu) { + // If the header was hidden programmatically, sync the Menu state + item = me.getMenuItemForHeader(menu, header); + if (item) { + item.setChecked(visible, true); + } + // delay this since the headers may fire a number of times if we're hiding/showing groups + me.menuTask.delay(50); + } + }, + + /** + * @private + * Gets all "leaf" menu nodes and returns the checked count for those leaves. + * Only includes columns that are hideable via the menu + */ + getLeafMenuItems: function() { + var me = this, + columns = me.getGridColumns(), + items = [], + i = 0, + count = 0, + len = columns.length, + menu = me.getMenu(), + item; + + for (; i < len; ++i) { + item = columns[i]; + if (item.hideable) { + item = me.getMenuItemForHeader(menu, item); + if (item) { + items.push(item); + if (item.checked) { + ++count; + } + } + } else if (!item.hidden && !item.menuDisabled) { + ++count; + } + } + + return { + items: items, + checkedCount: count + }; + }, + + updateMenuDisabledState: function(){ + var me = this, + result = me.getLeafMenuItems(), + total = result.checkedCount, + items = result.items, + len = items.length, + i = 0, + rootItem = me.getMenu().child('#columnItem'); + + if (total <= 1) { + // only one column visible, prevent hiding of the remaining item + me.disableMenuItems(rootItem, Ext.ComponentQuery.query('[checked=true]', items)[0]); + } else { + // at least 2 visible, set the state appropriately + for (; i < len; ++i) { + me.setMenuItemState(total, rootItem, items[i]); + } + } + }, + + disableMenuItems: function(rootItem, item){ + while (item && item != rootItem) { + item.disableCheckChange(); + item = item.parentMenu.ownerItem; + } + }, + + setMenuItemState: function(total, rootItem, item){ + var parentMenu, + checkedChildren; + + while (item && item != rootItem) { + parentMenu = item.parentMenu; + checkedChildren = item.parentMenu.query('[checked=true]:not([menu])').length; + item.enableCheckChange(); + item = parentMenu.ownerItem; + if (checkedChildren === total) { + // contains all the checked children, jump out the item and all parents + break; + } + } + + // while we're not at the top, disable from the current item up + this.disableMenuItems(rootItem, item); + }, + + getMenuItemForHeader: function(menu, header){ + return header ? menu.down('menucheckitem[headerId=' + header.id + ']') : null; + }, + + onHeaderShow: function(header) { + // Pass up to the GridSection + var me = this, + gridSection = me.ownerCt; + + me.onHeaderVisibilityChange(header, true); + + // Only update the grid UI when we are notified about base level Header shows; + // Group header shows just cause a layout of the HeaderContainer + if (!header.isGroupHeader) { + if (gridSection) { + gridSection.onHeaderShow(me, header); + } + } + me.fireEvent('columnshow', me, header); + }, + + onHeaderHide: function(header) { + // Pass up to the GridSection + var me = this, + gridSection = me.ownerCt; + + me.onHeaderVisibilityChange(header, false); + + // Only update the UI when we are notified about base level Header hides; + if (!header.isGroupHeader) { + if (gridSection) { + gridSection.onHeaderHide(me, header); + } + } + me.fireEvent('columnhide', me, header); + }, + + /** + * Temporarily lock the headerCt. This makes it so that clicking on headers + * don't trigger actions like sorting or opening of the header menu. This is + * done because extraneous events may be fired on the headers after interacting + * with a drag drop operation. + * @private + */ + tempLock: function() { + this.ddLock = true; + Ext.Function.defer(function() { + this.ddLock = false; + }, 200, this); + }, + + onHeaderResize: function(header, w, suppressFocus) { + var me = this, + view = me.view, + gridSection = me.ownerCt; + + // Do not react to header sizing during initial Panel layout when there is no view content to size. + if (view && view.table.dom) { + me.tempLock(); + if (gridSection) { + gridSection.onHeaderResize(me, header, w); + } + } + me.fireEvent('columnresize', this, header, w); + }, + + onHeaderClick: function(header, e, t) { + header.fireEvent('headerclick', this, header, e, t); + this.fireEvent("headerclick", this, header, e, t); + }, + + onHeaderTriggerClick: function(header, e, t) { + // generate and cache menu, provide ability to cancel/etc + var me = this; + if (header.fireEvent('headertriggerclick', me, header, e, t) !== false && me.fireEvent("headertriggerclick", me, header, e, t) !== false) { + me.showMenuBy(t, header); + } + }, + + showMenuBy: function(t, header) { + var menu = this.getMenu(), + ascItem = menu.down('#ascItem'), + descItem = menu.down('#descItem'), + sortableMth; + + menu.activeHeader = menu.ownerCt = header; + menu.setFloatParent(header); + // TODO: remove coupling to Header's titleContainer el + header.titleEl.addCls(this.headerOpenCls); + + // enable or disable asc & desc menu items based on header being sortable + sortableMth = header.sortable ? 'enable' : 'disable'; + if (ascItem) { + ascItem[sortableMth](); + } + if (descItem) { + descItem[sortableMth](); + } + menu.showBy(t); + }, + + // remove the trigger open class when the menu is hidden + onMenuDeactivate: function() { + var menu = this.getMenu(); + // TODO: remove coupling to Header's titleContainer el + menu.activeHeader.titleEl.removeCls(this.headerOpenCls); + }, + + moveHeader: function(fromIdx, toIdx) { + + // An automatically expiring lock + this.tempLock(); + this.onHeaderMoved(this.move(fromIdx, toIdx), 1, fromIdx, toIdx); + }, + + purgeCache: function() { + var me = this; + // Delete column cache - column order has changed. + delete me.gridDataColumns; + delete me.hideableColumns; + + // Menu changes when columns are moved. It will be recreated. + if (me.menu) { + // Must hide before destroy so that trigger el is deactivated + me.menu.hide(); + me.menu.destroy(); + delete me.menu; + } + }, + + onHeaderMoved: function(header, colsToMove, fromIdx, toIdx) { + var me = this, + gridSection = me.ownerCt; + + if (gridSection && gridSection.onHeaderMove) { + gridSection.onHeaderMove(me, header, colsToMove, fromIdx, toIdx); + } + me.fireEvent("columnmove", me, header, fromIdx, toIdx); + }, + + /** + * Gets the menu (and will create it if it doesn't already exist) + * @private + */ + getMenu: function() { + var me = this; + + if (!me.menu) { + me.menu = new Ext.menu.Menu({ + hideOnParentHide: false, // Persists when owning ColumnHeader is hidden + items: me.getMenuItems(), + listeners: { + deactivate: me.onMenuDeactivate, + scope: me + } + }); + me.updateMenuDisabledState(); + me.fireEvent('menucreate', me, me.menu); + } + return me.menu; + }, + + /** + * Returns an array of menu items to be placed into the shared menu + * across all headers in this header container. + * @returns {Array} menuItems + */ + getMenuItems: function() { + var me = this, + menuItems = [], + hideableColumns = me.enableColumnHide ? me.getColumnMenu(me) : null; + + if (me.sortable) { + menuItems = [{ + itemId: 'ascItem', + text: me.sortAscText, + cls: Ext.baseCSSPrefix + 'hmenu-sort-asc', + handler: me.onSortAscClick, + scope: me + },{ + itemId: 'descItem', + text: me.sortDescText, + cls: Ext.baseCSSPrefix + 'hmenu-sort-desc', + handler: me.onSortDescClick, + scope: me + }]; + } + if (hideableColumns && hideableColumns.length) { + menuItems.push('-', { + itemId: 'columnItem', + text: me.columnsText, + cls: Ext.baseCSSPrefix + 'cols-icon', + menu: hideableColumns + }); + } + return menuItems; + }, + + // sort asc when clicking on item in menu + onSortAscClick: function() { + var menu = this.getMenu(), + activeHeader = menu.activeHeader; + + activeHeader.setSortState('ASC'); + }, + + // sort desc when clicking on item in menu + onSortDescClick: function() { + var menu = this.getMenu(), + activeHeader = menu.activeHeader; + + activeHeader.setSortState('DESC'); + }, + + /** + * Returns an array of menu CheckItems corresponding to all immediate children + * of the passed Container which have been configured as hideable. + */ + getColumnMenu: function(headerContainer) { + var menuItems = [], + i = 0, + item, + items = headerContainer.query('>gridcolumn[hideable]'), + itemsLn = items.length, + menuItem; + + for (; i < itemsLn; i++) { + item = items[i]; + menuItem = new Ext.menu.CheckItem({ + text: item.menuText || item.text, + checked: !item.hidden, + hideOnClick: false, + headerId: item.id, + menu: item.isGroupHeader ? this.getColumnMenu(item) : undefined, + checkHandler: this.onColumnCheckChange, + scope: this + }); + menuItems.push(menuItem); + + // If the header is ever destroyed - for instance by dragging out the last remaining sub header, + // then the associated menu item must also be destroyed. + item.on({ + destroy: Ext.Function.bind(menuItem.destroy, menuItem) + }); + } + return menuItems; + }, + + onColumnCheckChange: function(checkItem, checked) { + var header = Ext.getCmp(checkItem.headerId); + header[checked ? 'show' : 'hide'](); + }, + + /** + * Get the columns used for generating a template via TableChunker. + * Returns an array of all columns and their + * + * - dataIndex + * - align + * - width + * - id + * - columnId - used to create an identifying CSS class + * - cls The tdCls configuration from the Column object + * + * @private + */ + getColumnsForTpl: function(flushCache) { + var cols = [], + headers = this.getGridColumns(flushCache), + headersLn = headers.length, + i = 0, + header, + width; + + for (; i < headersLn; i++) { + header = headers[i]; + + if (header.hidden || header.up('headercontainer[hidden=true]')) { + width = 0; + } else { + width = header.getDesiredWidth(); + } + cols.push({ + dataIndex: header.dataIndex, + align: header.align, + width: width, + id: header.id, + cls: header.tdCls, + columnId: header.getItemId() + }); + } + return cols; + }, + + /** + * Returns the number of grid columns descended from this HeaderContainer. + * Group Columns are HeaderContainers. All grid columns are returned, including hidden ones. + */ + getColumnCount: function() { + return this.getGridColumns().length; + }, + + /** + * Gets the full width of all columns that are visible. + */ + getFullWidth: function(flushCache) { + var fullWidth = 0, + headers = this.getVisibleGridColumns(flushCache), + headersLn = headers.length, + i = 0, + header; + + + for (; i < headersLn; i++) { + header = headers[i]; + // use headers getDesiredWidth if its there + if (header.getDesiredWidth) { + fullWidth += header.getDesiredWidth() || 0; + // if injected a diff cmp use getWidth + } else { + fullWidth += header.getWidth(); + } + } + return fullWidth; + }, + + // invoked internally by a header when not using triStateSorting + clearOtherSortStates: function(activeHeader) { + var headers = this.getGridColumns(), + headersLn = headers.length, + i = 0; + + for (; i < headersLn; i++) { + if (headers[i] !== activeHeader) { + // unset the sortstate and dont recurse + headers[i].setSortState(null, true); + } + } + }, + + /** + * Returns an array of the **visible** columns in the grid. This goes down to the lowest column header + * level, and does not return **grouped** headers which contain sub headers. + * @param {Boolean} refreshCache If omitted, the cached set of columns will be returned. Pass true to refresh the cache. + * @returns {Array} + */ + getVisibleGridColumns: function(refreshCache) { + return Ext.ComponentQuery.query(':not([hidden])', this.getGridColumns(refreshCache)); + }, + + /** + * Returns an array of all columns which map to Store fields. This goes down to the lowest column header + * level, and does not return **grouped** headers which contain sub headers. + * @param {Boolean} refreshCache If omitted, the cached set of columns will be returned. Pass true to refresh the cache. + * @returns {Array} + */ + getGridColumns: function(refreshCache) { + var me = this, + result = refreshCache ? null : me.gridDataColumns; + + // Not already got the column cache, so collect the base columns + if (!result) { + me.gridDataColumns = result = []; + me.cascade(function(c) { + if ((c !== me) && !c.isGroupHeader) { + result.push(c); + } + }); + } + + return result; + }, + + /** + * @private + * For use by column headers in determining whether there are any hideable columns when deciding whether or not + * the header menu should be disabled. + */ + getHideableColumns: function(refreshCache) { + var me = this, + result = refreshCache ? null : me.hideableColumns; + + if (!result) { + result = me.hideableColumns = me.query('[hideable]'); + } + return result; + }, + + /** + * Returns the index of a leaf level header regardless of what the nesting + * structure is. + * + * If a group header is passed, the index of the first leaf level heder within it is returned. + * + * @param {Ext.grid.column.Column} header The header to find the index of + * @return {Number} The index of the specified column header + */ + getHeaderIndex: function(header) { + // If we are being asked the index of a group header, find the first leaf header node, and return the index of that + if (header.isGroupHeader) { + header = header.down(':not([isgroupHeader])'); + } + return Ext.Array.indexOf(this.getGridColumns(), header); + }, + + /** + * Get a leaf level header by index regardless of what the nesting + * structure is. + * @param {Number} The column index for which to retrieve the column. + */ + getHeaderAtIndex: function(index) { + var columns = this.getGridColumns(); + return columns.length ? columns[index] : null; + }, + + /** + * When passed a column index, returns the closet *visible* column to that. If the column at the passed index is visible, + * that is returned. If it is hidden, either the next visible, or the previous visible column is returned. + * @param {Number} index Position at which to find the closest visible column. + */ + getVisibleHeaderClosestToIndex: function(index) { + var result = this.getHeaderAtIndex(index); + if (result && result.hidden) { + result = result.next(':not([hidden])') || result.prev(':not([hidden])'); + } + return result; + }, + + /** + * Maps the record data to base it on the header id's. + * This correlates to the markup/template generated by + * TableChunker. + */ + prepareData: function(data, rowIdx, record, view, panel) { + var me = this, + obj = {}, + headers = me.gridDataColumns || me.getGridColumns(), + headersLn = headers.length, + colIdx = 0, + header, + headerId, + renderer, + value, + metaData, + store = panel.store; + + for (; colIdx < headersLn; colIdx++) { + metaData = { + tdCls: '', + style: '' + }; + header = headers[colIdx]; + headerId = header.id; + renderer = header.renderer; + value = data[header.dataIndex]; + + if (typeof renderer == "function") { + value = renderer.call( + header.scope || me.ownerCt, + value, + // metadata per cell passing an obj by reference so that + // it can be manipulated inside the renderer + metaData, + record, + rowIdx, + colIdx, + store, + view + ); + } + + if (metaData.css) { + // This warning attribute is used by the compat layer + obj.cssWarning = true; + metaData.tdCls = metaData.css; + delete metaData.css; + } + if (me.markDirty) { + obj[headerId + '-modified'] = record.isModified(header.dataIndex) ? Ext.baseCSSPrefix + 'grid-dirty-cell' : ''; + } + obj[headerId+'-tdCls'] = metaData.tdCls; + obj[headerId+'-tdAttr'] = metaData.tdAttr; + obj[headerId+'-style'] = metaData.style; + if (typeof value === 'undefined' || value === null || value === '') { + value = header.emptyCellText; + } + obj[headerId] = value; + } + return obj; + }, + + expandToFit: function(header) { + var view = this.view; + if (view) { + view.expandToFit(header); + } + } +}); + +/** + * This class specifies the definition for a column inside a {@link Ext.grid.Panel}. It encompasses + * both the grid header configuration as well as displaying data within the grid itself. If the + * {@link #columns} configuration is specified, this column will become a column group and can + * contain other columns inside. In general, this class will not be created directly, rather + * an array of column configurations will be passed to the grid: + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'employeeStore', + * fields:['firstname', 'lastname', 'seniority', 'dep', 'hired'], + * data:[ + * {firstname:"Michael", lastname:"Scott", seniority:7, dep:"Management", hired:"01/10/2004"}, + * {firstname:"Dwight", lastname:"Schrute", seniority:2, dep:"Sales", hired:"04/01/2004"}, + * {firstname:"Jim", lastname:"Halpert", seniority:3, dep:"Sales", hired:"02/22/2006"}, + * {firstname:"Kevin", lastname:"Malone", seniority:4, dep:"Accounting", hired:"06/10/2007"}, + * {firstname:"Angela", lastname:"Martin", seniority:5, dep:"Accounting", hired:"10/21/2008"} + * ] + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Column Demo', + * store: Ext.data.StoreManager.lookup('employeeStore'), + * columns: [ + * {text: 'First Name', dataIndex:'firstname'}, + * {text: 'Last Name', dataIndex:'lastname'}, + * {text: 'Hired Month', dataIndex:'hired', xtype:'datecolumn', format:'M'}, + * {text: 'Department (Yrs)', xtype:'templatecolumn', tpl:'{dep} ({seniority})'} + * ], + * width: 400, + * forceFit: true, + * renderTo: Ext.getBody() + * }); + * + * # Convenience Subclasses + * + * There are several column subclasses that provide default rendering for various data types + * + * - {@link Ext.grid.column.Action}: Renders icons that can respond to click events inline + * - {@link Ext.grid.column.Boolean}: Renders for boolean values + * - {@link Ext.grid.column.Date}: Renders for date values + * - {@link Ext.grid.column.Number}: Renders for numeric values + * - {@link Ext.grid.column.Template}: Renders a value using an {@link Ext.XTemplate} using the record data + * + * # Setting Sizes + * + * The columns are laid out by a {@link Ext.layout.container.HBox} layout, so a column can either + * be given an explicit width value or a flex configuration. If no width is specified the grid will + * automatically the size the column to 100px. For column groups, the size is calculated by measuring + * the width of the child columns, so a width option should not be specified in that case. + * + * # Header Options + * + * - {@link #text}: Sets the header text for the column + * - {@link #sortable}: Specifies whether the column can be sorted by clicking the header or using the column menu + * - {@link #hideable}: Specifies whether the column can be hidden using the column menu + * - {@link #menuDisabled}: Disables the column header menu + * - {@link #cfg-draggable}: Specifies whether the column header can be reordered by dragging + * - {@link #groupable}: Specifies whether the grid can be grouped by the column dataIndex. See also {@link Ext.grid.feature.Grouping} + * + * # Data Options + * + * - {@link #dataIndex}: The dataIndex is the field in the underlying {@link Ext.data.Store} to use as the value for the column. + * - {@link #renderer}: Allows the underlying store value to be transformed before being displayed in the grid + */ +Ext.define('Ext.grid.column.Column', { + extend: 'Ext.grid.header.Container', + alias: 'widget.gridcolumn', + requires: ['Ext.util.KeyNav', 'Ext.grid.ColumnComponentLayout', 'Ext.grid.ColumnLayout'], + alternateClassName: 'Ext.grid.Column', + + baseCls: Ext.baseCSSPrefix + 'column-header ' + Ext.baseCSSPrefix + 'unselectable', + + // Not the standard, automatically applied overCls because we must filter out overs of child headers. + hoverCls: Ext.baseCSSPrefix + 'column-header-over', + + handleWidth: 5, + + sortState: null, + + possibleSortStates: ['ASC', 'DESC'], + + childEls: [ + 'titleEl', 'triggerEl', 'textEl' + ], + + renderTpl: + '
    ' + + '' + + '{text}' + + '' + + ''+ + '
    '+ + '
    ' + + '
    ' + + '{%this.renderContainer(out,values)%}', + + /** + * @cfg {Object[]} columns + * An optional array of sub-column definitions. This column becomes a group, and houses the columns defined in the + * `columns` config. + * + * Group columns may not be sortable. But they may be hideable and moveable. And you may move headers into and out + * of a group. Note that if all sub columns are dragged out of a group, the group is destroyed. + */ + + /** + * @override + * @cfg {String} stateId + * An identifier which identifies this column uniquely within the owning grid's {@link #stateful state}. + * + * This does not have to be *globally* unique. A column's state is not saved standalone. It is encapsulated within + * the owning grid's state. + */ + + /** + * @cfg {String} dataIndex + * The name of the field in the grid's {@link Ext.data.Store}'s {@link Ext.data.Model} definition from + * which to draw the column's value. **Required.** + */ + dataIndex: null, + + /** + * @cfg {String} text + * The header text to be used as innerHTML (html tags are accepted) to display in the Grid. + * **Note**: to have a clickable header with no text displayed you can use the default of ` ` aka ` `. + */ + text: ' ', + + /** + * @cfg {String} header + * The header text. + * @deprecated 4.0 Use {@link #text} instead. + */ + + /** + * @cfg {String} menuText + * The text to render in the column visibility selection menu for this column. If not + * specified, will default to the text value. + */ + menuText: null, + + /** + * @cfg {String} [emptyCellText=undefined] + * The text to diplay in empty cells (cells with a value of `undefined`, `null`, or `''`). + * + * Defaults to ` ` aka ` `. + */ + emptyCellText: ' ', + + /** + * @cfg {Boolean} sortable + * False to disable sorting of this column. Whether local/remote sorting is used is specified in + * `{@link Ext.data.Store#remoteSort}`. + */ + sortable: true, + + /** + * @cfg {Boolean} groupable + * If the grid uses a {@link Ext.grid.feature.Grouping}, this option may be used to disable the header menu + * item to group by the column selected. By default, the header menu group option is enabled. Set to false to + * disable (but still show) the group option in the header menu for the column. + */ + + /** + * @cfg {Boolean} fixed + * True to prevent the column from being resizable. + * @deprecated 4.0 Use {@link #resizable} instead. + */ + + /** + * @cfg {Boolean} [locked=false] + * True to lock this column in place. Implicitly enables locking on the grid. + * See also {@link Ext.grid.Panel#enableLocking}. + */ + + /** + * @cfg {Boolean} resizable + * False to prevent the column from being resizable. + */ + resizable: true, + + /** + * @cfg {Boolean} hideable + * False to prevent the user from hiding this column. + */ + hideable: true, + + /** + * @cfg {Boolean} menuDisabled + * True to disable the column header menu containing sort/hide options. + */ + menuDisabled: false, + + /** + * @cfg {Function/String} renderer + * A renderer is an 'interceptor' method which can be used to transform data (value, appearance, etc.) + * before it is rendered. Example: + * + * { + * renderer: function(value){ + * if (value === 1) { + * return '1 person'; + * } + * return value + ' people'; + * } + * } + * + * Additionally a string naming an {@link Ext.util.Format} method can be passed: + * + * { + * renderer: 'uppercase' + * } + * + * @cfg {Object} renderer.value The data value for the current cell + * @cfg {Object} renderer.metaData A collection of metadata about the current cell; can be used or modified + * by the renderer. Recognized properties are: tdCls, tdAttr, and style. + * @cfg {Ext.data.Model} renderer.record The record for the current row + * @cfg {Number} renderer.rowIndex The index of the current row + * @cfg {Number} renderer.colIndex The index of the current column + * @cfg {Ext.data.Store} renderer.store The data store + * @cfg {Ext.view.View} renderer.view The current view + * @cfg {String} renderer.return The HTML string to be rendered. + */ + renderer: false, + + /** + * @cfg {Object} scope + * The scope to use when calling the {@link #renderer} function. + */ + + /** + * @method defaultRenderer + * When defined this will take precedence over the {@link Ext.grid.column.Column#renderer renderer} config. + * This is meant to be defined in subclasses that wish to supply their own renderer. + * @protected + * @template + */ + + /** + * @cfg {Function} editRenderer + * A renderer to be used in conjunction with {@link Ext.grid.plugin.RowEditing RowEditing}. This renderer is used to + * display a custom value for non-editable fields. + */ + editRenderer: false, + + /** + * @cfg {String} align + * Sets the alignment of the header and rendered columns. + * Possible values are: `'left'`, `'center'`, and `'right'`. + */ + align: 'left', + + /** + * @cfg {Boolean} draggable + * False to disable drag-drop reordering of this column. + */ + draggable: true, + + /** + * @cfg {String} tooltip + * A tooltip to display for this column header + */ + + /** + * @cfg {String} [tooltipType="qtip"] + * The type of {@link #tooltip} to use. Either 'qtip' for QuickTips or 'title' for title attribute. + */ + tooltipType: 'qtip', + + // Header does not use the typical ComponentDraggable class and therefore we + // override this with an emptyFn. It is controlled at the HeaderDragZone. + initDraggable: Ext.emptyFn, + + /** + * @cfg {String} tdCls + * A CSS class names to apply to the table cells for this column. + */ + + /** + * @cfg {Object/String} editor + * An optional xtype or config object for a {@link Ext.form.field.Field Field} to use for editing. + * Only applicable if the grid is using an {@link Ext.grid.plugin.Editing Editing} plugin. + */ + + /** + * @cfg {Object/String} field + * Alias for {@link #editor}. + * @deprecated 4.0.5 Use {@link #editor} instead. + */ + + /** + * @property {Ext.Element} triggerEl + * Element that acts as button for column header dropdown menu. + */ + + /** + * @property {Ext.Element} textEl + * Element that contains the text in column header. + */ + + /** + * @property {Boolean} isHeader + * Set in this class to identify, at runtime, instances which are not instances of the + * HeaderContainer base class, but are in fact, the subclass: Header. + */ + isHeader: true, + + componentLayout: 'columncomponent', + + // We need to override the default component resizable behaviour here + initResizable: Ext.emptyFn, + + initComponent: function() { + var me = this, + renderer; + + if (Ext.isDefined(me.header)) { + me.text = me.header; + delete me.header; + } + + if (!me.triStateSort) { + me.possibleSortStates.length = 2; + } + + // A group header; It contains items which are themselves Headers + if (Ext.isDefined(me.columns)) { + me.isGroupHeader = true; + + if (me.dataIndex) { + Ext.Error.raise('Ext.grid.column.Column: Group header may not accept a dataIndex'); + } + if ((me.width && me.width !== Ext.grid.header.Container.prototype.defaultWidth) || me.flex) { + Ext.Error.raise('Ext.grid.column.Column: Group header does not support setting explicit widths or flexs. The group header width is calculated by the sum of its children.'); + } + + // The headers become child items + me.items = me.columns; + delete me.columns; + delete me.flex; + delete me.width; + me.cls = (me.cls||'') + ' ' + Ext.baseCSSPrefix + 'group-header'; + me.sortable = false; + me.resizable = false; + me.align = 'center'; + } else { + // If we are not a group header, then this is not to be used as a container, and must not have a container layout executed, and it must + // acquire layout height from DOM content, not from child items. + me.isContainer = false; + + // Flexed Headers need to have a minWidth defined so that they can never be squeezed out of existence by the + // HeaderContainer's specialized Box layout, the ColumnLayout. The ColumnLayout's overridden calculateChildboxes + // method extends the available layout space to accommodate the "desiredWidth" of all the columns. + if (me.flex) { + me.minWidth = me.minWidth || Ext.grid.plugin.HeaderResizer.prototype.minColWidth; + } + } + me.addCls(Ext.baseCSSPrefix + 'column-header-align-' + me.align); + + renderer = me.renderer; + if (renderer) { + // When specifying a renderer as a string, it always resolves + // to Ext.util.Format + if (typeof renderer == 'string') { + me.renderer = Ext.util.Format[renderer]; + } + me.hasCustomRenderer = true; + } else if (me.defaultRenderer) { + me.scope = me; + me.renderer = me.defaultRenderer; + } + + // Initialize as a HeaderContainer + me.callParent(arguments); + + me.on({ + element: 'el', + click: me.onElClick, + dblclick: me.onElDblClick, + scope: me + }); + me.on({ + element: 'titleEl', + mouseenter: me.onTitleMouseOver, + mouseleave: me.onTitleMouseOut, + scope: me + }); + }, + + onAdd: function(childHeader) { + childHeader.isSubHeader = true; + childHeader.addCls(Ext.baseCSSPrefix + 'group-sub-header'); + this.callParent(arguments); + }, + + onRemove: function(childHeader) { + childHeader.isSubHeader = false; + childHeader.removeCls(Ext.baseCSSPrefix + 'group-sub-header'); + this.callParent(arguments); + }, + + initRenderData: function() { + var me = this, + tipMarkup = '', + tip = me.tooltip, + attr = me.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + + if (!Ext.isEmpty(tip)) { + tipMarkup = attr + '="' + tip + '" '; + } + + return Ext.applyIf(me.callParent(arguments), { + text: me.text, + menuDisabled: me.menuDisabled, + tipMarkup: tipMarkup + }); + }, + + applyColumnState: function (state) { + var me = this, + defined = Ext.isDefined; + + // apply any columns + me.applyColumnsState(state.columns); + + // Only state properties which were saved should be restored. + // (Only user-changed properties were saved by getState) + if (defined(state.hidden)) { + me.hidden = state.hidden; + } + if (defined(state.locked)) { + me.locked = state.locked; + } + if (defined(state.sortable)) { + me.sortable = state.sortable; + } + if (defined(state.width)) { + delete me.flex; + me.width = state.width; + } else if (defined(state.flex)) { + delete me.width; + me.flex = state.flex; + } + }, + + getColumnState: function () { + var me = this, + items = me.items.items, + // Check for the existence of items, since column.Action won't have them + iLen = items ? items.length : 0, + i, + columns = [], + state = { + id: me.getStateId() + }; + + me.savePropsToState(['hidden', 'sortable', 'locked', 'flex', 'width'], state); + + if (me.isGroupHeader) { + for (i = 0; i < iLen; i++) { + columns.push(items[i].getColumnState()); + } + + if (columns.length) { + state.columns = columns; + } + } else if (me.isSubHeader && me.ownerCt.hidden) { + // don't set hidden on the children so they can auto height + delete me.hidden; + } + + if ('width' in state) { + delete state.flex; // width wins + } + return state; + }, + + getStateId: function () { + return this.stateId || this.headerId; + }, + + /** + * Sets the header text for this Column. + * @param {String} text The header to display on this Column. + */ + setText: function(text) { + this.text = text; + if (this.rendered) { + this.textEl.update(text); + } + }, + + // Find the topmost HeaderContainer: An ancestor which is NOT a Header. + // Group Headers are themselves HeaderContainers + getOwnerHeaderCt: function() { + return this.up(':not([isHeader])'); + }, + + /** + * Returns the index of this column only if this column is a base level Column. If it + * is a group column, it returns `false`. + * @return {Number} + */ + getIndex: function() { + return this.isGroupColumn ? false : this.getOwnerHeaderCt().getHeaderIndex(this); + }, + + /** + * Returns the index of this column in the list of *visible* columns only if this column is a base level Column. If it + * is a group column, it returns `false`. + * @return {Number} + */ + getVisibleIndex: function() { + return this.isGroupColumn ? false : Ext.Array.indexOf(this.getOwnerHeaderCt().getVisibleGridColumns(), this); + }, + + beforeRender: function() { + var me = this, + grid = me.up('tablepanel'); + + me.callParent(); + + // Disable the menu if there's nothing to show in the menu, ie: + // Column cannot be sorted, grouped or locked, and there are no grid columns which may be hidden + if (grid && (!me.sortable || grid.sortableColumns === false) && !me.groupable && + !me.lockable && (grid.enableColumnHide === false || + !me.getOwnerHeaderCt().getHideableColumns().length)) { + me.menuDisabled = true; + } + }, + + afterRender: function() { + var me = this, + el = me.el; + + me.callParent(arguments); + + if (me.overCls) { + el.addClsOnOver(me.overCls); + } + + // BrowserBug: Ie8 Strict Mode, this will break the focus for this browser, + // must be fixed when focus management will be implemented. + if (!Ext.isIE8 || !Ext.isStrict) { + me.mon(me.getFocusEl(), { + focus: me.onTitleMouseOver, + blur: me.onTitleMouseOut, + scope: me + }); + } + + me.keyNav = new Ext.util.KeyNav(el, { + enter: me.onEnterKey, + down: me.onDownKey, + scope: me + }); + }, + + // private + // Inform the header container about the resize + afterComponentLayout: function(width, height, oldWidth, oldHeight) { + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(); + + me.callParent(arguments); + + if (ownerHeaderCt && (oldWidth != null || me.flex) && width !== oldWidth) { + ownerHeaderCt.onHeaderResize(me, width, true); + } + }, + + // private + // After the container has laid out and stretched, it calls this to correctly pad the inner to center the text vertically + // Total available header height must be passed to enable padding for inner elements to be calculated. + setPadding: function(headerHeight) { + var me = this, + lineHeight = parseInt(me.textEl.getStyle('line-height'), 10), + textHeight = me.textEl.dom.offsetHeight, + titleEl = me.titleEl, + availableHeight = headerHeight - me.el.getBorderWidth('tb'), + titleElHeight; + + // Top title containing element must stretch to match height of sibling group headers + if (!me.isGroupHeader) { + if (titleEl.getHeight() < availableHeight) { + titleEl.setHeight(availableHeight); + // the column el's parent element (the 'innerCt') may have an incorrect height + // at this point because it may have been shrink wrapped prior to the titleEl's + // height being set, so we need to sync it up here + me.ownerCt.layout.innerCt.setHeight(headerHeight); + } + } + titleElHeight = titleEl.getViewSize().height; + + // Vertically center the header text in potentially vertically stretched header + if (textHeight) { + if(lineHeight) { + textHeight = Math.ceil(textHeight / lineHeight) * lineHeight; + } + titleEl.setStyle({ + paddingTop: Math.floor(Math.max(((titleElHeight - textHeight) / 2), 0)) + 'px' + }); + } + + // Only IE needs this + if (Ext.isIE && me.triggerEl) { + me.triggerEl.setHeight(titleElHeight); + } + }, + + onDestroy: function() { + var me = this; + // force destroy on the textEl, IE reports a leak + Ext.destroy(me.textEl, me.keyNav, me.field); + delete me.keyNav; + me.callParent(arguments); + }, + + onTitleMouseOver: function() { + this.titleEl.addCls(this.hoverCls); + }, + + onTitleMouseOut: function() { + this.titleEl.removeCls(this.hoverCls); + }, + + onDownKey: function(e) { + if (this.triggerEl) { + this.onElClick(e, this.triggerEl.dom || this.el.dom); + } + }, + + onEnterKey: function(e) { + this.onElClick(e, this.el.dom); + }, + + /** + * @private + * Double click + * @param e + * @param t + */ + onElDblClick: function(e, t) { + var me = this, + ownerCt = me.ownerCt; + if (ownerCt && Ext.Array.indexOf(ownerCt.items, me) !== 0 && me.isOnLeftEdge(e) ) { + ownerCt.expandToFit(me.previousSibling('gridcolumn')); + } + }, + + onElClick: function(e, t) { + + // The grid's docked HeaderContainer. + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(); + + if (ownerHeaderCt && !ownerHeaderCt.ddLock) { + // Firefox doesn't check the current target in a within check. + // Therefore we check the target directly and then within (ancestors) + if (me.triggerEl && (e.target === me.triggerEl.dom || t === me.triggerEl.dom || e.within(me.triggerEl))) { + ownerHeaderCt.onHeaderTriggerClick(me, e, t); + // if its not on the left hand edge, sort + } else if (e.getKey() || (!me.isOnLeftEdge(e) && !me.isOnRightEdge(e))) { + me.toggleSortState(); + ownerHeaderCt.onHeaderClick(me, e, t); + } + } + }, + + /** + * @private + * Process UI events from the view. The owning TablePanel calls this method, relaying events from the TableView + * @param {String} type Event type, eg 'click' + * @param {Ext.view.Table} view TableView Component + * @param {HTMLElement} cell Cell HtmlElement the event took place within + * @param {Number} recordIndex Index of the associated Store Model (-1 if none) + * @param {Number} cellIndex Cell index within the row + * @param {Ext.EventObject} e Original event + */ + processEvent: function(type, view, cell, recordIndex, cellIndex, e) { + return this.fireEvent.apply(this, arguments); + }, + + toggleSortState: function() { + var me = this, + idx, + nextIdx; + + if (me.sortable) { + idx = Ext.Array.indexOf(me.possibleSortStates, me.sortState); + + nextIdx = (idx + 1) % me.possibleSortStates.length; + me.setSortState(me.possibleSortStates[nextIdx]); + } + }, + + doSort: function(state) { + var ds = this.up('tablepanel').store; + ds.sort({ + property: this.getSortParam(), + direction: state + }); + }, + + /** + * Returns the parameter to sort upon when sorting this header. By default this returns the dataIndex and will not + * need to be overriden in most cases. + * @return {String} + */ + getSortParam: function() { + return this.dataIndex; + }, + + //setSortState: function(state, updateUI) { + //setSortState: function(state, doSort) { + setSortState: function(state, skipClear, initial) { + var me = this, + colSortClsPrefix = Ext.baseCSSPrefix + 'column-header-sort-', + ascCls = colSortClsPrefix + 'ASC', + descCls = colSortClsPrefix + 'DESC', + nullCls = colSortClsPrefix + 'null', + ownerHeaderCt = me.getOwnerHeaderCt(), + oldSortState = me.sortState; + + if (oldSortState !== state && me.getSortParam()) { + me.addCls(colSortClsPrefix + state); + // don't trigger a sort on the first time, we just want to update the UI + if (state && !initial) { + me.doSort(state); + } + switch (state) { + case 'DESC': + me.removeCls([ascCls, nullCls]); + break; + case 'ASC': + me.removeCls([descCls, nullCls]); + break; + case null: + me.removeCls([ascCls, descCls]); + break; + } + if (ownerHeaderCt && !me.triStateSort && !skipClear) { + ownerHeaderCt.clearOtherSortStates(me); + } + me.sortState = state; + // we only want to fire the event if we have a null state when using triStateSort + if (me.triStateSort || state != null) { + ownerHeaderCt.fireEvent('sortchange', ownerHeaderCt, me, state); + } + } + }, + + hide: function(fromOwner) { + var me = this, + ownerHeaderCt = me.getOwnerHeaderCt(), + owner = me.ownerCt, + ownerIsGroup = owner.isGroupHeader, + item, items, len, i; + + // owner is a group, hide call didn't come from the owner + if (ownerIsGroup && !fromOwner) { + items = owner.query('>:not([hidden])'); + // only have one item that isn't hidden, this is it. + if (items.length === 1 && items[0] == me) { + me.ownerCt.hide(); + return; + } + } + + Ext.suspendLayouts(); + + if (me.isGroupHeader) { + items = me.items.items; + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + if (!item.hidden) { + item.hide(true); + } + } + } + + me.callParent(); + // Notify owning HeaderContainer + ownerHeaderCt.onHeaderHide(me); + + Ext.resumeLayouts(true); + }, + + show: function(fromOwner, fromChild) { + var me = this, + ownerCt = me.ownerCt, + items, + len, i, + item; + + Ext.suspendLayouts(); + + // If a sub header, ensure that the group header is visible + if (me.isSubHeader && ownerCt.hidden) { + ownerCt.show(false, true); + } + + me.callParent(arguments); + + // If we've just shown a group with all its sub headers hidden, then show all its sub headers + if (me.isGroupHeader && fromChild !== true && !me.query(':not([hidden])').length) { + items = me.query('>*'); + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + if (item.hidden) { + item.show(true); + } + } + } + + Ext.resumeLayouts(true); + + // Notify owning HeaderContainer AFTER layout has been flushed so that header and headerCt widths are all correct + ownerCt = me.getOwnerHeaderCt(); + if (ownerCt) { + ownerCt.onHeaderShow(me); + } + }, + + getDesiredWidth: function() { + var me = this; + if (me.rendered && me.componentLayout && me.componentLayout.lastComponentSize) { + // headers always have either a width or a flex + // because HeaderContainer sets a defaults width + // therefore we can ignore the natural width + // we use the componentLayout's tracked width so that + // we can calculate the desired width when rendered + // but not visible because its being obscured by a layout + return me.componentLayout.lastComponentSize.width; + // Flexed but yet to be rendered this could be the case + // where a HeaderContainer and Headers are simply used as data + // structures and not rendered. + } + else if (me.flex) { + // this is going to be wrong, the defaultWidth + return me.width; + } + else { + return me.width; + } + }, + + getCellSelector: function() { + return '.' + Ext.baseCSSPrefix + 'grid-cell-' + this.getItemId(); + }, + + getCellInnerSelector: function() { + return this.getCellSelector() + ' .' + Ext.baseCSSPrefix + 'grid-cell-inner'; + }, + + isOnLeftEdge: function(e) { + return (e.getXY()[0] - this.el.getLeft() <= this.handleWidth); + }, + + isOnRightEdge: function(e) { + return (this.el.getRight() - e.getXY()[0] <= this.handleWidth); + } + + // intentionally omit getEditor and setEditor definitions bc we applyIf into columns + // when the editing plugin is injected + + /** + * @method getEditor + * Retrieves the editing field for editing associated with this header. Returns false if there is no field + * associated with the Header the method will return false. If the field has not been instantiated it will be + * created. Note: These methods only has an implementation if a Editing plugin has been enabled on the grid. + * @param {Object} record The {@link Ext.data.Model Model} instance being edited. + * @param {Object} defaultField An object representing a default field to be created + * @return {Ext.form.field.Field} field + */ + /** + * @method setEditor + * Sets the form field to be used for editing. Note: This method only has an implementation if an Editing plugin has + * been enabled on the grid. + * @param {Object} field An object representing a field to be created. If no xtype is specified a 'textfield' is + * assumed. + */ +}); + +/** + * This is a utility class that can be passed into a {@link Ext.grid.column.Column} as a column config that provides + * an automatic row numbering column. + * + * Usage: + * + * columns: [ + * {xtype: 'rownumberer'}, + * {text: "Company", flex: 1, sortable: true, dataIndex: 'company'}, + * {text: "Price", width: 120, sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'}, + * {text: "Change", width: 120, sortable: true, dataIndex: 'change'}, + * {text: "% Change", width: 120, sortable: true, dataIndex: 'pctChange'}, + * {text: "Last Updated", width: 120, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'} + * ] + * + */ +Ext.define('Ext.grid.RowNumberer', { + extend: 'Ext.grid.column.Column', + alias: 'widget.rownumberer', + + /** + * @cfg {String} text + * Any valid text or HTML fragment to display in the header cell for the row number column. + */ + text: " ", + + /** + * @cfg {Number} width + * The default width in pixels of the row number column. + */ + width: 23, + + /** + * @cfg {Boolean} sortable + * @hide + */ + sortable: false, + + /** + * @cfg {Boolean} [draggable=false] + * False to disable drag-drop reordering of this column. + */ + draggable: false, + + align: 'right', + + constructor : function(config){ + + // Copy the prototype's default width setting into an instance property to provide + // a default width which will not be overridden by AbstractContainer.applyDefaults use of Ext.applyIf + this.width = this.width; + + this.callParent(arguments); + if (this.rowspan) { + this.renderer = Ext.Function.bind(this.renderer, this); + } + }, + + // private + resizable: false, + hideable: false, + menuDisabled: true, + dataIndex: '', + cls: Ext.baseCSSPrefix + 'row-numberer', + rowspan: undefined, + + // private + renderer: function(value, metaData, record, rowIdx, colIdx, store) { + if (this.rowspan){ + metaData.cellAttr = 'rowspan="'+this.rowspan+'"'; + } + + metaData.tdCls = Ext.baseCSSPrefix + 'grid-cell-special'; + return store.indexOfTotal(record) + 1; + } +}); + +Ext.define('Ext.grid.Scroller', { + constructor: Ext.deprecated() +}); + +/** + * @private + */ +Ext.define('Ext.view.DropZone', { + extend: 'Ext.dd.DropZone', + + indicatorHtml: '
    ', + indicatorCls: Ext.baseCSSPrefix + 'grid-drop-indicator', + + constructor: function(config) { + var me = this; + Ext.apply(me, config); + + // Create a ddGroup unless one has been configured. + // User configuration of ddGroups allows users to specify which + // DD instances can interact with each other. Using one + // based on the id of the View would isolate it and mean it can only + // interact with a DragZone on the same View also using a generated ID. + if (!me.ddGroup) { + me.ddGroup = 'view-dd-zone-' + me.view.id; + } + + // The DropZone's encapsulating element is the View's main element. It must be this because drop gestures + // may require scrolling on hover near a scrolling boundary. In Ext 4.x two DD instances may not use the + // same element, so a DragZone on this same View must use the View's parent element as its element. + me.callParent([me.view.el]); + }, + +// Fire an event through the client DataView. Lock this DropZone during the event processing so that +// its data does not become corrupted by processing mouse events. + fireViewEvent: function() { + var me = this, + result; + + me.lock(); + result = me.view.fireEvent.apply(me.view, arguments); + me.unlock(); + return result; + }, + + getTargetFromEvent : function(e) { + var node = e.getTarget(this.view.getItemSelector()), + mouseY, nodeList, testNode, i, len, box; + +// Not over a row node: The content may be narrower than the View's encapsulating element, so return the closest. +// If we fall through because the mouse is below the nodes (or there are no nodes), we'll get an onContainerOver call. + if (!node) { + mouseY = e.getPageY(); + for (i = 0, nodeList = this.view.getNodes(), len = nodeList.length; i < len; i++) { + testNode = nodeList[i]; + box = Ext.fly(testNode).getBox(); + if (mouseY <= box.bottom) { + return testNode; + } + } + } + return node; + }, + + getIndicator: function() { + var me = this; + + if (!me.indicator) { + me.indicator = new Ext.Component({ + html: me.indicatorHtml, + cls: me.indicatorCls, + ownerCt: me.view, + floating: true, + shadow: false + }); + } + return me.indicator; + }, + + getPosition: function(e, node) { + var y = e.getXY()[1], + region = Ext.fly(node).getRegion(), + pos; + + if ((region.bottom - y) >= (region.bottom - region.top) / 2) { + pos = "before"; + } else { + pos = "after"; + } + return pos; + }, + + /** + * @private Determines whether the record at the specified offset from the passed record + * is in the drag payload. + * @param records + * @param record + * @param offset + * @returns {Boolean} True if the targeted record is in the drag payload + */ + containsRecordAtOffset: function(records, record, offset) { + if (!record) { + return false; + } + var view = this.view, + recordIndex = view.indexOf(record), + nodeBefore = view.getNode(recordIndex + offset), + recordBefore = nodeBefore ? view.getRecord(nodeBefore) : null; + + return recordBefore && Ext.Array.contains(records, recordBefore); + }, + + positionIndicator: function(node, data, e) { + var me = this, + view = me.view, + pos = me.getPosition(e, node), + overRecord = view.getRecord(node), + draggingRecords = data.records, + indicatorY; + + if (!Ext.Array.contains(draggingRecords, overRecord) && ( + pos == 'before' && !me.containsRecordAtOffset(draggingRecords, overRecord, -1) || + pos == 'after' && !me.containsRecordAtOffset(draggingRecords, overRecord, 1) + )) { + me.valid = true; + + if (me.overRecord != overRecord || me.currentPosition != pos) { + + indicatorY = Ext.fly(node).getY() - view.el.getY() - 1; + if (pos == 'after') { + indicatorY += Ext.fly(node).getHeight(); + } + me.getIndicator().setWidth(Ext.fly(view.el).getWidth()).showAt(0, indicatorY); + + // Cache the overRecord and the 'before' or 'after' indicator. + me.overRecord = overRecord; + me.currentPosition = pos; + } + } else { + me.invalidateDrop(); + } + }, + + invalidateDrop: function() { + if (this.valid) { + this.valid = false; + this.getIndicator().hide(); + } + }, + + // The mouse is over a View node + onNodeOver: function(node, dragZone, e, data) { + var me = this; + + if (!Ext.Array.contains(data.records, me.view.getRecord(node))) { + me.positionIndicator(node, data, e); + } + return me.valid ? me.dropAllowed : me.dropNotAllowed; + }, + + // Moved out of the DropZone without dropping. + // Remove drop position indicator + notifyOut: function(node, dragZone, e, data) { + var me = this; + + me.callParent(arguments); + delete me.overRecord; + delete me.currentPosition; + if (me.indicator) { + me.indicator.hide(); + } + }, + + // The mouse is past the end of all nodes (or there are no nodes) + onContainerOver : function(dd, e, data) { + var me = this, + view = me.view, + count = view.store.getCount(); + + // There are records, so position after the last one + if (count) { + me.positionIndicator(view.getNode(count - 1), data, e); + } + + // No records, position the indicator at the top + else { + delete me.overRecord; + delete me.currentPosition; + me.getIndicator().setWidth(Ext.fly(view.el).getWidth()).showAt(0, 0); + me.valid = true; + } + return me.dropAllowed; + }, + + onContainerDrop : function(dd, e, data) { + return this.onNodeDrop(dd, null, e, data); + }, + + onNodeDrop: function(node, dragZone, e, data) { + var me = this, + dropHandled = false, + + // Create a closure to perform the operation which the event handler may use. + // Users may now set the wait parameter in the beforedrop handler, and perform any kind + // of asynchronous processing such as an Ext.Msg.confirm, or an Ajax request, + // and complete the drop gesture at some point in the future by calling either the + // processDrop or cancelDrop methods. + dropHandlers = { + wait: false, + processDrop: function () { + me.invalidateDrop(); + me.handleNodeDrop(data, me.overRecord, me.currentPosition); + dropHandled = true; + me.fireViewEvent('drop', node, data, me.overRecord, me.currentPosition); + }, + + cancelDrop: function() { + me.invalidateDrop(); + dropHandled = true; + } + }, + performOperation = false; + + if (me.valid) { + performOperation = me.fireViewEvent('beforedrop', node, data, me.overRecord, me.currentPosition, dropHandlers); + if (dropHandlers.wait) { + return; + } + + if (performOperation !== false) { + // If either of the drop handlers were called in the event handler, do not do it again. + if (!dropHandled) { + dropHandlers.processDrop(); + } + } + } + return performOperation; + }, + + destroy: function(){ + Ext.destroy(this.indicator); + delete this.indicator; + this.callParent(); + } +}); + +/** + * @private + */ +Ext.define('Ext.grid.ViewDropZone', { + extend: 'Ext.view.DropZone', + + indicatorHtml: '
    ', + indicatorCls: Ext.baseCSSPrefix + 'grid-drop-indicator', + + handleNodeDrop : function(data, record, position) { + var view = this.view, + store = view.getStore(), + index, records, i, len; + + // If the copy flag is set, create a copy of the Models with the same IDs + if (data.copy) { + records = data.records; + data.records = []; + for (i = 0, len = records.length; i < len; i++) { + data.records.push(records[i].copy(records[i].getId())); + } + } else { + /* + * Remove from the source store. We do this regardless of whether the store + * is the same bacsue the store currently doesn't handle moving records + * within the store. In the future it should be possible to do this. + * Here was pass the isMove parameter if we're moving to the same view. + */ + data.view.store.remove(data.records, data.view === view); + } + + index = store.indexOf(record); + + // 'after', or undefined (meaning a drop at index -1 on an empty View)... + if (position !== 'before') { + index++; + } + store.insert(index, data.records); + view.getSelectionModel().select(data.records); + } +}); + +/** + * A Grid header type which renders an icon, or a series of icons in a grid cell, and offers a scoped click + * handler for each icon. + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'employeeStore', + * fields:['firstname', 'lastname', 'seniority', 'dep', 'hired'], + * data:[ + * {firstname:"Michael", lastname:"Scott"}, + * {firstname:"Dwight", lastname:"Schrute"}, + * {firstname:"Jim", lastname:"Halpert"}, + * {firstname:"Kevin", lastname:"Malone"}, + * {firstname:"Angela", lastname:"Martin"} + * ] + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Action Column Demo', + * store: Ext.data.StoreManager.lookup('employeeStore'), + * columns: [ + * {text: 'First Name', dataIndex:'firstname'}, + * {text: 'Last Name', dataIndex:'lastname'}, + * { + * xtype:'actioncolumn', + * width:50, + * items: [{ + * icon: 'extjs/examples/shared/icons/fam/cog_edit.png', // Use a URL in the icon config + * tooltip: 'Edit', + * handler: function(grid, rowIndex, colIndex) { + * var rec = grid.getStore().getAt(rowIndex); + * alert("Edit " + rec.get('firstname')); + * } + * },{ + * icon: 'extjs/examples/restful/images/delete.png', + * tooltip: 'Delete', + * handler: function(grid, rowIndex, colIndex) { + * var rec = grid.getStore().getAt(rowIndex); + * alert("Terminate " + rec.get('firstname')); + * } + * }] + * } + * ], + * width: 250, + * renderTo: Ext.getBody() + * }); + * + * The action column can be at any index in the columns array, and a grid can have any number of + * action columns. + */ +Ext.define('Ext.grid.column.Action', { + extend: 'Ext.grid.column.Column', + alias: ['widget.actioncolumn'], + alternateClassName: 'Ext.grid.ActionColumn', + + /** + * @cfg {String} icon + * The URL of an image to display as the clickable element in the column. + * + * Defaults to `{@link Ext#BLANK_IMAGE_URL}`. + */ + /** + * @cfg {String} iconCls + * A CSS class to apply to the icon image. To determine the class dynamically, configure the Column with + * a `{@link #getClass}` function. + */ + /** + * @cfg {Function} handler + * A function called when the icon is clicked. + * @cfg {Ext.view.Table} handler.view The owning TableView. + * @cfg {Number} handler.rowIndex The row index clicked on. + * @cfg {Number} handler.colIndex The column index clicked on. + * @cfg {Object} handler.item The clicked item (or this Column if multiple {@link #cfg-items} were not configured). + * @cfg {Event} handler.e The click event. + * @cfg {Ext.data.Model} handler.record The Record underlying the clicked row. + * @cfg {HtmlElement} row The table row clicked upon. + */ + /** + * @cfg {Object} scope + * The scope (**this** reference) in which the `{@link #handler}` and `{@link #getClass}` fuctions are executed. + * Defaults to this Column. + */ + /** + * @cfg {String} tooltip + * A tooltip message to be displayed on hover. {@link Ext.tip.QuickTipManager#init Ext.tip.QuickTipManager} must + * have been initialized. + */ + /** + * @cfg {Boolean} disabled + * If true, the action will not respond to click events, and will be displayed semi-opaque. + */ + /** + * @cfg {Boolean} [stopSelection=true] + * Prevent grid selection upon mousedown. + */ + /** + * @cfg {Function} getClass + * A function which returns the CSS class to apply to the icon image. + * + * @cfg {Object} getClass.v The value of the column's configured field (if any). + * + * @cfg {Object} getClass.metadata An object in which you may set the following attributes: + * @cfg {String} getClass.metadata.css A CSS class name to add to the cell's TD element. + * @cfg {String} getClass.metadata.attr An HTML attribute definition string to apply to the data container + * element *within* the table cell (e.g. 'style="color:red;"'). + * + * @cfg {Ext.data.Model} getClass.r The Record providing the data. + * + * @cfg {Number} getClass.rowIndex The row index.. + * + * @cfg {Number} getClass.colIndex The column index. + * + * @cfg {Ext.data.Store} getClass.store The Store which is providing the data Model. + */ + /** + * @cfg {Object[]} items + * An Array which may contain multiple icon definitions, each element of which may contain: + * + * @cfg {String} items.icon The url of an image to display as the clickable element in the column. + * + * @cfg {String} items.iconCls A CSS class to apply to the icon image. To determine the class dynamically, + * configure the item with a `getClass` function. + * + * @cfg {Function} items.getClass A function which returns the CSS class to apply to the icon image. + * @cfg {Object} items.getClass.v The value of the column's configured field (if any). + * @cfg {Object} items.getClass.metadata An object in which you may set the following attributes: + * @cfg {String} items.getClass.metadata.css A CSS class name to add to the cell's TD element. + * @cfg {String} items.getClass.metadata.attr An HTML attribute definition string to apply to the data + * container element _within_ the table cell (e.g. 'style="color:red;"'). + * @cfg {Ext.data.Model} items.getClass.r The Record providing the data. + * @cfg {Number} items.getClass.rowIndex The row index.. + * @cfg {Number} items.getClass.colIndex The column index. + * @cfg {Ext.data.Store} items.getClass.store The Store which is providing the data Model. + * + * @cfg {Function} items.handler A function called when the icon is clicked. + * + * @cfg {Object} items.scope The scope (`this` reference) in which the `handler` and `getClass` functions + * are executed. Fallback defaults are this Column's configured scope, then this Column. + * + * @cfg {String} items.tooltip A tooltip message to be displayed on hover. + * @cfg {Boolean} items.disabled If true, the action will not respond to click events, and will be displayed semi-opaque. + * {@link Ext.tip.QuickTipManager#init Ext.tip.QuickTipManager} must have been initialized. + */ + /** + * @property {Array} items + * An array of action items copied from the configured {@link #cfg-items items} configuration. Each will have + * an `enable` and `disable` method added which will enable and disable the associated action, and + * update the displayed icon accordingly. + */ + + actionIdRe: new RegExp(Ext.baseCSSPrefix + 'action-col-(\\d+)'), + + /** + * @cfg {String} altText + * The alt text to use for the image element. + */ + altText: '', + + /** + * @cfg {String} menuText=[Actions] + * Text to display in this column's menu item if no {@link #text} was specified as a header. + */ + menuText: 'Actions', + + sortable: false, + + constructor: function(config) { + var me = this, + cfg = Ext.apply({}, config), + items = cfg.items || [me], + hasGetClass, + i, + len; + + + me.origRenderer = cfg.renderer || me.renderer; + me.origScope = cfg.scope || me.scope; + + delete me.renderer; + delete me.scope; + delete cfg.renderer; + delete cfg.scope; + + // This is a Container. Delete the items config to be reinstated after construction. + delete cfg.items; + me.callParent([cfg]); + + // Items is an array property of ActionColumns + me.items = items; + + for (i = 0, len = items.length; i < len; ++i) { + if (items[i].getClass) { + hasGetClass = true; + break; + } + } + + // Also need to check for getClass, since it changes how the cell renders + if (me.origRenderer || hasGetClass) { + me.hasCustomRenderer = true; + } + }, + + // Renderer closure iterates through items creating an element for each and tagging with an identifying + // class name x-action-col-{n} + defaultRenderer: function(v, meta){ + var me = this, + prefix = Ext.baseCSSPrefix, + scope = me.origScope || me, + items = me.items, + len = items.length, + i = 0, + item; + + // Allow a configured renderer to create initial value (And set the other values in the "metadata" argument!) + v = Ext.isFunction(me.origRenderer) ? me.origRenderer.apply(scope, arguments) || '' : ''; + + meta.tdCls += ' ' + Ext.baseCSSPrefix + 'action-col-cell'; + for (; i < len; i++) { + item = items[i]; + + // Only process the item action setup once. + if (!item.hasActionConfiguration) { + + // Apply our documented default to all items + item.stopSelection = me.stopSelection; + item.disable = Ext.Function.bind(me.disableAction, me, [i], 0); + item.enable = Ext.Function.bind(me.enableAction, me, [i], 0); + item.hasActionConfiguration = true; + } + + v += '' + (item.altText || me.altText) + ''; + } + return v; + }, + + /** + * Enables this ActionColumn's action at the specified index. + * @param {Number/Ext.grid.column.Action} index + * @param {Boolean} [silent=false] + */ + enableAction: function(index, silent) { + var me = this; + + if (!index) { + index = 0; + } else if (!Ext.isNumber(index)) { + index = Ext.Array.indexOf(me.items, index); + } + me.items[index].disabled = false; + me.up('tablepanel').el.select('.' + Ext.baseCSSPrefix + 'action-col-' + index).removeCls(me.disabledCls); + if (!silent) { + me.fireEvent('enable', me); + } + }, + + /** + * Disables this ActionColumn's action at the specified index. + * @param {Number/Ext.grid.column.Action} index + * @param {Boolean} [silent=false] + */ + disableAction: function(index, silent) { + var me = this; + + if (!index) { + index = 0; + } else if (!Ext.isNumber(index)) { + index = Ext.Array.indexOf(me.items, index); + } + me.items[index].disabled = true; + me.up('tablepanel').el.select('.' + Ext.baseCSSPrefix + 'action-col-' + index).addCls(me.disabledCls); + if (!silent) { + me.fireEvent('disable', me); + } + }, + + destroy: function() { + delete this.items; + delete this.renderer; + return this.callParent(arguments); + }, + + /** + * @private + * Process and refire events routed from the GridView's processEvent method. + * Also fires any configured click handlers. By default, cancels the mousedown event to prevent selection. + * Returns the event handler's status to allow canceling of GridView's bubbling process. + */ + processEvent : function(type, view, cell, recordIndex, cellIndex, e, record, row){ + var me = this, + target = e.getTarget(), + match, + item, fn, + key = type == 'keydown' && e.getKey(); + + // If the target was not within a cell (ie it's a keydown event from the View), then + // rely on the selection data injected by View.processUIEvent to grab the + // first action icon from the selected cell. + if (key && !Ext.fly(target).findParent(view.cellSelector)) { + target = Ext.fly(cell).down('.' + Ext.baseCSSPrefix + 'action-col-icon', true); + } + + // NOTE: The statement below tests the truthiness of an assignment. + if (target && (match = target.className.match(me.actionIdRe))) { + item = me.items[parseInt(match[1], 10)]; + if (item) { + if (type == 'click' || (key == e.ENTER || key == e.SPACE)) { + fn = item.handler || me.handler; + if (fn && !item.disabled) { + fn.call(item.scope || me.origScope || me, view, recordIndex, cellIndex, item, e, record, row); + } + } else if (type == 'mousedown' && item.stopSelection !== false) { + return false; + } + } + } + return me.callParent(arguments); + }, + + cascade: function(fn, scope) { + fn.call(scope||this, this); + }, + + // Private override because this cannot function as a Container, and it has an items property which is an Array, NOT a MixedCollection. + getRefItems: function() { + return []; + } +}); + +/** + * A Column definition class which renders boolean data fields. See the {@link Ext.grid.column.Column#xtype xtype} + * config option of {@link Ext.grid.column.Column} for more details. + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'sampleStore', + * fields:[ + * {name: 'framework', type: 'string'}, + * {name: 'rocks', type: 'boolean'} + * ], + * data:{'items':[ + * { 'framework': "Ext JS 4", 'rocks': true }, + * { 'framework': "Sencha Touch", 'rocks': true }, + * { 'framework': "Ext GWT", 'rocks': true }, + * { 'framework': "Other Guys", 'rocks': false } + * ]}, + * proxy: { + * type: 'memory', + * reader: { + * type: 'json', + * root: 'items' + * } + * } + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Boolean Column Demo', + * store: Ext.data.StoreManager.lookup('sampleStore'), + * columns: [ + * { text: 'Framework', dataIndex: 'framework', flex: 1 }, + * { + * xtype: 'booleancolumn', + * text: 'Rocks', + * trueText: 'Yes', + * falseText: 'No', + * dataIndex: 'rocks' + * } + * ], + * height: 200, + * width: 400, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.grid.column.Boolean', { + extend: 'Ext.grid.column.Column', + alias: ['widget.booleancolumn'], + alternateClassName: 'Ext.grid.BooleanColumn', + + // + /** + * @cfg {String} trueText + * The string returned by the renderer when the column value is not falsey. + */ + trueText: 'true', + // + + // + /** + * @cfg {String} falseText + * The string returned by the renderer when the column value is falsey (but not undefined). + */ + falseText: 'false', + // + + /** + * @cfg {String} undefinedText + * The string returned by the renderer when the column value is undefined. + */ + undefinedText: ' ', + + /** + * @cfg renderer + * @hide + */ + /** + * @cfg scope + * @hide + */ + + defaultRenderer: function(value){ + if (value === undefined) { + return this.undefinedText; + } + + if (!value || value === 'false') { + return this.falseText; + } + return this.trueText; + } +}); + +/** + * A Column definition class which renders a passed date according to the default locale, or a configured + * {@link #format}. + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'sampleStore', + * fields:[ + * { name: 'symbol', type: 'string' }, + * { name: 'date', type: 'date' }, + * { name: 'change', type: 'number' }, + * { name: 'volume', type: 'number' }, + * { name: 'topday', type: 'date' } + * ], + * data:[ + * { symbol: "msft", date: '2011/04/22', change: 2.43, volume: 61606325, topday: '04/01/2010' }, + * { symbol: "goog", date: '2011/04/22', change: 0.81, volume: 3053782, topday: '04/11/2010' }, + * { symbol: "apple", date: '2011/04/22', change: 1.35, volume: 24484858, topday: '04/28/2010' }, + * { symbol: "sencha", date: '2011/04/22', change: 8.85, volume: 5556351, topday: '04/22/2010' } + * ] + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Date Column Demo', + * store: Ext.data.StoreManager.lookup('sampleStore'), + * columns: [ + * { text: 'Symbol', dataIndex: 'symbol', flex: 1 }, + * { text: 'Date', dataIndex: 'date', xtype: 'datecolumn', format:'Y-m-d' }, + * { text: 'Change', dataIndex: 'change', xtype: 'numbercolumn', format:'0.00' }, + * { text: 'Volume', dataIndex: 'volume', xtype: 'numbercolumn', format:'0,000' }, + * { text: 'Top Day', dataIndex: 'topday', xtype: 'datecolumn', format:'l' } + * ], + * height: 200, + * width: 450, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.grid.column.Date', { + extend: 'Ext.grid.column.Column', + alias: ['widget.datecolumn'], + requires: ['Ext.Date'], + alternateClassName: 'Ext.grid.DateColumn', + + /** + * @cfg {String} format + * A formatting string as used by {@link Ext.Date#format} to format a Date for this Column. + * + * Defaults to the default date from {@link Ext.Date#defaultFormat} which itself my be overridden + * in a locale file. + */ + /** + * @cfg renderer + * @hide + */ + /** + * @cfg scope + * @hide + */ + + initComponent: function(){ + if (!this.format) { + this.format = Ext.Date.defaultFormat; + } + + this.callParent(arguments); + }, + + defaultRenderer: function(value){ + return Ext.util.Format.date(value, this.format); + } +}); + +/** + * A Column definition class which renders a numeric data field according to a {@link #format} string. + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'sampleStore', + * fields:[ + * { name: 'symbol', type: 'string' }, + * { name: 'price', type: 'number' }, + * { name: 'change', type: 'number' }, + * { name: 'volume', type: 'number' } + * ], + * data:[ + * { symbol: "msft", price: 25.76, change: 2.43, volume: 61606325 }, + * { symbol: "goog", price: 525.73, change: 0.81, volume: 3053782 }, + * { symbol: "apple", price: 342.41, change: 1.35, volume: 24484858 }, + * { symbol: "sencha", price: 142.08, change: 8.85, volume: 5556351 } + * ] + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Number Column Demo', + * store: Ext.data.StoreManager.lookup('sampleStore'), + * columns: [ + * { text: 'Symbol', dataIndex: 'symbol', flex: 1 }, + * { text: 'Current Price', dataIndex: 'price', renderer: Ext.util.Format.usMoney }, + * { text: 'Change', dataIndex: 'change', xtype: 'numbercolumn', format:'0.00' }, + * { text: 'Volume', dataIndex: 'volume', xtype: 'numbercolumn', format:'0,000' } + * ], + * height: 200, + * width: 400, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.grid.column.Number', { + extend: 'Ext.grid.column.Column', + alias: ['widget.numbercolumn'], + requires: ['Ext.util.Format'], + alternateClassName: 'Ext.grid.NumberColumn', + + // + /** + * @cfg {String} format + * A formatting string as used by {@link Ext.util.Format#number} to format a numeric value for this Column. + */ + format : '0,000.00', + // + + /** + * @cfg renderer + * @hide + */ + /** + * @cfg scope + * @hide + */ + + defaultRenderer: function(value){ + return Ext.util.Format.number(value, this.format); + } +}); + +/** + * A Column definition class which renders a value by processing a {@link Ext.data.Model Model}'s + * {@link Ext.data.Model#persistenceProperty data} using a {@link #tpl configured} + * {@link Ext.XTemplate XTemplate}. + * + * @example + * Ext.create('Ext.data.Store', { + * storeId:'employeeStore', + * fields:['firstname', 'lastname', 'seniority', 'department'], + * groupField: 'department', + * data:[ + * { firstname: "Michael", lastname: "Scott", seniority: 7, department: "Management" }, + * { firstname: "Dwight", lastname: "Schrute", seniority: 2, department: "Sales" }, + * { firstname: "Jim", lastname: "Halpert", seniority: 3, department: "Sales" }, + * { firstname: "Kevin", lastname: "Malone", seniority: 4, department: "Accounting" }, + * { firstname: "Angela", lastname: "Martin", seniority: 5, department: "Accounting" } + * ] + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Column Template Demo', + * store: Ext.data.StoreManager.lookup('employeeStore'), + * columns: [ + * { text: 'Full Name', xtype: 'templatecolumn', tpl: '{firstname} {lastname}', flex:1 }, + * { text: 'Department (Yrs)', xtype: 'templatecolumn', tpl: '{department} ({seniority})' } + * ], + * height: 200, + * width: 300, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.grid.column.Template', { + extend: 'Ext.grid.column.Column', + alias: ['widget.templatecolumn'], + requires: ['Ext.XTemplate'], + alternateClassName: 'Ext.grid.TemplateColumn', + + /** + * @cfg {String/Ext.XTemplate} tpl + * An {@link Ext.XTemplate XTemplate}, or an XTemplate *definition string* to use to process a + * {@link Ext.data.Model Model}'s {@link Ext.data.Model#persistenceProperty data} to produce a + * column's rendered value. + */ + /** + * @cfg renderer + * @hide + */ + /** + * @cfg scope + * @hide + */ + + initComponent: function(){ + var me = this; + me.tpl = (!Ext.isPrimitive(me.tpl) && me.tpl.compile) ? me.tpl : new Ext.XTemplate(me.tpl); + // Set this here since the template may access any record values, + // so we must always run the update for this column + me.hasCustomRenderer = true; + me.callParent(arguments); + }, + + defaultRenderer: function(value, meta, record) { + var data = Ext.apply({}, record.data, record.getAssociatedData()); + return this.tpl.apply(data); + } +}); + +/** + * A feature is a type of plugin that is specific to the {@link Ext.grid.Panel}. It provides several + * hooks that allows the developer to inject additional functionality at certain points throughout the + * grid creation cycle. This class provides the base template methods that are available to the developer, + * it should be extended. + * + * There are several built in features that extend this class, for example: + * + * - {@link Ext.grid.feature.Grouping} - Shows grid rows in groups as specified by the {@link Ext.data.Store} + * - {@link Ext.grid.feature.RowBody} - Adds a body section for each grid row that can contain markup. + * - {@link Ext.grid.feature.Summary} - Adds a summary row at the bottom of the grid with aggregate totals for a column. + * + * ## Using Features + * A feature is added to the grid by specifying it an array of features in the configuration: + * + * var groupingFeature = Ext.create('Ext.grid.feature.Grouping'); + * Ext.create('Ext.grid.Panel', { + * // other options + * features: [groupingFeature] + * }); + * + * @abstract + */ +Ext.define('Ext.grid.feature.Feature', { + extend: 'Ext.util.Observable', + alias: 'feature.feature', + + /* + * @property {Boolean} isFeature + * `true` in this class to identify an object as an instantiated Feature, or subclass thereof. + */ + isFeature: true, + + /** + * True when feature is disabled. + */ + disabled: false, + + /** + * @property {Boolean} + * Most features will expose additional events, some may not and will + * need to change this to false. + */ + hasFeatureEvent: true, + + /** + * @property {String} + * Prefix to use when firing events on the view. + * For example a prefix of group would expose "groupclick", "groupcontextmenu", "groupdblclick". + */ + eventPrefix: null, + + /** + * @property {String} + * Selector used to determine when to fire the event with the eventPrefix. + */ + eventSelector: null, + + /** + * @property {Ext.view.Table} + * Reference to the TableView. + */ + view: null, + + /** + * @property {Ext.grid.Panel} + * Reference to the grid panel + */ + grid: null, + + /** + * Most features will not modify the data returned to the view. + * This is limited to one feature that manipulates the data per grid view. + */ + collectData: false, + + constructor: function(config) { + this.initialConfig = config; + this.callParent(arguments); + }, + + clone: function() { + return new this.self(this.initialConfig); + }, + + init: Ext.emptyFn, + + getFeatureTpl: function() { + return ''; + }, + + /** + * Abstract method to be overriden when a feature should add additional + * arguments to its event signature. By default the event will fire: + * + * - view - The underlying Ext.view.Table + * - featureTarget - The matched element by the defined {@link #eventSelector} + * + * The method must also return the eventName as the first index of the array + * to be passed to fireEvent. + * @template + */ + getFireEventArgs: function(eventName, view, featureTarget, e) { + return [eventName, view, featureTarget, e]; + }, + + /** + * Approriate place to attach events to the view, selectionmodel, headerCt, etc + * @template + */ + attachEvents: function() { + + }, + + getFragmentTpl: Ext.emptyFn, + + /** + * Allows a feature to mutate the metaRowTpl. + * The array received as a single argument can be manipulated to add things + * on the end/begining of a particular row. + * @param {Array} metaRowTplArray A String array to be used constructing an {@link Ext.XTemplate XTemplate} + * to render the rows. This Array may be changed to provide extra DOM structure. + * @template + */ + mutateMetaRowTpl: Ext.emptyFn, + + /** + * Allows a feature to inject member methods into the metaRowTpl. This is + * important for embedding functionality which will become part of the proper + * row tpl. + * @template + */ + getMetaRowTplFragments: function() { + return {}; + }, + + getTableFragments: function() { + return {}; + }, + + /** + * Provide additional data to the prepareData call within the grid view. + * @param {Object} data The data for this particular record. + * @param {Number} idx The row index for this record. + * @param {Ext.data.Model} record The record instance + * @param {Object} orig The original result from the prepareData call to massage. + * @template + */ + getAdditionalData: function(data, idx, record, orig) { + return {}; + }, + + /** + * Enables the feature. + */ + enable: function() { + this.disabled = false; + }, + + /** + * Disables the feature. + */ + disable: function() { + this.disabled = true; + } + +}); + +/** + * A small abstract class that contains the shared behaviour for any summary + * calculations to be used in the grid. + */ +Ext.define('Ext.grid.feature.AbstractSummary', { + + /* Begin Definitions */ + + extend: 'Ext.grid.feature.Feature', + + alias: 'feature.abstractsummary', + + /* End Definitions */ + + /** + * @cfg + * True to show the summary row. + */ + showSummaryRow: true, + + // @private + nestedIdRe: /\{\{id\}([\w\-]*)\}/g, + + // Listen for store updates. Eg, from an Editor. + init: function() { + var me = this; + + // Summary rows must be kept in column order, so view must be refreshed on column move + me.grid.optimizedColumnMove = false; + + me.view.mon(me.view.store, { + update: me.onStoreUpdate, + scope: me + }); + }, + + // Refresh the whole view on edit so that the Summary gets updated + onStoreUpdate: function() { + var v = this.view; + if (this.showSummaryRow) { + v.saveScrollState(); + v.refresh(); + v.restoreScrollState(); + } + }, + + /** + * Toggle whether or not to show the summary row. + * @param {Boolean} visible True to show the summary row + */ + toggleSummaryRow: function(visible){ + this.showSummaryRow = !!visible; + }, + + /** + * Gets any fragments to be used in the tpl + * @private + * @return {Object} The fragments + */ + getSummaryFragments: function(){ + var fragments = {}; + if (this.showSummaryRow) { + Ext.apply(fragments, { + printSummaryRow: Ext.bind(this.printSummaryRow, this) + }); + } + return fragments; + }, + + /** + * Prints a summary row + * @private + * @param {Object} index The index in the template + * @return {String} The value of the summary row + */ + printSummaryRow: function(index){ + var inner = this.view.getTableChunker().metaRowTpl.join(''), + prefix = Ext.baseCSSPrefix; + + inner = inner.replace(prefix + 'grid-row', prefix + 'grid-row-summary'); + inner = inner.replace('{{id}}', '{gridSummaryValue}'); + inner = inner.replace(this.nestedIdRe, '{id$1}'); + inner = inner.replace('{[this.embedRowCls()]}', '{rowCls}'); + inner = inner.replace('{[this.embedRowAttr()]}', '{rowAttr}'); + inner = new Ext.XTemplate(inner, { + firstOrLastCls: Ext.view.TableChunker.firstOrLastCls + }); + + return inner.applyTemplate({ + columns: this.getPrintData(index) + }); + }, + + /** + * Gets the value for the column from the attached data. + * @param {Ext.grid.column.Column} column The header + * @param {Object} data The current data + * @return {String} The value to be rendered + */ + getColumnValue: function(column, summaryData){ + var comp = Ext.getCmp(column.id), + value = summaryData[column.id], + renderer = comp.summaryRenderer; + + if (!value && value !== 0) { + value = '\u00a0'; + } + + if (renderer) { + value = renderer.call( + comp.scope || this, + value, + summaryData, + column.dataIndex + ); + } + return value; + }, + + /** + * Get the summary data for a field. + * @private + * @param {Ext.data.Store} store The store to get the data from + * @param {String/Function} type The type of aggregation. If a function is specified it will + * be passed to the stores aggregate function. + * @param {String} field The field to aggregate on + * @param {Boolean} group True to aggregate in grouped mode + * @return {Number/String/Object} See the return type for the store functions. + */ + getSummary: function(store, type, field, group){ + if (type) { + if (Ext.isFunction(type)) { + return store.aggregate(type, null, group); + } + + switch (type) { + case 'count': + return store.count(group); + case 'min': + return store.min(field, group); + case 'max': + return store.max(field, group); + case 'sum': + return store.sum(field, group); + case 'average': + return store.average(field, group); + default: + return group ? {} : ''; + + } + } + } + +}); + +/** + * + */ +Ext.define('Ext.grid.feature.Chunking', { + extend: 'Ext.grid.feature.Feature', + alias: 'feature.chunking', + + chunkSize: 20, + rowHeight: Ext.isIE ? 27 : 26, + visibleChunk: 0, + hasFeatureEvent: false, + attachEvents: function() { + this.view.el.on('scroll', this.onBodyScroll, this, {buffer: 300}); + }, + + onBodyScroll: function(e, t) { + var view = this.view, + top = t.scrollTop, + nextChunk = Math.floor(top / this.rowHeight / this.chunkSize); + if (nextChunk !== this.visibleChunk) { + + this.visibleChunk = nextChunk; + view.refresh(); + view.el.dom.scrollTop = top; + //BrowserBug: IE6,7,8 quirks mode takes setting scrollTop 2x. + view.el.dom.scrollTop = top; + } + }, + + collectData: function(records, preppedRecords, startIndex, fullWidth, o) { + //headerCt = this.view.headerCt, + //colums = headerCt.getColumnsForTpl(), + var me = this, + recordCount = o.rows.length, + start = 0, + i = 0, + visibleChunk = me.visibleChunk, + rows, + chunkLength, + origRows = o.rows; + + delete o.rows; + o.chunks = []; + for (; start < recordCount; start += me.chunkSize, i++) { + if (start + me.chunkSize > recordCount) { + chunkLength = recordCount - start; + } else { + chunkLength = me.chunkSize; + } + + if (i >= visibleChunk - 1 && i <= visibleChunk + 1) { + rows = origRows.slice(start, start + me.chunkSize); + } else { + rows = []; + } + o.chunks.push({ + rows: rows, + fullWidth: fullWidth, + chunkHeight: chunkLength * me.rowHeight + }); + } + + return o; + }, + + getTableFragments: function() { + return { + openTableWrap: function() { + return '
    '; + }, + closeTableWrap: function() { + return '
    '; + } + }; + } +}); + +/** + * This feature allows to display the grid rows aggregated into groups as specified by the {@link Ext.data.Store#groupers} + * specified on the Store. The group will show the title for the group name and then the appropriate records for the group + * underneath. The groups can also be expanded and collapsed. + * + * ## Extra Events + * + * This feature adds several extra events that will be fired on the grid to interact with the groups: + * + * - {@link #groupclick} + * - {@link #groupdblclick} + * - {@link #groupcontextmenu} + * - {@link #groupexpand} + * - {@link #groupcollapse} + * + * ## Menu Augmentation + * + * This feature adds extra options to the grid column menu to provide the user with functionality to modify the grouping. + * This can be disabled by setting the {@link #enableGroupingMenu} option. The option to disallow grouping from being turned off + * by the user is {@link #enableNoGroups}. + * + * ## Controlling Group Text + * + * The {@link #groupHeaderTpl} is used to control the rendered title for each group. It can modified to customized + * the default display. + * + * ## Example Usage + * + * @example + * var store = Ext.create('Ext.data.Store', { + * storeId:'employeeStore', + * fields:['name', 'seniority', 'department'], + * groupField: 'department', + * data: {'employees':[ + * { "name": "Michael Scott", "seniority": 7, "department": "Management" }, + * { "name": "Dwight Schrute", "seniority": 2, "department": "Sales" }, + * { "name": "Jim Halpert", "seniority": 3, "department": "Sales" }, + * { "name": "Kevin Malone", "seniority": 4, "department": "Accounting" }, + * { "name": "Angela Martin", "seniority": 5, "department": "Accounting" } + * ]}, + * proxy: { + * type: 'memory', + * reader: { + * type: 'json', + * root: 'employees' + * } + * } + * }); + * + * Ext.create('Ext.grid.Panel', { + * title: 'Employees', + * store: Ext.data.StoreManager.lookup('employeeStore'), + * columns: [ + * { text: 'Name', dataIndex: 'name' }, + * { text: 'Seniority', dataIndex: 'seniority' } + * ], + * features: [{ftype:'grouping'}], + * width: 200, + * height: 275, + * renderTo: Ext.getBody() + * }); + * + * **Note:** To use grouping with a grid that has {@link Ext.grid.column.Column#locked locked columns}, you need to supply + * the grouping feature as a config object - so the grid can create two instances of the grouping feature. + * + * @author Nicolas Ferrero + */ +Ext.define('Ext.grid.feature.Grouping', { + extend: 'Ext.grid.feature.Feature', + alias: 'feature.grouping', + + eventPrefix: 'group', + eventSelector: '.' + Ext.baseCSSPrefix + 'grid-group-hd', + bodySelector: '.' + Ext.baseCSSPrefix + 'grid-group-body', + + constructor: function() { + var me = this; + + me.collapsedState = {}; + me.callParent(arguments); + }, + + /** + * @event groupclick + * @param {Ext.view.Table} view + * @param {HTMLElement} node + * @param {String} group The name of the group + * @param {Ext.EventObject} e + */ + + /** + * @event groupdblclick + * @param {Ext.view.Table} view + * @param {HTMLElement} node + * @param {String} group The name of the group + * @param {Ext.EventObject} e + */ + + /** + * @event groupcontextmenu + * @param {Ext.view.Table} view + * @param {HTMLElement} node + * @param {String} group The name of the group + * @param {Ext.EventObject} e + */ + + /** + * @event groupcollapse + * @param {Ext.view.Table} view + * @param {HTMLElement} node + * @param {String} group The name of the group + */ + + /** + * @event groupexpand + * @param {Ext.view.Table} view + * @param {HTMLElement} node + * @param {String} group The name of the group + */ + + /** + * @cfg {String/Array/Ext.Template} groupHeaderTpl + * A string Template snippet, an array of strings (optionally followed by an object containing Template methods) to be used to construct a Template, or a Template instance. + * + * - Example 1 (Template snippet): + * + * groupHeaderTpl: 'Group: {name}' + * + * - Example 2 (Array): + * + * groupHeaderTpl: [ + * 'Group: ', + * '
    {name:this.formatName}
    ', + * { + * formatName: function(name) { + * return Ext.String.trim(name); + * } + * } + * ] + * + * - Example 3 (Template Instance): + * + * groupHeaderTpl: Ext.create('Ext.XTemplate', + * 'Group: ', + * '
    {name:this.formatName}
    ', + * { + * formatName: function(name) { + * return Ext.String.trim(name); + * } + * } + * ) + * + * @cfg {String} groupHeaderTpl.groupField The field name being grouped by. + * @cfg {String} groupHeaderTpl.columnName The column header associated with the field being grouped by *if there is a column for the field*, falls back to the groupField name. + * @cfg {Mixed} groupHeaderTpl.groupValue The value of the {@link Ext.data.Store#groupField groupField} for the group header being rendered. + * @cfg {String} groupHeaderTpl.renderedGroupValue The rendered value of the {@link Ext.data.Store#groupField groupField} for the group header being rendered, as produced by the column renderer. + * @cfg {String} groupHeaderTpl.name An alias for renderedGroupValue + * @cfg {Object[]} groupHeaderTpl.rows An array of child row data objects as returned by the View's {@link Ext.view.AbstractView#prepareData prepareData} method. + * @cfg {Ext.data.Model[]} groupHeaderTpl.children An array containing the child records for the group being rendered. + */ + groupHeaderTpl: '{columnName}: {name}', + + /** + * @cfg {Number} [depthToIndent=17] + * Number of pixels to indent per grouping level + */ + depthToIndent: 17, + + collapsedCls: Ext.baseCSSPrefix + 'grid-group-collapsed', + hdCollapsedCls: Ext.baseCSSPrefix + 'grid-group-hd-collapsed', + hdCollapsibleCls: Ext.baseCSSPrefix + 'grid-group-hd-collapsible', + + // + /** + * @cfg {String} [groupByText="Group by this field"] + * Text displayed in the grid header menu for grouping by header. + */ + groupByText : 'Group by this field', + // + // + /** + * @cfg {String} [showGroupsText="Show in groups"] + * Text displayed in the grid header for enabling/disabling grouping. + */ + showGroupsText : 'Show in groups', + // + + /** + * @cfg {Boolean} [hideGroupedHeader=false] + * True to hide the header that is currently grouped. + */ + hideGroupedHeader : false, + + /** + * @cfg {Boolean} [startCollapsed=false] + * True to start all groups collapsed. + */ + startCollapsed : false, + + /** + * @cfg {Boolean} [enableGroupingMenu=true] + * True to enable the grouping control in the header menu. + */ + enableGroupingMenu : true, + + /** + * @cfg {Boolean} [enableNoGroups=true] + * True to allow the user to turn off grouping. + */ + enableNoGroups : true, + + /** + * @cfg {Boolean} [collapsible=true] + * Set to `falsee` to disable collapsing groups from the UI. + * + * This is set to `false` when the associated {@link Ext.data.Store store} is + * {@link Ext.data.Store#buffered buffered}. + */ + collapsible: true, + + enable: function() { + var me = this, + view = me.view, + store = view.store, + groupToggleMenuItem; + + me.lastGroupField = me.getGroupField(); + + if (me.lastGroupIndex) { + me.block(); + store.group(me.lastGroupIndex); + me.unblock(); + } + me.callParent(); + groupToggleMenuItem = me.view.headerCt.getMenu().down('#groupToggleMenuItem'); + groupToggleMenuItem.setChecked(true, true); + me.refreshIf(); + }, + + disable: function() { + var me = this, + view = me.view, + store = view.store, + remote = store.remoteGroup, + groupToggleMenuItem, + lastGroup; + + lastGroup = store.groupers.first(); + if (lastGroup) { + me.lastGroupIndex = lastGroup.property; + me.block(); + store.clearGrouping(); + me.unblock(); + } + + me.callParent(); + groupToggleMenuItem = me.view.headerCt.getMenu().down('#groupToggleMenuItem'); + groupToggleMenuItem.setChecked(true, true); + groupToggleMenuItem.setChecked(false, true); + me.refreshIf(); + }, + + refreshIf: function() { + var ownerCt = this.grid.ownerCt, + view = this.view; + + if (!view.store.remoteGroup && !this.blockRefresh) { + + // We are one side of a lockable grid, so refresh the locking view + if (ownerCt && ownerCt.lockable) { + ownerCt.view.refresh(); + } else { + view.refresh(); + } + } + }, + + getFeatureTpl: function(values, parent, x, xcount) { + return [ + '', + // group row tpl + '', + // this is the rowbody + '', + '' + ].join(''); + }, + + getFragmentTpl: function() { + var me = this; + return { + indentByDepth: me.indentByDepth, + depthToIndent: me.depthToIndent, + renderGroupHeaderTpl: function(values, parent) { + return Ext.XTemplate.getTpl(me, 'groupHeaderTpl').apply(values, parent); + } + }; + }, + + indentByDepth: function(values) { + return 'style="padding-left:'+ ((values.depth || 0) * this.depthToIndent) + 'px;"'; + }, + + // Containers holding these components are responsible for + // destroying them, we are just deleting references. + destroy: function() { + delete this.view; + delete this.prunedHeader; + }, + + // perhaps rename to afterViewRender + attachEvents: function() { + var me = this, + view = me.view; + + view.on({ + scope: me, + groupclick: me.onGroupClick, + rowfocus: me.onRowFocus + }); + + view.mon(view.store, { + scope: me, + groupchange: me.onGroupChange, + remove: me.onRemove, + add: me.onAdd, + update: me.onUpdate + }); + + if (me.enableGroupingMenu) { + me.injectGroupingMenu(); + } + + me.pruneGroupedHeader(); + + me.lastGroupField = me.getGroupField(); + me.block(); + me.onGroupChange(); + me.unblock(); + }, + + // If we add a new item that doesn't belong to a rendered group, refresh the view + onAdd: function(store, records){ + var me = this, + view = me.view, + groupField = me.getGroupField(), + i = 0, + len = records.length, + activeGroups, + addedGroups, + groups, + needsRefresh, + group; + + if (view.rendered) { + addedGroups = {}; + activeGroups = {}; + + for (; i < len; ++i) { + group = records[i].get(groupField); + if (addedGroups[group] === undefined) { + addedGroups[group] = 0; + } + addedGroups[group] += 1; + } + groups = store.getGroups(); + for (i = 0, len = groups.length; i < len; ++i) { + group = groups[i]; + activeGroups[group.name] = group.children.length; + } + + for (group in addedGroups) { + if (addedGroups[group] === activeGroups[group]) { + needsRefresh = true; + break; + } + } + + if (needsRefresh) { + view.refresh(); + } + } + }, + + onUpdate: function(store, record, type, changedFields){ + var view = this.view; + if (view.rendered && !changedFields || Ext.Array.contains(changedFields, this.getGroupField())) { + view.refresh(); + } + }, + + onRemove: function(store, record) { + var me = this, + groupField = me.getGroupField(), + removedGroup = record.get(groupField), + view = me.view; + + if (view.rendered) { + // If that was the last one in the group, force a refresh + if (store.findExact(groupField, removedGroup) === -1) { + me.view.refresh(); + } + } + }, + + injectGroupingMenu: function() { + var me = this, + headerCt = me.view.headerCt; + + headerCt.showMenuBy = me.showMenuBy; + headerCt.getMenuItems = me.getMenuItems(); + }, + + showMenuBy: function(t, header) { + var menu = this.getMenu(), + groupMenuItem = menu.down('#groupMenuItem'), + groupableMth = header.groupable === false ? 'disable' : 'enable'; + + groupMenuItem[groupableMth](); + Ext.grid.header.Container.prototype.showMenuBy.apply(this, arguments); + }, + + getMenuItems: function() { + var me = this, + groupByText = me.groupByText, + disabled = me.disabled || !me.getGroupField(), + showGroupsText = me.showGroupsText, + enableNoGroups = me.enableNoGroups, + getMenuItems = me.view.headerCt.getMenuItems; + + // runs in the scope of headerCt + return function() { + + // We cannot use the method from HeaderContainer's prototype here + // because other plugins or features may already have injected an implementation + var o = getMenuItems.call(this); + o.push('-', { + iconCls: Ext.baseCSSPrefix + 'group-by-icon', + itemId: 'groupMenuItem', + text: groupByText, + handler: me.onGroupMenuItemClick, + scope: me + }); + if (enableNoGroups) { + o.push({ + itemId: 'groupToggleMenuItem', + text: showGroupsText, + checked: !disabled, + checkHandler: me.onGroupToggleMenuItemClick, + scope: me + }); + } + return o; + }; + }, + + /** + * Group by the header the user has clicked on. + * @private + */ + onGroupMenuItemClick: function(menuItem, e) { + var me = this, + menu = menuItem.parentMenu, + hdr = menu.activeHeader, + view = me.view, + store = view.store; + + delete me.lastGroupIndex; + me.block(); + me.enable(); + store.group(hdr.dataIndex); + me.pruneGroupedHeader(); + me.unblock(); + me.refreshIf(); + }, + + block: function(){ + this.blockRefresh = this.view.blockRefresh = true; + }, + + unblock: function(){ + this.blockRefresh = this.view.blockRefresh = false; + }, + + /** + * Turn on and off grouping via the menu + * @private + */ + onGroupToggleMenuItemClick: function(menuItem, checked) { + this[checked ? 'enable' : 'disable'](); + }, + + /** + * Prunes the grouped header from the header container + * @private + */ + pruneGroupedHeader: function() { + var me = this, + header = me.getGroupedHeader(); + + if (me.hideGroupedHeader && header) { + if (me.prunedHeader) { + me.prunedHeader.show(); + } + me.prunedHeader = header; + header.hide(); + } + }, + + getGroupedHeader: function(){ + var groupField = this.getGroupField(), + headerCt = this.view.headerCt; + + return groupField ? headerCt.down('[dataIndex=' + groupField + ']') : null; + }, + + getGroupField: function(){ + var group = this.view.store.groupers.first(); + if (group) { + return group.property; + } + return ''; + }, + + /** + * When a row gains focus, expand the groups above it + * @private + */ + onRowFocus: function(rowIdx) { + var node = this.view.getNode(rowIdx), + groupBd = Ext.fly(node).up('.' + this.collapsedCls); + + if (groupBd) { + // for multiple level groups, should expand every groupBd + // above + this.expand(groupBd); + } + }, + + /** + * Returns `true` if the named group is expanded. + * @param {String} groupName The group name as returned from {@link Ext.data.Store#getGroupString getGroupString}. This is usually the value of + * the {@link Ext.data.Store#groupField groupField}. + * @return {Boolean} `true` if the group defined by that value is expanded. + */ + isExpanded: function(groupName) { + return (this.collapsedState[groupName] === false); + }, + + /** + * Expand a group + * @param {String/Ext.Element} groupName The group name, or the element that contains the group body + * @param {Boolean} focus Pass `true` to focus the group after expand. + */ + expand: function(groupName, focus, /*private*/ preventSizeCalculation) { + var me = this, + view = me.view, + groupHeader, + groupBody, + lockingPartner = me.lockingPartner; + + // We've been passed the group name + if (Ext.isString(groupName)) { + groupBody = Ext.fly(me.getGroupBodyId(groupName), '_grouping'); + } + // We've been passed an element + else { + groupBody = Ext.fly(groupName, '_grouping') + groupName = me.getGroupName(groupBody); + } + groupHeader = Ext.get(me.getGroupHeaderId(groupName)); + + // If we are collapsed... + if (me.collapsedState[groupName]) { + groupBody.removeCls(me.collapsedCls); + groupBody.prev().removeCls(me.hdCollapsedCls); + + if (preventSizeCalculation !== true) { + view.refreshSize(); + } + view.fireEvent('groupexpand', view, groupHeader, groupName); + me.collapsedState[groupName] = false; + + // If we are one side of a locking view, the other side has to stay in sync + if (lockingPartner) { + lockingPartner.expand(groupName, focus, preventSizeCalculation); + } + if (focus) { + groupBody.scrollIntoView(view.el, null, true); + } + } + }, + + /** + * Expand all groups + */ + expandAll: function(){ + var me = this, + view = me.view, + els = view.el.select(me.eventSelector).elements, + e, + eLen = els.length; + + for (e = 0; e < eLen; e++) { + me.expand(Ext.fly(els[e]).next(), false, true); + } + + view.refreshSize(); + }, + + /** + * Collapse a group + * @param {String/Ext.Element} groupName The group name, or the element that contains group body + * @param {Boolean} focus Pass `true` to focus the group after expand. + */ + collapse: function(groupName, focus, /*private*/ preventSizeCalculation) { + var me = this, + view = me.view, + groupHeader, + groupBody, + lockingPartner = me.lockingPartner; + + // We've been passed the group name + if (Ext.isString(groupName)) { + groupBody = Ext.fly(me.getGroupBodyId(groupName), '_grouping'); + } + // We've been passed an element + else { + groupBody = Ext.fly(groupName, '_grouping') + groupName = me.getGroupName(groupBody); + } + groupHeader = Ext.get(me.getGroupHeaderId(groupName)); + + // If we are not collapsed... + if (!me.collapsedState[groupName]) { + groupBody.addCls(me.collapsedCls); + groupBody.prev().addCls(me.hdCollapsedCls); + + if (preventSizeCalculation !== true) { + view.refreshSize(); + } + view.fireEvent('groupcollapse', view, groupHeader, groupName); + me.collapsedState[groupName] = true; + + // If we are one side of a locking view, the other side has to stay in sync + if (lockingPartner) { + lockingPartner.collapse(groupName, focus, preventSizeCalculation); + } + if (focus) { + groupHeader.scrollIntoView(view.el, null, true); + } + } + }, + + /** + * Collapse all groups + */ + collapseAll: function() { + var me = this, + view = me.view, + els = view.el.select(me.eventSelector).elements, + e, + eLen = els.length; + + for (e = 0; e < eLen; e++) { + me.collapse(Ext.fly(els[e]).next(), false, true); + } + + view.refreshSize(); + }, + + onGroupChange: function(){ + var me = this, + field = me.getGroupField(), + menuItem, + visibleGridColumns, + groupingByLastVisibleColumn; + + if (me.hideGroupedHeader) { + if (me.lastGroupField) { + menuItem = me.getMenuItem(me.lastGroupField); + if (menuItem) { + menuItem.setChecked(true); + } + } + if (field) { + visibleGridColumns = me.view.headerCt.getVisibleGridColumns(); + + // See if we are being asked to group by the sole remaining visible column. + // If so, then do not hide that column. + groupingByLastVisibleColumn = ((visibleGridColumns.length === 1) && (visibleGridColumns[0].dataIndex == field)); + menuItem = me.getMenuItem(field); + if (menuItem && !groupingByLastVisibleColumn) { + menuItem.setChecked(false); + } + } + } + me.refreshIf(); + me.lastGroupField = field; + }, + + /** + * Gets the related menu item for a dataIndex + * @private + * @return {Ext.grid.header.Container} The header + */ + getMenuItem: function(dataIndex){ + var view = this.view, + header = view.headerCt.down('gridcolumn[dataIndex=' + dataIndex + ']'), + menu = view.headerCt.getMenu(); + + return header ? menu.down('menuitem[headerId='+ header.id +']') : null; + }, + + /** + * Toggle between expanded/collapsed state when clicking on + * the group. + * @private + */ + onGroupClick: function(view, rowElement, groupName, e) { + var me = this; + + if (me.collapsible) { + if (me.collapsedState[groupName]) { + me.expand(groupName); + } else { + me.collapse(groupName); + } + } + }, + + // Injects isRow and closeRow into the metaRowTpl. + getMetaRowTplFragments: function() { + return { + isRow: this.isRow, + closeRow: this.closeRow + }; + }, + + // injected into rowtpl and wrapped around metaRowTpl + // becomes part of the standard tpl + isRow: function() { + return ''; + }, + + // injected into rowtpl and wrapped around metaRowTpl + // becomes part of the standard tpl + closeRow: function() { + return ''; + }, + + // isRow and closeRow are injected via getMetaRowTplFragments + mutateMetaRowTpl: function(metaRowTpl) { + metaRowTpl.unshift('{[this.isRow()]}'); + metaRowTpl.push('{[this.closeRow()]}'); + }, + + // injects an additional style attribute via tdAttrKey with the proper + // amount of padding + getAdditionalData: function(data, idx, record, orig) { + var view = this.view, + hCt = view.headerCt, + col = hCt.items.getAt(0), + o = {}, + tdAttrKey; + + // If there *are* any columne in this grid (possible empty side of a locking grid)... + // Add the padding-left style to indent the row according to grouping depth. + // Preserve any current tdAttr that a user may have set. + if (col) { + tdAttrKey = col.id + '-tdAttr'; + o[tdAttrKey] = this.indentByDepth(data) + " " + (orig[tdAttrKey] ? orig[tdAttrKey] : ''); + o.collapsed = 'true'; + o.data = record.getData(); + } + return o; + }, + + // return matching preppedRecords + getGroupRows: function(group, records, preppedRecords, fullWidth) { + var me = this, + children = group.children, + rows = group.rows = [], + view = me.view, + header = me.getGroupedHeader(), + groupField = me.getGroupField(), + index = -1, + r, + rLen = records.length, + record; + + // Buffered rendering implies that user collapsing is disabled. + if (view.store.buffered) { + me.collapsible = false; + } + + group.viewId = view.id; + + for (r = 0; r < rLen; r++) { + record = records[r]; + + if (record.get(groupField) == group.name) { + index = r; + } + if (Ext.Array.indexOf(children, record) != -1) { + rows.push(Ext.apply(preppedRecords[r], { + depth : 1 + })); + } + } + + group.groupField = groupField, + group.groupHeaderId = me.getGroupHeaderId(group.name); + group.groupBodyId = me.getGroupBodyId(group.name); + group.fullWidth = fullWidth; + group.columnName = header ? header.text : groupField; + group.groupValue = group.name; + + // Here we attempt to overwrite the group name value from the Store with + // the get the rendered value of the column from the *prepped* record + if (header && index > -1) { + group.name = group.renderedValue = preppedRecords[index][header.id]; + } + if (me.collapsedState[group.name]) { + group.collapsedCls = me.collapsedCls; + group.hdCollapsedCls = me.hdCollapsedCls; + } else { + group.collapsedCls = group.hdCollapsedCls = ''; + } + + // Collapsibility of groups may be disabled. + if (me.collapsible) { + group.collapsibleClass = me.hdCollapsibleCls; + } else { + group.collapsibleClass = ''; + } + + return group; + }, + + // Create an associated DOM id for the group's header element given the group name + getGroupHeaderId: function(groupName) { + return this.view.id + '-hd-' + groupName; + }, + + // Create an associated DOM id for the group's body element given the group name + getGroupBodyId: function(groupName) { + return this.view.id + '-bd-' + groupName; + }, + + // Get the group name from an associated element whether it's within a header or a body + getGroupName: function(element) { + var me = this, + targetEl; + + // See if element is, or is within a group header. If so, we can extract its name + targetEl = Ext.fly(element).findParent(me.eventSelector); + if (targetEl) { + return targetEl.id.split(this.view.id + '-hd-')[1]; + } + + // See if element is, or is within a group body. If so, we can extract its name + targetEl = Ext.fly(element).findParent(me.bodySelector); + if (targetEl) { + return targetEl.id.split(this.view.id + '-bd-')[1]; + } + }, + + // return the data in a grouped format. + collectData: function(records, preppedRecords, startIndex, fullWidth, o) { + var me = this, + store = me.view.store, + collapsedState = me.collapsedState, + collapseGroups, + g, + groups, gLen, group; + + if (me.startCollapsed) { + // If we start collapse, we'll set the state of the groups here + // and unset the flag so any subsequent expand/collapse is + // managed by the feature + me.startCollapsed = false; + collapseGroups = true; + } + + if (!me.disabled && store.isGrouped()) { + o.rows = groups = store.getGroups(); + gLen = groups.length; + + for (g = 0; g < gLen; g++) { + group = groups[g]; + + if (collapseGroups) { + collapsedState[group.name] = true; + } + + me.getGroupRows(group, records, preppedRecords, fullWidth); + } + } + return o; + }, + + // adds the groupName to the groupclick, groupdblclick, groupcontextmenu + // events that are fired on the view. Chose not to return the actual + // group itself because of its expense and because developers can simply + // grab the group via store.getGroups(groupName) + getFireEventArgs: function(type, view, targetEl, e) { + return [type, view, targetEl, this.getGroupName(targetEl), e]; + } +}); + +/** + * This feature adds an aggregate summary row at the bottom of each group that is provided + * by the {@link Ext.grid.feature.Grouping} feature. There are two aspects to the summary: + * + * ## Calculation + * + * The summary value needs to be calculated for each column in the grid. This is controlled + * by the summaryType option specified on the column. There are several built in summary types, + * which can be specified as a string on the column configuration. These call underlying methods + * on the store: + * + * - {@link Ext.data.Store#count count} + * - {@link Ext.data.Store#sum sum} + * - {@link Ext.data.Store#min min} + * - {@link Ext.data.Store#max max} + * - {@link Ext.data.Store#average average} + * + * Alternatively, the summaryType can be a function definition. If this is the case, + * the function is called with an array of records to calculate the summary value. + * + * ## Rendering + * + * Similar to a column, the summary also supports a summaryRenderer function. This + * summaryRenderer is called before displaying a value. The function is optional, if + * not specified the default calculated value is shown. The summaryRenderer is called with: + * + * - value {Object} - The calculated value. + * - summaryData {Object} - Contains all raw summary values for the row. + * - field {String} - The name of the field we are calculating + * + * ## Example Usage + * + * @example + * Ext.define('TestResult', { + * extend: 'Ext.data.Model', + * fields: ['student', 'subject', { + * name: 'mark', + * type: 'int' + * }] + * }); + * + * Ext.create('Ext.grid.Panel', { + * width: 200, + * height: 240, + * renderTo: document.body, + * features: [{ + * groupHeaderTpl: 'Subject: {name}', + * ftype: 'groupingsummary' + * }], + * store: { + * model: 'TestResult', + * groupField: 'subject', + * data: [{ + * student: 'Student 1', + * subject: 'Math', + * mark: 84 + * },{ + * student: 'Student 1', + * subject: 'Science', + * mark: 72 + * },{ + * student: 'Student 2', + * subject: 'Math', + * mark: 96 + * },{ + * student: 'Student 2', + * subject: 'Science', + * mark: 68 + * }] + * }, + * columns: [{ + * dataIndex: 'student', + * text: 'Name', + * summaryType: 'count', + * summaryRenderer: function(value){ + * return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : ''); + * } + * }, { + * dataIndex: 'mark', + * text: 'Mark', + * summaryType: 'average' + * }] + * }); + */ +Ext.define('Ext.grid.feature.GroupingSummary', { + + /* Begin Definitions */ + + extend: 'Ext.grid.feature.Grouping', + + alias: 'feature.groupingsummary', + + mixins: { + summary: 'Ext.grid.feature.AbstractSummary' + }, + + /* End Definitions */ + + init: function() { + this.mixins.summary.init.call(this); + }, + + /** + * Modifies the row template to include the summary row. + * @private + * @return {String} The modified template + */ + getFeatureTpl: function() { + var tpl = this.callParent(arguments); + + if (this.showSummaryRow) { + // lop off the end so we can attach it + tpl = tpl.replace('', ''); + tpl += '{[this.printSummaryRow(xindex)]}'; + } + return tpl; + }, + + /** + * Gets any fragments needed for the template. + * @private + * @return {Object} The fragments + */ + getFragmentTpl: function() { + var me = this, + fragments = me.callParent(); + + Ext.apply(fragments, me.getSummaryFragments()); + if (me.showSummaryRow) { + // this gets called before render, so we'll setup the data here. + me.summaryGroups = me.view.store.getGroups(); + me.summaryData = me.generateSummaryData(); + } + return fragments; + }, + + /** + * Gets the data for printing a template row + * @private + * @param {Number} index The index in the template + * @return {Array} The template values + */ + getPrintData: function(index){ + var me = this, + columns = me.view.headerCt.getColumnsForTpl(), + i = 0, + length = columns.length, + data = [], + name = me.summaryGroups[index - 1].name, + active = me.summaryData[name], + column; + + for (; i < length; ++i) { + column = columns[i]; + column.gridSummaryValue = this.getColumnValue(column, active); + data.push(column); + } + return data; + }, + + /** + * Generates all of the summary data to be used when processing the template + * @private + * @return {Object} The summary data + */ + generateSummaryData: function(){ + var me = this, + data = {}, + remoteData = {}, + store = me.view.store, + groupField = this.getGroupField(), + reader = store.proxy.reader, + groups = me.summaryGroups, + columns = me.view.headerCt.getColumnsForTpl(), + remote, + i, + length, + fieldData, + root, + key, + comp, + summaryRows, + s, + sLen, + convertedSummaryRow; + + for (i = 0, length = groups.length; i < length; ++i) { + data[groups[i].name] = {}; + } + + /** + * @cfg {String} [remoteRoot=undefined] + * The name of the property which contains the Array of summary objects. + * It allows to use server-side calculated summaries. + */ + if (me.remoteRoot && reader.rawData) { + // reset reader root and rebuild extractors to extract summaries data + root = reader.root; + reader.root = me.remoteRoot; + reader.buildExtractors(true); + summaryRows = reader.getRoot(reader.rawData); + sLen = summaryRows.length; + + // Ensure the Reader has a data conversion function to convert a raw data row into a Record data hash + if (!reader.convertRecordData) { + reader.buildExtractors(); + } + + for (s = 0; s < sLen; s++) { + convertedSummaryRow = {}; + + // Convert a raw data row into a Record's hash object using the Reader + reader.convertRecordData(convertedSummaryRow, summaryRows[s]); + remoteData[convertedSummaryRow[groupField]] = convertedSummaryRow; + } + + // restore initial reader configuration + reader.root = root; + reader.buildExtractors(true); + } + + for (i = 0, length = columns.length; i < length; ++i) { + comp = Ext.getCmp(columns[i].id); + fieldData = me.getSummary(store, comp.summaryType, comp.dataIndex, true); + + for (key in fieldData) { + if (fieldData.hasOwnProperty(key)) { + data[key][comp.id] = fieldData[key]; + } + } + + for (key in remoteData) { + if (remoteData.hasOwnProperty(key)) { + remote = remoteData[key][comp.dataIndex]; + if (remote !== undefined && data[key] !== undefined) { + data[key][comp.id] = remote; + } + } + } + } + return data; + } +}); + +/** + * The rowbody feature enhances the grid's markup to have an additional + * tr -> td -> div which spans the entire width of the original row. + * + * This is useful to to associate additional information with a particular + * record in a grid. + * + * Rowbodies are initially hidden unless you override getAdditionalData. + * + * Will expose additional events on the gridview with the prefix of 'rowbody'. + * For example: 'rowbodyclick', 'rowbodydblclick', 'rowbodycontextmenu'. + * + * # Example + * + * @example + * Ext.define('Animal', { + * extend: 'Ext.data.Model', + * fields: ['name', 'latin', 'desc'] + * }); + * + * Ext.create('Ext.grid.Panel', { + * width: 400, + * height: 300, + * renderTo: Ext.getBody(), + * store: { + * model: 'Animal', + * data: [ + * {name: 'Tiger', latin: 'Panthera tigris', + * desc: 'The largest cat species, weighing up to 306 kg (670 lb).'}, + * {name: 'Roman snail', latin: 'Helix pomatia', + * desc: 'A species of large, edible, air-breathing land snail.'}, + * {name: 'Yellow-winged darter', latin: 'Sympetrum flaveolum', + * desc: 'A dragonfly found in Europe and mid and Northern China.'}, + * {name: 'Superb Fairy-wren', latin: 'Malurus cyaneus', + * desc: 'Common and familiar across south-eastern Australia.'} + * ] + * }, + * columns: [{ + * dataIndex: 'name', + * text: 'Common name', + * width: 125 + * }, { + * dataIndex: 'latin', + * text: 'Scientific name', + * flex: 1 + * }], + * features: [{ + * ftype: 'rowbody', + * getAdditionalData: function(data, rowIndex, record, orig) { + * var headerCt = this.view.headerCt, + * colspan = headerCt.getColumnCount(); + * // Usually you would style the my-body-class in CSS file + * return { + * rowBody: '
    '+record.get("desc")+'
    ', + * rowBodyCls: "my-body-class", + * rowBodyColspan: colspan + * }; + * } + * }] + * }); + */ +Ext.define('Ext.grid.feature.RowBody', { + extend: 'Ext.grid.feature.Feature', + alias: 'feature.rowbody', + rowBodyHiddenCls: Ext.baseCSSPrefix + 'grid-row-body-hidden', + rowBodyTrCls: Ext.baseCSSPrefix + 'grid-rowbody-tr', + rowBodyTdCls: Ext.baseCSSPrefix + 'grid-cell-rowbody', + rowBodyDivCls: Ext.baseCSSPrefix + 'grid-rowbody', + + eventPrefix: 'rowbody', + eventSelector: '.' + Ext.baseCSSPrefix + 'grid-rowbody-tr', + + getRowBody: function(values) { + return [ + '', + '', + '' + ].join(''); + }, + + // injects getRowBody into the metaRowTpl. + getMetaRowTplFragments: function() { + return { + getRowBody: this.getRowBody, + rowBodyTrCls: this.rowBodyTrCls, + rowBodyTdCls: this.rowBodyTdCls, + rowBodyDivCls: this.rowBodyDivCls + }; + }, + + mutateMetaRowTpl: function(metaRowTpl) { + metaRowTpl.push('{[this.getRowBody(values)]}'); + }, + + /** + * Provides additional data to the prepareData call within the grid view. + * The rowbody feature adds 3 additional variables into the grid view's template. + * These are rowBodyCls, rowBodyColspan, and rowBody. + * @param {Object} data The data for this particular record. + * @param {Number} idx The row index for this record. + * @param {Ext.data.Model} record The record instance + * @param {Object} orig The original result from the prepareData call to massage. + */ + getAdditionalData: function(data, idx, record, orig) { + var headerCt = this.view.headerCt, + colspan = headerCt.getColumnCount(); + + return { + rowBody: "", + rowBodyCls: this.rowBodyCls, + rowBodyColspan: colspan + }; + } +}); + +/** + * @private + */ +Ext.define('Ext.grid.feature.RowWrap', { + extend: 'Ext.grid.feature.Feature', + alias: 'feature.rowwrap', + + // turn off feature events. + hasFeatureEvent: false, + + init: function() { + if (!this.disabled) { + this.enable(); + } + }, + + getRowSelector: function(){ + return 'tr:has(> ' + this.view.cellSelector + ')'; + }, + + enable: function(){ + var me = this, + view = me.view; + + me.callParent(); + // we need to mutate the rowSelector since the template changes the ordering + me.savedRowSelector = view.rowSelector; + view.rowSelector = me.getRowSelector(); + + // Extra functionality needed on header resize when row is wrapped: + // Every individual cell in a column needs its width syncing. + // So we produce a different column selector which includes al TDs in a column + view.getComponentLayout().getColumnSelector = me.getColumnSelector; + }, + + disable: function(){ + var me = this, + view = me.view, + saved = me.savedRowSelector; + + me.callParent(); + if (saved) { + view.rowSelector = saved; + } + delete me.savedRowSelector; + }, + + mutateMetaRowTpl: function(metaRowTpl) { + var prefix = Ext.baseCSSPrefix; + // Remove "x-grid-row" from the first row, note this could be wrong + // if some other feature unshifted things in front. + metaRowTpl[0] = metaRowTpl[0].replace(prefix + 'grid-row', ''); + metaRowTpl[0] = metaRowTpl[0].replace("{[this.embedRowCls()]}", ""); + // 2 + metaRowTpl.unshift('
    {collapsed}{[this.renderGroupHeaderTpl(values, parent)]}
    {[this.recurse(values)]}
    ', + '
    {rowBody}
    ', + '
    '); + // 1 + metaRowTpl.unshift('
    '); + + // 3 + metaRowTpl.push('
    '); + // 4 + metaRowTpl.push('
    ', + '{%this.renderBody(out,values)%}', + '
    ', + '{%this.renderPadder(out,values)%}' + ], + + getRenderData: function(){ + var data = this.callParent(); + data.tableCls = this.tableCls; + return data; + }, + + calculate : function (ownerContext) { + var me = this, + containerSize = me.getContainerSize(ownerContext, true), + tableWidth, + childItems, + i = 0, length; + + // Once we have been widthed, we can impose that width (in a non-dirty setting) upon all children at once + if (containerSize.gotWidth) { + this.callParent(arguments); + tableWidth = me.formTable.dom.offsetWidth; + childItems = ownerContext.childItems; + + for (length = childItems.length; i < length; ++i) { + childItems[i].setWidth(tableWidth, false); + } + } else { + me.done = false; + } + }, + + getRenderTarget: function() { + return this.formTable; + }, + + getRenderTree: function() { + var me = this, + result = me.callParent(arguments), + i, len; + + for (i = 0, len = result.length; i < len; i++) { + result[i] = me.transformItemRenderTree(result[i]); + } + return result; + }, + + transformItemRenderTree: function(item) { + + if (item.tag && item.tag == 'table') { + item.tag = 'tbody'; + delete item.cellspacing; + delete item.cellpadding; + + // IE6 doesn't separate cells nicely to provide input field + // vertical separation. It also does not support transparent borders + // which is how the extra 1px is added to the 2px each side cell spacing. + // So it needs a 5px high pad row. + if (Ext.isIE6) { + item.cn = this.padRow; + } + + return item; + } + + return { + tag: 'tbody', + cn: { + tag: 'tr', + cn: { + tag: 'td', + colspan: 3, + style: 'width:100%', + cn: item + } + } + }; + + }, + + isValidParent: function(item, target, position) { + return true; + }, + + isItemShrinkWrap: function(item) { + return ((item.shrinkWrap === true) ? 3 : item.shrinkWrap||0) & 2; + }, + + getItemSizePolicy: function(item) { + return { + setsWidth: 1, + setsHeight: 0 + }; + } +}); + +/** + * A base class for all menu items that require menu-related functionality such as click handling, + * sub-menus, icons, etc. + * + * @example + * Ext.create('Ext.menu.Menu', { + * width: 100, + * height: 100, + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * text: 'icon item', + * iconCls: 'add16' + * },{ + * text: 'text item' + * },{ + * text: 'plain item', + * plain: true + * }] + * }); + */ +Ext.define('Ext.menu.Item', { + extend: 'Ext.Component', + alias: 'widget.menuitem', + alternateClassName: 'Ext.menu.TextItem', + + /** + * @property {Boolean} activated + * Whether or not this item is currently activated + */ + + /** + * @property {Ext.menu.Menu} parentMenu + * The parent Menu of this item. + */ + + /** + * @cfg {String} activeCls + * The CSS class added to the menu item when the item is activated (focused/mouseover). + */ + activeCls: Ext.baseCSSPrefix + 'menu-item-active', + + /** + * @cfg {String} ariaRole + * @private + */ + ariaRole: 'menuitem', + + /** + * @cfg {Boolean} canActivate + * Whether or not this menu item can be activated when focused/mouseovered. + */ + canActivate: true, + + /** + * @cfg {Number} clickHideDelay + * The delay in milliseconds to wait before hiding the menu after clicking the menu item. + * This only has an effect when `hideOnClick: true`. + */ + clickHideDelay: 1, + + /** + * @cfg {Boolean} destroyMenu + * Whether or not to destroy any associated sub-menu when this item is destroyed. + */ + destroyMenu: true, + + /** + * @cfg {String} disabledCls + * The CSS class added to the menu item when the item is disabled. + */ + disabledCls: Ext.baseCSSPrefix + 'menu-item-disabled', + + /** + * @cfg {String} [href='#'] + * The href attribute to use for the underlying anchor link. + */ + + /** + * @cfg {String} hrefTarget + * The target attribute to use for the underlying anchor link. + */ + + /** + * @cfg {Boolean} hideOnClick + * Whether to not to hide the owning menu when this item is clicked. + */ + hideOnClick: true, + + /** + * @cfg {String} icon + * The path to an icon to display in this item. + * + * Defaults to `Ext.BLANK_IMAGE_URL`. + */ + + /** + * @cfg {String} iconCls + * A CSS class that specifies a `background-image` to use as the icon for this item. + */ + + isMenuItem: true, + + /** + * @cfg {Ext.menu.Menu/Object} menu + * Either an instance of {@link Ext.menu.Menu} or a config object for an {@link Ext.menu.Menu} + * which will act as a sub-menu to this item. + */ + + /** + * @property {Ext.menu.Menu} menu The sub-menu associated with this item, if one was configured. + */ + + /** + * @cfg {String} menuAlign + * The default {@link Ext.Element#getAlignToXY Ext.Element.getAlignToXY} anchor position value for this + * item's sub-menu relative to this item's position. + */ + menuAlign: 'tl-tr?', + + /** + * @cfg {Number} menuExpandDelay + * The delay in milliseconds before this item's sub-menu expands after this item is moused over. + */ + menuExpandDelay: 200, + + /** + * @cfg {Number} menuHideDelay + * The delay in milliseconds before this item's sub-menu hides after this item is moused out. + */ + menuHideDelay: 200, + + /** + * @cfg {Boolean} plain + * Whether or not this item is plain text/html with no icon or visual activation. + */ + + /** + * @cfg {String/Object} tooltip + * The tooltip for the button - can be a string to be used as innerHTML (html tags are accepted) or + * QuickTips config object. + */ + + /** + * @cfg {String} tooltipType + * The type of tooltip to use. Either 'qtip' for QuickTips or 'title' for title attribute. + */ + tooltipType: 'qtip', + + arrowCls: Ext.baseCSSPrefix + 'menu-item-arrow', + + childEls: [ + 'itemEl', 'iconEl', 'textEl', 'arrowEl' + ], + + renderTpl: [ + '', + '{text}', + '', + 'target="{hrefTarget}" hidefocus="true" unselectable="on">', + '', + 'style="margin-right: 17px;" >{text}', + '', + '', + '' + ], + + maskOnDisable: false, + + /** + * @cfg {String} text + * The text/html to display in this item. + */ + + /** + * @cfg {Function} handler + * A function called when the menu item is clicked (can be used instead of {@link #click} event). + * @cfg {Ext.menu.Item} handler.item The item that was clicked + * @cfg {Ext.EventObject} handler.e The underyling {@link Ext.EventObject}. + */ + + activate: function() { + var me = this; + + if (!me.activated && me.canActivate && me.rendered && !me.isDisabled() && me.isVisible()) { + me.el.addCls(me.activeCls); + me.focus(); + me.activated = true; + me.fireEvent('activate', me); + } + }, + + getFocusEl: function() { + return this.itemEl; + }, + + deactivate: function() { + var me = this; + + if (me.activated) { + me.el.removeCls(me.activeCls); + me.blur(); + me.hideMenu(); + me.activated = false; + me.fireEvent('deactivate', me); + } + }, + + deferExpandMenu: function() { + var me = this; + + if (me.activated && (!me.menu.rendered || !me.menu.isVisible())) { + me.parentMenu.activeChild = me.menu; + me.menu.parentItem = me; + me.menu.parentMenu = me.menu.ownerCt = me.parentMenu; + me.menu.showBy(me, me.menuAlign); + } + }, + + deferHideMenu: function() { + if (this.menu.isVisible()) { + this.menu.hide(); + } + }, + + cancelDeferHide: function(){ + clearTimeout(this.hideMenuTimer); + }, + + deferHideParentMenus: function() { + var ancestor; + Ext.menu.Manager.hideAll(); + + if (!Ext.Element.getActiveElement()) { + // If we have just hidden all Menus, and there is no currently focused element in the dom, transfer focus to the first visible ancestor if any. + ancestor = this.up(':not([hidden])'); + if (ancestor) { + ancestor.focus(); + } + } + }, + + expandMenu: function(delay) { + var me = this; + + if (me.menu) { + me.cancelDeferHide(); + if (delay === 0) { + me.deferExpandMenu(); + } else { + me.expandMenuTimer = Ext.defer(me.deferExpandMenu, Ext.isNumber(delay) ? delay : me.menuExpandDelay, me); + } + } + }, + + getRefItems: function(deep){ + var menu = this.menu, + items; + + if (menu) { + items = menu.getRefItems(deep); + items.unshift(menu); + } + return items || []; + }, + + hideMenu: function(delay) { + var me = this; + + if (me.menu) { + clearTimeout(me.expandMenuTimer); + me.hideMenuTimer = Ext.defer(me.deferHideMenu, Ext.isNumber(delay) ? delay : me.menuHideDelay, me); + } + }, + + initComponent: function() { + var me = this, + prefix = Ext.baseCSSPrefix, + cls = [prefix + 'menu-item'], + menu; + + me.addEvents( + /** + * @event activate + * Fires when this item is activated + * @param {Ext.menu.Item} item The activated item + */ + 'activate', + + /** + * @event click + * Fires when this item is clicked + * @param {Ext.menu.Item} item The item that was clicked + * @param {Ext.EventObject} e The underyling {@link Ext.EventObject}. + */ + 'click', + + /** + * @event deactivate + * Fires when this tiem is deactivated + * @param {Ext.menu.Item} item The deactivated item + */ + 'deactivate' + ); + + if (me.plain) { + cls.push(prefix + 'menu-item-plain'); + } + + if (me.cls) { + cls.push(me.cls); + } + + me.cls = cls.join(' '); + + if (me.menu) { + menu = me.menu; + delete me.menu; + me.setMenu(menu); + } + + me.callParent(arguments); + }, + + onClick: function(e) { + var me = this; + + if (!me.href) { + e.stopEvent(); + } + + if (me.disabled) { + return; + } + + if (me.hideOnClick) { + me.deferHideParentMenusTimer = Ext.defer(me.deferHideParentMenus, me.clickHideDelay, me); + } + + Ext.callback(me.handler, me.scope || me, [me, e]); + me.fireEvent('click', me, e); + + if (!me.hideOnClick) { + me.focus(); + } + }, + + onRemoved: function() { + var me = this; + + // Removing the active item, must deactivate it. + if (me.activated && me.parentMenu.activeItem === me) { + me.parentMenu.deactivateActiveItem(); + } + me.callParent(arguments); + delete me.parentMenu; + delete me.ownerButton; + }, + + // private + beforeDestroy: function() { + var me = this; + if (me.rendered) { + me.clearTip(); + } + me.callParent(); + }, + + onDestroy: function() { + var me = this; + + clearTimeout(me.expandMenuTimer); + me.cancelDeferHide(); + clearTimeout(me.deferHideParentMenusTimer); + + me.setMenu(null); + me.callParent(arguments); + }, + + beforeRender: function() { + var me = this, + blank = Ext.BLANK_IMAGE_URL, + iconCls, + arrowCls; + + me.callParent(); + + if (me.iconAlign === 'right') { + iconCls = me.checkChangeDisabled ? me.disabledCls : ''; + arrowCls = Ext.baseCSSPrefix + 'menu-item-icon-right ' + me.iconCls; + } else { + iconCls = me.iconCls + (me.checkChangeDisabled ? ' ' + me.disabledCls : ''); + arrowCls = me.menu ? me.arrowCls : ''; + } + Ext.applyIf(me.renderData, { + href: me.href || '#', + hrefTarget: me.hrefTarget, + icon: me.icon || blank, + iconCls: iconCls, + plain: me.plain, + text: me.text, + arrowCls: arrowCls, + blank: blank + }); + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + if (me.tooltip) { + me.setTooltip(me.tooltip, true); + } + }, + + /** + * Set a child menu for this item. See the {@link #cfg-menu} configuration. + * @param {Ext.menu.Menu/Object} menu A menu, or menu configuration. null may be + * passed to remove the menu. + * @param {Boolean} [destroyMenu] True to destroy any existing menu. False to + * prevent destruction. If not specified, the {@link #destroyMenu} configuration + * will be used. + */ + setMenu: function(menu, destroyMenu) { + var me = this, + oldMenu = me.menu, + arrowEl = me.arrowEl; + + if (oldMenu) { + delete oldMenu.parentItem; + delete oldMenu.parentMenu; + delete oldMenu.ownerCt; + delete oldMenu.ownerItem; + + if (destroyMenu === true || (destroyMenu !== false && me.destroyMenu)) { + Ext.destroy(oldMenu); + } + } + if (menu) { + me.menu = Ext.menu.Manager.get(menu); + me.menu.ownerItem = me; + } else { + me.menu = null; + } + + if (me.rendered && !me.destroying && arrowEl) { + arrowEl[me.menu ? 'addCls' : 'removeCls'](me.arrowCls); + } + }, + + /** + * Sets the {@link #click} handler of this item + * @param {Function} fn The handler function + * @param {Object} [scope] The scope of the handler function + */ + setHandler: function(fn, scope) { + this.handler = fn || null; + this.scope = scope; + }, + + /** + * Sets the {@link #icon} on this item. + * @param {String} icon The new icon + */ + setIcon: function(icon){ + var iconEl = this.iconEl; + if (iconEl) { + iconEl.src = icon || Ext.BLANK_IMAGE_URL; + } + this.icon = icon; + }, + + /** + * Sets the {@link #iconCls} of this item + * @param {String} iconCls The CSS class to set to {@link #iconCls} + */ + setIconCls: function(iconCls) { + var me = this, + iconEl = me.iconEl; + + if (iconEl) { + if (me.iconCls) { + iconEl.removeCls(me.iconCls); + } + + if (iconCls) { + iconEl.addCls(iconCls); + } + } + + me.iconCls = iconCls; + }, + + /** + * Sets the {@link #text} of this item + * @param {String} text The {@link #text} + */ + setText: function(text) { + var me = this, + el = me.textEl || me.el; + + me.text = text; + + if (me.rendered) { + el.update(text || ''); + // cannot just call layout on the component due to stretchmax + me.ownerCt.updateLayout(); + } + }, + + getTipAttr: function(){ + return this.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + }, + + //private + clearTip: function() { + if (Ext.isObject(this.tooltip)) { + Ext.tip.QuickTipManager.unregister(this.itemEl); + } + }, + + /** + * Sets the tooltip for this menu item. + * + * @param {String/Object} tooltip This may be: + * + * - **String** : A string to be used as innerHTML (html tags are accepted) to show in a tooltip + * - **Object** : A configuration object for {@link Ext.tip.QuickTipManager#register}. + * + * @return {Ext.menu.Item} this + */ + setTooltip: function(tooltip, initial) { + var me = this; + + if (me.rendered) { + if (!initial) { + me.clearTip(); + } + + if (Ext.isObject(tooltip)) { + Ext.tip.QuickTipManager.register(Ext.apply({ + target: me.itemEl.id + }, + tooltip)); + me.tooltip = tooltip; + } else { + me.itemEl.dom.setAttribute(me.getTipAttr(), tooltip); + } + } else { + me.tooltip = tooltip; + } + + return me; + } +}); + +/** + * A menu item that contains a togglable checkbox by default, but that can also be a part of a radio group. + * + * @example + * Ext.create('Ext.menu.Menu', { + * width: 100, + * height: 110, + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * xtype: 'menucheckitem', + * text: 'select all' + * },{ + * xtype: 'menucheckitem', + * text: 'select specific' + * },{ + * iconCls: 'add16', + * text: 'icon item' + * },{ + * text: 'regular item' + * }] + * }); + */ +Ext.define('Ext.menu.CheckItem', { + extend: 'Ext.menu.Item', + alias: 'widget.menucheckitem', + + /** + * @cfg {Boolean} [checked=false] + * True to render the menuitem initially checked. + */ + + /** + * @cfg {Function} checkHandler + * Alternative for the {@link #checkchange} event. Gets called with the same parameters. + */ + + /** + * @cfg {Object} scope + * Scope for the {@link #checkHandler} callback. + */ + + /** + * @cfg {String} group + * Name of a radio group that the item belongs. + * + * Specifying this option will turn check item into a radio item. + * + * Note that the group name must be globally unique. + */ + + /** + * @cfg {String} checkedCls + * The CSS class used by {@link #cls} to show the checked state. + * Defaults to `Ext.baseCSSPrefix + 'menu-item-checked'`. + */ + checkedCls: Ext.baseCSSPrefix + 'menu-item-checked', + /** + * @cfg {String} uncheckedCls + * The CSS class used by {@link #cls} to show the unchecked state. + * Defaults to `Ext.baseCSSPrefix + 'menu-item-unchecked'`. + */ + uncheckedCls: Ext.baseCSSPrefix + 'menu-item-unchecked', + /** + * @cfg {String} groupCls + * The CSS class applied to this item's icon image to denote being a part of a radio group. + * Defaults to `Ext.baseCSSClass + 'menu-group-icon'`. + * Any specified {@link #iconCls} overrides this. + */ + groupCls: Ext.baseCSSPrefix + 'menu-group-icon', + + /** + * @cfg {Boolean} [hideOnClick=false] + * Whether to not to hide the owning menu when this item is clicked. + * Defaults to `false` for checkbox items, and to `true` for radio group items. + */ + hideOnClick: false, + + /** + * @cfg {Boolean} [checkChangeDisabled=false] + * True to prevent the checked item from being toggled. Any submenu will still be accessible. + */ + checkChangeDisabled: false, + + afterRender: function() { + var me = this; + me.callParent(); + me.checked = !me.checked; + me.setChecked(!me.checked, true); + if (me.checkChangeDisabled) { + me.disableCheckChange(); + } + }, + + initComponent: function() { + var me = this; + me.addEvents( + /** + * @event beforecheckchange + * Fires before a change event. Return false to cancel. + * @param {Ext.menu.CheckItem} this + * @param {Boolean} checked + */ + 'beforecheckchange', + + /** + * @event checkchange + * Fires after a change event. + * @param {Ext.menu.CheckItem} this + * @param {Boolean} checked + */ + 'checkchange' + ); + + me.callParent(arguments); + + Ext.menu.Manager.registerCheckable(me); + + if (me.group) { + if (!me.iconCls) { + me.iconCls = me.groupCls; + } + if (me.initialConfig.hideOnClick !== false) { + me.hideOnClick = true; + } + } + }, + + /** + * Disables just the checkbox functionality of this menu Item. If this menu item has a submenu, that submenu + * will still be accessible + */ + disableCheckChange: function() { + var me = this, + iconEl = me.iconEl; + + if (iconEl) { + iconEl.addCls(me.disabledCls); + } + // In some cases the checkbox will disappear until repainted + // Happens in everything except IE9 strict, see: EXTJSIV-6412 + if (!(Ext.isIE9 && Ext.isStrict) && me.rendered) { + me.el.repaint(); + } + me.checkChangeDisabled = true; + }, + + /** + * Reenables the checkbox functionality of this menu item after having been disabled by {@link #disableCheckChange} + */ + enableCheckChange: function() { + var me = this, + iconEl = me.iconEl; + + if (iconEl) { + iconEl.removeCls(me.disabledCls); + } + me.checkChangeDisabled = false; + }, + + onClick: function(e) { + var me = this; + if(!me.disabled && !me.checkChangeDisabled && !(me.checked && me.group)) { + me.setChecked(!me.checked); + } + this.callParent([e]); + }, + + onDestroy: function() { + Ext.menu.Manager.unregisterCheckable(this); + this.callParent(arguments); + }, + + /** + * Sets the checked state of the item + * @param {Boolean} checked True to check, false to uncheck + * @param {Boolean} [suppressEvents=false] True to prevent firing the checkchange events. + */ + setChecked: function(checked, suppressEvents) { + var me = this; + if (me.checked !== checked && (suppressEvents || me.fireEvent('beforecheckchange', me, checked) !== false)) { + if (me.el) { + me.el[checked ? 'addCls' : 'removeCls'](me.checkedCls)[!checked ? 'addCls' : 'removeCls'](me.uncheckedCls); + } + me.checked = checked; + Ext.menu.Manager.onCheckChange(me, checked); + if (!suppressEvents) { + Ext.callback(me.checkHandler, me.scope, [me, checked]); + me.fireEvent('checkchange', me, checked); + } + } + } +}); + +/** + * @private + */ +Ext.define('Ext.menu.KeyNav', { + extend: 'Ext.util.KeyNav', + + requires: ['Ext.FocusManager'], + + constructor: function(menu) { + var me = this; + + me.menu = menu; + me.callParent([menu.el, { + down: me.down, + enter: me.enter, + esc: me.escape, + left: me.left, + right: me.right, + space: me.enter, + tab: me.tab, + up: me.up + }]); + }, + + down: function(e) { + var me = this, + fi = me.menu.focusedItem; + + if (fi && e.getKey() == Ext.EventObject.DOWN && me.isWhitelisted(fi)) { + return true; + } + me.focusNextItem(1); + }, + + enter: function(e) { + var menu = this.menu, + focused = menu.focusedItem; + + if (menu.activeItem) { + menu.onClick(e); + } else if (focused && focused.isFormField) { + // prevent stopEvent being called + return true; + } + }, + + escape: function(e) { + Ext.menu.Manager.hideAll(); + }, + + focusNextItem: function(step) { + var menu = this.menu, + items = menu.items, + focusedItem = menu.focusedItem, + startIdx = focusedItem ? items.indexOf(focusedItem) : -1, + idx = startIdx + step, + item; + + while (idx != startIdx) { + if (idx < 0) { + idx = items.length - 1; + } else if (idx >= items.length) { + idx = 0; + } + + item = items.getAt(idx); + if (menu.canActivateItem(item)) { + menu.setActiveItem(item); + break; + } + idx += step; + } + }, + + isWhitelisted: function(item) { + return Ext.FocusManager.isWhitelisted(item); + }, + + left: function(e) { + var menu = this.menu, + fi = menu.focusedItem, + ai = menu.activeItem; + + if (fi && this.isWhitelisted(fi)) { + return true; + } + + menu.hide(); + if (menu.parentMenu) { + menu.parentMenu.focus(); + } + }, + + right: function(e) { + var menu = this.menu, + fi = menu.focusedItem, + ai = menu.activeItem, + am; + + if (fi && this.isWhitelisted(fi)) { + return true; + } + + if (ai) { + am = menu.activeItem.menu; + if (am) { + ai.expandMenu(0); + Ext.defer(function() { + am.setActiveItem(am.items.getAt(0)); + }, 25); + } + } + }, + + tab: function(e) { + var me = this; + + if (e.shiftKey) { + me.up(e); + } else { + me.down(e); + } + }, + + up: function(e) { + var me = this, + fi = me.menu.focusedItem; + + if (fi && e.getKey() == Ext.EventObject.UP && me.isWhitelisted(fi)) { + return true; + } + me.focusNextItem(-1); + } +}); + +/** + * Adds a separator bar to a menu, used to divide logical groups of menu items. Generally you will + * add one of these by using "-" in your call to add() or in your items config rather than creating one directly. + * + * @example + * Ext.create('Ext.menu.Menu', { + * width: 100, + * height: 100, + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * text: 'icon item', + * iconCls: 'add16' + * },{ + * xtype: 'menuseparator' + * },{ + * text: 'separator above' + * },{ + * text: 'regular item' + * }] + * }); + */ +Ext.define('Ext.menu.Separator', { + extend: 'Ext.menu.Item', + alias: 'widget.menuseparator', + + /** + * @cfg {String} activeCls + * @private + */ + + /** + * @cfg {Boolean} canActivate + * @private + */ + canActivate: false, + + /** + * @cfg {Boolean} clickHideDelay + * @private + */ + + /** + * @cfg {Boolean} destroyMenu + * @private + */ + + /** + * @cfg {Boolean} disabledCls + * @private + */ + + focusable: false, + + /** + * @cfg {String} href + * @private + */ + + /** + * @cfg {String} hrefTarget + * @private + */ + + /** + * @cfg {Boolean} hideOnClick + * @private + */ + hideOnClick: false, + + /** + * @cfg {String} icon + * @private + */ + + /** + * @cfg {String} iconCls + * @private + */ + + /** + * @cfg {Object} menu + * @private + */ + + /** + * @cfg {String} menuAlign + * @private + */ + + /** + * @cfg {Number} menuExpandDelay + * @private + */ + + /** + * @cfg {Number} menuHideDelay + * @private + */ + + /** + * @cfg {Boolean} plain + * @private + */ + plain: true, + + /** + * @cfg {String} separatorCls + * The CSS class used by the separator item to show the incised line. + */ + separatorCls: Ext.baseCSSPrefix + 'menu-item-separator', + + /** + * @cfg {String} text + * @private + */ + text: ' ', + + beforeRender: function(ct, pos) { + var me = this; + + me.callParent(); + + me.addCls(me.separatorCls); + } +}); + +/** + * A menu object. This is the container to which you may add {@link Ext.menu.Item menu items}. + * + * Menus may contain either {@link Ext.menu.Item menu items}, or general {@link Ext.Component Components}. + * Menus may also contain {@link Ext.panel.AbstractPanel#dockedItems docked items} because it extends {@link Ext.panel.Panel}. + * + * To make a contained general {@link Ext.Component Component} line up with other {@link Ext.menu.Item menu items}, + * specify `{@link Ext.menu.Item#plain plain}: true`. This reserves a space for an icon, and indents the Component + * in line with the other menu items. + * + * By default, Menus are absolutely positioned, floating Components. By configuring a Menu with `{@link #floating}: false`, + * a Menu may be used as a child of a {@link Ext.container.Container Container}. + * + * @example + * Ext.create('Ext.menu.Menu', { + * width: 100, + * margin: '0 0 10 0', + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * text: 'regular item 1' + * },{ + * text: 'regular item 2' + * },{ + * text: 'regular item 3' + * }] + * }); + * + * Ext.create('Ext.menu.Menu', { + * width: 100, + * plain: true, + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * text: 'plain item 1' + * },{ + * text: 'plain item 2' + * },{ + * text: 'plain item 3' + * }] + * }); + */ +Ext.define('Ext.menu.Menu', { + extend: 'Ext.panel.Panel', + alias: 'widget.menu', + requires: [ + 'Ext.layout.container.Fit', + 'Ext.layout.container.VBox', + 'Ext.menu.CheckItem', + 'Ext.menu.Item', + 'Ext.menu.KeyNav', + 'Ext.menu.Manager', + 'Ext.menu.Separator' + ], + + /** + * @property {Ext.menu.Menu} parentMenu + * The parent Menu of this Menu. + */ + + /** + * @cfg {Boolean} [enableKeyNav=true] + * True to enable keyboard navigation for controlling the menu. + * This option should generally be disabled when form fields are + * being used inside the menu. + */ + enableKeyNav: true, + + /** + * @cfg {Boolean} [allowOtherMenus=false] + * True to allow multiple menus to be displayed at the same time. + */ + allowOtherMenus: false, + + /** + * @cfg {String} ariaRole + * @private + */ + ariaRole: 'menu', + + /** + * @cfg {Boolean} autoRender + * Floating is true, so autoRender always happens. + * @private + */ + + /** + * @cfg {String} [defaultAlign="tl-bl?"] + * The default {@link Ext.Element#getAlignToXY Ext.Element#getAlignToXY} anchor position value for this menu + * relative to its element of origin. + */ + defaultAlign: 'tl-bl?', + + /** + * @cfg {Boolean} [floating=true] + * A Menu configured as `floating: true` (the default) will be rendered as an absolutely positioned, + * {@link Ext.Component#floating floating} {@link Ext.Component Component}. If configured as `floating: false`, the Menu may be + * used as a child item of another {@link Ext.container.Container Container}. + */ + floating: true, + + /** + * @cfg {Boolean} constrain + * Menus are constrained to the document body by default. + * @private + */ + constrain: true, + + /** + * @cfg {Boolean} [hidden=undefined] + * True to initially render the Menu as hidden, requiring to be shown manually. + * + * Defaults to `true` when `floating: true`, and defaults to `false` when `floating: false`. + */ + hidden: true, + + hideMode: 'visibility', + + /** + * @cfg {Boolean} [ignoreParentClicks=false] + * True to ignore clicks on any item in this menu that is a parent item (displays a submenu) + * so that the submenu is not dismissed when clicking the parent item. + */ + ignoreParentClicks: false, + + /** + * @property {Boolean} isMenu + * `true` in this class to identify an object as an instantiated Menu, or subclass thereof. + */ + isMenu: true, + + /** + * @cfg {String/Object} layout + * @private + */ + + /** + * @cfg {Boolean} [showSeparator=true] + * True to show the icon separator. + */ + showSeparator : true, + + /** + * @cfg {Number} [minWidth=120] + * The minimum width of the Menu. The default minWidth only applies when the {@link #floating} config is true. + */ + minWidth: undefined, + + defaultMinWidth: 120, + + /** + * @cfg {Boolean} [plain=false] + * True to remove the incised line down the left side of the menu and to not indent general Component items. + */ + + initComponent: function() { + var me = this, + prefix = Ext.baseCSSPrefix, + cls = [prefix + 'menu'], + bodyCls = me.bodyCls ? [me.bodyCls] : [], + isFloating = me.floating !== false; + + me.addEvents( + /** + * @event click + * Fires when this menu is clicked + * @param {Ext.menu.Menu} menu The menu which has been clicked + * @param {Ext.Component} item The menu item that was clicked. `undefined` if not applicable. + * @param {Ext.EventObject} e The underlying {@link Ext.EventObject}. + */ + 'click', + + /** + * @event mouseenter + * Fires when the mouse enters this menu + * @param {Ext.menu.Menu} menu The menu + * @param {Ext.EventObject} e The underlying {@link Ext.EventObject} + */ + 'mouseenter', + + /** + * @event mouseleave + * Fires when the mouse leaves this menu + * @param {Ext.menu.Menu} menu The menu + * @param {Ext.EventObject} e The underlying {@link Ext.EventObject} + */ + 'mouseleave', + + /** + * @event mouseover + * Fires when the mouse is hovering over this menu + * @param {Ext.menu.Menu} menu The menu + * @param {Ext.Component} item The menu item that the mouse is over. `undefined` if not applicable. + * @param {Ext.EventObject} e The underlying {@link Ext.EventObject} + */ + 'mouseover' + ); + + Ext.menu.Manager.register(me); + + // Menu classes + if (me.plain) { + cls.push(prefix + 'menu-plain'); + } + me.cls = cls.join(' '); + + // Menu body classes + bodyCls.unshift(prefix + 'menu-body'); + me.bodyCls = bodyCls.join(' '); + + // Internal vbox layout, with scrolling overflow + // Placed in initComponent (rather than prototype) in order to support dynamic layout/scroller + // options if we wish to allow for such configurations on the Menu. + // e.g., scrolling speed, vbox align stretch, etc. + if (!me.layout) { + me.layout = { + type: 'vbox', + align: 'stretchmax', + overflowHandler: 'Scroller' + }; + } + + // only apply the minWidth when we're floating & one hasn't already been set + if (isFloating && me.minWidth === undefined) { + me.minWidth = me.defaultMinWidth; + } + + // hidden defaults to false if floating is configured as false + if (!isFloating && me.initialConfig.hidden !== true) { + me.hidden = false; + } + + me.callParent(arguments); + + me.on('beforeshow', function() { + var hasItems = !!me.items.length; + // FIXME: When a menu has its show cancelled because of no items, it + // gets a visibility: hidden applied to it (instead of the default display: none) + // Not sure why, but we remove this style when we want to show again. + if (hasItems && me.rendered) { + me.el.setStyle('visibility', null); + } + return hasItems; + }); + }, + + beforeRender: function() { + this.callParent(arguments); + + // Menus are usually floating: true, which means they shrink wrap their items. + // However, when they are contained, and not auto sized, we must stretch the items. + if (!this.getSizeModel().width.shrinkWrap) { + this.layout.align = 'stretch'; + } + }, + + onBoxReady: function() { + var me = this, + separatorSpec; + + me.callParent(arguments); + + // TODO: Move this to a subTemplate When we support them in the future + if (me.showSeparator) { + separatorSpec = { + cls: Ext.baseCSSPrefix + 'menu-icon-separator', + html: ' ' + }; + if ((!Ext.isStrict && Ext.isIE) || Ext.isIE6) { + separatorSpec.style = 'height:' + me.el.getHeight() + 'px'; + } + me.iconSepEl = me.layout.getElementTarget().insertFirst(separatorSpec); + } + + me.mon(me.el, { + click: me.onClick, + mouseover: me.onMouseOver, + scope: me + }); + me.mouseMonitor = me.el.monitorMouseLeave(100, me.onMouseLeave, me); + + if (me.enableKeyNav) { + me.keyNav = new Ext.menu.KeyNav(me); + } + }, + + getBubbleTarget: function() { + // If a submenu, this will have a parentMenu property + // If a menu of a Button, it will have an ownerButton property + // Else use the default method. + return this.parentMenu || this.ownerButton || this.callParent(arguments); + }, + + /** + * Returns whether a menu item can be activated or not. + * @return {Boolean} + */ + canActivateItem: function(item) { + return item && !item.isDisabled() && item.isVisible() && (item.canActivate || item.getXTypes().indexOf('menuitem') < 0); + }, + + /** + * Deactivates the current active item on the menu, if one exists. + */ + deactivateActiveItem: function(andBlurFocusedItem) { + var me = this, + activeItem = me.activeItem, + focusedItem = me.focusedItem; + + if (activeItem) { + activeItem.deactivate(); + if (!activeItem.activated) { + delete me.activeItem; + } + } + + // Blur the focused item if we are being asked to do that too + // Only needed if we are being hidden - mouseout does not blur. + if (focusedItem && andBlurFocusedItem) { + focusedItem.blur(); + delete me.focusedItem; + } + }, + + // inherit docs + getFocusEl: function() { + return this.focusedItem || this.el; + }, + + // inherit docs + hide: function() { + this.deactivateActiveItem(true); + this.callParent(arguments); + }, + + // private + getItemFromEvent: function(e) { + return this.getChildByElement(e.getTarget()); + }, + + lookupComponent: function(cmp) { + var me = this; + + if (typeof cmp == 'string') { + cmp = me.lookupItemFromString(cmp); + } else if (Ext.isObject(cmp)) { + cmp = me.lookupItemFromObject(cmp); + } + + // Apply our minWidth to all of our child components so it's accounted + // for in our VBox layout + cmp.minWidth = cmp.minWidth || me.minWidth; + + return cmp; + }, + + // private + lookupItemFromObject: function(cmp) { + var me = this, + prefix = Ext.baseCSSPrefix, + cls; + + if (!cmp.isComponent) { + if (!cmp.xtype) { + cmp = Ext.create('Ext.menu.' + (Ext.isBoolean(cmp.checked) ? 'Check': '') + 'Item', cmp); + } else { + cmp = Ext.ComponentManager.create(cmp, cmp.xtype); + } + } + + if (cmp.isMenuItem) { + cmp.parentMenu = me; + } + + if (!cmp.isMenuItem && !cmp.dock) { + cls = [prefix + 'menu-item', prefix + 'menu-item-cmp']; + + if (!me.plain && (cmp.indent === true || cmp.iconCls === 'no-icon')) { + cls.push(prefix + 'menu-item-indent'); + } + + if (cmp.rendered) { + cmp.el.addCls(cls); + } else { + cmp.cls = (cmp.cls ? cmp.cls : '') + ' ' + cls.join(' '); + } + } + return cmp; + }, + + // private + lookupItemFromString: function(cmp) { + return (cmp == 'separator' || cmp == '-') ? + new Ext.menu.Separator() + : new Ext.menu.Item({ + canActivate: false, + hideOnClick: false, + plain: true, + text: cmp + }); + }, + + onClick: function(e) { + var me = this, + item; + + if (me.disabled) { + e.stopEvent(); + return; + } + + item = (e.type === 'click') ? me.getItemFromEvent(e) : me.activeItem; + if (item && item.isMenuItem) { + if (!item.menu || !me.ignoreParentClicks) { + item.onClick(e); + } else { + e.stopEvent(); + } + } + // Click event may be fired without an item, so we need a second check + if (!item || item.disabled) { + item = undefined; + } + me.fireEvent('click', me, item, e); + }, + + onDestroy: function() { + var me = this; + + Ext.menu.Manager.unregister(me); + delete me.parentMenu; + delete me.ownerButton; + if (me.rendered) { + me.el.un(me.mouseMonitor); + Ext.destroy(me.keyNav); + delete me.keyNav; + } + me.callParent(arguments); + }, + + onMouseLeave: function(e) { + var me = this; + + me.deactivateActiveItem(); + + if (me.disabled) { + return; + } + + me.fireEvent('mouseleave', me, e); + }, + + onMouseOver: function(e) { + var me = this, + fromEl = e.getRelatedTarget(), + mouseEnter = !me.el.contains(fromEl), + item = me.getItemFromEvent(e), + parentMenu = me.parentMenu, + parentItem = me.parentItem; + + if (mouseEnter && parentMenu) { + parentMenu.setActiveItem(parentItem); + parentItem.cancelDeferHide(); + parentMenu.mouseMonitor.mouseenter(); + } + + if (me.disabled) { + return; + } + + // Do not activate the item if the mouseover was within the item, and it's already active + if (item && !item.activated) { + me.setActiveItem(item); + if (item.activated && item.expandMenu) { + item.expandMenu(); + } + } + if (mouseEnter) { + me.fireEvent('mouseenter', me, e); + } + me.fireEvent('mouseover', me, item, e); + }, + + setActiveItem: function(item) { + var me = this; + + if (item && (item != me.activeItem)) { + me.deactivateActiveItem(); + if (me.canActivateItem(item)) { + if (item.activate) { + item.activate(); + if (item.activated) { + me.activeItem = item; + me.focusedItem = item; + me.focus(); + } + } else { + item.focus(); + me.focusedItem = item; + } + } + item.el.scrollIntoView(me.layout.getRenderTarget()); + } + }, + + /** + * Shows the floating menu by the specified {@link Ext.Component Component} or {@link Ext.Element Element}. + * @param {Ext.Component/Ext.Element} component The {@link Ext.Component} or {@link Ext.Element} to show the menu by. + * @param {String} [position] Alignment position as used by {@link Ext.Element#getAlignToXY}. + * Defaults to `{@link #defaultAlign}`. + * @param {Number[]} [offsets] Alignment offsets as used by {@link Ext.Element#getAlignToXY}. + * @return {Ext.menu.Menu} This Menu. + */ + showBy: function(cmp, pos, off) { + var me = this; + + if (me.floating && cmp) { + me.show(); + + // Align to Component or Element using setPagePosition because normal show + // methods are container-relative, and we must align to the requested element + // or Component: + me.setPagePosition(me.el.getAlignToXY(cmp.el || cmp, pos || me.defaultAlign, off)); + me.setVerticalPosition(); + } + return me; + }, + + show: function() { + var me = this, + parentEl, viewHeight, result, + maxWas = me.maxHeight; + + // we need to get scope parent for height constraint + if (!me.rendered){ + me.doAutoRender(); + } + + // constrain the height to the curren viewable area + if (me.floating) { + //if our reset css is scoped, there will be a x-reset wrapper on this menu which we need to skip + parentEl = Ext.fly(me.el.getScopeParent()); + viewHeight = parentEl.getViewSize().height; + me.maxHeight = Math.min(maxWas || viewHeight, viewHeight); + } + + result = me.callParent(arguments); + me.maxHeight = maxWas; + return result; + }, + + afterComponentLayout: function(width, height, oldWidth, oldHeight){ + var me = this; + me.callParent(arguments); + // fixup the separator + if (me.showSeparator){ + me.iconSepEl.setHeight(me.componentLayout.lastComponentSize.contentHeight); + } + }, + + // private + // adjust the vertical position of the menu if the height of the + // menu is equal (or greater than) the viewport size + setVerticalPosition: function(){ + var me = this, + max, + y = me.el.getY(), + returnY = y, + height = me.getHeight(), + viewportHeight = Ext.Element.getViewportHeight().height, + parentEl = Ext.fly(me.el.getScopeParent()), + viewHeight = parentEl.getViewSize().height, + normalY = y - parentEl.getScroll().top; // factor in scrollTop of parent + + parentEl = null; + + if (me.floating) { + max = me.maxHeight ? me.maxHeight : viewHeight - normalY; + if (height > viewHeight) { + returnY = y - normalY; + } else if (max < height) { + returnY = y - (height - max); + } else if((y + height) > viewportHeight){ // keep the document from scrolling + returnY = viewportHeight - height; + } + } + me.el.setY(returnY); + } +}); + +/** + * A menu containing a Ext.picker.Color Component. + * + * Notes: + * + * - Although not listed here, the **constructor** for this class accepts all of the + * configuration options of {@link Ext.picker.Color}. + * - If subclassing ColorMenu, any configuration options for the ColorPicker must be + * applied to the **initialConfig** property of the ColorMenu. Applying + * {@link Ext.picker.Color ColorPicker} configuration settings to `this` will **not** + * affect the ColorPicker's configuration. + * + * Example: + * + * @example + * var colorPicker = Ext.create('Ext.menu.ColorPicker', { + * value: '000000' + * }); + * + * Ext.create('Ext.menu.Menu', { + * width: 100, + * height: 90, + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * text: 'choose a color', + * menu: colorPicker + * },{ + * iconCls: 'add16', + * text: 'icon item' + * },{ + * text: 'regular item' + * }] + * }); + */ + Ext.define('Ext.menu.ColorPicker', { + extend: 'Ext.menu.Menu', + + alias: 'widget.colormenu', + + requires: [ + 'Ext.picker.Color' + ], + + /** + * @cfg {Boolean} hideOnClick + * False to continue showing the menu after a date is selected. + */ + hideOnClick : true, + + /** + * @cfg {String} pickerId + * An id to assign to the underlying color picker. + */ + pickerId : null, + + /** + * @cfg {Number} maxHeight + * @private + */ + + /** + * @property {Ext.picker.Color} picker + * The {@link Ext.picker.Color} instance for this ColorMenu + */ + + /** + * @event click + * @private + */ + + initComponent : function(){ + var me = this, + cfg = Ext.apply({}, me.initialConfig); + + // Ensure we don't get duplicate listeners + delete cfg.listeners; + Ext.apply(me, { + plain: true, + showSeparator: false, + items: Ext.applyIf({ + cls: Ext.baseCSSPrefix + 'menu-color-item', + id: me.pickerId, + xtype: 'colorpicker' + }, cfg) + }); + + me.callParent(arguments); + + me.picker = me.down('colorpicker'); + + /** + * @event select + * @inheritdoc Ext.picker.Color#select + */ + me.relayEvents(me.picker, ['select']); + + if (me.hideOnClick) { + me.on('select', me.hidePickerOnSelect, me); + } + }, + + /** + * Hides picker on select if hideOnClick is true + * @private + */ + hidePickerOnSelect: function() { + Ext.menu.Manager.hideAll(); + } + }); + +/** + * A menu containing an Ext.picker.Date Component. + * + * Notes: + * + * - Although not listed here, the **constructor** for this class accepts all of the + * configuration options of **{@link Ext.picker.Date}**. + * - If subclassing DateMenu, any configuration options for the DatePicker must be applied + * to the **initialConfig** property of the DateMenu. Applying {@link Ext.picker.Date Date Picker} + * configuration settings to **this** will **not** affect the Date Picker's configuration. + * + * Example: + * + * @example + * var dateMenu = Ext.create('Ext.menu.DatePicker', { + * handler: function(dp, date){ + * Ext.Msg.alert('Date Selected', 'You selected ' + Ext.Date.format(date, 'M j, Y')); + * } + * }); + * + * Ext.create('Ext.menu.Menu', { + * width: 100, + * height: 90, + * floating: false, // usually you want this set to True (default) + * renderTo: Ext.getBody(), // usually rendered by it's containing component + * items: [{ + * text: 'choose a date', + * menu: dateMenu + * },{ + * iconCls: 'add16', + * text: 'icon item' + * },{ + * text: 'regular item' + * }] + * }); + */ + Ext.define('Ext.menu.DatePicker', { + extend: 'Ext.menu.Menu', + + alias: 'widget.datemenu', + + requires: [ + 'Ext.picker.Date' + ], + + /** + * @cfg {Boolean} hideOnClick + * False to continue showing the menu after a date is selected. + */ + hideOnClick : true, + + /** + * @cfg {String} pickerId + * An id to assign to the underlying date picker. + */ + pickerId : null, + + /** + * @cfg {Number} maxHeight + * @private + */ + + /** + * @property {Ext.picker.Date} picker + * The {@link Ext.picker.Date} instance for this DateMenu + */ + + initComponent : function(){ + var me = this, + cfg = Ext.apply({}, me.initialConfig); + + // Ensure we clear any listeners so they aren't duplicated + delete cfg.listeners; + + Ext.apply(me, { + showSeparator: false, + plain: true, + border: false, + bodyPadding: 0, // remove the body padding from the datepicker menu item so it looks like 3.3 + items: Ext.applyIf({ + cls: Ext.baseCSSPrefix + 'menu-date-item', + id: me.pickerId, + xtype: 'datepicker' + }, cfg) + }); + + me.callParent(arguments); + + me.picker = me.down('datepicker'); + /** + * @event select + * @inheritdoc Ext.picker.Date#select + */ + me.relayEvents(me.picker, ['select']); + + if (me.hideOnClick) { + me.on('select', me.hidePickerOnSelect, me); + } + }, + + hidePickerOnSelect: function() { + Ext.menu.Manager.hideAll(); + } + }); + +/** + * This class is used to display small visual icons in the header of a panel. There are a set of + * 25 icons that can be specified by using the {@link #type} config. The {@link #handler} config + * can be used to provide a function that will respond to any click events. In general, this class + * will not be instantiated directly, rather it will be created by specifying the {@link Ext.panel.Panel#tools} + * configuration on the Panel itself. + * + * @example + * Ext.create('Ext.panel.Panel', { + * width: 200, + * height: 200, + * renderTo: document.body, + * title: 'A Panel', + * tools: [{ + * type: 'help', + * handler: function(){ + * // show help here + * } + * }, { + * itemId: 'refresh', + * type: 'refresh', + * hidden: true, + * handler: function(){ + * // do refresh + * } + * }, { + * type: 'search', + * handler: function(event, target, owner, tool){ + * // do search + * owner.child('#refresh').show(); + * } + * }] + * }); + */ +Ext.define('Ext.panel.Tool', { + extend: 'Ext.Component', + requires: ['Ext.tip.QuickTipManager'], + alias: 'widget.tool', + + baseCls: Ext.baseCSSPrefix + 'tool', + disabledCls: Ext.baseCSSPrefix + 'tool-disabled', + + /** + * @cfg + * @private + */ + toolPressedCls: Ext.baseCSSPrefix + 'tool-pressed', + /** + * @cfg + * @private + */ + toolOverCls: Ext.baseCSSPrefix + 'tool-over', + + ariaRole: 'button', + + childEls: [ + 'toolEl' + ], + + renderTpl: [ + '' + ], + + /** + * @cfg {Function} handler + * A function to execute when the tool is clicked. Arguments passed are: + * + * - **event** : Ext.EventObject - The click event. + * - **toolEl** : Ext.Element - The tool Element. + * - **owner** : Ext.panel.Header - The host panel header. + * - **tool** : Ext.panel.Tool - The tool object + */ + + /** + * @cfg {Object} scope + * The scope to execute the {@link #handler} function. Defaults to the tool. + */ + + /** + * @cfg {String} type + * The type of tool to render. The following types are available: + * + * - close + * - minimize + * - maximize + * - restore + * - toggle + * - gear + * - prev + * - next + * - pin + * - unpin + * - right + * - left + * - down + * - up + * - refresh + * - plus + * - minus + * - search + * - save + * - help + * - print + * - expand + * - collapse + */ + + /** + * @cfg {String/Object} tooltip + * The tooltip for the tool - can be a string to be used as innerHTML (html tags are accepted) or QuickTips config + * object + */ + + /** + * @cfg {String} tooltipType + * The type of tooltip to use. Either 'qtip' (default) for QuickTips or 'title' for title attribute. + */ + tooltipType: 'qtip', + + /** + * @cfg {Boolean} stopEvent + * Specify as false to allow click event to propagate. + */ + stopEvent: true, + + height: 15, + width: 15, + + _toolTypes: { + close:1, + collapse:1, + down:1, + expand:1, + gear:1, + help:1, + left:1, + maximize:1, + minimize:1, + minus:1, + //move:1, + next:1, + pin:1, + plus:1, + prev:1, + print:1, + refresh:1, + //resize:1, + restore:1, + right:1, + save:1, + search:1, + toggle:1, + unpin:1, + up:1 + }, + + initComponent: function() { + var me = this; + me.addEvents( + /** + * @event click + * Fires when the tool is clicked + * @param {Ext.panel.Tool} this + * @param {Ext.EventObject} e The event object + */ + 'click' + ); + + if (me.id && me._toolTypes[me.id] && Ext.global.console) { + Ext.global.console.warn('When specifying a tool you should use the type option, the id can conflict now that tool is a Component'); + } + + me.type = me.type || me.id; + + Ext.applyIf(me.renderData, { + baseCls: me.baseCls, + blank: Ext.BLANK_IMAGE_URL, + type: me.type + }); + + // alias qtip, should use tooltip since it's what we have in the docs + me.tooltip = me.tooltip || me.qtip; + me.callParent(); + me.on({ + element: 'toolEl', + click: me.onClick, + mousedown: me.onMouseDown, + mouseover: me.onMouseOver, + mouseout: me.onMouseOut, + scope: me + }); + }, + + // inherit docs + afterRender: function() { + var me = this, + attr; + + me.callParent(arguments); + if (me.tooltip) { + if (Ext.isObject(me.tooltip)) { + Ext.tip.QuickTipManager.register(Ext.apply({ + target: me.id + }, me.tooltip)); + } + else { + attr = me.tooltipType == 'qtip' ? 'data-qtip' : 'title'; + me.toolEl.dom.setAttribute(attr, me.tooltip); + } + } + }, + + getFocusEl: function() { + return this.el; + }, + + /** + * Sets the type of the tool. Allows the icon to be changed. + * @param {String} type The new type. See the {@link #type} config. + * @return {Ext.panel.Tool} this + */ + setType: function(type) { + var me = this; + + me.type = type; + if (me.rendered) { + me.toolEl.dom.className = me.baseCls + '-' + type; + } + return me; + }, + + /** + * Binds this tool to a component. + * @private + * @param {Ext.Component} component The component + */ + bindTo: function(component) { + this.owner = component; + }, + + /** + * Called when the tool element is clicked + * @private + * @param {Ext.EventObject} e + * @param {HTMLElement} target The target element + */ + onClick: function(e, target) { + var me = this, + owner; + + if (me.disabled) { + return false; + } + owner = me.owner || me.ownerCt; + + //remove the pressed + over class + me.el.removeCls(me.toolPressedCls); + me.el.removeCls(me.toolOverCls); + + if (me.stopEvent !== false) { + e.stopEvent(); + } + + Ext.callback(me.handler, me.scope || me, [e, target, owner, me]); + me.fireEvent('click', me, e); + return true; + }, + + // inherit docs + onDestroy: function(){ + if (Ext.isObject(this.tooltip)) { + Ext.tip.QuickTipManager.unregister(this.id); + } + this.callParent(); + }, + + /** + * Called when the user presses their mouse button down on a tool + * Adds the press class ({@link #toolPressedCls}) + * @private + */ + onMouseDown: function() { + if (this.disabled) { + return false; + } + + this.el.addCls(this.toolPressedCls); + }, + + /** + * Called when the user rolls over a tool + * Adds the over class ({@link #toolOverCls}) + * @private + */ + onMouseOver: function() { + if (this.disabled) { + return false; + } + this.el.addCls(this.toolOverCls); + }, + + /** + * Called when the user rolls out from a tool. + * Removes the over class ({@link #toolOverCls}) + * @private + */ + onMouseOut: function() { + this.el.removeCls(this.toolOverCls); + } +}); + +/** + * Private utility class for Ext.Splitter. + * @private + */ +Ext.define('Ext.resizer.SplitterTracker', { + extend: 'Ext.dd.DragTracker', + requires: ['Ext.util.Region'], + enabled: true, + + overlayCls: Ext.baseCSSPrefix + 'resizable-overlay', + + createDragOverlay: function () { + var overlay; + + overlay = this.overlay = Ext.getBody().createChild({ + cls: this.overlayCls, + html: ' ' + }); + + overlay.unselectable(); + overlay.setSize(Ext.Element.getViewWidth(true), Ext.Element.getViewHeight(true)); + overlay.show(); + }, + + getPrevCmp: function() { + var splitter = this.getSplitter(); + return splitter.previousSibling(); + }, + + getNextCmp: function() { + var splitter = this.getSplitter(); + return splitter.nextSibling(); + }, + + // ensure the tracker is enabled, store boxes of previous and next + // components and calculate the constrain region + onBeforeStart: function(e) { + var me = this, + prevCmp = me.getPrevCmp(), + nextCmp = me.getNextCmp(), + collapseEl = me.getSplitter().collapseEl, + target = e.getTarget(), + box; + + if (collapseEl && target === me.getSplitter().collapseEl.dom) { + return false; + } + + // SplitterTracker is disabled if any of its adjacents are collapsed. + if (nextCmp.collapsed || prevCmp.collapsed) { + return false; + } + + // store boxes of previous and next + me.prevBox = prevCmp.getEl().getBox(); + me.nextBox = nextCmp.getEl().getBox(); + me.constrainTo = box = me.calculateConstrainRegion(); + + if (!box) { + return false; + } + + me.createDragOverlay(); + + return box; + }, + + // We move the splitter el. Add the proxy class. + onStart: function(e) { + var splitter = this.getSplitter(); + splitter.addCls(splitter.baseCls + '-active'); + }, + + // calculate the constrain Region in which the splitter el may be moved. + calculateConstrainRegion: function() { + var me = this, + splitter = me.getSplitter(), + splitWidth = splitter.getWidth(), + defaultMin = splitter.defaultSplitMin, + orient = splitter.orientation, + prevBox = me.prevBox, + prevCmp = me.getPrevCmp(), + nextBox = me.nextBox, + nextCmp = me.getNextCmp(), + // prev and nextConstrainRegions are the maximumBoxes minus the + // minimumBoxes. The result is always the intersection + // of these two boxes. + prevConstrainRegion, nextConstrainRegion; + + // vertical splitters, so resizing left to right + if (orient === 'vertical') { + + // Region constructor accepts (top, right, bottom, left) + // anchored/calculated from the left + prevConstrainRegion = new Ext.util.Region( + prevBox.y, + // Right boundary is x + maxWidth if there IS a maxWidth. + // Otherwise it is calculated based upon the minWidth of the next Component + (prevCmp.maxWidth ? prevBox.x + prevCmp.maxWidth : nextBox.right - (nextCmp.minWidth || defaultMin)) + splitWidth, + prevBox.bottom, + prevBox.x + (prevCmp.minWidth || defaultMin) + ); + // anchored/calculated from the right + nextConstrainRegion = new Ext.util.Region( + nextBox.y, + nextBox.right - (nextCmp.minWidth || defaultMin), + nextBox.bottom, + // Left boundary is right - maxWidth if there IS a maxWidth. + // Otherwise it is calculated based upon the minWidth of the previous Component + (nextCmp.maxWidth ? nextBox.right - nextCmp.maxWidth : prevBox.x + (prevBox.minWidth || defaultMin)) - splitWidth + ); + } else { + // anchored/calculated from the top + prevConstrainRegion = new Ext.util.Region( + prevBox.y + (prevCmp.minHeight || defaultMin), + prevBox.right, + // Bottom boundary is y + maxHeight if there IS a maxHeight. + // Otherwise it is calculated based upon the minWidth of the next Component + (prevCmp.maxHeight ? prevBox.y + prevCmp.maxHeight : nextBox.bottom - (nextCmp.minHeight || defaultMin)) + splitWidth, + prevBox.x + ); + // anchored/calculated from the bottom + nextConstrainRegion = new Ext.util.Region( + // Top boundary is bottom - maxHeight if there IS a maxHeight. + // Otherwise it is calculated based upon the minHeight of the previous Component + (nextCmp.maxHeight ? nextBox.bottom - nextCmp.maxHeight : prevBox.y + (prevCmp.minHeight || defaultMin)) - splitWidth, + nextBox.right, + nextBox.bottom - (nextCmp.minHeight || defaultMin), + nextBox.x + ); + } + + // intersection of the two regions to provide region draggable + return prevConstrainRegion.intersect(nextConstrainRegion); + }, + + // Performs the actual resizing of the previous and next components + performResize: function(e, offset) { + var me = this, + splitter = me.getSplitter(), + orient = splitter.orientation, + prevCmp = me.getPrevCmp(), + nextCmp = me.getNextCmp(), + owner = splitter.ownerCt, + flexedSiblings = owner.query('>[flex]'), + len = flexedSiblings.length, + i = 0, + dimension, + size, + totalFlex = 0; + + // Convert flexes to pixel values proportional to the total pixel width of all flexes. + for (; i < len; i++) { + size = flexedSiblings[i].getWidth(); + totalFlex += size; + flexedSiblings[i].flex = size; + } + + offset = offset || me.getOffset('dragTarget'); + + if (orient === 'vertical') { + offset = offset[0]; + dimension = 'width'; + } else { + dimension = 'height'; + offset = offset[1]; + } + if (prevCmp) { + size = me.prevBox[dimension] + offset; + if (prevCmp.flex) { + prevCmp.flex = size; + } else { + prevCmp[dimension] = size; + } + } + if (nextCmp) { + size = me.nextBox[dimension] - offset; + if (nextCmp.flex) { + nextCmp.flex = size; + } else { + nextCmp[dimension] = size; + } + } + + owner.updateLayout(); + }, + + // Cleans up the overlay (if we have one) and calls the base. This cannot be done in + // onEnd, because onEnd is only called if a drag is detected but the overlay is created + // regardless (by onBeforeStart). + endDrag: function () { + var me = this; + + if (me.overlay) { + me.overlay.remove(); + delete me.overlay; + } + + me.callParent(arguments); // this calls onEnd + }, + + // perform the resize and remove the proxy class from the splitter el + onEnd: function(e) { + var me = this, + splitter = me.getSplitter(); + + splitter.removeCls(splitter.baseCls + '-active'); + me.performResize(e, me.getOffset('dragTarget')); + }, + + // Track the proxy and set the proper XY coordinates + // while constraining the drag + onDrag: function(e) { + var me = this, + offset = me.getOffset('dragTarget'), + splitter = me.getSplitter(), + splitEl = splitter.getEl(), + orient = splitter.orientation; + + if (orient === "vertical") { + splitEl.setX(me.startRegion.left + offset[0]); + } else { + splitEl.setY(me.startRegion.top + offset[1]); + } + }, + + getSplitter: function() { + return this.splitter; + } +}); + +/** + * Private utility class for Ext.BorderSplitter. + * @private + */ +Ext.define('Ext.resizer.BorderSplitterTracker', { + extend: 'Ext.resizer.SplitterTracker', + requires: ['Ext.util.Region'], + + getPrevCmp: null, + getNextCmp: null, + + // calculate the constrain Region in which the splitter el may be moved. + calculateConstrainRegion: function() { + var me = this, + splitter = me.splitter, + collapseTarget = splitter.collapseTarget, + defaultSplitMin = splitter.defaultSplitMin, + sizePropCap = splitter.vertical ? 'Width' : 'Height', + minSizeProp = 'min' + sizePropCap, + maxSizeProp = 'max' + sizePropCap, + getSizeMethod = 'get' + sizePropCap, + neighbors = splitter.neighbors, + length = neighbors.length, + box = collapseTarget.el.getBox(), + left = box.x, + top = box.y, + right = box.right, + bottom = box.bottom, + size = splitter.vertical ? (right - left) : (bottom - top), + //neighborSizes = [], + i, neighbor, minRange, maxRange, maxGrowth, maxShrink, targetSize; + + // if size=100 and minSize=80, we can reduce by 20 so minRange = minSize-size = -20 + minRange = (collapseTarget[minSizeProp] || Math.min(size,defaultSplitMin)) - size; + + // if maxSize=150, maxRange = maxSize - size = 50 + maxRange = collapseTarget[maxSizeProp]; + if (!maxRange) { + maxRange = 1e9; + } else { + maxRange -= size; + } + targetSize = size; + + for (i = 0; i < length; ++i) { + neighbor = neighbors[i]; + size = neighbor[getSizeMethod](); + //neighborSizes.push(size); + + maxGrowth = size - neighbor[maxSizeProp]; // NaN if no maxSize or negative + maxShrink = size - (neighbor[minSizeProp] || Math.min(size,defaultSplitMin)); + + if (!isNaN(maxGrowth)) { + // if neighbor can only grow by 10 (maxGrowth = -10), minRange cannot be + // -20 anymore, but now only -10: + if (minRange < maxGrowth) { + minRange = maxGrowth; + } + } + + // if neighbor can shrink by 20 (maxShrink=20), maxRange cannot be 50 anymore, + // but now only 20: + if (maxRange > maxShrink) { + maxRange = maxShrink; + } + } + + if (maxRange - minRange < 2) { + return null; + } + + box = new Ext.util.Region(top, right, bottom, left); + + me.constraintAdjusters[splitter.collapseDirection](box, minRange, maxRange, splitter); + + me.dragInfo = { + minRange: minRange, + maxRange: maxRange, + //neighborSizes: neighborSizes, + targetSize: targetSize + }; + + return box; + }, + + constraintAdjusters: { + // splitter is to the right of the box + left: function (box, minRange, maxRange, splitter) { + box[0] = box.x = box.left = box.right + minRange; + box.right += maxRange + splitter.getWidth(); + }, + + // splitter is below the box + top: function (box, minRange, maxRange, splitter) { + box[1] = box.y = box.top = box.bottom + minRange; + box.bottom += maxRange + splitter.getHeight(); + }, + + // splitter is above the box + bottom: function (box, minRange, maxRange, splitter) { + box.bottom = box.top - minRange; + box.top -= maxRange + splitter.getHeight(); + }, + + // splitter is to the left of the box + right: function (box, minRange, maxRange, splitter) { + box.right = box.left - minRange; + box.left -= maxRange + splitter.getWidth(); + } + }, + + onBeforeStart: function(e) { + var me = this, + splitter = me.splitter, + collapseTarget = splitter.collapseTarget, + neighbors = splitter.neighbors, + collapseEl = me.getSplitter().collapseEl, + target = e.getTarget(), + length = neighbors.length, + i, neighbor; + + if (collapseEl && target === splitter.collapseEl.dom) { + return false; + } + + if (collapseTarget.collapsed) { + return false; + } + + // disabled if any neighbors are collapsed in parallel direction. + for (i = 0; i < length; ++i) { + neighbor = neighbors[i]; + + if (neighbor.collapsed && neighbor.isHorz === collapseTarget.isHorz) { + return false; + } + } + + if (!(me.constrainTo = me.calculateConstrainRegion())) { + return false; + } + + me.createDragOverlay(); + return true; + }, + + performResize: function(e, offset) { + var me = this, + splitter = me.splitter, + collapseDirection = splitter.collapseDirection, + collapseTarget = splitter.collapseTarget, + // a vertical splitter adjusts horizontal dimensions + adjusters = me.splitAdjusters[splitter.vertical ? 'horz' : 'vert'], + delta = offset[adjusters.index], + dragInfo = me.dragInfo, + //neighbors = splitter.neighbors, + //length = neighbors.length, + //neighborSizes = dragInfo.neighborSizes, + //isVert = collapseTarget.isVert, + //i, neighbor, + owner; + + if (collapseDirection == 'right' || collapseDirection == 'bottom') { + // these splitters grow by moving left/up, so flip the sign of delta... + delta = -delta; + } + + // now constrain delta to our computed range: + delta = Math.min(Math.max(dragInfo.minRange, delta), dragInfo.maxRange); + + if (delta) { + (owner = splitter.ownerCt).suspendLayouts(); + + adjusters.adjustTarget(collapseTarget, dragInfo.targetSize, delta); + + //for (i = 0; i < length; ++i) { + // neighbor = neighbors[i]; + // if (!neighbor.isCenter && !neighbor.maintainFlex && neighbor.isVert == isVert) { + // delete neighbor.flex; + // adjusters.adjustNeighbor(neighbor, neighborSizes[i], delta); + // } + //} + + owner.resumeLayouts(true); + } + }, + + splitAdjusters: { + horz: { + index: 0, + //adjustNeighbor: function (neighbor, size, delta) { + // neighbor.setSize(size - delta); + //}, + adjustTarget: function (target, size, delta) { + target.flex = null; + target.setSize(size + delta); + } + }, + vert: { + index: 1, + //adjustNeighbor: function (neighbor, size, delta) { + // neighbor.setSize(undefined, size - delta); + //}, + adjustTarget: function (target, targetSize, delta) { + target.flex = null; + target.setSize(undefined, targetSize + delta); + } + } + } +}); + +/** + * Provides a handle for 9-point resizing of Elements or Components. + */ +Ext.define('Ext.resizer.Handle', { + extend: 'Ext.Component', + handleCls: '', + baseHandleCls: Ext.baseCSSPrefix + 'resizable-handle', + // Ext.resizer.Resizer.prototype.possiblePositions define the regions + // which will be passed in as a region configuration. + region: '', + + beforeRender: function() { + var me = this; + + me.callParent(); + + me.addCls( + me.baseHandleCls, + me.baseHandleCls + '-' + me.region, + me.handleCls + ); + }, + + onRender: function() { + this.callParent(arguments); + + this.el.unselectable(); + } +}); + +/** + * Private utility class for Ext.resizer.Resizer. + * @private + */ +Ext.define('Ext.resizer.ResizeTracker', { + extend: 'Ext.dd.DragTracker', + dynamic: true, + preserveRatio: false, + + // Default to no constraint + constrainTo: null, + + proxyCls: Ext.baseCSSPrefix + 'resizable-proxy', + + constructor: function(config) { + var me = this, + widthRatio, heightRatio, + throttledResizeFn; + + if (!config.el) { + if (config.target.isComponent) { + me.el = config.target.getEl(); + } else { + me.el = config.target; + } + } + this.callParent(arguments); + + // Ensure that if we are preserving aspect ratio, the largest minimum is honoured + if (me.preserveRatio && me.minWidth && me.minHeight) { + widthRatio = me.minWidth / me.el.getWidth(); + heightRatio = me.minHeight / me.el.getHeight(); + + // largest ratio of minimum:size must be preserved. + // So if a 400x200 pixel image has + // minWidth: 50, maxWidth: 50, the maxWidth will be 400 * (50/200)... that is 100 + if (heightRatio > widthRatio) { + me.minWidth = me.el.getWidth() * heightRatio; + } else { + me.minHeight = me.el.getHeight() * widthRatio; + } + } + + // If configured as throttled, create an instance version of resize which calls + // a throttled function to perform the resize operation. + if (me.throttle) { + throttledResizeFn = Ext.Function.createThrottled(function() { + Ext.resizer.ResizeTracker.prototype.resize.apply(me, arguments); + }, me.throttle); + + me.resize = function(box, direction, atEnd) { + if (atEnd) { + Ext.resizer.ResizeTracker.prototype.resize.apply(me, arguments); + } else { + throttledResizeFn.apply(null, arguments); + } + }; + } + }, + + onBeforeStart: function(e) { + // record the startBox + this.startBox = this.el.getBox(); + }, + + /** + * @private + * Returns the object that will be resized on every mousemove event. + * If dynamic is false, this will be a proxy, otherwise it will be our actual target. + */ + getDynamicTarget: function() { + var me = this, + target = me.target; + + if (me.dynamic) { + return target; + } else if (!me.proxy) { + me.proxy = me.createProxy(target); + } + me.proxy.show(); + return me.proxy; + }, + + /** + * Create a proxy for this resizer + * @param {Ext.Component/Ext.Element} target The target + * @return {Ext.Element} A proxy element + */ + createProxy: function(target){ + var proxy, + cls = this.proxyCls, + renderTo; + + if (target.isComponent) { + proxy = target.getProxy().addCls(cls); + } else { + renderTo = Ext.getBody(); + if (Ext.scopeResetCSS) { + renderTo = Ext.getBody().createChild({ + cls: Ext.resetCls + }); + } + proxy = target.createProxy({ + tag: 'div', + cls: cls, + id: target.id + '-rzproxy' + }, renderTo); + } + proxy.removeCls(Ext.baseCSSPrefix + 'proxy-el'); + return proxy; + }, + + onStart: function(e) { + // returns the Ext.ResizeHandle that the user started dragging + this.activeResizeHandle = Ext.get(this.getDragTarget().id); + + // If we are using a proxy, ensure it is sized. + if (!this.dynamic) { + this.resize(this.startBox, { + horizontal: 'none', + vertical: 'none' + }); + } + }, + + onDrag: function(e) { + // dynamic resizing, update dimensions during resize + if (this.dynamic || this.proxy) { + this.updateDimensions(e); + } + }, + + updateDimensions: function(e, atEnd) { + var me = this, + region = me.activeResizeHandle.region, + offset = me.getOffset(me.constrainTo ? 'dragTarget' : null), + box = me.startBox, + ratio, + widthAdjust = 0, + heightAdjust = 0, + snappedWidth, + snappedHeight, + adjustX = 0, + adjustY = 0, + dragRatio, + horizDir = offset[0] < 0 ? 'right' : 'left', + vertDir = offset[1] < 0 ? 'down' : 'up', + oppositeCorner, + axis, // 1 = x, 2 = y, 3 = x and y. + newBox, + newHeight, newWidth; + + switch (region) { + case 'south': + heightAdjust = offset[1]; + axis = 2; + break; + case 'north': + heightAdjust = -offset[1]; + adjustY = -heightAdjust; + axis = 2; + break; + case 'east': + widthAdjust = offset[0]; + axis = 1; + break; + case 'west': + widthAdjust = -offset[0]; + adjustX = -widthAdjust; + axis = 1; + break; + case 'northeast': + heightAdjust = -offset[1]; + adjustY = -heightAdjust; + widthAdjust = offset[0]; + oppositeCorner = [box.x, box.y + box.height]; + axis = 3; + break; + case 'southeast': + heightAdjust = offset[1]; + widthAdjust = offset[0]; + oppositeCorner = [box.x, box.y]; + axis = 3; + break; + case 'southwest': + widthAdjust = -offset[0]; + adjustX = -widthAdjust; + heightAdjust = offset[1]; + oppositeCorner = [box.x + box.width, box.y]; + axis = 3; + break; + case 'northwest': + heightAdjust = -offset[1]; + adjustY = -heightAdjust; + widthAdjust = -offset[0]; + adjustX = -widthAdjust; + oppositeCorner = [box.x + box.width, box.y + box.height]; + axis = 3; + break; + } + + newBox = { + width: box.width + widthAdjust, + height: box.height + heightAdjust, + x: box.x + adjustX, + y: box.y + adjustY + }; + + // Snap value between stops according to configured increments + snappedWidth = Ext.Number.snap(newBox.width, me.widthIncrement); + snappedHeight = Ext.Number.snap(newBox.height, me.heightIncrement); + if (snappedWidth != newBox.width || snappedHeight != newBox.height){ + switch (region) { + case 'northeast': + newBox.y -= snappedHeight - newBox.height; + break; + case 'north': + newBox.y -= snappedHeight - newBox.height; + break; + case 'southwest': + newBox.x -= snappedWidth - newBox.width; + break; + case 'west': + newBox.x -= snappedWidth - newBox.width; + break; + case 'northwest': + newBox.x -= snappedWidth - newBox.width; + newBox.y -= snappedHeight - newBox.height; + } + newBox.width = snappedWidth; + newBox.height = snappedHeight; + } + + // out of bounds + if (newBox.width < me.minWidth || newBox.width > me.maxWidth) { + newBox.width = Ext.Number.constrain(newBox.width, me.minWidth, me.maxWidth); + + // Re-adjust the X position if we were dragging the west side + if (adjustX) { + newBox.x = box.x + (box.width - newBox.width); + } + } else { + me.lastX = newBox.x; + } + if (newBox.height < me.minHeight || newBox.height > me.maxHeight) { + newBox.height = Ext.Number.constrain(newBox.height, me.minHeight, me.maxHeight); + + // Re-adjust the Y position if we were dragging the north side + if (adjustY) { + newBox.y = box.y + (box.height - newBox.height); + } + } else { + me.lastY = newBox.y; + } + + // If this is configured to preserve the aspect ratio, or they are dragging using the shift key + if (me.preserveRatio || e.shiftKey) { + ratio = me.startBox.width / me.startBox.height; + + // Calculate aspect ratio constrained values. + newHeight = Math.min(Math.max(me.minHeight, newBox.width / ratio), me.maxHeight); + newWidth = Math.min(Math.max(me.minWidth, newBox.height * ratio), me.maxWidth); + + // X axis: width-only change, height must obey + if (axis == 1) { + newBox.height = newHeight; + } + + // Y axis: height-only change, width must obey + else if (axis == 2) { + newBox.width = newWidth; + } + + // Corner drag. + else { + // Drag ratio is the ratio of the mouse point from the opposite corner. + // Basically what edge we are dragging, a horizontal edge or a vertical edge. + dragRatio = Math.abs(oppositeCorner[0] - this.lastXY[0]) / Math.abs(oppositeCorner[1] - this.lastXY[1]); + + // If drag ratio > aspect ratio then width is dominant and height must obey + if (dragRatio > ratio) { + newBox.height = newHeight; + } else { + newBox.width = newWidth; + } + + // Handle dragging start coordinates + if (region == 'northeast') { + newBox.y = box.y - (newBox.height - box.height); + } else if (region == 'northwest') { + newBox.y = box.y - (newBox.height - box.height); + newBox.x = box.x - (newBox.width - box.width); + } else if (region == 'southwest') { + newBox.x = box.x - (newBox.width - box.width); + } + } + } + + if (heightAdjust === 0) { + vertDir = 'none'; + } + if (widthAdjust === 0) { + horizDir = 'none'; + } + me.resize(newBox, { + horizontal: horizDir, + vertical: vertDir + }, atEnd); + }, + + getResizeTarget: function(atEnd) { + return atEnd ? this.target : this.getDynamicTarget(); + }, + + resize: function(box, direction, atEnd) { + var target = this.getResizeTarget(atEnd); + if (target.isComponent) { + target.setSize(box.width, box.height); + if (target.floating) { + target.setPagePosition(box.x, box.y); + } + } else { + target.setBox(box); + } + + // update the originalTarget if it was wrapped, and the target passed in was the wrap el. + target = this.originalTarget; + if (target && (this.dynamic || atEnd)) { + if (target.isComponent) { + target.setSize(box.width, box.height); + if (target.floating) { + target.setPagePosition(box.x, box.y); + } + } else { + target.setBox(box); + } + } + }, + + onEnd: function(e) { + this.updateDimensions(e, true); + if (this.proxy) { + this.proxy.hide(); + } + } +}); + +/** + * Applies drag handles to an element or component to make it resizable. The drag handles are inserted into the element + * (or component's element) and positioned absolute. + * + * Textarea and img elements will be wrapped with an additional div because these elements do not support child nodes. + * The original element can be accessed through the originalTarget property. + * + * Here is the list of valid resize handles: + * + * Value Description + * ------ ------------------- + * 'n' north + * 's' south + * 'e' east + * 'w' west + * 'nw' northwest + * 'sw' southwest + * 'se' southeast + * 'ne' northeast + * 'all' all + * + * {@img Ext.resizer.Resizer/Ext.resizer.Resizer.png Ext.resizer.Resizer component} + * + * Here's an example showing the creation of a typical Resizer: + * + * Ext.create('Ext.resizer.Resizer', { + * el: 'elToResize', + * handles: 'all', + * minWidth: 200, + * minHeight: 100, + * maxWidth: 500, + * maxHeight: 400, + * pinned: true + * }); + */ +Ext.define('Ext.resizer.Resizer', { + mixins: { + observable: 'Ext.util.Observable' + }, + uses: ['Ext.resizer.ResizeTracker', 'Ext.Component'], + + alternateClassName: 'Ext.Resizable', + + handleCls: Ext.baseCSSPrefix + 'resizable-handle', + pinnedCls: Ext.baseCSSPrefix + 'resizable-pinned', + overCls: Ext.baseCSSPrefix + 'resizable-over', + wrapCls: Ext.baseCSSPrefix + 'resizable-wrap', + + /** + * @cfg {Boolean} dynamic + * Specify as true to update the {@link #target} (Element or {@link Ext.Component Component}) dynamically during + * dragging. This is `true` by default, but the {@link Ext.Component Component} class passes `false` when it is + * configured as {@link Ext.Component#resizable}. + * + * If specified as `false`, a proxy element is displayed during the resize operation, and the {@link #target} is + * updated on mouseup. + */ + dynamic: true, + + /** + * @cfg {String} handles + * String consisting of the resize handles to display. Defaults to 's e se' for Elements and fixed position + * Components. Defaults to 8 point resizing for floating Components (such as Windows). Specify either `'all'` or any + * of `'n s e w ne nw se sw'`. + */ + handles: 's e se', + + /** + * @cfg {Number} height + * Optional. The height to set target to in pixels + */ + height : null, + + /** + * @cfg {Number} width + * Optional. The width to set the target to in pixels + */ + width : null, + + /** + * @cfg {Number} heightIncrement + * The increment to snap the height resize in pixels. + */ + heightIncrement : 0, + + /** + * @cfg {Number} widthIncrement + * The increment to snap the width resize in pixels. + */ + widthIncrement : 0, + + /** + * @cfg {Number} minHeight + * The minimum height for the element + */ + minHeight : 20, + + /** + * @cfg {Number} minWidth + * The minimum width for the element + */ + minWidth : 20, + + /** + * @cfg {Number} maxHeight + * The maximum height for the element + */ + maxHeight : 10000, + + /** + * @cfg {Number} maxWidth + * The maximum width for the element + */ + maxWidth : 10000, + + /** + * @cfg {Boolean} pinned + * True to ensure that the resize handles are always visible, false indicates resizing by cursor changes only + */ + pinned: false, + + /** + * @cfg {Boolean} preserveRatio + * True to preserve the original ratio between height and width during resize + */ + preserveRatio: false, + + /** + * @cfg {Boolean} transparent + * True for transparent handles. This is only applied at config time. + */ + transparent: false, + + /** + * @cfg {Ext.Element/Ext.util.Region} constrainTo + * An element, or a {@link Ext.util.Region Region} into which the resize operation must be constrained. + */ + + possiblePositions: { + n: 'north', + s: 'south', + e: 'east', + w: 'west', + se: 'southeast', + sw: 'southwest', + nw: 'northwest', + ne: 'northeast' + }, + + /** + * @cfg {Ext.Element/Ext.Component} target + * The Element or Component to resize. + */ + + /** + * @property {Ext.Element} el + * Outer element for resizing behavior. + */ + + constructor: function(config) { + var me = this, + target, + targetEl, + tag, + handles = me.handles, + handleCls, + possibles, + len, + i = 0, + pos, + handleEls = [], + eastWestStyle, style, + box; + + me.addEvents( + /** + * @event beforeresize + * Fired before resize is allowed. Return false to cancel resize. + * @param {Ext.resizer.Resizer} this + * @param {Number} width The start width + * @param {Number} height The start height + * @param {Ext.EventObject} e The mousedown event + */ + 'beforeresize', + /** + * @event resizedrag + * Fires during resizing. Return false to cancel resize. + * @param {Ext.resizer.Resizer} this + * @param {Number} width The new width + * @param {Number} height The new height + * @param {Ext.EventObject} e The mousedown event + */ + 'resizedrag', + /** + * @event resize + * Fired after a resize. + * @param {Ext.resizer.Resizer} this + * @param {Number} width The new width + * @param {Number} height The new height + * @param {Ext.EventObject} e The mouseup event + */ + 'resize' + ); + + if (Ext.isString(config) || Ext.isElement(config) || config.dom) { + target = config; + config = arguments[1] || {}; + config.target = target; + } + // will apply config to this + me.mixins.observable.constructor.call(me, config); + + // If target is a Component, ensure that we pull the element out. + // Resizer must examine the underlying Element. + target = me.target; + if (target) { + if (target.isComponent) { + me.el = target.getEl(); + if (target.minWidth) { + me.minWidth = target.minWidth; + } + if (target.minHeight) { + me.minHeight = target.minHeight; + } + if (target.maxWidth) { + me.maxWidth = target.maxWidth; + } + if (target.maxHeight) { + me.maxHeight = target.maxHeight; + } + if (target.floating) { + if (!me.hasOwnProperty('handles')) { + me.handles = 'n ne e se s sw w nw'; + } + } + } else { + me.el = me.target = Ext.get(target); + } + } + // Backwards compatibility with Ext3.x's Resizable which used el as a config. + else { + me.target = me.el = Ext.get(me.el); + } + + // Tags like textarea and img cannot + // have children and therefore must + // be wrapped + tag = me.el.dom.tagName.toUpperCase(); + if (tag == 'TEXTAREA' || tag == 'IMG' || tag == 'TABLE') { + /** + * @property {Ext.Element/Ext.Component} originalTarget + * Reference to the original resize target if the element of the original resize target was a + * {@link Ext.form.field.Field Field}, or an IMG or a TEXTAREA which must be wrapped in a DIV. + */ + me.originalTarget = me.target; + targetEl = me.el; + box = targetEl.getBox(); + me.target = me.el = me.el.wrap({ + cls: me.wrapCls, + id: me.el.id + '-rzwrap', + style: targetEl.getStyles('margin-top', 'margin-bottom') + }); + + // Transfer originalTarget's positioning+sizing+margins + me.el.setPositioning(targetEl.getPositioning()); + targetEl.clearPositioning(); + me.el.setBox(box); + + // Position the wrapped element absolute so that it does not stretch the wrapper + targetEl.setStyle('position', 'absolute'); + } + + // Position the element, this enables us to absolute position + // the handles within this.el + me.el.position(); + if (me.pinned) { + me.el.addCls(me.pinnedCls); + } + + /** + * @property {Ext.resizer.ResizeTracker} resizeTracker + */ + me.resizeTracker = new Ext.resizer.ResizeTracker({ + disabled: me.disabled, + target: me.target, + constrainTo: me.constrainTo, + overCls: me.overCls, + throttle: me.throttle, + originalTarget: me.originalTarget, + delegate: '.' + me.handleCls, + dynamic: me.dynamic, + preserveRatio: me.preserveRatio, + heightIncrement: me.heightIncrement, + widthIncrement: me.widthIncrement, + minHeight: me.minHeight, + maxHeight: me.maxHeight, + minWidth: me.minWidth, + maxWidth: me.maxWidth + }); + + // Relay the ResizeTracker's superclass events as our own resize events + me.resizeTracker.on({ + mousedown: me.onBeforeResize, + drag: me.onResize, + dragend: me.onResizeEnd, + scope: me + }); + + if (me.handles == 'all') { + me.handles = 'n s e w ne nw se sw'; + } + + handles = me.handles = me.handles.split(/ |\s*?[,;]\s*?/); + possibles = me.possiblePositions; + len = handles.length; + handleCls = me.handleCls + ' ' + (me.target.isComponent ? (me.target.baseCls + '-handle ') : '') + me.handleCls + '-'; + + // Needs heighting on IE6! + eastWestStyle = Ext.isIE6 ? ' style="height:' + me.el.getHeight() + 'px"' : ''; + + for (; i < len; i++){ + // if specified and possible, create + if (handles[i] && possibles[handles[i]]) { + pos = possibles[handles[i]]; + if (pos === 'east' || pos === 'west') { + style = eastWestStyle; + } else { + style = ''; + } + handleEls.push('
    '); + } + } + Ext.DomHelper.append(me.el, handleEls.join('')); + + // store a reference to each handle elelemtn in this.east, this.west, etc + for (i = 0; i < len; i++){ + // if specified and possible, create + if (handles[i] && possibles[handles[i]]) { + pos = possibles[handles[i]]; + me[pos] = me.el.getById(me.el.id + '-' + pos + '-handle'); + me[pos].region = pos; + me[pos].unselectable(); + if (me.transparent) { + me[pos].setOpacity(0); + } + } + } + + // Constrain within configured maxima + if (Ext.isNumber(me.width)) { + me.width = Ext.Number.constrain(me.width, me.minWidth, me.maxWidth); + } + if (Ext.isNumber(me.height)) { + me.height = Ext.Number.constrain(me.height, me.minHeight, me.maxHeight); + } + + // Size the target (and originalTarget) + if (me.width !== null || me.height !== null) { + if (me.originalTarget) { + me.originalTarget.setWidth(me.width); + me.originalTarget.setHeight(me.height); + } + me.resizeTo(me.width, me.height); + } + + me.forceHandlesHeight(); + }, + + disable: function() { + this.resizeTracker.disable(); + }, + + enable: function() { + this.resizeTracker.enable(); + }, + + /** + * @private Relay the Tracker's mousedown event as beforeresize + * @param tracker The Resizer + * @param e The Event + */ + onBeforeResize: function(tracker, e) { + var box = this.el.getBox(); + return this.fireEvent('beforeresize', this, box.width, box.height, e); + }, + + /** + * @private Relay the Tracker's drag event as resizedrag + * @param tracker The Resizer + * @param e The Event + */ + onResize: function(tracker, e) { + var me = this, + box = me.el.getBox(); + + me.forceHandlesHeight(); + return me.fireEvent('resizedrag', me, box.width, box.height, e); + }, + + /** + * @private Relay the Tracker's dragend event as resize + * @param tracker The Resizer + * @param e The Event + */ + onResizeEnd: function(tracker, e) { + var me = this, + box = me.el.getBox(); + + me.forceHandlesHeight(); + return me.fireEvent('resize', me, box.width, box.height, e); + }, + + /** + * Perform a manual resize and fires the 'resize' event. + * @param {Number} width + * @param {Number} height + */ + resizeTo : function(width, height) { + var me = this; + me.target.setSize(width, height); + me.fireEvent('resize', me, width, height, null); + }, + + /** + * Returns the element that was configured with the el or target config property. If a component was configured with + * the target property then this will return the element of this component. + * + * Textarea and img elements will be wrapped with an additional div because these elements do not support child + * nodes. The original element can be accessed through the originalTarget property. + * @return {Ext.Element} element + */ + getEl : function() { + return this.el; + }, + + /** + * Returns the element or component that was configured with the target config property. + * + * Textarea and img elements will be wrapped with an additional div because these elements do not support child + * nodes. The original element can be accessed through the originalTarget property. + * @return {Ext.Element/Ext.Component} + */ + getTarget: function() { + return this.target; + }, + + destroy: function() { + var i = 0, + handles = this.handles, + len = handles.length, + positions = this.possiblePositions; + + for (; i < len; i++) { + this[positions[handles[i]]].remove(); + } + }, + + /** + * @private + * Fix IE6 handle height issue. + */ + forceHandlesHeight : function() { + var me = this, + handle; + if (Ext.isIE6) { + handle = me.east; + if (handle) { + handle.setHeight(me.el.getHeight()); + } + handle = me.west; + if (handle) { + handle.setHeight(me.el.getHeight()); + } + me.el.repaint(); + } + } +}); + +/** + * + */ +Ext.define('Ext.selection.CellModel', { + extend: 'Ext.selection.Model', + alias: 'selection.cellmodel', + requires: ['Ext.util.KeyNav'], + + isCellModel: true, + + /** + * @cfg {Boolean} enableKeyNav + * Turns on/off keyboard navigation within the grid. + */ + enableKeyNav: true, + + /** + * @cfg {Boolean} preventWrap + * Set this configuration to true to prevent wrapping around of selection as + * a user navigates to the first or last column. + */ + preventWrap: false, + + // private property to use when firing a deselect when no old selection exists. + noSelection: { + row: -1, + column: -1 + }, + + constructor: function() { + this.addEvents( + /** + * @event deselect + * Fired after a cell is deselected + * @param {Ext.selection.CellModel} this + * @param {Ext.data.Model} record The record of the deselected cell + * @param {Number} row The row index deselected + * @param {Number} column The column index deselected + */ + 'deselect', + + /** + * @event select + * Fired after a cell is selected + * @param {Ext.selection.CellModel} this + * @param {Ext.data.Model} record The record of the selected cell + * @param {Number} row The row index selected + * @param {Number} column The column index selected + */ + 'select' + ); + this.callParent(arguments); + }, + + bindComponent: function(view) { + var me = this, + grid = view.ownerCt; + me.primaryView = view; + me.views = me.views || []; + me.views.push(view); + me.bindStore(view.getStore(), true); + + view.on({ + cellmousedown: me.onMouseDown, + refresh: me.onViewRefresh, + scope: me + }); + if (grid.optimizedColumnMove !== false) { + grid.on('columnmove', me.onColumnMove, me); + } + + if (me.enableKeyNav) { + me.initKeyNav(view); + } + }, + + initKeyNav: function(view) { + var me = this; + + if (!view.rendered) { + view.on('render', Ext.Function.bind(me.initKeyNav, me, [view], 0), me, {single: true}); + return; + } + + view.el.set({ + tabIndex: -1 + }); + + // view.el has tabIndex -1 to allow for + // keyboard events to be passed to it. + me.keyNav = new Ext.util.KeyNav({ + target: view.el, + ignoreInputFields: true, + up: me.onKeyUp, + down: me.onKeyDown, + right: me.onKeyRight, + left: me.onKeyLeft, + tab: me.onKeyTab, + scope: me + }); + }, + + getHeaderCt: function() { + var selection = this.getCurrentPosition(), + view = selection ? selection.view : this.primaryView; + + return view.headerCt; + }, + + onKeyUp: function(e, t) { + this.keyNavigation = true; + this.move('up', e); + this.keyNavigation = false; + }, + + onKeyDown: function(e, t) { + this.keyNavigation = true; + this.move('down', e); + this.keyNavigation = false; + }, + + onKeyLeft: function(e, t) { + this.keyNavigation = true; + this.move('left', e); + this.keyNavigation = false; + }, + + onKeyRight: function(e, t) { + this.keyNavigation = true; + this.move('right', e); + this.keyNavigation = false; + }, + + move: function(dir, e) { + var me = this, + pos = me.getCurrentPosition(), + + // Calculate the new row and column position + newPos = pos.view.walkCells(pos, dir, e, me.preventWrap); + + // If walk was successful, select new Position + if (newPos) { + newPos.view = pos.view; + return me.setCurrentPosition(newPos); + } + // Enforce code correctness in unbuilt source. + return null; + }, + + /** + * Returns the current position in the format {row: row, column: column} + */ + getCurrentPosition: function() { + return this.selection; + }, + + /** + * Sets the current position + * @param {Object} position The position to set. + */ + setCurrentPosition: function(pos) { + var me = this; + + // onSelectChange uses lastSelection and nextSelection + me.lastSelection = me.selection; + if (me.selection) { + me.onCellDeselect(me.selection); + } + + if (pos) { + me.nextSelection = new me.Selection(me); + me.nextSelection.setPosition(pos); + me.onCellSelect(me.nextSelection); + + // Deselect triggered by new selection will kill the selection property, so restore it here. + return me.selection = me.nextSelection; + } + // Enforce code correctness in unbuilt source. + return null; + }, + + // Keep selection model in consistent state upon record deletion. + onStoreRemove: function(store, record, index) { + var me = this, + pos = me.getCurrentPosition(); + + me.callParent(arguments); + if (pos) { + // Deleting the row containing the selection. + // Attempt to reselect the same cell which has moved up if there is one + if (pos.row == index) { + if (index < store.getCount() - 1) { + pos.setPosition(index, pos.column); + me.setCurrentPosition(pos); + } else { + delete me.selection; + } + } + // Deleting a row before the selection. + // Move the selection up by one row + else if (index < pos.row) { + pos.setPosition(pos.row - 1, pos.column); + me.setCurrentPosition(pos); + } + } + }, + + /** + * Set the current position based on where the user clicks. + * @private + */ + onMouseDown: function(view, cell, cellIndex, record, row, rowIndex, e) { + this.setCurrentPosition({ + view: view, + row: rowIndex, + column: cellIndex + }); + }, + + // notify the view that the cell has been selected to update the ui + // appropriately and bring the cell into focus + onCellSelect: function(position, supressEvent) { + if (position && position.row !== undefined && position.row > -1) { + this.doSelect(position.view.getStore().getAt(position.row), /*keepExisting*/false, supressEvent); + } + }, + + // notify view that the cell has been deselected to update the ui + // appropriately + onCellDeselect: function(position, supressEvent) { + if (position && position.row !== undefined) { + this.doDeselect(position.view.getStore().getAt(position.row), supressEvent); + } + }, + + onSelectChange: function(record, isSelected, suppressEvent, commitFn) { + var me = this, + pos, + eventName, + view; + + if (isSelected) { + pos = me.nextSelection; + eventName = 'select'; + } else { + pos = me.lastSelection || me.noSelection; + eventName = 'deselect'; + } + + // CellModel may be shared between two sides of a Lockable. + // The position must include a reference to the view in which the selection is current. + // Ensure we use the view specifiied by the position. + view = pos.view || me.primaryView; + + if ((suppressEvent || me.fireEvent('before' + eventName, me, record, pos.row, pos.column)) !== false && + commitFn() !== false) { + + if (isSelected) { + view.onCellSelect(pos); + view.onCellFocus(pos); + } else { + view.onCellDeselect(pos); + delete me.selection; + } + + if (!suppressEvent) { + me.fireEvent(eventName, me, record, pos.row, pos.column); + } + } + }, + + // Tab key from the View's KeyNav, *not* from an editor. + onKeyTab: function(e, t) { + var me = this, + editingPlugin = me.getCurrentPosition().view.editingPlugin; + + // If we were in editing mode, but just focused on a non-editable cell, behave as if we tabbed off an editable field + if (editingPlugin && me.wasEditing) { + me.onEditorTab(editingPlugin, e) + } else { + me.move(e.shiftKey ? 'left' : 'right', e); + } + }, + + onEditorTab: function(editingPlugin, e) { + var me = this, + direction = e.shiftKey ? 'left' : 'right', + position = me.move(direction, e); + + // Navigation had somewhere to go.... not hit the buffers. + if (position) { + // If we were able to begin editing clear the wasEditing flag. It gets set during navigation off an active edit. + if (editingPlugin.startEditByPosition(position)) { + me.wasEditing = false; + } + // If we could not continue editing... + // Set a flag that we should go back into editing mode upon next onKeyTab call + else { + me.wasEditing = true; + if (!position.columnHeader.dataIndex) { + me.onEditorTab(editingPlugin, e); + } + } + } + }, + + refresh: function() { + var pos = this.getCurrentPosition(), + selRowIdx; + + // Synchronize the current position's row with the row of the last selected record. + if (pos && (selRowIdx = this.store.indexOf(this.selected.last())) !== -1) { + pos.row = selRowIdx; + } + }, + + /** + * @private + * When grid uses {@link Ext.panel.Table#optimizedColumnMove optimizedColumnMove} (the default), this is added as a + * {@link Ext.panel.Table#columnmove columnmove} handler to correctly maintain the + * selected column using the same column header. + * + * If optimizedColumnMove === false, (which some grid Features set) then the view is refreshed, + * so this is not added as a handler because the selected column. + */ + onColumnMove: function(headerCt, header, fromIdx, toIdx) { + var grid = headerCt.up('tablepanel'); + if (grid) { + this.onViewRefresh(grid.view); + } + }, + + onViewRefresh: function(view) { + var me = this, + pos = me.getCurrentPosition(), + headerCt = view.headerCt, + record, columnHeader; + + // Re-establish selection of the same cell coordinate. + // DO NOT fire events because the selected + if (pos && pos.view === view) { + record = pos.record; + columnHeader = pos.columnHeader; + + // After a refresh, recreate the selection using the same record and grid column as before + if (!columnHeader.isDescendantOf(headerCt)) { + // column header is not a child of the header container + // this happens when the grid is reconfigured with new columns + // make a best effor to select something by matching on id, then text, then dataIndex + columnHeader = headerCt.queryById(columnHeader.id) || + headerCt.down('[text="' + columnHeader.text + '"]') || + headerCt.down('[dataIndex="' + columnHeader.dataIndex + '"]'); + } + + // If we have a columnHeader (either the column header that already exists in + // the headerCt, or a suitable match that was found after reconfiguration) + // AND the record still exists in the store (or a record matching the id of + // the previously selected record) We are ok to go ahead and set the selection + if (columnHeader && (view.store.indexOfId(record.getId()) !== -1)) { + me.setCurrentPosition({ + row: record, + column: columnHeader, + view: view + }); + } + } + }, + + selectByPosition: function(position) { + this.setCurrentPosition(position); + } +}, function() { + + // Encapsulate a single selection position. + // Maintains { row: n, column: n, record: r, columnHeader: c} + var Selection = this.prototype.Selection = function(model) { + this.model = model; + }; + // Selection row/record & column/columnHeader + Selection.prototype.setPosition = function(row, col) { + var me = this, + view; + + // We were passed {row: 1, column: 2, view: myView} + if (arguments.length === 1) { + + // SelectionModel is shared between both sides of a locking grid. + // It can be positioned on either view. + if (row.view) { + me.view = view = row.view; + } + col = row.column; + row = row.row; + } + + // If setting the position without specifying a view, and the position is already without a view + // use the owning Model's primary view + if (!view) { + me.view = view = me.model.primaryView; + } + + // Row index passed + if (typeof row === 'number') { + me.row = row; + me.record = view.store.getAt(row); + } + // row is a Record + else if (row.isModel) { + me.record = row; + me.row = view.indexOf(row); + } + // row is a grid row + else if (row.tagName) { + me.record = view.getRecord(row); + me.row = view.indexOf(me.record); + } + + // column index passed + if (typeof col === 'number') { + me.column = col; + me.columnHeader = view.getHeaderAtIndex(col); + } + // col is a column Header + else { + me.columnHeader = col; + me.column = col.getIndex(); + } + return me; + } +}); + +/** + * Implements row based navigation via keyboard. + * + * Must synchronize across grid sections. + */ +Ext.define('Ext.selection.RowModel', { + extend: 'Ext.selection.Model', + alias: 'selection.rowmodel', + requires: ['Ext.util.KeyNav'], + + /** + * @private + * Number of pixels to scroll to the left/right when pressing + * left/right keys. + */ + deltaScroll: 5, + + /** + * @cfg {Boolean} enableKeyNav + * + * Turns on/off keyboard navigation within the grid. + */ + enableKeyNav: true, + + /** + * @cfg {Boolean} [ignoreRightMouseSelection=false] + * True to ignore selections that are made when using the right mouse button if there are + * records that are already selected. If no records are selected, selection will continue + * as normal + */ + ignoreRightMouseSelection: false, + + constructor: function() { + this.addEvents( + /** + * @event beforedeselect + * Fired before a record is deselected. If any listener returns false, the + * deselection is cancelled. + * @param {Ext.selection.RowModel} this + * @param {Ext.data.Model} record The deselected record + * @param {Number} index The row index deselected + */ + 'beforedeselect', + + /** + * @event beforeselect + * Fired before a record is selected. If any listener returns false, the + * selection is cancelled. + * @param {Ext.selection.RowModel} this + * @param {Ext.data.Model} record The selected record + * @param {Number} index The row index selected + */ + 'beforeselect', + + /** + * @event deselect + * Fired after a record is deselected + * @param {Ext.selection.RowModel} this + * @param {Ext.data.Model} record The deselected record + * @param {Number} index The row index deselected + */ + 'deselect', + + /** + * @event select + * Fired after a record is selected + * @param {Ext.selection.RowModel} this + * @param {Ext.data.Model} record The selected record + * @param {Number} index The row index selected + */ + 'select' + ); + this.views = []; + this.callParent(arguments); + }, + + bindComponent: function(view) { + var me = this; + + me.views = me.views || []; + me.views.push(view); + me.bindStore(view.getStore(), true); + + view.on({ + itemmousedown: me.onRowMouseDown, + scope: me + }); + + if (me.enableKeyNav) { + me.initKeyNav(view); + } + }, + + initKeyNav: function(view) { + var me = this; + + if (!view.rendered) { + view.on('render', Ext.Function.bind(me.initKeyNav, me, [view], 0), me, {single: true}); + return; + } + + // view.el has tabIndex -1 to allow for + // keyboard events to be passed to it. + view.el.set({ + tabIndex: -1 + }); + + // Drive the KeyNav off the View's itemkeydown event so that beforeitemkeydown listeners may veto + me.keyNav = new Ext.util.KeyNav({ + target: view, + ignoreInputFields: true, + eventName: 'itemkeydown', + processEvent: function(view, record, node, index, event) { + event.record = record; + event.recordIndex = index; + return event; + }, + up: me.onKeyUp, + down: me.onKeyDown, + right: me.onKeyRight, + left: me.onKeyLeft, + pageDown: me.onKeyPageDown, + pageUp: me.onKeyPageUp, + home: me.onKeyHome, + end: me.onKeyEnd, + space: me.onKeySpace, + enter: me.onKeyEnter, + scope: me + }); + }, + + // Returns the number of rows currently visible on the screen or + // false if there were no rows. This assumes that all rows are + // of the same height and the first view is accurate. + getRowsVisible: function() { + var rowsVisible = false, + view = this.views[0], + row = view.getNode(0), + rowHeight, gridViewHeight; + + if (row) { + rowHeight = Ext.fly(row).getHeight(); + gridViewHeight = view.el.getHeight(); + rowsVisible = Math.floor(gridViewHeight / rowHeight); + } + + return rowsVisible; + }, + + // go to last visible record in grid. + onKeyEnd: function(e) { + var me = this, + last = me.store.getAt(me.store.getCount() - 1); + + if (last) { + if (e.shiftKey) { + me.selectRange(last, me.lastFocused || 0); + me.setLastFocused(last); + } else if (e.ctrlKey) { + me.setLastFocused(last); + } else { + me.doSelect(last); + } + } + }, + + // go to first visible record in grid. + onKeyHome: function(e) { + var me = this, + first = me.store.getAt(0); + + if (first) { + if (e.shiftKey) { + me.selectRange(first, me.lastFocused || 0); + me.setLastFocused(first); + } else if (e.ctrlKey) { + me.setLastFocused(first); + } else { + me.doSelect(first, false); + } + } + }, + + // Go one page up from the lastFocused record in the grid. + onKeyPageUp: function(e) { + var me = this, + rowsVisible = me.getRowsVisible(), + selIdx, + prevIdx, + prevRecord; + + if (rowsVisible) { + selIdx = e.recordIndex; + prevIdx = selIdx - rowsVisible; + if (prevIdx < 0) { + prevIdx = 0; + } + prevRecord = me.store.getAt(prevIdx); + if (e.shiftKey) { + me.selectRange(prevRecord, e.record, e.ctrlKey, 'up'); + me.setLastFocused(prevRecord); + } else if (e.ctrlKey) { + e.preventDefault(); + me.setLastFocused(prevRecord); + } else { + me.doSelect(prevRecord); + } + + } + }, + + // Go one page down from the lastFocused record in the grid. + onKeyPageDown: function(e) { + var me = this, + rowsVisible = me.getRowsVisible(), + selIdx, + nextIdx, + nextRecord; + + if (rowsVisible) { + selIdx = e.recordIndex; + nextIdx = selIdx + rowsVisible; + if (nextIdx >= me.store.getCount()) { + nextIdx = me.store.getCount() - 1; + } + nextRecord = me.store.getAt(nextIdx); + if (e.shiftKey) { + me.selectRange(nextRecord, e.record, e.ctrlKey, 'down'); + me.setLastFocused(nextRecord); + } else if (e.ctrlKey) { + // some browsers, this means go thru browser tabs + // attempt to stop. + e.preventDefault(); + me.setLastFocused(nextRecord); + } else { + me.doSelect(nextRecord); + } + } + }, + + // Select/Deselect based on pressing Spacebar. + // Assumes a SIMPLE selectionmode style + onKeySpace: function(e) { + var me = this, + record = me.lastFocused; + + if (record) { + if (me.isSelected(record)) { + me.doDeselect(record, false); + } else { + me.doSelect(record, true); + } + } + }, + + onKeyEnter: Ext.emptyFn, + + // Navigate one record up. This could be a selection or + // could be simply focusing a record for discontiguous + // selection. Provides bounds checking. + onKeyUp: function(e) { + var me = this, + idx = me.store.indexOf(me.lastFocused), + record; + + if (idx > 0) { + // needs to be the filtered count as thats what + // will be visible. + record = me.store.getAt(idx - 1); + if (e.shiftKey && me.lastFocused) { + if (me.isSelected(me.lastFocused) && me.isSelected(record)) { + me.doDeselect(me.lastFocused, true); + me.setLastFocused(record); + } else if (!me.isSelected(me.lastFocused)) { + me.doSelect(me.lastFocused, true); + me.doSelect(record, true); + } else { + me.doSelect(record, true); + } + } else if (e.ctrlKey) { + me.setLastFocused(record); + } else { + me.doSelect(record); + //view.focusRow(idx - 1); + } + } + // There was no lastFocused record, and the user has pressed up + // Ignore?? + //else if (this.selected.getCount() == 0) { + // + // this.doSelect(record); + // //view.focusRow(idx - 1); + //} + }, + + // Navigate one record down. This could be a selection or + // could be simply focusing a record for discontiguous + // selection. Provides bounds checking. + onKeyDown: function(e) { + var me = this, + idx = me.store.indexOf(me.lastFocused), + record; + + // needs to be the filtered count as thats what + // will be visible. + if (idx + 1 < me.store.getCount()) { + record = me.store.getAt(idx + 1); + if (me.selected.getCount() === 0) { + if (!e.ctrlKey) { + me.doSelect(record); + } else { + me.setLastFocused(record); + } + //view.focusRow(idx + 1); + } else if (e.shiftKey && me.lastFocused) { + if (me.isSelected(me.lastFocused) && me.isSelected(record)) { + me.doDeselect(me.lastFocused, true); + me.setLastFocused(record); + } else if (!me.isSelected(me.lastFocused)) { + me.doSelect(me.lastFocused, true); + me.doSelect(record, true); + } else { + me.doSelect(record, true); + } + } else if (e.ctrlKey) { + me.setLastFocused(record); + } else { + me.doSelect(record); + //view.focusRow(idx + 1); + } + } + }, + + scrollByDeltaX: function(delta) { + var view = this.views[0], + section = view.up(), + hScroll = section.horizontalScroller; + + if (hScroll) { + hScroll.scrollByDeltaX(delta); + } + }, + + onKeyLeft: function(e) { + this.scrollByDeltaX(-this.deltaScroll); + }, + + onKeyRight: function(e) { + this.scrollByDeltaX(this.deltaScroll); + }, + + // Select the record with the event included so that + // we can take into account ctrlKey, shiftKey, etc + onRowMouseDown: function(view, record, item, index, e) { + if (!this.allowRightMouseSelection(e)) { + return; + } + + if (e.button === 0 || !this.isSelected(record)) { + this.selectWithEvent(record, e); + } + }, + + /** + * Checks whether a selection should proceed based on the ignoreRightMouseSelection + * option. + * @private + * @param {Ext.EventObject} e The event + * @return {Boolean} False if the selection should not proceed + */ + allowRightMouseSelection: function(e) { + var disallow = this.ignoreRightMouseSelection && e.button !== 0; + if (disallow) { + disallow = this.hasSelection(); + } + return !disallow; + }, + + // Allow the GridView to update the UI by + // adding/removing a CSS class from the row. + onSelectChange: function(record, isSelected, suppressEvent, commitFn) { + var me = this, + views = me.views, + viewsLn = views.length, + store = me.store, + rowIdx = store.indexOf(record), + eventName = isSelected ? 'select' : 'deselect', + i = 0; + + if ((suppressEvent || me.fireEvent('before' + eventName, me, record, rowIdx)) !== false && + commitFn() !== false) { + + for (; i < viewsLn; i++) { + if (isSelected) { + views[i].onRowSelect(rowIdx, suppressEvent); + } else { + views[i].onRowDeselect(rowIdx, suppressEvent); + } + } + + if (!suppressEvent) { + me.fireEvent(eventName, me, record, rowIdx); + } + } + }, + + // Provide indication of what row was last focused via + // the gridview. + onLastFocusChanged: function(oldFocused, newFocused, supressFocus) { + var views = this.views, + viewsLn = views.length, + store = this.store, + rowIdx, + i = 0; + + if (oldFocused) { + rowIdx = store.indexOf(oldFocused); + if (rowIdx != -1) { + for (; i < viewsLn; i++) { + views[i].onRowFocus(rowIdx, false); + } + } + } + + if (newFocused) { + rowIdx = store.indexOf(newFocused); + if (rowIdx != -1) { + for (i = 0; i < viewsLn; i++) { + views[i].onRowFocus(rowIdx, true, supressFocus); + } + } + } + this.callParent(); + }, + + onEditorTab: function(editingPlugin, e) { + var me = this, + view = me.views[0], + record = editingPlugin.getActiveRecord(), + header = editingPlugin.getActiveColumn(), + position = view.getPosition(record, header), + direction = e.shiftKey ? 'left' : 'right'; + + do { + position = view.walkCells(position, direction, e, me.preventWrap); + } while(position && !view.headerCt.getHeaderAtIndex(position.column).getEditor()); + + if (position) { + editingPlugin.startEditByPosition(position); + } + }, + + + /** + * Returns position of the first selected cell in the selection in the format {row: row, column: column} + */ + getCurrentPosition: function() { + var firstSelection = this.selected.items[0]; + if (firstSelection) { + return { + row: this.store.indexOf(firstSelection), + column: 0 + }; + } + }, + + selectByPosition: function(position) { + var record = this.store.getAt(position.row); + this.select(record); + }, + + + /** + * Selects the record immediately following the currently selected record. + * @param {Boolean} [keepExisting] True to retain existing selections + * @param {Boolean} [suppressEvent] Set to false to not fire a select event + * @return {Boolean} `true` if there is a next record, else `false` + */ + selectNext: function(keepExisting, suppressEvent) { + var me = this, + store = me.store, + selection = me.getSelection(), + record = selection[selection.length - 1], + index = store.indexOf(record) + 1, + success; + + if(index === store.getCount() || index === 0) { + success = false; + } else { + me.doSelect(index, keepExisting, suppressEvent); + success = true; + } + return success; + }, + + /** + * Selects the record that precedes the currently selected record. + * @param {Boolean} [keepExisting] True to retain existing selections + * @param {Boolean} [suppressEvent] Set to false to not fire a select event + * @return {Boolean} `true` if there is a previous record, else `false` + */ + selectPrevious: function(keepExisting, suppressEvent) { + var me = this, + selection = me.getSelection(), + record = selection[0], + index = me.store.indexOf(record) - 1, + success; + + if (index < 0) { + success = false; + } else { + me.doSelect(index, keepExisting, suppressEvent); + success = true; + } + return success; + } +}); + +/** + * A selection model that renders a column of checkboxes that can be toggled to + * select or deselect rows. The default mode for this selection model is MULTI. + * + * The selection model will inject a header for the checkboxes in the first view + * and according to the 'injectCheckbox' configuration. + */ +Ext.define('Ext.selection.CheckboxModel', { + alias: 'selection.checkboxmodel', + extend: 'Ext.selection.RowModel', + + /** + * @cfg {String} mode + * Modes of selection. + * Valid values are SINGLE, SIMPLE, and MULTI. + */ + mode: 'MULTI', + + /** + * @cfg {Number/String} [injectCheckbox=0] + * The index at which to insert the checkbox column. + * Supported values are a numeric index, and the strings 'first' and 'last'. + */ + injectCheckbox: 0, + + /** + * @cfg {Boolean} checkOnly + * True if rows can only be selected by clicking on the checkbox column. + */ + checkOnly: false, + + /** + * @cfg {Boolean} showHeaderCheckbox + * Configure as `false` to not display the header checkbox at the top of the column. + */ + showHeaderCheckbox: true, + + headerWidth: 24, + + // private + checkerOnCls: Ext.baseCSSPrefix + 'grid-hd-checker-on', + + // private + refreshOnRemove: true, + + beforeViewRender: function(view) { + var me = this; + me.callParent(arguments); + + // if we have a locked header, only hook up to the first + if (!me.hasLockedHeader() || view.headerCt.lockedCt) { + if (me.showHeaderCheckbox !== false) { + view.headerCt.on('headerclick', me.onHeaderClick, me); + } + me.addCheckbox(view, true); + me.mon(view.ownerCt, 'reconfigure', me.onReconfigure, me); + } + }, + + bindComponent: function(view) { + var me = this; + me.sortable = false; + me.callParent(arguments); + }, + + hasLockedHeader: function(){ + var views = this.views, + vLen = views.length, + v; + + for (v = 0; v < vLen; v++) { + if (views[v].headerCt.lockedCt) { + return true; + } + } + return false; + }, + + /** + * Add the header checkbox to the header row + * @private + * @param {Boolean} initial True if we're binding for the first time. + */ + addCheckbox: function(view, initial){ + var me = this, + checkbox = me.injectCheckbox, + headerCt = view.headerCt; + + // Preserve behaviour of false, but not clear why that would ever be done. + if (checkbox !== false) { + if (checkbox == 'first') { + checkbox = 0; + } else if (checkbox == 'last') { + checkbox = headerCt.getColumnCount(); + } + Ext.suspendLayouts(); + headerCt.add(checkbox, me.getHeaderConfig()); + Ext.resumeLayouts(); + } + + if (initial !== true) { + view.refresh(); + } + }, + + /** + * Handles the grid's reconfigure event. Adds the checkbox header if the columns have been reconfigured. + * @private + * @param {Ext.panel.Table} grid + * @param {Ext.data.Store} store + * @param {Object[]} columns + */ + onReconfigure: function(grid, store, columns) { + if(columns) { + this.addCheckbox(this.views[0]); + } + }, + + /** + * Toggle the ui header between checked and unchecked state. + * @param {Boolean} isChecked + * @private + */ + toggleUiHeader: function(isChecked) { + var view = this.views[0], + headerCt = view.headerCt, + checkHd = headerCt.child('gridcolumn[isCheckerHd]'); + + if (checkHd) { + if (isChecked) { + checkHd.el.addCls(this.checkerOnCls); + } else { + checkHd.el.removeCls(this.checkerOnCls); + } + } + }, + + /** + * Toggle between selecting all and deselecting all when clicking on + * a checkbox header. + */ + onHeaderClick: function(headerCt, header, e) { + if (header.isCheckerHd) { + e.stopEvent(); + var me = this, + isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on'); + + // Prevent focus changes on the view, since we're selecting/deselecting all records + me.preventFocus = true; + if (isChecked) { + me.deselectAll(); + } else { + me.selectAll(); + } + delete me.preventFocus; + } + }, + + /** + * Retrieve a configuration to be used in a HeaderContainer. + * This should be used when injectCheckbox is set to false. + */ + getHeaderConfig: function() { + var me = this, + showCheck = me.showHeaderCheckbox !== false; + + return { + isCheckerHd: showCheck, + text : ' ', + width: me.headerWidth, + sortable: false, + draggable: false, + resizable: false, + hideable: false, + menuDisabled: true, + dataIndex: '', + cls: showCheck ? Ext.baseCSSPrefix + 'column-header-checkbox ' : '', + renderer: Ext.Function.bind(me.renderer, me), + editRenderer: me.editRenderer || me.renderEmpty, + locked: me.hasLockedHeader() + }; + }, + + renderEmpty: function(){ + return ' '; + }, + + /** + * Generates the HTML to be rendered in the injected checkbox column for each row. + * Creates the standard checkbox markup by default; can be overridden to provide custom rendering. + * See {@link Ext.grid.column.Column#renderer} for description of allowed parameters. + */ + renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { + var baseCSSPrefix = Ext.baseCSSPrefix; + metaData.tdCls = baseCSSPrefix + 'grid-cell-special ' + baseCSSPrefix + 'grid-cell-row-checker'; + return '
     
    '; + }, + + // override + onRowMouseDown: function(view, record, item, index, e) { + view.el.focus(); + var me = this, + checker = e.getTarget('.' + Ext.baseCSSPrefix + 'grid-row-checker'), + mode; + + if (!me.allowRightMouseSelection(e)) { + return; + } + + // checkOnly set, but we didn't click on a checker. + if (me.checkOnly && !checker) { + return; + } + + if (checker) { + mode = me.getSelectionMode(); + // dont change the mode if its single otherwise + // we would get multiple selection + if (mode !== 'SINGLE') { + me.setSelectionMode('SIMPLE'); + } + me.selectWithEvent(record, e); + me.setSelectionMode(mode); + } else { + me.selectWithEvent(record, e); + } + }, + + /** + * Synchronize header checker value as selection changes. + * @private + */ + onSelectChange: function() { + var me = this; + me.callParent(arguments); + me.updateHeaderState(); + }, + + /** + * @private + */ + onStoreLoad: function() { + var me = this; + me.callParent(arguments); + me.updateHeaderState(); + }, + + /** + * @private + */ + updateHeaderState: function() { + // check to see if all records are selected + var hdSelectStatus = this.selected.getCount() === this.store.getCount(); + this.toggleUiHeader(hdSelectStatus); + } +}); + +/** + * Adds custom behavior for left/right keyboard navigation for use with a tree. + * Depends on the view having an expand and collapse method which accepts a + * record. + * + * @private + */ +Ext.define('Ext.selection.TreeModel', { + extend: 'Ext.selection.RowModel', + alias: 'selection.treemodel', + + // typically selection models prune records from the selection + // model when they are removed, because the TreeView constantly + // adds/removes records as they are expanded/collapsed + pruneRemoved: false, + + onKeyRight: function(e, t) { + var focused = this.getLastFocused(), + view = this.view; + + if (focused) { + // tree node is already expanded, go down instead + // this handles both the case where we navigate to firstChild and if + // there are no children to the nextSibling + if (focused.isExpanded()) { + this.onKeyDown(e, t); + // if its not a leaf node, expand it + } else if (focused.isExpandable()) { + view.expand(focused); + } + } + }, + + onKeyLeft: function(e, t) { + var focused = this.getLastFocused(), + view = this.view, + viewSm = view.getSelectionModel(), + parentNode, parentRecord; + + if (focused) { + parentNode = focused.parentNode; + // if focused node is already expanded, collapse it + if (focused.isExpanded()) { + view.collapse(focused); + // has a parentNode and its not root + // TODO: this needs to cover the case where the root isVisible + } else if (parentNode && !parentNode.isRoot()) { + // Select a range of records when doing multiple selection. + if (e.shiftKey) { + viewSm.selectRange(parentNode, focused, e.ctrlKey, 'up'); + viewSm.setLastFocused(parentNode); + // just move focus, not selection + } else if (e.ctrlKey) { + viewSm.setLastFocused(parentNode); + // select it + } else { + viewSm.select(parentNode); + } + } + } + }, + + onKeySpace: function(e, t) { + this.toggleCheck(e); + }, + + onKeyEnter: function(e, t) { + this.toggleCheck(e); + }, + + toggleCheck: function(e){ + e.stopEvent(); + var selected = this.getLastSelected(); + if (selected) { + this.view.onCheckChange(selected); + } + } +}); + +/** + * @class Ext.slider.Thumb + * @private + * Represents a single thumb element on a Slider. This would not usually be created manually and would instead + * be created internally by an {@link Ext.slider.Multi Multi slider}. + */ +Ext.define('Ext.slider.Thumb', { + requires: ['Ext.dd.DragTracker', 'Ext.util.Format'], + /** + * @private + * @property {Number} topThumbZIndex + * The number used internally to set the z index of the top thumb (see promoteThumb for details) + */ + topZIndex: 10000, + + /** + * @cfg {Ext.slider.MultiSlider} slider (required) + * The Slider to render to. + */ + + /** + * Creates new slider thumb. + * @param {Object} [config] Config object. + */ + constructor: function(config) { + var me = this; + + /** + * @property {Ext.slider.MultiSlider} slider + * The slider this thumb is contained within + */ + Ext.apply(me, config || {}, { + cls: Ext.baseCSSPrefix + 'slider-thumb', + + /** + * @cfg {Boolean} constrain True to constrain the thumb so that it cannot overlap its siblings + */ + constrain: false + }); + me.callParent([config]); + }, + + /** + * Renders the thumb into a slider + */ + render: function() { + var me = this; + me.el = me.slider.innerEl.insertFirst(me.getElConfig()); + me.onRender(); + }, + + onRender: function() { + if (this.disabled) { + this.disable(); + } + this.initEvents(); + }, + + getElConfig: function() { + var me = this, + slider = me.slider, + style = {}; + + style[slider.vertical ? 'bottom' : 'left'] = slider.calculateThumbPosition(slider.normalizeValue(me.value)) + '%'; + return { + style: style, + id : this.id, + cls : this.cls + }; + }, + + /** + * @private + * move the thumb + */ + move: function(v, animate) { + var el = this.el, + styleProp = this.slider.vertical ? 'bottom' : 'left', + to, + from; + + v += '%'; + + if (!animate) { + el.dom.style[styleProp] = v; + } else { + to = {}; + to[styleProp] = v; + + if (!Ext.supports.GetPositionPercentage) { + from = {}; + from[styleProp] = el.dom.style[styleProp]; + } + + new Ext.fx.Anim({ + target: el, + duration: 350, + from: from, + to: to + }); + } + }, + + /** + * @private + * Bring thumb dom element to front. + */ + bringToFront: function() { + this.el.setStyle('zIndex', this.topZIndex); + }, + + /** + * @private + * Send thumb dom element to back. + */ + sendToBack: function() { + this.el.setStyle('zIndex', ''); + }, + + /** + * Enables the thumb if it is currently disabled + */ + enable: function() { + var me = this; + + me.disabled = false; + if (me.el) { + me.el.removeCls(me.slider.disabledCls); + } + }, + + /** + * Disables the thumb if it is currently enabled + */ + disable: function() { + var me = this; + + me.disabled = true; + if (me.el) { + me.el.addCls(me.slider.disabledCls); + } + }, + + /** + * Sets up an Ext.dd.DragTracker for this thumb + */ + initEvents: function() { + var me = this, + el = me.el; + + me.tracker = new Ext.dd.DragTracker({ + onBeforeStart: Ext.Function.bind(me.onBeforeDragStart, me), + onStart : Ext.Function.bind(me.onDragStart, me), + onDrag : Ext.Function.bind(me.onDrag, me), + onEnd : Ext.Function.bind(me.onDragEnd, me), + tolerance : 3, + autoStart : 300, + overCls : Ext.baseCSSPrefix + 'slider-thumb-over' + }); + + me.tracker.initEl(el); + }, + + /** + * @private + * This is tied into the internal Ext.dd.DragTracker. If the slider is currently disabled, + * this returns false to disable the DragTracker too. + * @return {Boolean} False if the slider is currently disabled + */ + onBeforeDragStart : function(e) { + if (this.disabled) { + return false; + } else { + this.slider.promoteThumb(this); + return true; + } + }, + + /** + * @private + * This is tied into the internal Ext.dd.DragTracker's onStart template method. Adds the drag CSS class + * to the thumb and fires the 'dragstart' event + */ + onDragStart: function(e){ + var me = this; + + me.el.addCls(Ext.baseCSSPrefix + 'slider-thumb-drag'); + me.dragging = me.slider.dragging = true; + me.dragStartValue = me.value; + + me.slider.fireEvent('dragstart', me.slider, e, me); + }, + + /** + * @private + * This is tied into the internal Ext.dd.DragTracker's onDrag template method. This is called every time + * the DragTracker detects a drag movement. It updates the Slider's value using the position of the drag + */ + onDrag: function(e) { + var me = this, + slider = me.slider, + index = me.index, + newValue = me.getValueFromTracker(), + above, + below; + + // If dragged out of range, value will be undefined + if (newValue !== undefined) { + if (me.constrain) { + above = slider.thumbs[index + 1]; + below = slider.thumbs[index - 1]; + + if (below !== undefined && newValue <= below.value) { + newValue = below.value; + } + + if (above !== undefined && newValue >= above.value) { + newValue = above.value; + } + } + slider.setValue(index, newValue, false); + slider.fireEvent('drag', slider, e, me); + } + }, + + getValueFromTracker: function() { + var slider = this.slider, + trackPoint = slider.getTrackpoint(this.tracker.getXY()); + + // If dragged out of range, value will be undefined + if (trackPoint !== undefined) { + return slider.reversePixelValue(trackPoint); + } + }, + + /** + * @private + * This is tied to the internal Ext.dd.DragTracker's onEnd template method. Removes the drag CSS class and + * fires the 'changecomplete' event with the new value + */ + onDragEnd: function(e) { + var me = this, + slider = me.slider, + value = me.value; + + me.el.removeCls(Ext.baseCSSPrefix + 'slider-thumb-drag'); + + me.dragging = slider.dragging = false; + slider.fireEvent('dragend', slider, e); + + if (me.dragStartValue != value) { + slider.fireEvent('changecomplete', slider, value, me); + } + }, + + destroy: function() { + Ext.destroy(this.tracker); + } +}); + +/** + * Simple plugin for using an Ext.tip.Tip with a slider to show the slider value. In general this class is not created + * directly, instead pass the {@link Ext.slider.Multi#useTips} and {@link Ext.slider.Multi#tipText} configuration + * options to the slider directly. + * + * @example + * Ext.create('Ext.slider.Single', { + * width: 214, + * minValue: 0, + * maxValue: 100, + * useTips: true, + * renderTo: Ext.getBody() + * }); + * + * Optionally provide your own tip text by passing tipText: + * + * @example + * Ext.create('Ext.slider.Single', { + * width: 214, + * minValue: 0, + * maxValue: 100, + * useTips: true, + * tipText: function(thumb){ + * return Ext.String.format('**{0}% complete**', thumb.value); + * }, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.slider.Tip', { + extend: 'Ext.tip.Tip', + minWidth: 10, + alias: 'widget.slidertip', + + /** + * @cfg {Array} [offsets=null] + * Offsets for aligning the tip to the slider. See {@link Ext.dom.Element#alignTo}. Default values + * for offsets are provided by specifying the {@link #position} config. + */ + offsets : null, + + /** + * @cfg {String} [align=null] + * Alignment configuration for the tip to the slider. See {@link Ext.dom.Element#alignTo}. Default + * values for alignment are provided by specifying the {@link #position} config. + */ + align: null, + + /** + * @cfg {String} [position=For horizontal sliders, "top", for vertical sliders, "left"] + * Sets the position for where the tip will be displayed related to the thumb. This sets + * defaults for {@link #align} and {@link #offsets} configurations. If {@link #align} or + * {@link #offsets} configurations are specified, they will override the defaults defined + * by position. + */ + position: '', + + defaultVerticalPosition: 'left', + + defaultHorizontalPosition: 'top', + + isSliderTip: true, + + init: function(slider) { + var me = this, + align, + offsets; + + if (!me.position) { + me.position = slider.vertical ? me.defaultVerticalPosition : me.defaultHorizontalPosition; + } + + switch (me.position) { + case 'top': + offsets = [0, -10]; + align = 'b-t?'; + break; + case 'bottom': + offsets = [0, 10]; + align = 't-b?'; + break; + case 'left': + offsets = [-10, 0]; + align = 'r-l?'; + break; + case 'right': + offsets = [10, 0]; + align = 'l-r?'; + } + + if (!me.align) { + me.align = align; + } + + if (!me.offsets) { + me.offsets = offsets; + } + + slider.on({ + scope : me, + dragstart: me.onSlide, + drag : me.onSlide, + dragend : me.hide, + destroy : me.destroy + }); + }, + /** + * @private + * Called whenever a dragstart or drag event is received on the associated Thumb. + * Aligns the Tip with the Thumb's new position. + * @param {Ext.slider.MultiSlider} slider The slider + * @param {Ext.EventObject} e The Event object + * @param {Ext.slider.Thumb} thumb The thumb that the Tip is attached to + */ + onSlide : function(slider, e, thumb) { + var me = this; + me.show(); + me.update(me.getText(thumb)); + me.el.alignTo(thumb.el, me.align, me.offsets); + }, + + /** + * Used to create the text that appears in the Tip's body. By default this just returns the value of the Slider + * Thumb that the Tip is attached to. Override to customize. + * @param {Ext.slider.Thumb} thumb The Thumb that the Tip is attached to + * @return {String} The text to display in the tip + * @protected + * @template + */ + getText : function(thumb) { + return String(thumb.value); + } +}); + +/** + * Slider which supports vertical or horizontal orientation, keyboard adjustments, configurable snapping, axis clicking + * and animation. Can be added as an item to any container. + * + * Sliders can be created with more than one thumb handle by passing an array of values instead of a single one: + * + * @example + * Ext.create('Ext.slider.Multi', { + * width: 200, + * values: [25, 50, 75], + * increment: 5, + * minValue: 0, + * maxValue: 100, + * + * // this defaults to true, setting to false allows the thumbs to pass each other + * constrainThumbs: false, + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.slider.Multi', { + extend: 'Ext.form.field.Base', + alias: 'widget.multislider', + alternateClassName: 'Ext.slider.MultiSlider', + + requires: [ + 'Ext.slider.Thumb', + 'Ext.slider.Tip', + 'Ext.Number', + 'Ext.util.Format', + 'Ext.Template', + 'Ext.layout.component.field.Slider' + ], + + childEls: [ + 'endEl', 'innerEl' + ], + + // note: {id} here is really {inputId}, but {cmpId} is available + fieldSubTpl: [ + '
    ', + '', + '
    ', + { + renderThumbs: function(out, values) { + var me = values.$comp, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + thumb, + thumbConfig; + + for (; i < len; i++) { + thumb = thumbs[i]; + thumbConfig = thumb.getElConfig(); + thumbConfig.id = me.id + '-thumb-' + i; + Ext.DomHelper.generateMarkup(thumbConfig, out); + } + }, + disableFormats: true + } + ], + + /** + * @cfg {Number} value + * A value with which to initialize the slider. Setting this will only result in the creation + * of a single slider thumb; if you want multiple thumbs then use the {@link #values} config instead. + * + * Defaults to #minValue. + */ + + /** + * @cfg {Number[]} values + * Array of Number values with which to initalize the slider. A separate slider thumb will be created for each value + * in this array. This will take precedence over the single {@link #value} config. + */ + + /** + * @cfg {Boolean} vertical + * Orient the Slider vertically rather than horizontally. + */ + vertical: false, + + /** + * @cfg {Number} minValue + * The minimum value for the Slider. + */ + minValue: 0, + + /** + * @cfg {Number} maxValue + * The maximum value for the Slider. + */ + maxValue: 100, + + /** + * @cfg {Number/Boolean} decimalPrecision The number of decimal places to which to round the Slider's value. + * + * To disable rounding, configure as **false**. + */ + decimalPrecision: 0, + + /** + * @cfg {Number} keyIncrement + * How many units to change the Slider when adjusting with keyboard navigation. If the increment + * config is larger, it will be used instead. + */ + keyIncrement: 1, + + /** + * @cfg {Number} increment + * How many units to change the slider when adjusting by drag and drop. Use this option to enable 'snapping'. + */ + increment: 0, + + /** + * @cfg {Boolean} [zeroBasedSnapping=false] + * Set to `true` to calculate snap points based on {@link #increment}s from zero as opposed to + * from this Slider's {@link #minValue}. + * + * By Default, valid snap points are calculated starting {@link #increment}s from the {@link #minValue} + */ + + /** + * @private + * @property {Number[]} clickRange + * Determines whether or not a click to the slider component is considered to be a user request to change the value. Specified as an array of [top, bottom], + * the click event's 'top' property is compared to these numbers and the click only considered a change request if it falls within them. e.g. if the 'top' + * value of the click event is 4 or 16, the click is not considered a change request as it falls outside of the [5, 15] range + */ + clickRange: [5,15], + + /** + * @cfg {Boolean} clickToChange + * Determines whether or not clicking on the Slider axis will change the slider. + */ + clickToChange : true, + + /** + * @cfg {Boolean} animate + * Turn on or off animation. + */ + animate: true, + + /** + * @property {Boolean} dragging + * True while the thumb is in a drag operation + */ + dragging: false, + + /** + * @cfg {Boolean} constrainThumbs + * True to disallow thumbs from overlapping one another. + */ + constrainThumbs: true, + + componentLayout: 'sliderfield', + + /** + * @cfg {Object/Boolean} useTips + * True to use an {@link Ext.slider.Tip} to display tips for the value. This option may also + * provide a configuration object for an {@link Ext.slider.Tip}. + */ + useTips : true, + + /** + * @cfg {Function} [tipText=undefined] + * A function used to display custom text for the slider tip. + * + * Defaults to null, which will use the default on the plugin. + * + * @cfg {Ext.slider.Thumb} tipText.thumb The Thumb that the Tip is attached to + * @cfg {String} tipText.return The text to display in the tip + */ + tipText : null, + + ariaRole: 'slider', + + // private override + initValue: function() { + var me = this, + extValue = Ext.value, + // Fallback for initial values: values config -> value config -> minValue config -> 0 + values = extValue(me.values, [extValue(me.value, extValue(me.minValue, 0))]), + i = 0, + len = values.length; + + // Store for use in dirty check + me.originalValue = values; + + // Add a thumb for each value + for (; i < len; i++) { + me.addThumb(values[i]); + } + }, + + // private override + initComponent : function() { + var me = this, + tipPlug, + hasTip, + p, pLen, plugins; + + /** + * @property {Array} thumbs + * Array containing references to each thumb + */ + me.thumbs = []; + + me.keyIncrement = Math.max(me.increment, me.keyIncrement); + + me.addEvents( + /** + * @event beforechange + * Fires before the slider value is changed. By returning false from an event handler, you can cancel the + * event and prevent the slider from changing. + * @param {Ext.slider.Multi} slider The slider + * @param {Number} newValue The new value which the slider is being changed to. + * @param {Number} oldValue The old value which the slider was previously. + */ + 'beforechange', + + /** + * @event change + * Fires when the slider value is changed. + * @param {Ext.slider.Multi} slider The slider + * @param {Number} newValue The new value which the slider has been changed to. + * @param {Ext.slider.Thumb} thumb The thumb that was changed + */ + 'change', + + /** + * @event changecomplete + * Fires when the slider value is changed by the user and any drag operations have completed. + * @param {Ext.slider.Multi} slider The slider + * @param {Number} newValue The new value which the slider has been changed to. + * @param {Ext.slider.Thumb} thumb The thumb that was changed + */ + 'changecomplete', + + /** + * @event dragstart + * Fires after a drag operation has started. + * @param {Ext.slider.Multi} slider The slider + * @param {Ext.EventObject} e The event fired from Ext.dd.DragTracker + */ + 'dragstart', + + /** + * @event drag + * Fires continuously during the drag operation while the mouse is moving. + * @param {Ext.slider.Multi} slider The slider + * @param {Ext.EventObject} e The event fired from Ext.dd.DragTracker + */ + 'drag', + + /** + * @event dragend + * Fires after the drag operation has completed. + * @param {Ext.slider.Multi} slider The slider + * @param {Ext.EventObject} e The event fired from Ext.dd.DragTracker + */ + 'dragend' + ); + + // Ensure that the maxValue is a snap point, and that the initial value is snapped. + if (me.increment) { + me.maxValue = Ext.Number.snapInRange(me.maxValue, me.increment, me.minValue); + me.value = me.normalizeValue(me.value); + } + + me.callParent(); + + // only can use it if it exists. + if (me.useTips) { + if (Ext.isObject(me.useTips)) { + tipPlug = Ext.apply({}, me.useTips); + } else { + tipPlug = me.tipText ? {getText: me.tipText} : {}; + } + + plugins = me.plugins = me.plugins || []; + pLen = plugins.length; + + for (p = 0; p < pLen; p++) { + if (plugins[p].isSliderTip) { + hasTip = true; + break; + } + } + + if (!hasTip) { + me.plugins.push(new Ext.slider.Tip(tipPlug)); + } + } + }, + + /** + * Creates a new thumb and adds it to the slider + * @param {Number} [value=0] The initial value to set on the thumb. + * @return {Ext.slider.Thumb} The thumb + */ + addThumb: function(value) { + var me = this, + thumb = new Ext.slider.Thumb({ + ownerCt : me, + ownerLayout : me.getComponentLayout(), + value : value, + slider : me, + index : me.thumbs.length, + constrain : me.constrainThumbs, + disabled : !!me.readOnly + }); + + me.thumbs.push(thumb); + + //render the thumb now if needed + if (me.rendered) { + thumb.render(); + } + + return thumb; + }, + + /** + * @private + * Moves the given thumb above all other by increasing its z-index. This is called when as drag + * any thumb, so that the thumb that was just dragged is always at the highest z-index. This is + * required when the thumbs are stacked on top of each other at one of the ends of the slider's + * range, which can result in the user not being able to move any of them. + * @param {Ext.slider.Thumb} topThumb The thumb to move to the top + */ + promoteThumb: function(topThumb) { + var thumbs = this.thumbs, + ln = thumbs.length, + zIndex, thumb, i; + + for (i = 0; i < ln; i++) { + thumb = thumbs[i]; + + if (thumb == topThumb) { + thumb.bringToFront(); + } else { + thumb.sendToBack(); + } + } + }, + + // private override + getSubTplData : function() { + var me = this; + + return Ext.apply(me.callParent(), { + $comp: me, + vertical: me.vertical ? Ext.baseCSSPrefix + 'slider-vert' : Ext.baseCSSPrefix + 'slider-horz', + minValue: me.minValue, + maxValue: me.maxValue, + value: me.value + }); + }, + + onRender : function() { + var me = this, + thumbs = me.thumbs, + len = thumbs.length, + i = 0, + thumb; + + me.callParent(arguments); + + for (i = 0; i < len; i++) { + thumb = thumbs[i]; + thumb.el = me.el.getById(me.id + '-thumb-' + i); + thumb.onRender(); + } + }, + + /** + * @private + * Adds keyboard and mouse listeners on this.el. Ignores click events on the internal focus element. + */ + initEvents : function() { + var me = this; + me.mon(me.el, { + scope : me, + mousedown: me.onMouseDown, + keydown : me.onKeyDown + }); + }, + + /** + * @private + * Given an `[x, y]` position within the slider's track (Points outside the slider's track are coerced to either the minimum or maximum value), + * calculate how many pixels **from the slider origin** (left for horizontal Sliders and bottom for vertical Sliders) that point is. + * + * If the point is outside the range of the Slider's track, the return value is `undefined` + * @param {Number[]} xy The point to calculate the track point for + */ + getTrackpoint : function(xy) { + var me = this, + result, + positionProperty, + sliderTrack = me.innerEl, + trackLength; + + if (me.vertical) { + positionProperty = 'top'; + trackLength = sliderTrack.getHeight(); + } else { + positionProperty = 'left'; + trackLength = sliderTrack.getWidth(); + } + result = Ext.Number.constrain(sliderTrack.translatePoints(xy)[positionProperty], 0, trackLength); + return me.vertical ? trackLength - result : result; + }, + + /** + * @private + * Mousedown handler for the slider. If the clickToChange is enabled and the click was not on the draggable 'thumb', + * this calculates the new value of the slider and tells the implementation (Horizontal or Vertical) to move the thumb + * @param {Ext.EventObject} e The click event + */ + onMouseDown : function(e) { + var me = this, + thumbClicked = false, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + trackPoint; + + if (me.disabled) { + return; + } + + //see if the click was on any of the thumbs + for (; i < len; i++) { + thumbClicked = thumbClicked || e.target == thumbs[i].el.dom; + } + + if (me.clickToChange && !thumbClicked) { + trackPoint = me.getTrackpoint(e.getXY()); + if (trackPoint !== undefined) { + me.onClickChange(trackPoint); + } + } + me.focus(); + }, + + /** + * @private + * Moves the thumb to the indicated position. + * Only changes the value if the click was within this.clickRange. + * @param {Number} trackPoint local pixel offset **from the origin** (left for horizontal and bottom for vertical) along the Slider's axis at which the click event occured. + */ + onClickChange : function(trackPoint) { + var me = this, + thumb, index; + + // How far along the track *from the origin* was the click. + // If vertical, the origin is the bottom of the slider track. + + //find the nearest thumb to the click event + thumb = me.getNearest(trackPoint); + if (!thumb.disabled) { + index = thumb.index; + me.setValue(index, Ext.util.Format.round(me.reversePixelValue(trackPoint), me.decimalPrecision), undefined, true); + } + }, + + /** + * @private + * Returns the nearest thumb to a click event, along with its distance + * @param {Number} trackPoint local pixel position along the Slider's axis to find the Thumb for + * @return {Object} The closest thumb object and its distance from the click event + */ + getNearest: function(trackPoint) { + var me = this, + clickValue = me.reversePixelValue(trackPoint), + nearestDistance = (me.maxValue - me.minValue) + 5, //add a small fudge for the end of the slider + nearest = null, + thumbs = me.thumbs, + i = 0, + len = thumbs.length, + thumb, + value, + dist; + + for (; i < len; i++) { + thumb = me.thumbs[i]; + value = thumb.value; + dist = Math.abs(value - clickValue); + + if (Math.abs(dist <= nearestDistance)) { + nearest = thumb; + nearestDistance = dist; + } + } + return nearest; + }, + + /** + * @private + * Handler for any keypresses captured by the slider. If the key is UP or RIGHT, the thumb is moved along to the right + * by this.keyIncrement. If DOWN or LEFT it is moved left. Pressing CTRL moves the slider to the end in either direction + * @param {Ext.EventObject} e The Event object + */ + onKeyDown : function(e) { + /* + * The behaviour for keyboard handling with multiple thumbs is currently undefined. + * There's no real sane default for it, so leave it like this until we come up + * with a better way of doing it. + */ + var me = this, + k, + val; + + if(me.disabled || me.thumbs.length !== 1) { + e.preventDefault(); + return; + } + k = e.getKey(); + + switch(k) { + case e.UP: + case e.RIGHT: + e.stopEvent(); + val = e.ctrlKey ? me.maxValue : me.getValue(0) + me.keyIncrement; + me.setValue(0, val, undefined, true); + break; + case e.DOWN: + case e.LEFT: + e.stopEvent(); + val = e.ctrlKey ? me.minValue : me.getValue(0) - me.keyIncrement; + me.setValue(0, val, undefined, true); + break; + default: + e.preventDefault(); + } + }, + + /** + * @private + * Returns a snapped, constrained value when given a desired value + * @param {Number} value Raw number value + * @return {Number} The raw value rounded to the correct d.p. and constrained within the set max and min values + */ + normalizeValue : function(v) { + var me = this, + Num = Ext.Number, + snapFn = Num[me.zeroBasedSnapping ? 'snap' : 'snapInRange']; + + v = snapFn.call(Num, v, me.increment, me.minValue, me.maxValue); + v = Ext.util.Format.round(v, me.decimalPrecision); + v = Ext.Number.constrain(v, me.minValue, me.maxValue); + return v; + }, + + /** + * Sets the minimum value for the slider instance. If the current value is less than the minimum value, the current + * value will be changed. + * @param {Number} val The new minimum value + */ + setMinValue : function(val) { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + t; + + me.minValue = val; + if (me.rendered) { + me.inputEl.dom.setAttribute('aria-valuemin', val); + } + + for (; i < len; ++i) { + t = thumbs[i]; + t.value = t.value < val ? val : t.value; + } + me.syncThumbs(); + }, + + /** + * Sets the maximum value for the slider instance. If the current value is more than the maximum value, the current + * value will be changed. + * @param {Number} val The new maximum value + */ + setMaxValue : function(val) { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + t; + + me.maxValue = val; + if (me.rendered) { + me.inputEl.dom.setAttribute('aria-valuemax', val); + } + + for (; i < len; ++i) { + t = thumbs[i]; + t.value = t.value > val ? val : t.value; + } + me.syncThumbs(); + }, + + /** + * Programmatically sets the value of the Slider. Ensures that the value is constrained within the minValue and + * maxValue. + * @param {Number} index Index of the thumb to move + * @param {Number} value The value to set the slider to. (This will be constrained within minValue and maxValue) + * @param {Boolean} [animate=true] Turn on or off animation + */ + setValue : function(index, value, animate, changeComplete) { + var me = this, + thumb = me.thumbs[index]; + + // ensures value is contstrained and snapped + value = me.normalizeValue(value); + + if (value !== thumb.value && me.fireEvent('beforechange', me, value, thumb.value, thumb) !== false) { + thumb.value = value; + if (me.rendered) { + // TODO this only handles a single value; need a solution for exposing multiple values to aria. + // Perhaps this should go on each thumb element rather than the outer element. + me.inputEl.set({ + 'aria-valuenow': value, + 'aria-valuetext': value + }); + + thumb.move(me.calculateThumbPosition(value), Ext.isDefined(animate) ? animate !== false : me.animate); + + me.fireEvent('change', me, value, thumb); + me.checkDirty(); + if (changeComplete) { + me.fireEvent('changecomplete', me, value, thumb); + } + } + } + }, + + /** + * @private + * Given a value within this Slider's range, calculates a Thumb's percentage CSS position to map that value. + */ + calculateThumbPosition : function(v) { + return (v - this.minValue) / (this.maxValue - this.minValue) * 100; + }, + + /** + * @private + * Returns the ratio of pixels to mapped values. e.g. if the slider is 200px wide and maxValue - minValue is 100, + * the ratio is 2 + * @return {Number} The ratio of pixels to mapped values + */ + getRatio : function() { + var me = this, + trackLength = this.vertical ? this.innerEl.getHeight() : this.innerEl.getWidth(), + valueRange = this.maxValue - this.minValue; + return valueRange === 0 ? trackLength : (trackLength / valueRange); + }, + + /** + * @private + * Given a pixel location along the slider, returns the mapped slider value for that pixel. + * E.g. if we have a slider 200px wide with minValue = 100 and maxValue = 500, reversePixelValue(50) + * returns 200 + * @param {Number} pos The position along the slider to return a mapped value for + * @return {Number} The mapped value for the given position + */ + reversePixelValue : function(pos) { + return this.minValue + (pos / this.getRatio()); + }, + + /** + * @private + * Given a Thumb's percentage position along the slider, returns the mapped slider value for that pixel. + * E.g. if we have a slider 200px wide with minValue = 100 and maxValue = 500, reversePercentageValue(25) + * returns 200 + * @param {Number} pos The percentage along the slider track to return a mapped value for + * @return {Number} The mapped value for the given position + */ + reversePercentageValue : function(pos) { + return this.minValue + (this.maxValue - this.minValue) * (pos / 100); + }, + + //private + onDisable: function() { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + thumb, + el, + xy; + + me.callParent(); + + for (; i < len; i++) { + thumb = thumbs[i]; + el = thumb.el; + + thumb.disable(); + + if(Ext.isIE) { + //IE breaks when using overflow visible and opacity other than 1. + //Create a place holder for the thumb and display it. + xy = el.getXY(); + el.hide(); + + me.innerEl.addCls(me.disabledCls).dom.disabled = true; + + if (!me.thumbHolder) { + me.thumbHolder = me.endEl.createChild({cls: Ext.baseCSSPrefix + 'slider-thumb ' + me.disabledCls}); + } + + me.thumbHolder.show().setXY(xy); + } + } + }, + + //private + onEnable: function() { + var me = this, + i = 0, + thumbs = me.thumbs, + len = thumbs.length, + thumb, + el; + + this.callParent(); + + for (; i < len; i++) { + thumb = thumbs[i]; + el = thumb.el; + + thumb.enable(); + + if (Ext.isIE) { + me.innerEl.removeCls(me.disabledCls).dom.disabled = false; + + if (me.thumbHolder) { + me.thumbHolder.hide(); + } + + el.show(); + me.syncThumbs(); + } + } + }, + + /** + * Synchronizes thumbs position to the proper proportion of the total component width based on the current slider + * {@link #value}. This will be called automatically when the Slider is resized by a layout, but if it is rendered + * auto width, this method can be called from another resize handler to sync the Slider if necessary. + */ + syncThumbs : function() { + if (this.rendered) { + var thumbs = this.thumbs, + length = thumbs.length, + i = 0; + + for (; i < length; i++) { + thumbs[i].move(this.calculateThumbPosition(thumbs[i].value)); + } + } + }, + + /** + * Returns the current value of the slider + * @param {Number} index The index of the thumb to return a value for + * @return {Number/Number[]} The current value of the slider at the given index, or an array of all thumb values if + * no index is given. + */ + getValue : function(index) { + return Ext.isNumber(index) ? this.thumbs[index].value : this.getValues(); + }, + + /** + * Returns an array of values - one for the location of each thumb + * @return {Number[]} The set of thumb values + */ + getValues: function() { + var values = [], + i = 0, + thumbs = this.thumbs, + len = thumbs.length; + + for (; i < len; i++) { + values.push(thumbs[i].value); + } + + return values; + }, + + getSubmitValue: function() { + var me = this; + return (me.disabled || !me.submitValue) ? null : me.getValue(); + }, + + reset: function() { + var me = this, + arr = [].concat(me.originalValue), + a = 0, + aLen = arr.length, + val; + + for (; a < aLen; a++) { + val = arr[a]; + + me.setValue(a, val); + } + + me.clearInvalid(); + // delete here so we reset back to the original state + delete me.wasValid; + }, + + setReadOnly: function(readOnly){ + var me = this, + thumbs = me.thumbs, + len = thumbs.length, + i = 0; + + me.callParent(arguments); + readOnly = me.readOnly; + + for (; i < len; ++i) { + if (readOnly) { + thumbs[i].disable(); + } else { + thumbs[i].enable(); + } + + } + + }, + + // private + beforeDestroy : function() { + var me = this, + thumbs = me.thumbs, + t = 0, + tLen = thumbs.length, + thumb; + + Ext.destroy(me.innerEl, me.endEl, me.focusEl); + + for (; t < tLen; t++) { + thumb = thumbs[t]; + + Ext.destroy(thumb); + } + + me.callParent(); + } +}); + +/** + * Slider which supports vertical or horizontal orientation, keyboard adjustments, configurable snapping, axis clicking + * and animation. Can be added as an item to any container. + * + * @example + * Ext.create('Ext.slider.Single', { + * width: 200, + * value: 50, + * increment: 10, + * minValue: 0, + * maxValue: 100, + * renderTo: Ext.getBody() + * }); + * + * The class Ext.slider.Single is aliased to Ext.Slider for backwards compatibility. + */ +Ext.define('Ext.slider.Single', { + extend: 'Ext.slider.Multi', + alias: ['widget.slider', 'widget.sliderfield'], + alternateClassName: ['Ext.Slider', 'Ext.form.SliderField', 'Ext.slider.SingleSlider', 'Ext.slider.Slider'], + + /** + * Returns the current value of the slider + * @return {Number} The current value of the slider + */ + getValue: function() { + // just returns the value of the first thumb, which should be the only one in a single slider + return this.callParent([0]); + }, + + /** + * Programmatically sets the value of the Slider. Ensures that the value is constrained within the minValue and + * maxValue. + * @param {Number} value The value to set the slider to. (This will be constrained within minValue and maxValue) + * @param {Boolean} [animate] Turn on or off animation + */ + setValue: function(value, animate) { + var args = arguments, + len = args.length; + + // this is to maintain backwards compatiblity for sliders with only one thunb. Usually you must pass the thumb + // index to setValue, but if we only have one thumb we inject the index here first if given the multi-slider + // signature without the required index. The index will always be 0 for a single slider + if (len == 1 || (len <= 3 && typeof args[1] != 'number')) { + args = Ext.toArray(args); + args.unshift(0); + } + return this.callParent(args); + }, + + // private + getNearest : function(){ + // Since there's only 1 thumb, it's always the nearest + return this.thumbs[0]; + } +}); + +/** + * A Provider implementation which saves and retrieves state via cookies. The CookieProvider supports the usual cookie + * options, such as: + * + * - {@link #path} + * - {@link #expires} + * - {@link #domain} + * - {@link #secure} + * + * Example: + * + * var cp = Ext.create('Ext.state.CookieProvider', { + * path: "/cgi-bin/", + * expires: new Date(new Date().getTime()+(1000*60*60*24*30)), //30 days + * domain: "sencha.com" + * }); + * + * Ext.state.Manager.setProvider(cp); + * + */ +Ext.define('Ext.state.CookieProvider', { + extend: 'Ext.state.Provider', + + /** + * @cfg {String} path + * The path for which the cookie is active. Defaults to root '/' which makes it active for all pages in the site. + */ + + /** + * @cfg {Date} expires + * The cookie expiration date. Defaults to 7 days from now. + */ + + /** + * @cfg {String} domain + * The domain to save the cookie for. Note that you cannot specify a different domain than your page is on, but you can + * specify a sub-domain, or simply the domain itself like 'sencha.com' to include all sub-domains if you need to access + * cookies across different sub-domains. Defaults to null which uses the same domain the page is running on including + * the 'www' like 'www.sencha.com'. + */ + + /** + * @cfg {Boolean} [secure=false] + * True if the site is using SSL + */ + + /** + * Creates a new CookieProvider. + * @param {Object} [config] Config object. + */ + constructor : function(config){ + var me = this; + me.path = "/"; + me.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); //7 days + me.domain = null; + me.secure = false; + me.callParent(arguments); + me.state = me.readCookies(); + }, + + // private + set : function(name, value){ + var me = this; + + if(typeof value == "undefined" || value === null){ + me.clear(name); + return; + } + me.setCookie(name, value); + me.callParent(arguments); + }, + + // private + clear : function(name){ + this.clearCookie(name); + this.callParent(arguments); + }, + + // private + readCookies : function(){ + var cookies = {}, + c = document.cookie + ";", + re = /\s?(.*?)=(.*?);/g, + prefix = this.prefix, + len = prefix.length, + matches, + name, + value; + + while((matches = re.exec(c)) != null){ + name = matches[1]; + value = matches[2]; + if (name && name.substring(0, len) == prefix){ + cookies[name.substr(len)] = this.decodeValue(value); + } + } + return cookies; + }, + + // private + setCookie : function(name, value){ + var me = this; + + document.cookie = me.prefix + name + "=" + me.encodeValue(value) + + ((me.expires == null) ? "" : ("; expires=" + me.expires.toGMTString())) + + ((me.path == null) ? "" : ("; path=" + me.path)) + + ((me.domain == null) ? "" : ("; domain=" + me.domain)) + + ((me.secure == true) ? "; secure" : ""); + }, + + // private + clearCookie : function(name){ + var me = this; + + document.cookie = me.prefix + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" + + ((me.path == null) ? "" : ("; path=" + me.path)) + + ((me.domain == null) ? "" : ("; domain=" + me.domain)) + + ((me.secure == true) ? "; secure" : ""); + } +}); + +/** + * @class Ext.state.LocalStorageProvider + * A Provider implementation which saves and retrieves state via the HTML5 localStorage object. + * If the browser does not support local storage, an exception will be thrown upon instantiating + * this class. + */ + +Ext.define('Ext.state.LocalStorageProvider', { + /* Begin Definitions */ + + extend: 'Ext.state.Provider', + + alias: 'state.localstorage', + + /* End Definitions */ + + constructor: function(){ + var me = this; + me.callParent(arguments); + me.store = me.getStorageObject(); + me.state = me.readLocalStorage(); + }, + + readLocalStorage: function(){ + var store = this.store, + i = 0, + len = store.length, + prefix = this.prefix, + prefixLen = prefix.length, + data = {}, + key; + + for (; i < len; ++i) { + key = store.key(i); + if (key.substring(0, prefixLen) == prefix) { + data[key.substr(prefixLen)] = this.decodeValue(store.getItem(key)); + } + } + return data; + }, + + set : function(name, value){ + var me = this; + + me.clear(name); + if (typeof value == "undefined" || value === null) { + return; + } + me.store.setItem(me.prefix + name, me.encodeValue(value)); + me.callParent(arguments); + }, + + // private + clear : function(name){ + this.store.removeItem(this.prefix + name); + this.callParent(arguments); + }, + + getStorageObject: function(){ + try { + var supports = 'localStorage' in window && window['localStorage'] !== null; + if (supports) { + return window.localStorage; + } + } catch (e) { + return false; + } + Ext.Error.raise('LocalStorage is not supported by the current browser'); + } +}); + +/** + * @author Ed Spencer + * + * Represents a single Tab in a {@link Ext.tab.Panel TabPanel}. A Tab is simply a slightly customized {@link Ext.button.Button Button}, + * styled to look like a tab. Tabs are optionally closable, and can also be disabled. 99% of the time you will not + * need to create Tabs manually as the framework does so automatically when you use a {@link Ext.tab.Panel TabPanel} + */ +Ext.define('Ext.tab.Tab', { + extend: 'Ext.button.Button', + alias: 'widget.tab', + + requires: [ + 'Ext.layout.component.Tab', + 'Ext.util.KeyNav' + ], + + componentLayout: 'tab', + + /** + * @property {Boolean} isTab + * `true` in this class to identify an object as an instantiated Tab, or subclass thereof. + */ + isTab: true, + + baseCls: Ext.baseCSSPrefix + 'tab', + + /** + * @cfg {String} activeCls + * The CSS class to be applied to a Tab when it is active. + * Providing your own CSS for this class enables you to customize the active state. + */ + activeCls: 'active', + + /** + * @cfg {String} [disabledCls='x-tab-disabled'] + * The CSS class to be applied to a Tab when it is disabled. + */ + + /** + * @cfg {String} closableCls + * The CSS class which is added to the tab when it is closable + */ + closableCls: 'closable', + + /** + * @cfg {Boolean} closable + * True to make the Tab start closable (the close icon will be visible). + */ + closable: true, + + // + /** + * @cfg {String} closeText + * The accessible text label for the close button link; only used when {@link #cfg-closable} = true. + */ + closeText: 'Close Tab', + // + + /** + * @property {Boolean} active + * Indicates that this tab is currently active. This is NOT a public configuration. + * @readonly + */ + active: false, + + /** + * @property {Boolean} closable + * True if the tab is currently closable + */ + + childEls: [ + 'closeEl' + ], + + scale: false, + + position: 'top', + + initComponent: function() { + var me = this; + + me.addEvents( + /** + * @event activate + * Fired when the tab is activated. + * @param {Ext.tab.Tab} this + */ + 'activate', + + /** + * @event deactivate + * Fired when the tab is deactivated. + * @param {Ext.tab.Tab} this + */ + 'deactivate', + + /** + * @event beforeclose + * Fires if the user clicks on the Tab's close button, but before the {@link #close} event is fired. Return + * false from any listener to stop the close event being fired + * @param {Ext.tab.Tab} tab The Tab object + */ + 'beforeclose', + + /** + * @event close + * Fires to indicate that the tab is to be closed, usually because the user has clicked the close button. + * @param {Ext.tab.Tab} tab The Tab object + */ + 'close' + ); + + me.callParent(arguments); + + if (me.card) { + me.setCard(me.card); + } + }, + + getTemplateArgs: function() { + var me = this, + result = me.callParent(); + + result.closable = me.closable; + result.closeText = me.closeText; + + return result; + }, + + beforeRender: function() { + var me = this, + tabBar = me.up('tabbar'), + tabPanel = me.up('tabpanel'); + + me.callParent(); + + me.addClsWithUI(me.position); + + // Set all the state classNames, as they need to include the UI + // me.disabledCls = me.getClsWithUIs('disabled'); + + me.syncClosableUI(); + + // Propagate minTabWidth and maxTabWidth settings from the owning TabBar then TabPanel + if (!me.minWidth) { + me.minWidth = (tabBar) ? tabBar.minTabWidth : me.minWidth; + if (!me.minWidth && tabPanel) { + me.minWidth = tabPanel.minTabWidth; + } + if (me.minWidth && me.iconCls) { + me.minWidth += 25; + } + } + if (!me.maxWidth) { + me.maxWidth = (tabBar) ? tabBar.maxTabWidth : me.maxWidth; + if (!me.maxWidth && tabPanel) { + me.maxWidth = tabPanel.maxTabWidth; + } + } + }, + + onRender: function() { + var me = this; + + me.callParent(arguments); + + me.keyNav = new Ext.util.KeyNav(me.el, { + enter: me.onEnterKey, + del: me.onDeleteKey, + scope: me + }); + }, + + // inherit docs + enable : function(silent) { + var me = this; + + me.callParent(arguments); + + me.removeClsWithUI(me.position + '-disabled'); + + return me; + }, + + // inherit docs + disable : function(silent) { + var me = this; + + me.callParent(arguments); + + me.addClsWithUI(me.position + '-disabled'); + + return me; + }, + + onDestroy: function() { + var me = this; + + Ext.destroy(me.keyNav); + delete me.keyNav; + + me.callParent(arguments); + }, + + /** + * Sets the tab as either closable or not. + * @param {Boolean} closable Pass false to make the tab not closable. Otherwise the tab will be made closable (eg a + * close button will appear on the tab) + */ + setClosable: function(closable) { + var me = this; + + // Closable must be true if no args + closable = (!arguments.length || !!closable); + + if (me.closable != closable) { + me.closable = closable; + + // set property on the user-facing item ('card'): + if (me.card) { + me.card.closable = closable; + } + + me.syncClosableUI(); + + if (me.rendered) { + me.syncClosableElements(); + + // Tab will change width to accommodate close icon + me.updateLayout(); + } + } + }, + + /** + * This method ensures that the closeBtn element exists or not based on 'closable'. + * @private + */ + syncClosableElements: function () { + var me = this, + closeEl = me.closeEl; + + if (me.closable) { + if (!closeEl) { + me.closeEl = me.btnWrap.insertSibling({ + tag: 'a', + cls: me.baseCls + '-close-btn', + href: '#', + title: me.closeText + }, 'after'); + } + } else if (closeEl) { + closeEl.remove(); + delete me.closeEl; + } + }, + + /** + * This method ensures that the UI classes are added or removed based on 'closable'. + * @private + */ + syncClosableUI: function () { + var me = this, + classes = [me.closableCls, me.closableCls + '-' + me.position]; + + if (me.closable) { + me.addClsWithUI(classes); + } else { + me.removeClsWithUI(classes); + } + }, + + /** + * Sets this tab's attached card. Usually this is handled automatically by the {@link Ext.tab.Panel} that this Tab + * belongs to and would not need to be done by the developer + * @param {Ext.Component} card The card to set + */ + setCard: function(card) { + var me = this; + + me.card = card; + me.setText(me.title || card.title); + me.setIconCls(me.iconCls || card.iconCls); + me.setIcon(me.icon || card.icon); + }, + + /** + * @private + * Listener attached to click events on the Tab's close button + */ + onCloseClick: function() { + var me = this; + + if (me.fireEvent('beforeclose', me) !== false) { + if (me.tabBar) { + if (me.tabBar.closeTab(me) === false) { + // beforeclose on the panel vetoed the event, stop here + return; + } + } else { + // if there's no tabbar, fire the close event + me.fireClose(); + } + } + }, + + /** + * Fires the close event on the tab. + * @private + */ + fireClose: function(){ + this.fireEvent('close', this); + }, + + /** + * @private + */ + onEnterKey: function(e) { + var me = this; + + if (me.tabBar) { + me.tabBar.onClick(e, me.el); + } + }, + + /** + * @private + */ + onDeleteKey: function(e) { + if (this.closable) { + this.onCloseClick(); + } + }, + + // @private + activate : function(supressEvent) { + var me = this; + + me.active = true; + me.addClsWithUI([me.activeCls, me.position + '-' + me.activeCls]); + + if (supressEvent !== true) { + me.fireEvent('activate', me); + } + }, + + // @private + deactivate : function(supressEvent) { + var me = this; + + me.active = false; + me.removeClsWithUI([me.activeCls, me.position + '-' + me.activeCls]); + + if (supressEvent !== true) { + me.fireEvent('deactivate', me); + } + } +}); + +/** + * @author Ed Spencer + * TabBar is used internally by a {@link Ext.tab.Panel TabPanel} and typically should not need to be created manually. + * The tab bar automatically removes the default title provided by {@link Ext.panel.Header} + */ +Ext.define('Ext.tab.Bar', { + extend: 'Ext.panel.Header', + alias: 'widget.tabbar', + baseCls: Ext.baseCSSPrefix + 'tab-bar', + + requires: ['Ext.tab.Tab'], + + /** + * @property {Boolean} isTabBar + * `true` in this class to identify an objact as an instantiated Tab Bar, or subclass thereof. + */ + isTabBar: true, + + /** + * @cfg {String} title @hide + */ + + /** + * @cfg {String} iconCls @hide + */ + + // @private + defaultType: 'tab', + + /** + * @cfg {Boolean} plain + * True to not show the full background on the tabbar + */ + plain: false, + + childEls: [ + 'body', 'strip' + ], + + // @private + renderTpl: [ + '
    {baseCls}-body-{ui} {parent.baseCls}-body-{parent.ui}-{.}" style="{bodyStyle}">', + '{%this.renderContainer(out,values)%}', + '
    ', + '
    {baseCls}-strip-{ui} {parent.baseCls}-strip-{parent.ui}-{.}">
    ' + ], + + /** + * @cfg {Number} minTabWidth + * The minimum width for a tab in this tab Bar. Defaults to the tab Panel's {@link Ext.tab.Panel#minTabWidth minTabWidth} value. + * @deprecated This config is deprecated. It is much easier to use the {@link Ext.tab.Panel#minTabWidth minTabWidth} config on the TabPanel. + */ + + /** + * @cfg {Number} maxTabWidth + * The maximum width for a tab in this tab Bar. Defaults to the tab Panel's {@link Ext.tab.Panel#maxTabWidth maxTabWidth} value. + * @deprecated This config is deprecated. It is much easier to use the {@link Ext.tab.Panel#maxTabWidth maxTabWidth} config on the TabPanel. + */ + + // @private + initComponent: function() { + var me = this; + + if (me.plain) { + me.setUI(me.ui + '-plain'); + } + + me.addClsWithUI(me.dock); + + me.addEvents( + /** + * @event change + * Fired when the currently-active tab has changed + * @param {Ext.tab.Bar} tabBar The TabBar + * @param {Ext.tab.Tab} tab The new Tab + * @param {Ext.Component} card The card that was just shown in the TabPanel + */ + 'change' + ); + + // Element onClick listener added by Header base class + me.callParent(arguments); + + // TabBar must override the Header's align setting. + me.layout.align = (me.orientation == 'vertical') ? 'left' : 'top'; + me.layout.overflowHandler = new Ext.layout.container.boxOverflow.Scroller(me.layout); + + me.remove(me.titleCmp); + delete me.titleCmp; + + Ext.apply(me.renderData, { + bodyCls: me.bodyCls + }); + }, + + getLayout: function() { + var me = this; + me.layout.type = (me.dock === 'top' || me.dock === 'bottom') ? 'hbox' : 'vbox'; + return me.callParent(arguments); + }, + + // @private + onAdd: function(tab) { + tab.position = this.dock; + this.callParent(arguments); + }, + + onRemove: function(tab) { + var me = this; + + if (tab === me.previousTab) { + me.previousTab = null; + } + me.callParent(arguments); + }, + + afterComponentLayout : function(width) { + this.callParent(arguments); + this.strip.setWidth(width); + }, + + // @private + onClick: function(e, target) { + // The target might not be a valid tab el. + var me = this, + tabEl = e.getTarget('.' + Ext.tab.Tab.prototype.baseCls), + tab = tabEl && Ext.getCmp(tabEl.id), + tabPanel = me.tabPanel, + isCloseClick = tab && tab.closeEl && (target === tab.closeEl.dom); + + if (isCloseClick) { + e.preventDefault(); + } + if (tab && tab.isDisabled && !tab.isDisabled()) { + if (tab.closable && isCloseClick) { + tab.onCloseClick(); + } else { + if (tabPanel) { + // TabPanel will card setActiveTab of the TabBar + tabPanel.setActiveTab(tab.card); + } else { + me.setActiveTab(tab); + } + tab.focus(); + } + } + }, + + /** + * @private + * Closes the given tab by removing it from the TabBar and removing the corresponding card from the TabPanel + * @param {Ext.tab.Tab} toClose The tab to close + */ + closeTab: function(toClose) { + var me = this, + card = toClose.card, + tabPanel = me.tabPanel, + toActivate; + + if (card && card.fireEvent('beforeclose', card) === false) { + return false; + } + + // If we are closing the active tab, revert to the previously active tab (or the previous or next enabled sibling if + // there *is* no previously active tab, or the previously active tab is the one that's being closed or the previously + // active tab has since been disabled) + toActivate = me.findNextActivatable(toClose); + + // We are going to remove the associated card, and then, if that was sucessful, remove the Tab, + // And then potentially activate another Tab. We should not layout for each of these operations. + Ext.suspendLayouts(); + + if (tabPanel && card) { + // Remove the ownerCt so the tab doesn't get destroyed if the remove is successful + // We need this so we can have the tab fire it's own close event. + delete toClose.ownerCt; + + // we must fire 'close' before removing the card from panel, otherwise + // the event will no loger have any listener + card.fireEvent('close', card); + tabPanel.remove(card); + + // Remove succeeded + if (!tabPanel.getComponent(card)) { + /* + * Force the close event to fire. By the time this function returns, + * the tab is already destroyed and all listeners have been purged + * so the tab can't fire itself. + */ + toClose.fireClose(); + me.remove(toClose); + } else { + // Restore the ownerCt from above + toClose.ownerCt = me; + Ext.resumeLayouts(true); + return false; + } + } + + // If we are closing the active tab, revert to the previously active tab (or the previous sibling or the nnext sibling) + if (toActivate) { + // Our owning TabPanel calls our setActiveTab method, so only call that if this Bar is being used + // in some other context (unlikely) + if (tabPanel) { + tabPanel.setActiveTab(toActivate.card); + } else { + me.setActiveTab(toActivate); + } + toActivate.focus(); + } + Ext.resumeLayouts(true); + }, + + // private - used by TabPanel too. + // Works out the next tab to activate when one tab is closed. + findNextActivatable: function(toClose) { + var me = this; + if (toClose.active && me.items.getCount() > 1) { + return (me.previousTab && me.previousTab !== toClose && !me.previousTab.disabled) ? me.previousTab : (toClose.next('tab[disabled=false]') || toClose.prev('tab[disabled=false]')); + } + }, + + /** + * @private + * Marks the given tab as active + * @param {Ext.tab.Tab} tab The tab to mark active + */ + setActiveTab: function(tab) { + var me = this; + + if (!tab.disabled && tab !== me.activeTab) { + if (me.activeTab) { + if (me.activeTab.isDestroyed) { + me.previousTab = null; + } else { + me.previousTab = me.activeTab; + me.activeTab.deactivate(); + } + } + tab.activate(); + + me.activeTab = tab; + me.fireEvent('change', me, tab, tab.card); + + // Ensure that after the currently in progress layout, the active tab is scrolled into view + me.on({ + afterlayout: me.afterTabActivate, + scope: me, + single: true + }); + me.updateLayout(); + } + }, + + afterTabActivate: function() { + this.layout.overflowHandler.scrollToItem(this.activeTab); + } +}); + +/** + * @author Ed Spencer, Tommy Maintz, Brian Moeskau + * + * A basic tab container. TabPanels can be used exactly like a standard {@link Ext.panel.Panel} for + * layout purposes, but also have special support for containing child Components + * (`{@link Ext.container.Container#cfg-items items}`) that are managed using a + * {@link Ext.layout.container.Card CardLayout layout manager}, and displayed as separate tabs. + * + * **Note:** By default, a tab's close tool _destroys_ the child tab Component and all its descendants. + * This makes the child tab Component, and all its descendants **unusable**. To enable re-use of a tab, + * configure the TabPanel with `{@link #autoDestroy autoDestroy: false}`. + * + * ## TabPanel's layout + * + * TabPanels use a Dock layout to position the {@link Ext.tab.Bar TabBar} at the top of the widget. + * Panels added to the TabPanel will have their header hidden by default because the Tab will + * automatically take the Panel's configured title and icon. + * + * TabPanels use their {@link Ext.panel.Header header} or {@link Ext.panel.Panel#fbar footer} + * element (depending on the {@link #tabPosition} configuration) to accommodate the tab selector buttons. + * This means that a TabPanel will not display any configured title, and will not display any configured + * header {@link Ext.panel.Panel#tools tools}. + * + * To display a header, embed the TabPanel in a {@link Ext.panel.Panel Panel} which uses + * `{@link Ext.container.Container#layout layout: 'fit'}`. + * + * ## Controlling tabs + * + * Configuration options for the {@link Ext.tab.Tab} that represents the component can be passed in + * by specifying the tabConfig option: + * + * @example + * Ext.create('Ext.tab.Panel', { + * width: 400, + * height: 400, + * renderTo: document.body, + * items: [{ + * title: 'Foo' + * }, { + * title: 'Bar', + * tabConfig: { + * title: 'Custom Title', + * tooltip: 'A button tooltip' + * } + * }] + * }); + * + * # Examples + * + * Here is a basic TabPanel rendered to the body. This also shows the useful configuration {@link #activeTab}, + * which allows you to set the active tab on render. If you do not set an {@link #activeTab}, no tabs will be + * active by default. + * + * @example + * Ext.create('Ext.tab.Panel', { + * width: 300, + * height: 200, + * activeTab: 0, + * items: [ + * { + * title: 'Tab 1', + * bodyPadding: 10, + * html : 'A simple tab' + * }, + * { + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * It is easy to control the visibility of items in the tab bar. Specify hidden: true to have the + * tab button hidden initially. Items can be subsequently hidden and show by accessing the + * tab property on the child item. + * + * @example + * var tabs = Ext.create('Ext.tab.Panel', { + * width: 400, + * height: 400, + * renderTo: document.body, + * items: [{ + * title: 'Home', + * html: 'Home', + * itemId: 'home' + * }, { + * title: 'Users', + * html: 'Users', + * itemId: 'users', + * hidden: true + * }, { + * title: 'Tickets', + * html: 'Tickets', + * itemId: 'tickets' + * }] + * }); + * + * setTimeout(function(){ + * tabs.child('#home').tab.hide(); + * var users = tabs.child('#users'); + * users.tab.show(); + * tabs.setActiveTab(users); + * }, 1000); + * + * You can remove the background of the TabBar by setting the {@link #plain} property to `true`. + * + * @example + * Ext.create('Ext.tab.Panel', { + * width: 300, + * height: 200, + * activeTab: 0, + * plain: true, + * items: [ + * { + * title: 'Tab 1', + * bodyPadding: 10, + * html : 'A simple tab' + * }, + * { + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * Another useful configuration of TabPanel is {@link #tabPosition}. This allows you to change the + * position where the tabs are displayed. The available options for this are `'top'` (default) and + * `'bottom'`. + * + * @example + * Ext.create('Ext.tab.Panel', { + * width: 300, + * height: 200, + * activeTab: 0, + * bodyPadding: 10, + * tabPosition: 'bottom', + * items: [ + * { + * title: 'Tab 1', + * html : 'A simple tab' + * }, + * { + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * The {@link #setActiveTab} is a very useful method in TabPanel which will allow you to change the + * current active tab. You can either give it an index or an instance of a tab. For example: + * + * @example + * var tabs = Ext.create('Ext.tab.Panel', { + * items: [ + * { + * id : 'my-tab', + * title: 'Tab 1', + * html : 'A simple tab' + * }, + * { + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * var tab = Ext.getCmp('my-tab'); + * + * Ext.create('Ext.button.Button', { + * renderTo: Ext.getBody(), + * text : 'Select the first tab', + * scope : this, + * handler : function() { + * tabs.setActiveTab(tab); + * } + * }); + * + * Ext.create('Ext.button.Button', { + * text : 'Select the second tab', + * scope : this, + * handler : function() { + * tabs.setActiveTab(1); + * }, + * renderTo : Ext.getBody() + * }); + * + * The {@link #getActiveTab} is a another useful method in TabPanel which will return the current active tab. + * + * @example + * var tabs = Ext.create('Ext.tab.Panel', { + * items: [ + * { + * title: 'Tab 1', + * html : 'A simple tab' + * }, + * { + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * Ext.create('Ext.button.Button', { + * text : 'Get active tab', + * scope : this, + * handler : function() { + * var tab = tabs.getActiveTab(); + * alert('Current tab: ' + tab.title); + * }, + * renderTo : Ext.getBody() + * }); + * + * Adding a new tab is very simple with a TabPanel. You simple call the {@link #method-add} method with an config + * object for a panel. + * + * @example + * var tabs = Ext.create('Ext.tab.Panel', { + * items: [ + * { + * title: 'Tab 1', + * html : 'A simple tab' + * }, + * { + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * Ext.create('Ext.button.Button', { + * text : 'New tab', + * scope : this, + * handler : function() { + * var tab = tabs.add({ + * // we use the tabs.items property to get the length of current items/tabs + * title: 'Tab ' + (tabs.items.length + 1), + * html : 'Another one' + * }); + * + * tabs.setActiveTab(tab); + * }, + * renderTo : Ext.getBody() + * }); + * + * Additionally, removing a tab is very also simple with a TabPanel. You simple call the {@link #method-remove} method + * with an config object for a panel. + * + * @example + * var tabs = Ext.create('Ext.tab.Panel', { + * items: [ + * { + * title: 'Tab 1', + * html : 'A simple tab' + * }, + * { + * id : 'remove-this-tab', + * title: 'Tab 2', + * html : 'Another one' + * } + * ], + * renderTo : Ext.getBody() + * }); + * + * Ext.create('Ext.button.Button', { + * text : 'Remove tab', + * scope : this, + * handler : function() { + * var tab = Ext.getCmp('remove-this-tab'); + * tabs.remove(tab); + * }, + * renderTo : Ext.getBody() + * }); + */ +Ext.define('Ext.tab.Panel', { + extend: 'Ext.panel.Panel', + alias: 'widget.tabpanel', + alternateClassName: ['Ext.TabPanel'], + + requires: ['Ext.layout.container.Card', 'Ext.tab.Bar'], + + /** + * @cfg {String} tabPosition + * The position where the tab strip should be rendered. Can be `top` or `bottom`. + */ + tabPosition : 'top', + + /** + * @cfg {String/Number} activeItem + * Doesn't apply for {@link Ext.tab.Panel TabPanel}, use {@link #activeTab} instead. + */ + + /** + * @cfg {String/Number/Ext.Component} activeTab + * The tab to activate initially. Either an ID, index or the tab component itself. + */ + + /** + * @cfg {Object} tabBar + * Optional configuration object for the internal {@link Ext.tab.Bar}. + * If present, this is passed straight through to the TabBar's constructor + */ + + /** + * @cfg {Object} layout + * Optional configuration object for the internal {@link Ext.layout.container.Card card layout}. + * If present, this is passed straight through to the layout's constructor + */ + + /** + * @cfg {Boolean} removePanelHeader + * True to instruct each Panel added to the TabContainer to not render its header element. + * This is to ensure that the title of the panel does not appear twice. + */ + removePanelHeader: true, + + /** + * @cfg {Boolean} plain + * True to not show the full background on the TabBar. + */ + plain: false, + + /** + * @cfg {String} [itemCls='x-tabpanel-child'] + * The class added to each child item of this TabPanel. + */ + itemCls: Ext.baseCSSPrefix + 'tabpanel-child', + + /** + * @cfg {Number} minTabWidth + * The minimum width for a tab in the {@link #cfg-tabBar}. + */ + minTabWidth: undefined, + + /** + * @cfg {Number} maxTabWidth The maximum width for each tab. + */ + maxTabWidth: undefined, + + /** + * @cfg {Boolean} deferredRender + * + * True by default to defer the rendering of child {@link Ext.container.Container#cfg-items items} to the browsers DOM + * until a tab is activated. False will render all contained {@link Ext.container.Container#cfg-items items} as soon as + * the {@link Ext.layout.container.Card layout} is rendered. If there is a significant amount of content or a lot of + * heavy controls being rendered into panels that are not displayed by default, setting this to true might improve + * performance. + * + * The deferredRender property is internally passed to the layout manager for TabPanels ({@link + * Ext.layout.container.Card}) as its {@link Ext.layout.container.Card#deferredRender} configuration value. + * + * **Note**: leaving deferredRender as true means that the content within an unactivated tab will not be available + */ + deferredRender : true, + + //inherit docs + initComponent: function() { + var me = this, + dockedItems = [].concat(me.dockedItems || []), + activeTab = me.activeTab || (me.activeTab = 0); + + // Configure the layout with our deferredRender, and with our activeTeb + me.layout = new Ext.layout.container.Card(Ext.apply({ + owner: me, + deferredRender: me.deferredRender, + itemCls: me.itemCls, + activeItem: me.activeTab + }, me.layout)); + + /** + * @property {Ext.tab.Bar} tabBar Internal reference to the docked TabBar + */ + me.tabBar = new Ext.tab.Bar(Ext.apply({ + dock: me.tabPosition, + plain: me.plain, + border: me.border, + cardLayout: me.layout, + tabPanel: me + }, me.tabBar)); + + dockedItems.push(me.tabBar); + me.dockedItems = dockedItems; + + me.addEvents( + /** + * @event + * Fires before a tab change (activated by {@link #setActiveTab}). Return false in any listener to cancel + * the tabchange + * @param {Ext.tab.Panel} tabPanel The TabPanel + * @param {Ext.Component} newCard The card that is about to be activated + * @param {Ext.Component} oldCard The card that is currently active + */ + 'beforetabchange', + + /** + * @event + * Fires when a new tab has been activated (activated by {@link #setActiveTab}). + * @param {Ext.tab.Panel} tabPanel The TabPanel + * @param {Ext.Component} newCard The newly activated item + * @param {Ext.Component} oldCard The previously active item + */ + 'tabchange' + ); + + me.callParent(arguments); + + // We have to convert the numeric index/string ID config into its component reference + me.activeTab = me.getComponent(activeTab); + + // Ensure that the active child's tab is rendered in the active UI state + if (me.activeTab) { + me.activeTab.tab.activate(true); + + // So that it knows what to deactivate in subsequent tab changes + me.tabBar.activeTab = me.activeTab.tab; + } + }, + + /** + * Makes the given card active. Makes it the visible card in the TabPanel's CardLayout and highlights the Tab. + * @param {String/Number/Ext.Component} card The card to make active. Either an ID, index or the component itself. + * @return {Ext.Component} The resulting active child Component. The call may have been vetoed, or otherwise + * modified by an event listener. + */ + setActiveTab: function(card) { + var me = this, + previous; + + card = me.getComponent(card); + if (card) { + previous = me.getActiveTab(); + + if (previous !== card && me.fireEvent('beforetabchange', me, card, previous) === false) { + return false; + } + + // We may be passed a config object, so add it. + // Without doing a layout! + if (!card.isComponent) { + Ext.suspendLayouts(); + card = me.add(card); + Ext.resumeLayouts(); + } + + // MUST set the activeTab first so that the machinery which listens for show doesn't + // think that the show is "driving" the activation and attempt to recurse into here. + me.activeTab = card; + + // Attempt to switch to the requested card. Suspend layouts because if that was successful + // we have to also update the active tab in the tab bar which is another layout operation + // and we must coalesce them. + Ext.suspendLayouts(); + me.layout.setActiveItem(card); + + // Read the result of the card layout. Events dear boy, events! + card = me.activeTab = me.layout.getActiveItem(); + + // Card switch was not vetoed by an event listener + if (card && card !== previous) { + + // Update the active tab in the tab bar and resume layouts. + me.tabBar.setActiveTab(card.tab); + Ext.resumeLayouts(true); + + // previous will be undefined or this.activeTab at instantiation + if (previous !== card) { + me.fireEvent('tabchange', me, card, previous); + } + } + // Card switch was vetoed by an event listener. Resume layouts (Nothing should have changed on a veto). + else { + Ext.resumeLayouts(true); + } + return card; + } + }, + + /** + * Returns the item that is currently active inside this TabPanel. + * @return {Ext.Component} The currently active item. + */ + getActiveTab: function() { + var me = this, + // Ensure the calculated result references a Component + result = me.getComponent(me.activeTab); + + // Sanitize the result in case the active tab is no longer there. + if (result && me.items.indexOf(result) != -1) { + me.activeTab = result; + } else { + me.activeTab = null; + } + + return me.activeTab; + }, + + /** + * Returns the {@link Ext.tab.Bar} currently used in this TabPanel + * @return {Ext.tab.Bar} The TabBar + */ + getTabBar: function() { + return this.tabBar; + }, + + /** + * @protected + * Makes sure we have a Tab for each item added to the TabPanel + */ + onAdd: function(item, index) { + var me = this, + cfg = item.tabConfig || {}, + defaultConfig = { + xtype: 'tab', + card: item, + disabled: item.disabled, + closable: item.closable, + hidden: item.hidden && !item.hiddenByLayout, // only hide if it wasn't hidden by the layout itself + tooltip: item.tooltip, + tabBar: me.tabBar, + closeText: item.closeText + }; + + cfg = Ext.applyIf(cfg, defaultConfig); + + // Create the correspondiong tab in the tab bar + item.tab = me.tabBar.insert(index, cfg); + + item.on({ + scope : me, + enable: me.onItemEnable, + disable: me.onItemDisable, + beforeshow: me.onItemBeforeShow, + iconchange: me.onItemIconChange, + iconclschange: me.onItemIconClsChange, + titlechange: me.onItemTitleChange + }); + + if (item.isPanel) { + if (me.removePanelHeader) { + if (item.rendered) { + if (item.header) { + item.header.hide(); + } + } else { + item.header = false; + } + } + if (item.isPanel && me.border) { + item.setBorder(false); + } + } + }, + + /** + * @private + * Enable corresponding tab when item is enabled. + */ + onItemEnable: function(item){ + item.tab.enable(); + }, + + /** + * @private + * Disable corresponding tab when item is enabled. + */ + onItemDisable: function(item){ + item.tab.disable(); + }, + + /** + * @private + * Sets activeTab before item is shown. + */ + onItemBeforeShow: function(item) { + if (item !== this.activeTab) { + this.setActiveTab(item); + return false; + } + }, + + /** + * @private + * Update the tab icon when panel icon has been set or changed. + */ + onItemIconChange: function(item, newIcon) { + item.tab.setIcon(newIcon); + }, + + /** + * @private + * Update the tab iconCls when panel iconCls has been set or changed. + */ + onItemIconClsChange: function(item, newIconCls) { + item.tab.setIconCls(newIconCls); + }, + + /** + * @private + * Update the tab title when panel title has been set or changed. + */ + onItemTitleChange: function(item, newTitle) { + item.tab.setText(newTitle); + }, + + /** + * @private + * Unlink the removed child item from its (@link Ext.tab.Tab Tab}. + * + * If we're removing the currently active tab, activate the nearest one. The item is removed when we call super, + * so we can do preprocessing before then to find the card's index + */ + doRemove: function(item, autoDestroy) { + var me = this, + toActivate; + + // Destroying, or removing the last item, nothing to activate + if (me.destroying || me.items.getCount() == 1) { + me.activeTab = null; + } + + // Ask the TabBar which tab to activate next. + // Set the active child panel using the index of that tab + else if ((toActivate = me.tabBar.items.indexOf(me.tabBar.findNextActivatable(item.tab))) !== -1) { + me.setActiveTab(toActivate); + } + this.callParent(arguments); + + // Remove the two references + delete item.tab.card; + delete item.tab; + }, + + /** + * @private + * Makes sure we remove the corresponding Tab when an item is removed + */ + onRemove: function(item, destroying) { + var me = this; + + item.un({ + scope : me, + enable: me.onItemEnable, + disable: me.onItemDisable, + beforeshow: me.onItemBeforeShow + }); + if (!me.destroying && item.tab.ownerCt === me.tabBar) { + me.tabBar.remove(item.tab); + } + } +}); + +/** + * A simple element that adds extra horizontal space between items in a toolbar. + * By default a 2px wide space is added via CSS specification: + * + * .x-toolbar .x-toolbar-spacer { + * width: 2px; + * } + * + * Example: + * + * @example + * Ext.create('Ext.panel.Panel', { + * title: 'Toolbar Spacer Example', + * width: 300, + * height: 200, + * tbar : [ + * 'Item 1', + * { xtype: 'tbspacer' }, // or ' ' + * 'Item 2', + * // space width is also configurable via javascript + * { xtype: 'tbspacer', width: 50 }, // add a 50px space + * 'Item 3' + * ], + * renderTo: Ext.getBody() + * }); + */ +Ext.define('Ext.toolbar.Spacer', { + extend: 'Ext.Component', + alias: 'widget.tbspacer', + alternateClassName: 'Ext.Toolbar.Spacer', + baseCls: Ext.baseCSSPrefix + 'toolbar-spacer', + focusable: false +}); + +/** + * Provides indentation and folder structure markup for a Tree taking into account + * depth and position within the tree hierarchy. + * + * @private + */ +Ext.define('Ext.tree.Column', { + extend: 'Ext.grid.column.Column', + alias: 'widget.treecolumn', + + tdCls: Ext.baseCSSPrefix + 'grid-cell-treecolumn', + + treePrefix: Ext.baseCSSPrefix + 'tree-', + elbowPrefix: Ext.baseCSSPrefix + 'tree-elbow-', + expanderCls: Ext.baseCSSPrefix + 'tree-expander', + imgText: '', + checkboxText: '', + + initComponent: function() { + var me = this; + + me.origRenderer = me.renderer || me.defaultRenderer; + me.origScope = me.scope || window; + + me.renderer = me.treeRenderer; + me.scope = me; + + me.callParent(); + }, + + treeRenderer: function(value, metaData, record, rowIdx, colIdx, store, view){ + var me = this, + buf = [], + format = Ext.String.format, + depth = record.getDepth(), + treePrefix = me.treePrefix, + elbowPrefix = me.elbowPrefix, + expanderCls = me.expanderCls, + imgText = me.imgText, + checkboxText= me.checkboxText, + formattedValue = me.origRenderer.apply(me.origScope, arguments), + blank = Ext.BLANK_IMAGE_URL, + href = record.get('href'), + target = record.get('hrefTarget'), + cls = record.get('cls'); + + while (record) { + if (!record.isRoot() || (record.isRoot() && view.rootVisible)) { + if (record.getDepth() === depth) { + buf.unshift(format(imgText, + treePrefix + 'icon ' + + treePrefix + 'icon' + (record.get('icon') ? '-inline ' : (record.isLeaf() ? '-leaf ' : '-parent ')) + + (record.get('iconCls') || ''), + record.get('icon') || blank + )); + if (record.get('checked') !== null) { + buf.unshift(format( + checkboxText, + (treePrefix + 'checkbox') + (record.get('checked') ? ' ' + treePrefix + 'checkbox-checked' : ''), + record.get('checked') ? 'aria-checked="true"' : '' + )); + if (record.get('checked')) { + metaData.tdCls += (' ' + treePrefix + 'checked'); + } + } + if (record.isLast()) { + if (record.isExpandable()) { + buf.unshift(format(imgText, (elbowPrefix + 'end-plus ' + expanderCls), blank)); + } else { + buf.unshift(format(imgText, (elbowPrefix + 'end'), blank)); + } + + } else { + if (record.isExpandable()) { + buf.unshift(format(imgText, (elbowPrefix + 'plus ' + expanderCls), blank)); + } else { + buf.unshift(format(imgText, (treePrefix + 'elbow'), blank)); + } + } + } else { + if (record.isLast() || record.getDepth() === 0) { + buf.unshift(format(imgText, (elbowPrefix + 'empty'), blank)); + } else if (record.getDepth() !== 0) { + buf.unshift(format(imgText, (elbowPrefix + 'line'), blank)); + } + } + } + record = record.parentNode; + } + if (href) { + buf.push('', formattedValue, ''); + } else { + buf.push(formattedValue); + } + if (cls) { + metaData.tdCls += ' ' + cls; + } + return buf.join(''); + }, + + defaultRenderer: function(value) { + return value; + } +}); + +/** + * Used as a view by {@link Ext.tree.Panel TreePanel}. + */ +Ext.define('Ext.tree.View', { + extend: 'Ext.view.Table', + alias: 'widget.treeview', + + requires: [ + 'Ext.data.NodeStore' + ], + + loadingCls: Ext.baseCSSPrefix + 'grid-tree-loading', + expandedCls: Ext.baseCSSPrefix + 'grid-tree-node-expanded', + leafCls: Ext.baseCSSPrefix + 'grid-tree-node-leaf', + + expanderSelector: '.' + Ext.baseCSSPrefix + 'tree-expander', + checkboxSelector: '.' + Ext.baseCSSPrefix + 'tree-checkbox', + expanderIconOverCls: Ext.baseCSSPrefix + 'tree-expander-over', + + // Class to add to the node wrap element used to hold nodes when a parent is being + // collapsed or expanded. During the animation, UI interaction is forbidden by testing + // for an ancestor node with this class. + nodeAnimWrapCls: Ext.baseCSSPrefix + 'tree-animator-wrap', + + blockRefresh: true, + + /** + * @cfg + * @inheritdoc + */ + loadMask: false, + + /** + * @cfg {Boolean} rootVisible + * False to hide the root node. + */ + rootVisible: true, + + /** + * @cfg {Boolean} deferInitialRefresh + * Must be false for Tree Views because the root node must be rendered in order to be updated with its child nodes. + */ + deferInitialRefresh: false, + + /** + * @cfg {Boolean} animate + * True to enable animated expand/collapse (defaults to the value of {@link Ext#enableFx Ext.enableFx}) + */ + + expandDuration: 250, + collapseDuration: 250, + + toggleOnDblClick: true, + + stripeRows: false, + + // fields that will trigger a change in the ui that aren't likely to be bound to a column + uiFields: ['expanded', 'loaded', 'checked', 'expandable', 'leaf', 'icon', 'iconCls', 'loading', 'qtip', 'qtitle'], + + initComponent: function() { + var me = this, + treeStore = me.panel.getStore(); + + if (me.initialConfig.animate === undefined) { + me.animate = Ext.enableFx; + } + + me.store = new Ext.data.NodeStore({ + treeStore: treeStore, + recursive: true, + rootVisible: me.rootVisible, + listeners: { + beforeexpand: me.onBeforeExpand, + expand: me.onExpand, + beforecollapse: me.onBeforeCollapse, + collapse: me.onCollapse, + write: me.onStoreWrite, + datachanged: me.onStoreDataChanged, + scope: me + } + }); + + if (me.node) { + me.setRootNode(me.node); + } + me.animQueue = {}; + me.animWraps = {}; + me.addEvents( + /** + * @event afteritemexpand + * Fires after an item has been visually expanded and is visible in the tree. + * @param {Ext.data.NodeInterface} node The node that was expanded + * @param {Number} index The index of the node + * @param {HTMLElement} item The HTML element for the node that was expanded + */ + 'afteritemexpand', + /** + * @event afteritemcollapse + * Fires after an item has been visually collapsed and is no longer visible in the tree. + * @param {Ext.data.NodeInterface} node The node that was collapsed + * @param {Number} index The index of the node + * @param {HTMLElement} item The HTML element for the node that was collapsed + */ + 'afteritemcollapse' + ); + me.callParent(arguments); + me.on({ + element: 'el', + scope: me, + delegate: me.expanderSelector, + mouseover: me.onExpanderMouseOver, + mouseout: me.onExpanderMouseOut + }); + me.on({ + element: 'el', + scope: me, + delegate: me.checkboxSelector, + click: me.onCheckboxChange + }); + }, + + getMaskStore: function(){ + return this.panel.getStore(); + }, + + afterComponentLayout: function(){ + this.callParent(arguments); + var stretcher = this.stretcher; + if (stretcher) { + stretcher.setWidth((this.getWidth() - Ext.getScrollbarSize().width)); + } + }, + + processUIEvent: function(e) { + // If the clicked node is part of an animation, ignore the click. + // This is because during a collapse animation, the associated Records + // will already have been removed from the Store, and the event is not processable. + if (e.getTarget('.' + this.nodeAnimWrapCls, this.el)) { + return false; + } + return this.callParent(arguments); + }, + + onClear: function(){ + this.store.removeAll(); + }, + + setRootNode: function(node) { + var me = this; + me.store.setNode(node); + me.node = node; + }, + + onCheckboxChange: function(e, t) { + var me = this, + item = e.getTarget(me.getItemSelector(), me.getTargetEl()); + + if (item) { + me.onCheckChange(me.getRecord(item)); + } + }, + + onCheckChange: function(record){ + var checked = record.get('checked'); + if (Ext.isBoolean(checked)) { + checked = !checked; + record.set('checked', checked); + this.fireEvent('checkchange', record, checked); + } + }, + + getChecked: function() { + var checked = []; + this.node.cascadeBy(function(rec){ + if (rec.get('checked')) { + checked.push(rec); + } + }); + return checked; + }, + + isItemChecked: function(rec){ + return rec.get('checked'); + }, + + /** + * @private + */ + createAnimWrap: function(record, index) { + var thHtml = '', + headerCt = this.panel.headerCt, + headers = headerCt.getGridColumns(), + i = 0, len = headers.length, item, + node = this.getNode(record), + tmpEl, nodeEl; + + for (; i < len; i++) { + item = headers[i]; + thHtml += ''; + } + + nodeEl = Ext.get(node); + tmpEl = nodeEl.insertSibling({ + tag: 'tr', + html: [ + '', + '
    ', + '', + thHtml, + '
    ', + '
    ', + '' + ].join('') + }, 'after'); + + return { + record: record, + node: node, + el: tmpEl, + expanding: false, + collapsing: false, + animating: false, + animateEl: tmpEl.down('div'), + targetEl: tmpEl.down('tbody') + }; + }, + + /** + * @private + * Returns the animation wrapper element for the specified parent node, used to wrap the child nodes as + * they slide up or down during expand/collapse. + * + * @param parent The parent node to be expanded or collapsed + * + * @param [bubble=true] If the passed parent node does not already have a wrap element created, by default + * this function will bubble up to each parent node looking for a valid wrap element to reuse, returning + * the first one it finds. This is the appropriate behavior, e.g., for the collapse direction, so that the + * entire expanded set of branch nodes can collapse as a single unit. + * + * However for expanding each parent node should instead always create its own animation wrap if one + * doesn't exist, so that its children can expand independently of any other nodes -- this is crucial + * when executing the "expand all" behavior. If multiple nodes attempt to reuse the same ancestor wrap + * element concurrently during expansion it will lead to problems as the first animation to complete will + * delete the wrap el out from under other running animations. For that reason, when expanding you should + * always pass `bubble: false` to be on the safe side. + * + * If the passed parent has no wrap (or there is no valid ancestor wrap after bubbling), this function + * will return null and the calling code should then call {@link #createAnimWrap} if needed. + * + * @return {Ext.Element} The wrapping element as created in {@link #createAnimWrap}, or null + */ + getAnimWrap: function(parent, bubble) { + if (!this.animate) { + return null; + } + + var wraps = this.animWraps, + wrap = wraps[parent.internalId]; + + if (bubble !== false) { + while (!wrap && parent) { + parent = parent.parentNode; + if (parent) { + wrap = wraps[parent.internalId]; + } + } + } + return wrap; + }, + + doAdd: function(nodes, records, index) { + // If we are adding records which have a parent that is currently expanding + // lets add them to the animation wrap + var me = this, + record = records[0], + parent = record.parentNode, + a = me.all.elements, + relativeIndex = 0, + animWrap = me.getAnimWrap(parent), + targetEl, children, len; + + if (!animWrap || !animWrap.expanding) { + return me.callParent(arguments); + } + + // We need the parent that has the animWrap, not the nodes parent + parent = animWrap.record; + + // If there is an anim wrap we do our special magic logic + targetEl = animWrap.targetEl; + children = targetEl.dom.childNodes; + + // We subtract 1 from the childrens length because we have a tr in there with the th'es + len = children.length - 1; + + // The relative index is the index in the full flat collection minus the index of the wraps parent + relativeIndex = index - me.indexOf(parent) - 1; + + // If we are adding records to the wrap that have a higher relative index then there are currently children + // it means we have to append the nodes to the wrap + if (!len || relativeIndex >= len) { + targetEl.appendChild(nodes); + } + // If there are already more children then the relative index it means we are adding child nodes of + // some expanded node in the anim wrap. In this case we have to insert the nodes in the right location + else { + // +1 because of the tr with th'es that is already there + Ext.fly(children[relativeIndex + 1]).insertSibling(nodes, 'before', true); + } + + // We also have to update the CompositeElementLite collection of the DataView + Ext.Array.insert(a, index, nodes); + + // If we were in an animation we need to now change the animation + // because the targetEl just got higher. + if (animWrap.isAnimating) { + me.onExpand(parent); + } + }, + + beginBulkUpdate: function(){ + this.bulkUpdate = true; + }, + + endBulkUpdate: function(){ + this.bulkUpdate = false; + }, + + onRemove : function(ds, record, index) { + var me = this, + bulk = me.bulkUpdate; + + if (me.viewReady) { + me.doRemove(record, index); + if (!bulk) { + me.updateIndexes(index); + } + if (me.store.getCount() === 0){ + me.refresh(); + } + if (!bulk) { + me.fireEvent('itemremove', record, index); + } + } + }, + + doRemove: function(record, index) { + // If we are adding records which have a parent that is currently expanding + // lets add them to the animation wrap + var me = this, + all = me.all, + animWrap = me.getAnimWrap(record), + item = all.item(index), + node = item ? item.dom : null; + + if (!node || !animWrap || !animWrap.collapsing) { + return me.callParent(arguments); + } + + animWrap.targetEl.appendChild(node); + all.removeElement(index); + }, + + onBeforeExpand: function(parent, records, index) { + var me = this, + animWrap; + + if (!me.rendered || !me.animate) { + return; + } + + if (me.getNode(parent)) { + animWrap = me.getAnimWrap(parent, false); + if (!animWrap) { + animWrap = me.animWraps[parent.internalId] = me.createAnimWrap(parent); + animWrap.animateEl.setHeight(0); + } + else if (animWrap.collapsing) { + // If we expand this node while it is still expanding then we + // have to remove the nodes from the animWrap. + animWrap.targetEl.select(me.itemSelector).remove(); + } + animWrap.expanding = true; + animWrap.collapsing = false; + } + }, + + onExpand: function(parent) { + var me = this, + queue = me.animQueue, + id = parent.getId(), + node = me.getNode(parent), + index = node ? me.indexOf(node) : -1, + animWrap, + animateEl, + targetEl; + + if (me.singleExpand) { + me.ensureSingleExpand(parent); + } + + // The item is not visible yet + if (index === -1) { + return; + } + + animWrap = me.getAnimWrap(parent, false); + + if (!animWrap) { + me.isExpandingOrCollapsing = false; + me.fireEvent('afteritemexpand', parent, index, node); + return; + } + + animateEl = animWrap.animateEl; + targetEl = animWrap.targetEl; + + animateEl.stopAnimation(); + // @TODO: we are setting it to 1 because quirks mode on IE seems to have issues with 0 + queue[id] = true; + animateEl.slideIn('t', { + duration: me.expandDuration, + listeners: { + scope: me, + lastframe: function() { + // Move all the nodes out of the anim wrap to their proper location + animWrap.el.insertSibling(targetEl.query(me.itemSelector), 'before'); + animWrap.el.remove(); + me.refreshSize(); + delete me.animWraps[animWrap.record.internalId]; + delete queue[id]; + } + }, + callback: function() { + me.isExpandingOrCollapsing = false; + me.fireEvent('afteritemexpand', parent, index, node); + } + }); + + animWrap.isAnimating = true; + }, + + onBeforeCollapse: function(parent, records, index) { + var me = this, + animWrap; + + if (!me.rendered || !me.animate) { + return; + } + + if (me.getNode(parent)) { + animWrap = me.getAnimWrap(parent); + if (!animWrap) { + animWrap = me.animWraps[parent.internalId] = me.createAnimWrap(parent, index); + } + else if (animWrap.expanding) { + // If we collapse this node while it is still expanding then we + // have to remove the nodes from the animWrap. + animWrap.targetEl.select(this.itemSelector).remove(); + } + animWrap.expanding = false; + animWrap.collapsing = true; + } + }, + + onCollapse: function(parent) { + var me = this, + queue = me.animQueue, + id = parent.getId(), + node = me.getNode(parent), + index = node ? me.indexOf(node) : -1, + animWrap = me.getAnimWrap(parent), + animateEl, targetEl; + + // The item has already been removed by a parent node + if (index === -1) { + return; + } + + if (!animWrap) { + me.isExpandingOrCollapsing = false; + me.fireEvent('afteritemcollapse', parent, index, node); + return; + } + + animateEl = animWrap.animateEl; + targetEl = animWrap.targetEl; + + queue[id] = true; + + // @TODO: we are setting it to 1 because quirks mode on IE seems to have issues with 0 + animateEl.stopAnimation(); + animateEl.slideOut('t', { + duration: me.collapseDuration, + listeners: { + scope: me, + lastframe: function() { + animWrap.el.remove(); + me.refreshSize(); + delete me.animWraps[animWrap.record.internalId]; + delete queue[id]; + } + }, + callback: function() { + me.isExpandingOrCollapsing = false; + me.fireEvent('afteritemcollapse', parent, index, node); + } + }); + animWrap.isAnimating = true; + }, + + /** + * Checks if a node is currently undergoing animation + * @private + * @param {Ext.data.Model} node The node + * @return {Boolean} True if the node is animating + */ + isAnimating: function(node) { + return !!this.animQueue[node.getId()]; + }, + + collectData: function(records) { + var data = this.callParent(arguments), + rows = data.rows, + len = rows.length, + i = 0, + row, record; + + for (; i < len; i++) { + row = rows[i]; + record = records[i]; + if (record.get('qtip')) { + row.rowAttr = 'data-qtip="' + record.get('qtip') + '"'; + if (record.get('qtitle')) { + row.rowAttr += ' ' + 'data-qtitle="' + record.get('qtitle') + '"'; + } + } + if (record.isExpanded()) { + row.rowCls = (row.rowCls || '') + ' ' + this.expandedCls; + } + if (record.isLeaf()) { + row.rowCls = (row.rowCls || '') + ' ' + this.leafCls; + } + if (record.isLoading()) { + row.rowCls = (row.rowCls || '') + ' ' + this.loadingCls; + } + } + + return data; + }, + + /** + * Expands a record that is loaded in the view. + * @param {Ext.data.Model} record The record to expand + * @param {Boolean} [deep] True to expand nodes all the way down the tree hierarchy. + * @param {Function} [callback] The function to run after the expand is completed + * @param {Object} [scope] The scope of the callback function. + */ + expand: function(record, deep, callback, scope) { + return record.expand(deep, callback, scope); + }, + + /** + * Collapses a record that is loaded in the view. + * @param {Ext.data.Model} record The record to collapse + * @param {Boolean} [deep] True to collapse nodes all the way up the tree hierarchy. + * @param {Function} [callback] The function to run after the collapse is completed + * @param {Object} [scope] The scope of the callback function. + */ + collapse: function(record, deep, callback, scope) { + return record.collapse(deep, callback, scope); + }, + + /** + * Toggles a record between expanded and collapsed. + * @param {Ext.data.Model} record + * @param {Boolean} [deep] True to collapse nodes all the way up the tree hierarchy. + * @param {Function} [callback] The function to run after the expand/collapse is completed + * @param {Object} [scope] The scope of the callback function. + */ + toggle: function(record, deep, callback, scope) { + var me = this, + doAnimate = !!this.animate; + + // Block toggling if we are already animating an expand or collapse operation. + if (!doAnimate || !this.isExpandingOrCollapsing) { + if (!record.isLeaf()) { + this.isExpandingOrCollapsing = doAnimate; + } + if (record.isExpanded()) { + me.collapse(record, deep, callback, scope); + } else { + me.expand(record, deep, callback, scope); + } + } + }, + + onItemDblClick: function(record, item, index) { + var me = this, + editingPlugin = me.editingPlugin; + + me.callParent(arguments); + if (me.toggleOnDblClick && record.isExpandable() && !(editingPlugin && editingPlugin.clicksToEdit === 2)) { + me.toggle(record); + } + }, + + onBeforeItemMouseDown: function(record, item, index, e) { + if (e.getTarget(this.expanderSelector, item)) { + return false; + } + return this.callParent(arguments); + }, + + onItemClick: function(record, item, index, e) { + if (e.getTarget(this.expanderSelector, item) && record.isExpandable()) { + this.toggle(record, e.ctrlKey); + return false; + } + return this.callParent(arguments); + }, + + onExpanderMouseOver: function(e, t) { + e.getTarget(this.cellSelector, 10, true).addCls(this.expanderIconOverCls); + }, + + onExpanderMouseOut: function(e, t) { + e.getTarget(this.cellSelector, 10, true).removeCls(this.expanderIconOverCls); + }, + + /** + * Gets the base TreeStore from the bound TreePanel. + */ + getTreeStore: function() { + return this.panel.store; + }, + + ensureSingleExpand: function(node) { + var parent = node.parentNode; + if (parent) { + parent.eachChild(function(child) { + if (child !== node && child.isExpanded()) { + child.collapse(); + } + }); + } + }, + + shouldUpdateCell: function(column, changedFieldNames){ + if (changedFieldNames) { + var i = 0, + len = changedFieldNames.length; + + for (; i < len; ++i) { + if (Ext.Array.contains(this.uiFields, changedFieldNames[i])) { + return true; + } + } + } + return this.callParent(arguments); + }, + + /** + * Re-fires the NodeStore's "write" event as a TreeStore event + * @private + * @param {Ext.data.NodeStore} store + * @param {Ext.data.Operation} operation + */ + onStoreWrite: function(store, operation) { + var treeStore = this.panel.store; + treeStore.fireEvent('write', treeStore, operation); + }, + + /** + * Re-fires the NodeStore's "datachanged" event as a TreeStore event + * @private + * @param {Ext.data.NodeStore} store + * @param {Ext.data.Operation} operation + */ + onStoreDataChanged: function(store, operation) { + var treeStore = this.panel.store; + treeStore.fireEvent('datachanged', treeStore); + } +}); + +/** + * The TreePanel provides tree-structured UI representation of tree-structured data. + * A TreePanel must be bound to a {@link Ext.data.TreeStore}. TreePanel's support + * multiple columns through the {@link #columns} configuration. + * + * Simple TreePanel using inline data: + * + * @example + * var store = Ext.create('Ext.data.TreeStore', { + * root: { + * expanded: true, + * children: [ + * { text: "detention", leaf: true }, + * { text: "homework", expanded: true, children: [ + * { text: "book report", leaf: true }, + * { text: "alegrbra", leaf: true} + * ] }, + * { text: "buy lottery tickets", leaf: true } + * ] + * } + * }); + * + * Ext.create('Ext.tree.Panel', { + * title: 'Simple Tree', + * width: 200, + * height: 150, + * store: store, + * rootVisible: false, + * renderTo: Ext.getBody() + * }); + * + * For the tree node config options (like `text`, `leaf`, `expanded`), see the documentation of + * {@link Ext.data.NodeInterface NodeInterface} config options. + */ +Ext.define('Ext.tree.Panel', { + extend: 'Ext.panel.Table', + alias: 'widget.treepanel', + alternateClassName: ['Ext.tree.TreePanel', 'Ext.TreePanel'], + requires: ['Ext.tree.View', 'Ext.selection.TreeModel', 'Ext.tree.Column', 'Ext.data.TreeStore'], + viewType: 'treeview', + selType: 'treemodel', + + treeCls: Ext.baseCSSPrefix + 'tree-panel', + + deferRowRender: false, + + /** + * @cfg {Boolean} rowLines + * False so that rows are not separated by lines. + */ + rowLines: false, + + /** + * @cfg {Boolean} lines + * False to disable tree lines. + */ + lines: true, + + /** + * @cfg {Boolean} useArrows + * True to use Vista-style arrows in the tree. + */ + useArrows: false, + + /** + * @cfg {Boolean} singleExpand + * True if only 1 node per branch may be expanded. + */ + singleExpand: false, + + ddConfig: { + enableDrag: true, + enableDrop: true + }, + + /** + * @cfg {Boolean} animate + * True to enable animated expand/collapse. Defaults to the value of {@link Ext#enableFx}. + */ + + /** + * @cfg {Boolean} rootVisible + * False to hide the root node. + */ + rootVisible: true, + + /** + * @cfg {String} displayField + * The field inside the model that will be used as the node's text. + */ + displayField: 'text', + + /** + * @cfg {Ext.data.Model/Ext.data.NodeInterface/Object} root + * Allows you to not specify a store on this TreePanel. This is useful for creating a simple tree with preloaded + * data without having to specify a TreeStore and Model. A store and model will be created and root will be passed + * to that store. For example: + * + * Ext.create('Ext.tree.Panel', { + * title: 'Simple Tree', + * root: { + * text: "Root node", + * expanded: true, + * children: [ + * { text: "Child 1", leaf: true }, + * { text: "Child 2", leaf: true } + * ] + * }, + * renderTo: Ext.getBody() + * }); + */ + root: null, + + // Required for the Lockable Mixin. These are the configurations which will be copied to the + // normal and locked sub tablepanels + normalCfgCopy: ['displayField', 'root', 'singleExpand', 'useArrows', 'lines', 'rootVisible', 'scroll'], + lockedCfgCopy: ['displayField', 'root', 'singleExpand', 'useArrows', 'lines', 'rootVisible'], + + isTree: true, + + /** + * @cfg {Boolean} hideHeaders + * True to hide the headers. + */ + + /** + * @cfg {Boolean} folderSort + * True to automatically prepend a leaf sorter to the store. + */ + + /** + * @cfg {Ext.data.TreeStore} store (required) + * The {@link Ext.data.TreeStore Store} the tree should use as its data source. + */ + + constructor: function(config) { + config = config || {}; + if (config.animate === undefined) { + config.animate = Ext.isDefined(this.animate) ? this.animate : Ext.enableFx; + } + this.enableAnimations = config.animate; + delete config.animate; + + this.callParent([config]); + }, + + initComponent: function() { + var me = this, + cls = [me.treeCls], + view; + + if (me.useArrows) { + cls.push(Ext.baseCSSPrefix + 'tree-arrows'); + me.lines = false; + } + + if (me.lines) { + cls.push(Ext.baseCSSPrefix + 'tree-lines'); + } else if (!me.useArrows) { + cls.push(Ext.baseCSSPrefix + 'tree-no-lines'); + } + + if (Ext.isString(me.store)) { + me.store = Ext.StoreMgr.lookup(me.store); + } else if (!me.store || Ext.isObject(me.store) && !me.store.isStore) { + me.store = new Ext.data.TreeStore(Ext.apply({}, me.store || {}, { + root: me.root, + fields: me.fields, + model: me.model, + folderSort: me.folderSort + })); + } else if (me.root) { + me.store = Ext.data.StoreManager.lookup(me.store); + me.store.setRootNode(me.root); + if (me.folderSort !== undefined) { + me.store.folderSort = me.folderSort; + me.store.sort(); + } + } + + // I'm not sure if we want to this. It might be confusing + // if (me.initialConfig.rootVisible === undefined && !me.getRootNode()) { + // me.rootVisible = false; + // } + + me.viewConfig = Ext.apply({}, me.viewConfig); + me.viewConfig = Ext.applyIf(me.viewConfig, { + rootVisible: me.rootVisible, + animate: me.enableAnimations, + singleExpand: me.singleExpand, + node: me.store.getRootNode(), + hideHeaders: me.hideHeaders + }); + + me.mon(me.store, { + scope: me, + rootchange: me.onRootChange, + clear: me.onClear + }); + + me.relayEvents(me.store, [ + /** + * @event beforeload + * @inheritdoc Ext.data.TreeStore#beforeload + */ + 'beforeload', + + /** + * @event load + * @inheritdoc Ext.data.TreeStore#load + */ + 'load' + ]); + + me.mon(me.store, { + /** + * @event itemappend + * @inheritdoc Ext.data.TreeStore#append + */ + append: me.createRelayer('itemappend'), + + /** + * @event itemremove + * @inheritdoc Ext.data.TreeStore#remove + */ + remove: me.createRelayer('itemremove'), + + /** + * @event itemmove + * @inheritdoc Ext.data.TreeStore#move + */ + move: me.createRelayer('itemmove', [0, 4]), + + /** + * @event iteminsert + * @inheritdoc Ext.data.TreeStore#insert + */ + insert: me.createRelayer('iteminsert'), + + /** + * @event beforeitemappend + * @inheritdoc Ext.data.TreeStore#beforeappend + */ + beforeappend: me.createRelayer('beforeitemappend'), + + /** + * @event beforeitemremove + * @inheritdoc Ext.data.TreeStore#beforeremove + */ + beforeremove: me.createRelayer('beforeitemremove'), + + /** + * @event beforeitemmove + * @inheritdoc Ext.data.TreeStore#beforemove + */ + beforemove: me.createRelayer('beforeitemmove'), + + /** + * @event beforeiteminsert + * @inheritdoc Ext.data.TreeStore#beforeinsert + */ + beforeinsert: me.createRelayer('beforeiteminsert'), + + /** + * @event itemexpand + * @inheritdoc Ext.data.TreeStore#expand + */ + expand: me.createRelayer('itemexpand', [0, 1]), + + /** + * @event itemcollapse + * @inheritdoc Ext.data.TreeStore#collapse + */ + collapse: me.createRelayer('itemcollapse', [0, 1]), + + /** + * @event beforeitemexpand + * @inheritdoc Ext.data.TreeStore#beforeexpand + */ + beforeexpand: me.createRelayer('beforeitemexpand', [0, 1]), + + /** + * @event beforeitemcollapse + * @inheritdoc Ext.data.TreeStore#beforecollapse + */ + beforecollapse: me.createRelayer('beforeitemcollapse', [0, 1]) + }); + + // If the user specifies the headers collection manually then dont inject our own + if (!me.columns) { + if (me.initialConfig.hideHeaders === undefined) { + me.hideHeaders = true; + } + me.addCls(Ext.baseCSSPrefix + 'autowidth-table'); + me.columns = [{ + xtype : 'treecolumn', + text : 'Name', + width : Ext.isIE6 ? null : 10000, + dataIndex: me.displayField + }]; + } + + if (me.cls) { + cls.push(me.cls); + } + me.cls = cls.join(' '); + me.callParent(); + + view = me.getView(); + + me.relayEvents(view, [ + /** + * @event checkchange + * Fires when a node with a checkbox's checked property changes + * @param {Ext.data.NodeInterface} node The node who's checked property was changed + * @param {Boolean} checked The node's new checked state + */ + 'checkchange', + /** + * @event afteritemexpand + * @inheritdoc Ext.tree.View#afteritemexpand + */ + 'afteritemexpand', + /** + * @event afteritemcollapse + * @inheritdoc Ext.tree.View#afteritemcollapse + */ + 'afteritemcollapse' + ]); + + // If the root is not visible and there is no rootnode defined, then just lets load the store + if (!view.rootVisible && !me.getRootNode()) { + me.setRootNode({ + expanded: true + }); + } + }, + + onClear: function(){ + this.view.onClear(); + }, + + /** + * Sets root node of this tree. + * @param {Ext.data.Model/Ext.data.NodeInterface/Object} root + * @return {Ext.data.NodeInterface} The new root + */ + setRootNode: function() { + return this.store.setRootNode.apply(this.store, arguments); + }, + + /** + * Returns the root node for this tree. + * @return {Ext.data.NodeInterface} + */ + getRootNode: function() { + return this.store.getRootNode(); + }, + + onRootChange: function(root) { + this.view.setRootNode(root); + }, + + /** + * Retrieve an array of checked records. + * @return {Ext.data.NodeInterface[]} An array containing the checked records + */ + getChecked: function() { + return this.getView().getChecked(); + }, + + isItemChecked: function(rec) { + return rec.get('checked'); + }, + + /** + * Expands a record that is loaded in the tree. + * @param {Ext.data.Model} record The record to expand + * @param {Boolean} [deep] True to expand nodes all the way down the tree hierarchy. + * @param {Function} [callback] The function to run after the expand is completed + * @param {Object} [scope] The scope of the callback function. + */ + expandNode: function(record, deep, callback, scope) { + return this.getView().expand(record, deep, callback, scope || this); + }, + + /** + * Collapses a record that is loaded in the tree. + * @param {Ext.data.Model} record The record to collapse + * @param {Boolean} [deep] True to collapse nodes all the way up the tree hierarchy. + * @param {Function} [callback] The function to run after the collapse is completed + * @param {Object} [scope] The scope of the callback function. + */ + collapseNode: function(record, deep, callback, scope) { + return this.getView().collapse(record, deep, callback, scope || this); + }, + + /** + * Expand all nodes + * @param {Function} [callback] A function to execute when the expand finishes. + * @param {Object} [scope] The scope of the callback function + */ + expandAll : function(callback, scope) { + var me = this, + root = me.getRootNode(), + animate = me.enableAnimations, + view = me.getView(); + if (root) { + if (!animate) { + view.beginBulkUpdate(); + } + root.expand(true, callback, scope || me); + if (!animate) { + view.endBulkUpdate(); + } + } + }, + + /** + * Collapse all nodes + * @param {Function} [callback] A function to execute when the collapse finishes. + * @param {Object} [scope] The scope of the callback function + */ + collapseAll : function(callback, scope) { + var me = this, + root = me.getRootNode(), + animate = me.enableAnimations, + view = me.getView(); + + if (root) { + if (!animate) { + view.beginBulkUpdate(); + } + scope = scope || me; + if (view.rootVisible) { + root.collapse(true, callback, scope); + } else { + root.collapseChildren(true, callback, scope); + } + if (!animate) { + view.endBulkUpdate(); + } + } + }, + + /** + * Expand the tree to the path of a particular node. + * @param {String} path The path to expand. The path should include a leading separator. + * @param {String} [field] The field to get the data from. Defaults to the model idProperty. + * @param {String} [separator='/'] A separator to use. + * @param {Function} [callback] A function to execute when the expand finishes. The callback will be called with + * (success, lastNode) where success is if the expand was successful and lastNode is the last node that was expanded. + * @param {Object} [scope] The scope of the callback function + */ + expandPath: function(path, field, separator, callback, scope) { + var me = this, + current = me.getRootNode(), + index = 1, + view = me.getView(), + keys, + expander; + + field = field || me.getRootNode().idProperty; + separator = separator || '/'; + + if (Ext.isEmpty(path)) { + Ext.callback(callback, scope || me, [false, null]); + return; + } + + keys = path.split(separator); + if (current.get(field) != keys[1]) { + // invalid root + Ext.callback(callback, scope || me, [false, current]); + return; + } + + expander = function(){ + if (++index === keys.length) { + Ext.callback(callback, scope || me, [true, current]); + return; + } + var node = current.findChild(field, keys[index]); + if (!node) { + Ext.callback(callback, scope || me, [false, current]); + return; + } + current = node; + current.expand(false, expander); + }; + current.expand(false, expander); + }, + + /** + * Expand the tree to the path of a particular node, then select it. + * @param {String} path The path to select. The path should include a leading separator. + * @param {String} [field] The field to get the data from. Defaults to the model idProperty. + * @param {String} [separator='/'] A separator to use. + * @param {Function} [callback] A function to execute when the select finishes. The callback will be called with + * (bSuccess, oLastNode) where bSuccess is if the select was successful and oLastNode is the last node that was expanded. + * @param {Object} [scope] The scope of the callback function + */ + selectPath: function(path, field, separator, callback, scope) { + var me = this, + root, + keys, + last; + + field = field || me.getRootNode().idProperty; + separator = separator || '/'; + + keys = path.split(separator); + last = keys.pop(); + if (keys.length > 1) { + me.expandPath(keys.join(separator), field, separator, function(success, node){ + var lastNode = node; + if (success && node) { + node = node.findChild(field, last); + if (node) { + me.getSelectionModel().select(node); + Ext.callback(callback, scope || me, [true, node]); + return; + } + } + Ext.callback(callback, scope || me, [false, lastNode]); + }, me); + } else { + root = me.getRootNode(); + if (root.getId() === last) { + me.getSelectionModel().select(root); + Ext.callback(callback, scope || me, [true, root]); + } else { + Ext.callback(callback, scope || me, [false, null]); + } + } + } +}); + +/** + * @private + */ +Ext.define('Ext.view.DragZone', { + extend: 'Ext.dd.DragZone', + containerScroll: false, + + constructor: function(config) { + var me = this, + view, + ownerCt, + el; + + Ext.apply(me, config); + + // Create a ddGroup unless one has been configured. + // User configuration of ddGroups allows users to specify which + // DD instances can interact with each other. Using one + // based on the id of the View would isolate it and mean it can only + // interact with a DropZone on the same View also using a generated ID. + if (!me.ddGroup) { + me.ddGroup = 'view-dd-zone-' + me.view.id; + } + + // Ext.dd.DragDrop instances are keyed by the ID of their encapsulating element. + // So a View's DragZone cannot use the View's main element because the DropZone must use that + // because the DropZone may need to scroll on hover at a scrolling boundary, and it is the View's + // main element which handles scrolling. + // We use the View's parent element to drag from. Ideally, we would use the internal structure, but that + // is transient; DataView's recreate the internal structure dynamically as data changes. + // TODO: Ext 5.0 DragDrop must allow multiple DD objects to share the same element. + view = me.view; + ownerCt = view.ownerCt; + // We don't just grab the parent el, since the parent el may be + // some el injected by the layout + if (ownerCt) { + el = ownerCt.getTargetEl().dom; + } else { + el = view.el.dom.parentNode; + } + me.callParent([el]); + + me.ddel = Ext.get(document.createElement('div')); + me.ddel.addCls(Ext.baseCSSPrefix + 'grid-dd-wrap'); + }, + + init: function(id, sGroup, config) { + this.initTarget(id, sGroup, config); + this.view.mon(this.view, { + itemmousedown: this.onItemMouseDown, + scope: this + }); + }, + + onValidDrop: function(target, e, id) { + this.callParent(); + // focus the view that the node was dropped onto so that keynav will be enabled. + target.el.focus(); + }, + + onItemMouseDown: function(view, record, item, index, e) { + if (!this.isPreventDrag(e, record, item, index)) { + // Since handleMouseDown prevents the default behavior of the event, which + // is to focus the view, we focus the view now. This ensures that the view + // remains focused if the drag is cancelled, or if no drag occurs. + this.view.focus(); + this.handleMouseDown(e); + + // If we want to allow dragging of multi-selections, then veto the following handlers (which, in the absence of ctrlKey, would deselect) + // if the mousedowned record is selected + if (view.getSelectionModel().selectionMode == 'MULTI' && !e.ctrlKey && view.getSelectionModel().isSelected(record)) { + return false; + } + } + }, + + // private template method + isPreventDrag: function(e) { + return false; + }, + + getDragData: function(e) { + var view = this.view, + item = e.getTarget(view.getItemSelector()); + + if (item) { + return { + copy: view.copy || (view.allowCopy && e.ctrlKey), + event: new Ext.EventObjectImpl(e), + view: view, + ddel: this.ddel, + item: item, + records: view.getSelectionModel().getSelection(), + fromPosition: Ext.fly(item).getXY() + }; + } + }, + + onInitDrag: function(x, y) { + var me = this, + data = me.dragData, + view = data.view, + selectionModel = view.getSelectionModel(), + record = view.getRecord(data.item), + e = data.event; + + // Update the selection to match what would have been selected if the user had + // done a full click on the target node rather than starting a drag from it + if (!selectionModel.isSelected(record)) { + selectionModel.select(record, true); + } + data.records = selectionModel.getSelection(); + + me.ddel.update(me.getDragText()); + me.proxy.update(me.ddel.dom); + me.onStartDrag(x, y); + return true; + }, + + getDragText: function() { + var count = this.dragData.records.length; + return Ext.String.format(this.dragText, count, count == 1 ? '' : 's'); + }, + + getRepairXY : function(e, data){ + return data ? data.fromPosition : false; + } +}); + +/** + * @private + */ +Ext.define('Ext.tree.ViewDragZone', { + extend: 'Ext.view.DragZone', + + isPreventDrag: function(e, record) { + return (record.get('allowDrag') === false) || !!e.getTarget(this.view.expanderSelector); + }, + + afterRepair: function() { + var me = this, + view = me.view, + selectedRowCls = view.selectedItemCls, + records = me.dragData.records, + r, + rLen = records.length, + fly = Ext.fly, + item; + + if (Ext.enableFx && me.repairHighlight) { + // Roll through all records and highlight all the ones we attempted to drag. + for (r = 0; r < rLen; r++) { + // anonymous fns below, don't hoist up unless below is wrapped in + // a self-executing function passing in item. + item = view.getNode(records[r]); + + // We must remove the selected row class before animating, because + // the selected row class declares !important on its background-color. + fly(item.firstChild).highlight(me.repairHighlightColor, { + listeners: { + beforeanimate: function() { + if (view.isSelected(item)) { + fly(item).removeCls(selectedRowCls); + } + }, + afteranimate: function() { + if (view.isSelected(item)) { + fly(item).addCls(selectedRowCls); + } + } + } + }); + } + + } + me.dragging = false; + } +}); + +/** + * @private + */ +Ext.define('Ext.tree.ViewDropZone', { + extend: 'Ext.view.DropZone', + + /** + * @cfg {Boolean} allowParentInsert + * Allow inserting a dragged node between an expanded parent node and its first child that will become a + * sibling of the parent when dropped. + */ + allowParentInserts: false, + + /** + * @cfg {String} allowContainerDrop + * True if drops on the tree container (outside of a specific tree node) are allowed. + */ + allowContainerDrops: false, + + /** + * @cfg {String} appendOnly + * True if the tree should only allow append drops (use for trees which are sorted). + */ + appendOnly: false, + + /** + * @cfg {String} expandDelay + * The delay in milliseconds to wait before expanding a target tree node while dragging a droppable node + * over the target. + */ + expandDelay : 500, + + indicatorCls: Ext.baseCSSPrefix + 'tree-ddindicator', + + // private + expandNode : function(node) { + var view = this.view; + if (!node.isLeaf() && !node.isExpanded()) { + view.expand(node); + this.expandProcId = false; + } + }, + + // private + queueExpand : function(node) { + this.expandProcId = Ext.Function.defer(this.expandNode, this.expandDelay, this, [node]); + }, + + // private + cancelExpand : function() { + if (this.expandProcId) { + clearTimeout(this.expandProcId); + this.expandProcId = false; + } + }, + + getPosition: function(e, node) { + var view = this.view, + record = view.getRecord(node), + y = e.getPageY(), + noAppend = record.isLeaf(), + noBelow = false, + region = Ext.fly(node).getRegion(), + fragment; + + // If we are dragging on top of the root node of the tree, we always want to append. + if (record.isRoot()) { + return 'append'; + } + + // Return 'append' if the node we are dragging on top of is not a leaf else return false. + if (this.appendOnly) { + return noAppend ? false : 'append'; + } + + if (!this.allowParentInsert) { + noBelow = record.hasChildNodes() && record.isExpanded(); + } + + fragment = (region.bottom - region.top) / (noAppend ? 2 : 3); + if (y >= region.top && y < (region.top + fragment)) { + return 'before'; + } + else if (!noBelow && (noAppend || (y >= (region.bottom - fragment) && y <= region.bottom))) { + return 'after'; + } + else { + return 'append'; + } + }, + + isValidDropPoint : function(node, position, dragZone, e, data) { + if (!node || !data.item) { + return false; + } + + var view = this.view, + targetNode = view.getRecord(node), + draggedRecords = data.records, + dataLength = draggedRecords.length, + ln = draggedRecords.length, + i, record; + + // No drop position, or dragged records: invalid drop point + if (!(targetNode && position && dataLength)) { + return false; + } + + // If the targetNode is within the folder we are dragging + for (i = 0; i < ln; i++) { + record = draggedRecords[i]; + if (record.isNode && record.contains(targetNode)) { + return false; + } + } + + // Respect the allowDrop field on Tree nodes + if (position === 'append' && targetNode.get('allowDrop') === false) { + return false; + } + else if (position != 'append' && targetNode.parentNode.get('allowDrop') === false) { + return false; + } + + // If the target record is in the dragged dataset, then invalid drop + if (Ext.Array.contains(draggedRecords, targetNode)) { + return false; + } + + // @TODO: fire some event to notify that there is a valid drop possible for the node you're dragging + // Yes: this.fireViewEvent(blah....) fires an event through the owning View. + return true; + }, + + onNodeOver : function(node, dragZone, e, data) { + var position = this.getPosition(e, node), + returnCls = this.dropNotAllowed, + view = this.view, + targetNode = view.getRecord(node), + indicator = this.getIndicator(), + indicatorX = 0, + indicatorY = 0; + + // auto node expand check + this.cancelExpand(); + if (position == 'append' && !this.expandProcId && !Ext.Array.contains(data.records, targetNode) && !targetNode.isLeaf() && !targetNode.isExpanded()) { + this.queueExpand(targetNode); + } + + + if (this.isValidDropPoint(node, position, dragZone, e, data)) { + this.valid = true; + this.currentPosition = position; + this.overRecord = targetNode; + + indicator.setWidth(Ext.fly(node).getWidth()); + indicatorY = Ext.fly(node).getY() - Ext.fly(view.el).getY() - 1; + + /* + * In the code below we show the proxy again. The reason for doing this is showing the indicator will + * call toFront, causing it to get a new z-index which can sometimes push the proxy behind it. We always + * want the proxy to be above, so calling show on the proxy will call toFront and bring it forward. + */ + if (position == 'before') { + returnCls = targetNode.isFirst() ? Ext.baseCSSPrefix + 'tree-drop-ok-above' : Ext.baseCSSPrefix + 'tree-drop-ok-between'; + indicator.showAt(0, indicatorY); + dragZone.proxy.show(); + } else if (position == 'after') { + returnCls = targetNode.isLast() ? Ext.baseCSSPrefix + 'tree-drop-ok-below' : Ext.baseCSSPrefix + 'tree-drop-ok-between'; + indicatorY += Ext.fly(node).getHeight(); + indicator.showAt(0, indicatorY); + dragZone.proxy.show(); + } else { + returnCls = Ext.baseCSSPrefix + 'tree-drop-ok-append'; + // @TODO: set a class on the parent folder node to be able to style it + indicator.hide(); + } + } else { + this.valid = false; + } + + this.currentCls = returnCls; + return returnCls; + }, + + onContainerOver : function(dd, e, data) { + return e.getTarget('.' + this.indicatorCls) ? this.currentCls : this.dropNotAllowed; + }, + + notifyOut: function() { + this.callParent(arguments); + this.cancelExpand(); + }, + + handleNodeDrop : function(data, targetNode, position) { + var me = this, + view = me.view, + parentNode = targetNode.parentNode, + store = view.getStore(), + recordDomNodes = [], + records, i, len, + insertionMethod, argList, + needTargetExpand, + transferData, + processDrop; + + // If the copy flag is set, create a copy of the Models with the same IDs + if (data.copy) { + records = data.records; + data.records = []; + for (i = 0, len = records.length; i < len; i++) { + data.records.push(Ext.apply({}, records[i].data)); + } + } + + // Cancel any pending expand operation + me.cancelExpand(); + + // Grab a reference to the correct node insertion method. + // Create an arg list array intended for the apply method of the + // chosen node insertion method. + // Ensure the target object for the method is referenced by 'targetNode' + if (position == 'before') { + insertionMethod = parentNode.insertBefore; + argList = [null, targetNode]; + targetNode = parentNode; + } + else if (position == 'after') { + if (targetNode.nextSibling) { + insertionMethod = parentNode.insertBefore; + argList = [null, targetNode.nextSibling]; + } + else { + insertionMethod = parentNode.appendChild; + argList = [null]; + } + targetNode = parentNode; + } + else { + if (!targetNode.isExpanded()) { + needTargetExpand = true; + } + insertionMethod = targetNode.appendChild; + argList = [null]; + } + + // A function to transfer the data into the destination tree + transferData = function() { + var node, + r, rLen, color, n; + for (i = 0, len = data.records.length; i < len; i++) { + argList[0] = data.records[i]; + node = insertionMethod.apply(targetNode, argList); + + if (Ext.enableFx && me.dropHighlight) { + recordDomNodes.push(view.getNode(node)); + } + } + + // Kick off highlights after everything's been inserted, so they are + // more in sync without insertion/render overhead. + if (Ext.enableFx && me.dropHighlight) { + //FIXME: the check for n.firstChild is not a great solution here. Ideally the line should simply read + //Ext.fly(n.firstChild) but this yields errors in IE6 and 7. See ticket EXTJSIV-1705 for more details + rLen = recordDomNodes.length; + color = me.dropHighlightColor; + + for (r = 0; r < rLen; r++) { + n = recordDomNodes[r]; + + if (n) { + Ext.fly(n.firstChild ? n.firstChild : n).highlight(color); + } + } + } + }; + + // If dropping right on an unexpanded node, transfer the data after it is expanded. + if (needTargetExpand) { + targetNode.expand(false, transferData); + } + // Otherwise, call the data transfer function immediately + else { + transferData(); + } + } +}); + +/** + * This plugin provides drag and/or drop functionality for a TreeView. + * + * It creates a specialized instance of {@link Ext.dd.DragZone DragZone} which knows how to drag out of a + * {@link Ext.tree.View TreeView} and loads the data object which is passed to a cooperating + * {@link Ext.dd.DragZone DragZone}'s methods with the following properties: + * + * - copy : Boolean + * + * The value of the TreeView's `copy` property, or `true` if the TreeView was configured with `allowCopy: true` *and* + * the control key was pressed when the drag operation was begun. + * + * - view : TreeView + * + * The source TreeView from which the drag originated. + * + * - ddel : HtmlElement + * + * The drag proxy element which moves with the mouse + * + * - item : HtmlElement + * + * The TreeView node upon which the mousedown event was registered. + * + * - records : Array + * + * An Array of {@link Ext.data.Model Models} representing the selected data being dragged from the source TreeView. + * + * It also creates a specialized instance of {@link Ext.dd.DropZone} which cooperates with other DropZones which are + * members of the same ddGroup which processes such data objects. + * + * Adding this plugin to a view means that two new events may be fired from the client TreeView, {@link #beforedrop} and + * {@link #drop}. + * + * Note that the plugin must be added to the tree view, not to the tree panel. For example using viewConfig: + * + * viewConfig: { + * plugins: { ptype: 'treeviewdragdrop' } + * } + */ +Ext.define('Ext.tree.plugin.TreeViewDragDrop', { + extend: 'Ext.AbstractPlugin', + alias: 'plugin.treeviewdragdrop', + + uses: [ + 'Ext.tree.ViewDragZone', + 'Ext.tree.ViewDropZone' + ], + + /** + * @event beforedrop + * + * **This event is fired through the TreeView. Add listeners to the TreeView object** + * + * Fired when a drop gesture has been triggered by a mouseup event in a valid drop position in the TreeView. + * + * @param {HTMLElement} node The TreeView node **if any** over which the mouse was positioned. + * + * Returning `false` to this event signals that the drop gesture was invalid, and if the drag proxy will animate + * back to the point from which the drag began. + * + * Returning `0` To this event signals that the data transfer operation should not take place, but that the gesture + * was valid, and that the repair operation should not take place. + * + * Any other return value continues with the data transfer operation. + * + * @param {Object} data The data object gathered at mousedown time by the cooperating + * {@link Ext.dd.DragZone DragZone}'s {@link Ext.dd.DragZone#getDragData getDragData} method it contains the following + * properties: + * @param {Boolean} data.copy The value of the TreeView's `copy` property, or `true` if the TreeView was configured with + * `allowCopy: true` and the control key was pressed when the drag operation was begun + * @param {Ext.tree.View} data.view The source TreeView from which the drag originated. + * @param {HTMLElement} data.ddel The drag proxy element which moves with the mouse + * @param {HTMLElement} data.item The TreeView node upon which the mousedown event was registered. + * @param {Ext.data.Model[]} data.records An Array of {@link Ext.data.Model Model}s representing the selected data being + * dragged from the source TreeView. + * + * @param {Ext.data.Model} overModel The Model over which the drop gesture took place. + * + * @param {String} dropPosition `"before"`, `"after"` or `"append"` depending on whether the mouse is above or below + * the midline of the node, or the node is a branch node which accepts new child nodes. + * + * @param {Object} dropHandler An object containing methods to complete/cancel the data transfer operation and either + * move or copy Model instances from the source View's Store to the destination View's Store. + * + * This is useful when you want to perform some kind of asynchronous processing before confirming/cancelling + * the drop, such as an {@link Ext.window.MessageBox#confirm confirm} call, or an Ajax request. + * + * Set dropHandler.wait = true in this event handler to delay processing. When you want to complete the event, call + * dropHandler.processDrop(). To cancel the drop, call dropHandler.cancelDrop. + */ + + /** + * @event drop + * + * **This event is fired through the TreeView. Add listeners to the TreeView object** Fired when a drop operation + * has been completed and the data has been moved or copied. + * + * @param {HTMLElement} node The TreeView node **if any** over which the mouse was positioned. + * + * @param {Object} data The data object gathered at mousedown time by the cooperating + * {@link Ext.dd.DragZone DragZone}'s {@link Ext.dd.DragZone#getDragData getDragData} method it contains the following + * properties: + * @param {Boolean} data.copy The value of the TreeView's `copy` property, or `true` if the TreeView was configured with + * `allowCopy: true` and the control key was pressed when the drag operation was begun + * @param {Ext.tree.View} data.view The source TreeView from which the drag originated. + * @param {HTMLElement} data.ddel The drag proxy element which moves with the mouse + * @param {HTMLElement} data.item The TreeView node upon which the mousedown event was registered. + * @param {Ext.data.Model[]} data.records An Array of {@link Ext.data.Model Model}s representing the selected data being + * dragged from the source TreeView. + * + * @param {Ext.data.Model} overModel The Model over which the drop gesture took place. + * + * @param {String} dropPosition `"before"`, `"after"` or `"append"` depending on whether the mouse is above or below + * the midline of the node, or the node is a branch node which accepts new child nodes. + */ + + // + /** + * @cfg + * The text to show while dragging. + * + * Two placeholders can be used in the text: + * + * - `{0}` The number of selected items. + * - `{1}` 's' when more than 1 items (only useful for English). + */ + dragText : '{0} selected node{1}', + // + + /** + * @cfg {Boolean} allowParentInserts + * Allow inserting a dragged node between an expanded parent node and its first child that will become a sibling of + * the parent when dropped. + */ + allowParentInserts: false, + + /** + * @cfg {Boolean} allowContainerDrops + * True if drops on the tree container (outside of a specific tree node) are allowed. + */ + allowContainerDrops: false, + + /** + * @cfg {Boolean} appendOnly + * True if the tree should only allow append drops (use for trees which are sorted). + */ + appendOnly: false, + + /** + * @cfg {String} ddGroup + * A named drag drop group to which this object belongs. If a group is specified, then both the DragZones and + * DropZone used by this plugin will only interact with other drag drop objects in the same group. + */ + ddGroup : "TreeDD", + + /** + * @cfg {String} dragGroup + * The ddGroup to which the DragZone will belong. + * + * This defines which other DropZones the DragZone will interact with. Drag/DropZones only interact with other + * Drag/DropZones which are members of the same ddGroup. + */ + + /** + * @cfg {String} dropGroup + * The ddGroup to which the DropZone will belong. + * + * This defines which other DragZones the DropZone will interact with. Drag/DropZones only interact with other + * Drag/DropZones which are members of the same ddGroup. + */ + + /** + * @cfg {String} expandDelay + * The delay in milliseconds to wait before expanding a target tree node while dragging a droppable node over the + * target. + */ + expandDelay : 1000, + + /** + * @cfg {Boolean} enableDrop + * Set to `false` to disallow the View from accepting drop gestures. + */ + enableDrop: true, + + /** + * @cfg {Boolean} enableDrag + * Set to `false` to disallow dragging items from the View. + */ + enableDrag: true, + + /** + * @cfg {String} nodeHighlightColor + * The color to use when visually highlighting the dragged or dropped node (default value is light blue). + * The color must be a 6 digit hex value, without a preceding '#'. See also {@link #nodeHighlightOnDrop} and + * {@link #nodeHighlightOnRepair}. + */ + nodeHighlightColor: 'c3daf9', + + /** + * @cfg {Boolean} nodeHighlightOnDrop + * Whether or not to highlight any nodes after they are + * successfully dropped on their target. Defaults to the value of `Ext.enableFx`. + * See also {@link #nodeHighlightColor} and {@link #nodeHighlightOnRepair}. + */ + nodeHighlightOnDrop: Ext.enableFx, + + /** + * @cfg {Boolean} nodeHighlightOnRepair + * Whether or not to highlight any nodes after they are + * repaired from an unsuccessful drag/drop. Defaults to the value of `Ext.enableFx`. + * See also {@link #nodeHighlightColor} and {@link #nodeHighlightOnDrop}. + */ + nodeHighlightOnRepair: Ext.enableFx, + + init : function(view) { + view.on('render', this.onViewRender, this, {single: true}); + }, + + /** + * @private + * AbstractComponent calls destroy on all its plugins at destroy time. + */ + destroy: function() { + Ext.destroy(this.dragZone, this.dropZone); + }, + + onViewRender : function(view) { + var me = this; + + if (me.enableDrag) { + me.dragZone = new Ext.tree.ViewDragZone({ + view: view, + ddGroup: me.dragGroup || me.ddGroup, + dragText: me.dragText, + repairHighlightColor: me.nodeHighlightColor, + repairHighlight: me.nodeHighlightOnRepair + }); + } + + if (me.enableDrop) { + me.dropZone = new Ext.tree.ViewDropZone({ + view: view, + ddGroup: me.dropGroup || me.ddGroup, + allowContainerDrops: me.allowContainerDrops, + appendOnly: me.appendOnly, + allowParentInserts: me.allowParentInserts, + expandDelay: me.expandDelay, + dropHighlightColor: me.nodeHighlightColor, + dropHighlight: me.nodeHighlightOnDrop + }); + } + } +}); + +/** + * Utility class for manipulating CSS rules + * @singleton + */ +Ext.define('Ext.util.CSS', (function() { + var rules = null, + doc = document, + camelRe = /(-[a-z])/gi, + camelFn = function(m, a){ return a.charAt(1).toUpperCase(); }; + + return { + + singleton: true, + + constructor: function() { + this.rules = {}; + this.initialized = false; + }, + + /** + * Creates a stylesheet from a text blob of rules. + * These rules will be wrapped in a STYLE tag and appended to the HEAD of the document. + * @param {String} cssText The text containing the css rules + * @param {String} id An id to add to the stylesheet for later removal + * @return {CSSStyleSheet} + */ + createStyleSheet : function(cssText, id) { + var ss, + head = doc.getElementsByTagName("head")[0], + styleEl = doc.createElement("style"); + + styleEl.setAttribute("type", "text/css"); + if (id) { + styleEl.setAttribute("id", id); + } + + if (Ext.isIE) { + head.appendChild(styleEl); + ss = styleEl.styleSheet; + ss.cssText = cssText; + } else { + try{ + styleEl.appendChild(doc.createTextNode(cssText)); + } catch(e) { + styleEl.cssText = cssText; + } + head.appendChild(styleEl); + ss = styleEl.styleSheet ? styleEl.styleSheet : (styleEl.sheet || doc.styleSheets[doc.styleSheets.length-1]); + } + this.cacheStyleSheet(ss); + return ss; + }, + + /** + * Removes a style or link tag by id + * @param {String} id The id of the tag + */ + removeStyleSheet : function(id) { + var existing = document.getElementById(id); + if (existing) { + existing.parentNode.removeChild(existing); + } + }, + + /** + * Dynamically swaps an existing stylesheet reference for a new one + * @param {String} id The id of an existing link tag to remove + * @param {String} url The href of the new stylesheet to include + */ + swapStyleSheet : function(id, url) { + var doc = document, + ss; + this.removeStyleSheet(id); + ss = doc.createElement("link"); + ss.setAttribute("rel", "stylesheet"); + ss.setAttribute("type", "text/css"); + ss.setAttribute("id", id); + ss.setAttribute("href", url); + doc.getElementsByTagName("head")[0].appendChild(ss); + }, + + /** + * Refresh the rule cache if you have dynamically added stylesheets + * @return {Object} An object (hash) of rules indexed by selector + */ + refreshCache : function() { + return this.getRules(true); + }, + + // private + cacheStyleSheet : function(ss) { + if(!rules){ + rules = {}; + } + try {// try catch for cross domain access issue + var ssRules = ss.cssRules || ss.rules, + selectorText, + i = ssRules.length - 1, + j, + selectors; + + for (; i >= 0; --i) { + selectorText = ssRules[i].selectorText; + if (selectorText) { + + // Split in case there are multiple, comma-delimited selectors + selectorText = selectorText.split(','); + selectors = selectorText.length; + for (j = 0; j < selectors; j++) { + rules[Ext.String.trim(selectorText[j]).toLowerCase()] = ssRules[i]; + } + } + } + } catch(e) {} + }, + + /** + * Gets all css rules for the document + * @param {Boolean} refreshCache true to refresh the internal cache + * @return {Object} An object (hash) of rules indexed by selector + */ + getRules : function(refreshCache) { + if (rules === null || refreshCache) { + rules = {}; + var ds = doc.styleSheets, + i = 0, + len = ds.length; + + for (; i < len; i++) { + try { + if (!ds[i].disabled) { + this.cacheStyleSheet(ds[i]); + } + } catch(e) {} + } + } + return rules; + }, + + /** + * Gets an an individual CSS rule by selector(s) + * @param {String/String[]} selector The CSS selector or an array of selectors to try. The first selector that is found is returned. + * @param {Boolean} refreshCache true to refresh the internal cache if you have recently updated any rules or added styles dynamically + * @return {CSSStyleRule} The CSS rule or null if one is not found + */ + getRule: function(selector, refreshCache) { + var rs = this.getRules(refreshCache), + i; + if (!Ext.isArray(selector)) { + return rs[selector.toLowerCase()]; + } + for (i = 0; i < selector.length; i++) { + if (rs[selector[i]]) { + return rs[selector[i].toLowerCase()]; + } + } + return null; + }, + + /** + * Updates a rule property + * @param {String/String[]} selector If it's an array it tries each selector until it finds one. Stops immediately once one is found. + * @param {String} property The css property + * @param {String} value The new value for the property + * @return {Boolean} true If a rule was found and updated + */ + updateRule : function(selector, property, value){ + var rule, i; + if (!Ext.isArray(selector)) { + rule = this.getRule(selector); + if (rule) { + rule.style[property.replace(camelRe, camelFn)] = value; + return true; + } + } else { + for (i = 0; i < selector.length; i++) { + if (this.updateRule(selector[i], property, value)) { + return true; + } + } + } + return false; + } + }; +}())); + +/** + * Utility class for setting/reading values from browser cookies. + * Values can be written using the {@link #set} method. + * Values can be read using the {@link #get} method. + * A cookie can be invalidated on the client machine using the {@link #clear} method. + */ +Ext.define('Ext.util.Cookies', { + singleton: true, + + /** + * Creates a cookie with the specified name and value. Additional settings for the cookie may be optionally specified + * (for example: expiration, access restriction, SSL). + * @param {String} name The name of the cookie to set. + * @param {Object} value The value to set for the cookie. + * @param {Object} [expires] Specify an expiration date the cookie is to persist until. Note that the specified Date + * object will be converted to Greenwich Mean Time (GMT). + * @param {String} [path] Setting a path on the cookie restricts access to pages that match that path. Defaults to all + * pages ('/'). + * @param {String} [domain] Setting a domain restricts access to pages on a given domain (typically used to allow + * cookie access across subdomains). For example, "sencha.com" will create a cookie that can be accessed from any + * subdomain of sencha.com, including www.sencha.com, support.sencha.com, etc. + * @param {Boolean} [secure] Specify true to indicate that the cookie should only be accessible via SSL on a page + * using the HTTPS protocol. Defaults to false. Note that this will only work if the page calling this code uses the + * HTTPS protocol, otherwise the cookie will be created with default options. + */ + set : function(name, value){ + var argv = arguments, + argc = arguments.length, + expires = (argc > 2) ? argv[2] : null, + path = (argc > 3) ? argv[3] : '/', + domain = (argc > 4) ? argv[4] : null, + secure = (argc > 5) ? argv[5] : false; + + document.cookie = name + "=" + escape(value) + ((expires === null) ? "" : ("; expires=" + expires.toGMTString())) + ((path === null) ? "" : ("; path=" + path)) + ((domain === null) ? "" : ("; domain=" + domain)) + ((secure === true) ? "; secure" : ""); + }, + + /** + * Retrieves cookies that are accessible by the current page. If a cookie does not exist, `get()` returns null. The + * following example retrieves the cookie called "valid" and stores the String value in the variable validStatus. + * + * var validStatus = Ext.util.Cookies.get("valid"); + * + * @param {String} name The name of the cookie to get + * @return {Object} Returns the cookie value for the specified name; + * null if the cookie name does not exist. + */ + get : function(name){ + var arg = name + "=", + alen = arg.length, + clen = document.cookie.length, + i = 0, + j = 0; + + while(i < clen){ + j = i + alen; + if(document.cookie.substring(i, j) == arg){ + return this.getCookieVal(j); + } + i = document.cookie.indexOf(" ", i) + 1; + if(i === 0){ + break; + } + } + return null; + }, + + /** + * Removes a cookie with the provided name from the browser + * if found by setting its expiration date to sometime in the past. + * @param {String} name The name of the cookie to remove + * @param {String} [path] The path for the cookie. + * This must be included if you included a path while setting the cookie. + */ + clear : function(name, path){ + if(this.get(name)){ + path = path || '/'; + document.cookie = name + '=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=' + path; + } + }, + + /** + * @private + */ + getCookieVal : function(offset){ + var endstr = document.cookie.indexOf(";", offset); + if(endstr == -1){ + endstr = document.cookie.length; + } + return unescape(document.cookie.substring(offset, endstr)); + } +}); + +/** + * @class Ext.util.Grouper + +Represents a single grouper that can be applied to a Store. The grouper works +in the same fashion as the {@link Ext.util.Sorter}. + + * @markdown + */ + +Ext.define('Ext.util.Grouper', { + + /* Begin Definitions */ + + extend: 'Ext.util.Sorter', + + /* End Definitions */ + + isGrouper: true, + + /** + * Returns the value for grouping to be used. + * @param {Ext.data.Model} instance The Model instance + * @return {String} The group string for this model + */ + getGroupString: function(instance) { + return instance.get(this.property); + } +}); + +/** + * History management component that allows you to register arbitrary tokens that signify application + * history state on navigation actions. You can then handle the history {@link #change} event in order + * to reset your application UI to the appropriate state when the user navigates forward or backward through + * the browser history stack. + * + * ## Initializing + * + * The {@link #init} method of the History object must be called before using History. This sets up the internal + * state and must be the first thing called before using History. + */ +Ext.define('Ext.util.History', { + singleton: true, + alternateClassName: 'Ext.History', + mixins: { + observable: 'Ext.util.Observable' + }, + + /** + * @property + * True to use `window.top.location.hash` or false to use `window.location.hash`. + */ + useTopWindow: true, + + /** + * @property + * The id of the hidden field required for storing the current history token. + */ + fieldId: Ext.baseCSSPrefix + 'history-field', + /** + * @property + * The id of the iframe required by IE to manage the history stack. + */ + iframeId: Ext.baseCSSPrefix + 'history-frame', + + constructor: function() { + var me = this; + me.oldIEMode = Ext.isIE6 || Ext.isIE7 || !Ext.isStrict && Ext.isIE8; + me.iframe = null; + me.hiddenField = null; + me.ready = false; + me.currentToken = null; + me.mixins.observable.constructor.call(me); + }, + + getHash: function() { + var href = window.location.href, + i = href.indexOf("#"); + + return i >= 0 ? href.substr(i + 1) : null; + }, + + setHash: function (hash) { + var me = this, + win = me.useTopWindow ? window.top : window; + try { + win.location.hash = hash; + } catch (e) { + // IE can give Access Denied (esp. in popup windows) + } + }, + + doSave: function() { + this.hiddenField.value = this.currentToken; + }, + + + handleStateChange: function(token) { + this.currentToken = token; + this.fireEvent('change', token); + }, + + updateIFrame: function(token) { + var html = '
    ' + + Ext.util.Format.htmlEncode(token) + + '
    ', + doc; + + try { + doc = this.iframe.contentWindow.document; + doc.open(); + doc.write(html); + doc.close(); + return true; + } catch (e) { + return false; + } + }, + + checkIFrame: function () { + var me = this, + contentWindow = me.iframe.contentWindow, + doc, elem, oldToken, oldHash; + + if (!contentWindow || !contentWindow.document) { + Ext.Function.defer(this.checkIFrame, 10, this); + return; + } + + doc = contentWindow.document; + elem = doc.getElementById("state"); + oldToken = elem ? elem.innerText : null; + oldHash = me.getHash(); + + Ext.TaskManager.start({ + run: function () { + var doc = contentWindow.document, + elem = doc.getElementById("state"), + newToken = elem ? elem.innerText : null, + newHash = me.getHash(); + + if (newToken !== oldToken) { + oldToken = newToken; + me.handleStateChange(newToken); + me.setHash(newToken); + oldHash = newToken; + me.doSave(); + } else if (newHash !== oldHash) { + oldHash = newHash; + me.updateIFrame(newHash); + } + }, + interval: 50, + scope: me + }); + me.ready = true; + me.fireEvent('ready', me); + }, + + startUp: function () { + var me = this, + hash; + + me.currentToken = me.hiddenField.value || this.getHash(); + + if (me.oldIEMode) { + me.checkIFrame(); + } else { + hash = me.getHash(); + Ext.TaskManager.start({ + run: function () { + var newHash = me.getHash(); + if (newHash !== hash) { + hash = newHash; + me.handleStateChange(hash); + me.doSave(); + } + }, + interval: 50, + scope: me + }); + me.ready = true; + me.fireEvent('ready', me); + } + + }, + + /** + * Initializes the global History instance. + * @param {Function} [onReady] A callback function that will be called once the history + * component is fully initialized. + * @param {Object} [scope] The scope (`this` reference) in which the callback is executed. + * Defaults to the browser window. + */ + init: function (onReady, scope) { + var me = this, + DomHelper = Ext.DomHelper; + + if (me.ready) { + Ext.callback(onReady, scope, [me]); + return; + } + + if (!Ext.isReady) { + Ext.onReady(function() { + me.init(onReady, scope); + }); + return; + } + + /* +
    + + +
    + */ + me.hiddenField = Ext.getDom(me.fieldId); + if (!me.hiddenField) { + me.hiddenField = Ext.getBody().createChild({ + id: Ext.id(), + tag: 'form', + cls: Ext.baseCSSPrefix + 'hide-display', + children: [{ + tag: 'input', + type: 'hidden', + id: me.fieldId + }] + }, false, true).firstChild; + } + + if (me.oldIEMode) { + me.iframe = Ext.getDom(me.iframeId); + if (!me.iframe) { + me.iframe = DomHelper.append(me.hiddenField.parentNode, { + tag: 'iframe', + id: me.iframeId, + src: Ext.SSL_SECURE_URL + }); + } + } + + me.addEvents( + /** + * @event ready + * Fires when the Ext.util.History singleton has been initialized and is ready for use. + * @param {Ext.util.History} The Ext.util.History singleton. + */ + 'ready', + /** + * @event change + * Fires when navigation back or forwards within the local page's history occurs. + * @param {String} token An identifier associated with the page state at that point in its history. + */ + 'change' + ); + + if (onReady) { + me.on('ready', onReady, scope, {single: true}); + } + me.startUp(); + }, + + /** + * Add a new token to the history stack. This can be any arbitrary value, although it would + * commonly be the concatenation of a component id and another id marking the specific history + * state of that component. Example usage: + * + * // Handle tab changes on a TabPanel + * tabPanel.on('tabchange', function(tabPanel, tab){ + * Ext.History.add(tabPanel.id + ':' + tab.id); + * }); + * + * @param {String} token The value that defines a particular application-specific history state + * @param {Boolean} [preventDuplicates=true] When true, if the passed token matches the current token + * it will not save a new history step. Set to false if the same state can be saved more than once + * at the same history stack location. + */ + add: function (token, preventDup) { + var me = this; + + if (preventDup !== false) { + if (me.getToken() === token) { + return true; + } + } + + if (me.oldIEMode) { + return me.updateIFrame(token); + } else { + me.setHash(token); + return true; + } + }, + + /** + * Programmatically steps back one step in browser history (equivalent to the user pressing the Back button). + */ + back: function() { + window.history.go(-1); + }, + + /** + * Programmatically steps forward one step in browser history (equivalent to the user pressing the Forward button). + */ + forward: function(){ + window.history.go(1); + }, + + /** + * Retrieves the currently-active history token. + * @return {String} The token + */ + getToken: function() { + return this.ready ? this.currentToken : this.getHash(); + } +}); + +/** + * Represents a 2D point with x and y properties, useful for comparison and instantiation + * from an event: + * + * var point = Ext.util.Point.fromEvent(e); + * + */ +Ext.define('Ext.util.Point', { + + /* Begin Definitions */ + extend: 'Ext.util.Region', + + statics: { + + /** + * Returns a new instance of Ext.util.Point base on the pageX / pageY values of the given event + * @static + * @param {Event} e The event + * @return {Ext.util.Point} + */ + fromEvent: function(e) { + e = (e.changedTouches && e.changedTouches.length > 0) ? e.changedTouches[0] : e; + return new this(e.pageX, e.pageY); + } + }, + + /* End Definitions */ + + /** + * Creates a point from two coordinates. + * @param {Number} x X coordinate. + * @param {Number} y Y coordinate. + */ + constructor: function(x, y) { + this.callParent([y, x, y, x]); + }, + + /** + * Returns a human-eye-friendly string that represents this point, + * useful for debugging + * @return {String} + */ + toString: function() { + return "Point[" + this.x + "," + this.y + "]"; + }, + + /** + * Compare this point and another point + * @param {Ext.util.Point/Object} The point to compare with, either an instance + * of Ext.util.Point or an object with left and top properties + * @return {Boolean} Returns whether they are equivalent + */ + equals: function(p) { + return (this.x == p.x && this.y == p.y); + }, + + /** + * Whether the given point is not away from this point within the given threshold amount. + * @param {Ext.util.Point/Object} p The point to check with, either an instance + * of Ext.util.Point or an object with left and top properties + * @param {Object/Number} threshold Can be either an object with x and y properties or a number + * @return {Boolean} + */ + isWithin: function(p, threshold) { + if (!Ext.isObject(threshold)) { + threshold = { + x: threshold, + y: threshold + }; + } + + return (this.x <= p.x + threshold.x && this.x >= p.x - threshold.x && + this.y <= p.y + threshold.y && this.y >= p.y - threshold.y); + }, + + /** + * Compare this point with another point when the x and y values of both points are rounded. E.g: + * [100.3,199.8] will equals to [100, 200] + * @param {Ext.util.Point/Object} p The point to compare with, either an instance + * of Ext.util.Point or an object with x and y properties + * @return {Boolean} + */ + roundedEquals: function(p) { + return (Math.round(this.x) == Math.round(p.x) && Math.round(this.y) == Math.round(p.y)); + } +}, function() { + /** + * @method + * Alias for {@link #translateBy} + * @inheritdoc Ext.util.Region#translateBy + */ + this.prototype.translate = Ext.util.Region.prototype.translateBy; +}); + +/** + * Produces optimized XTemplates for chunks of tables to be + * used in grids, trees and other table based widgets. + */ +Ext.define('Ext.view.TableChunker', { + singleton: true, + requires: ['Ext.XTemplate'], + metaTableTpl: [ + '{%if (this.openTableWrap)out.push(this.openTableWrap())%}', + '', + '', + '', + '', + '', + '', + '', + '{[this.openRows()]}', + '{row}', + '', + '{[this.embedFeature(values, parent, xindex, xcount)]}', + '', + '{[this.closeRows()]}', + '', + '
    ', + '{%if (this.closeTableWrap)out.push(this.closeTableWrap())%}' + ], + + constructor: function() { + Ext.XTemplate.prototype.recurse = function(values, reference) { + return this.apply(reference ? values[reference] : values); + }; + }, + + embedFeature: function(values, parent, x, xcount) { + var tpl = ''; + if (!values.disabled) { + tpl = values.getFeatureTpl(values, parent, x, xcount); + } + return tpl; + }, + + embedFullWidth: function(values) { + var result = 'style="width:{fullWidth}px;'; + + // If there are no records, we need to give the table a height so that it + // is displayed and causes q scrollbar if the width exceeds the View's width. + if (!values.rowCount) { + result += 'height:1px;'; + } + return result + '"'; + }, + + openRows: function() { + return ''; + }, + + closeRows: function() { + return ''; + }, + + metaRowTpl: [ + '', + '', + '', + '
    {{id}}
    ', + '', + '
    ', + '' + ], + + firstOrLastCls: function(xindex, xcount) { + if (xindex === 1) { + return Ext.view.Table.prototype.firstCls; + } else if (xindex === xcount) { + return Ext.view.Table.prototype.lastCls; + } + }, + + embedRowCls: function() { + return '{rowCls}'; + }, + + embedRowAttr: function() { + return '{rowAttr}'; + }, + + openTableWrap: undefined, + + closeTableWrap: undefined, + + getTableTpl: function(cfg, textOnly) { + var tpl, + tableTplMemberFns = { + openRows: this.openRows, + closeRows: this.closeRows, + embedFeature: this.embedFeature, + embedFullWidth: this.embedFullWidth, + openTableWrap: this.openTableWrap, + closeTableWrap: this.closeTableWrap + }, + tplMemberFns = {}, + features = cfg.features || [], + ln = features.length, + i = 0, + memberFns = { + embedRowCls: this.embedRowCls, + embedRowAttr: this.embedRowAttr, + firstOrLastCls: this.firstOrLastCls, + unselectableAttr: cfg.enableTextSelection ? '' : 'unselectable="on"', + unselectableCls: cfg.enableTextSelection ? '' : Ext.baseCSSPrefix + 'unselectable' + }, + // copy the default + metaRowTpl = Array.prototype.slice.call(this.metaRowTpl, 0), + metaTableTpl; + + for (; i < ln; i++) { + if (!features[i].disabled) { + features[i].mutateMetaRowTpl(metaRowTpl); + Ext.apply(memberFns, features[i].getMetaRowTplFragments()); + Ext.apply(tplMemberFns, features[i].getFragmentTpl()); + Ext.apply(tableTplMemberFns, features[i].getTableFragments()); + } + } + + metaRowTpl = new Ext.XTemplate(metaRowTpl.join(''), memberFns); + cfg.row = metaRowTpl.applyTemplate(cfg); + + metaTableTpl = new Ext.XTemplate(this.metaTableTpl.join(''), tableTplMemberFns); + + tpl = metaTableTpl.applyTemplate(cfg); + + // TODO: Investigate eliminating. + if (!textOnly) { + tpl = new Ext.XTemplate(tpl, tplMemberFns); + } + return tpl; + + } +}); + +//@tail + +/* + * This file represents the very last stage of the Ext definition process and is ensured + * to be included at the end of the build via the 'tail' package of extjs.jsb3. + * + */ + +Ext._endTime = new Date().getTime(); +if (Ext._beforereadyhandler){ + Ext._beforereadyhandler(); +} + diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/history.js/vendor/jquery.js b/sites/all/themes/gui/materiobasetheme/bower_components/history.js/vendor/jquery.js new file mode 100644 index 00000000..5d9ee080 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/history.js/vendor/jquery.js @@ -0,0 +1,5 @@ +/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license + //@ sourceMappingURL=jquery.min.map + */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; + return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
    ",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:b.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("', + 'after'); + + $(this.id).on('load', this.onLoad.bind(this)); + }, + + send: function() { + this.form.set('target', this.id).submit(); + }, + + onLoad: function() { + this.status = 200; + this.readyState = 4; + + this.form.set('target', ''); + + try { + this.responseText = window[this.id].document.documentElement.innerHTML; + } catch(e) { } + + this.onreadystatechange(); + }, + + abort: function() { + $(this.id).set('src', 'about:blank'); + } +}); + + +/** + * The JSONP Xhr request tonnel + * + * Copyright (C) 2010-2011 Nikolay Nemshilov + */ +Xhr.JSONP = new Class({ + include: Xhr.Dummy, + + prefix: 'jsonp', + + /** + * Constructor + * + * @param Xhr the actual xhr request object + * @return void + */ + initialize: function(xhr) { + this.xhr = xhr; + this.name = this.prefix + new Date().getTime(); + this.param = (isString(xhr.jsonp) ? + xhr.jsonp : 'callback') + "=" + this.name; + + this.script = $E('script', { + charset: xhr.encoding, + async: xhr.async + }); + }, + + /** + * saving the url and method for the further use + * + * @param method String request method + * @param address String request url address + * @param Boolean async request marker + * @return void + */ + open: function(method, url, async) { + this.url = url; + this.method = method; + }, + + /** + * Sends the actual request by inserting the script into the document body + * + * @param String data + * @return void + */ + send: function(data) { + window[this.name] = this.finish.bind(this); + + this.script.set('src', this.url + (this.url.include('?') ? '&' : '?') + this.param + "&" + data) + .insertTo($$('script').last(), 'after'); + }, + + /** + * Receives the actual JSON data from the server + * + * @param Object JSON data + * @return void + */ + finish: function(data) { + this.status = 200; + this.readyState = 4; + + this.xhr.json = this.xhr.responseJSON = data; + + this.onreadystatechange(); + }, + + /** + * We can't really cancel a JSONP request + * but we can prevent the default handler to ckick in + * + * @return void + */ + abort: function() { + window[this.name] = function() {}; + } +}); + + +/** + * Basic visual effects class + * + * Credits: + * The basic principles, structures and naming system are inspired by + * - MooTools (http://mootools.net) Copyright (C) Valerio Proietti + * The cubic bezier emulation is backported from + * - Lovely.IO (http://lovely.io) Copytirhgt (C) Nikolay Nemshilov + * + * Copyright (C) 2008-2011 Nikolay V. Nemshilov + */ +var Fx = RightJS.Fx = new Class(Observer, { + extend: { + EVENTS: $w('start finish cancel'), + + // named durations + Durations: { + 'short': 200, + 'normal': 400, + 'long': 800 + }, + + // default options + Options: { + fps: IE8_OR_LESS ? 40 : 60, + duration: 'normal', + transition: 'default', + queue: true, + engine: 'css' + } + }, + + /** + * Basic constructor + * + * @param Object options + */ + initialize: function(element, options) { + this.$super(options); + this.element = $(element); + fx_register(this); + }, + + /** + * starts the transition + * + * @return Fx this + */ + start: function() { + if (fx_add_to_queue(this, arguments)) { return this; } + + fx_mark_current(this); + + this.prepare.apply(this, arguments); + + fx_start_timer(this); + + return this.fire('start', this); + }, + + /** + * finishes the transition + * + * @return Fx this + */ + finish: function() { + fx_stop_timer(this); + fx_remove_from_queue(this); + this.fire('finish'); + fx_run_next(this); + return this; + }, + + /** + * interrupts the transition + * + * NOTE: + * this method cancels all the scheduled effects + * in the element chain + * + * @return Fx this + */ + cancel: function() { + fx_stop_timer(this); + fx_remove_from_queue(this); + return this.fire('cancel'); + }, + +// protected + // dummy method, should be implemented in a subclass + prepare: function() {}, + + // dummy method, processes the element properties + render: function() {} +}), + +// global effects registry +scheduled_fx = [], running_fx = []; + +/** + * Registers the element in the effects queue + * + * @param Fx effect + * @return void + */ +function fx_register(fx) { + var uid = $uid((fx.element || {})._ || {}); + fx.ch = (scheduled_fx[uid] = scheduled_fx[uid] || []); + fx.cr = (running_fx[uid] = running_fx[uid] || []); +} + +/** + * Registers the effect in the effects queue + * + * @param Fx fx + * @param Arguments original arguments list + * @return boolean true if it queued and false if it's ready to go + */ +function fx_add_to_queue(fx, args) { + var chain = fx.ch, queue = fx.options.queue; + + if (!chain || fx.$ch) { + return (fx.$ch = false); + } + + if (queue) { + chain.push([args, fx]); + } + + return queue && chain[0][1] !== fx; +} + +/** + * Puts the fx into the list of currently running effects + * + * @param Fx fx + * @return void + */ +function fx_mark_current(fx) { + if (fx.cr) { + fx.cr.push(fx); + } +} + +/** + * Removes the fx from the queue + * + * @param Fx fx + * @return void + */ +function fx_remove_from_queue(fx) { + var currents = fx.cr; + if (currents) { + currents.splice(currents.indexOf(fx), 1); + } +} + +/** + * Tries to invoke the next effect in the queue + * + * @param Fx fx + * @return void + */ +function fx_run_next(fx) { + var chain = fx.ch, next = chain.shift(); + if ((next = chain[0])) { + next[1].$ch = true; + next[1].start.apply(next[1], next[0]); + } +} + +/** + * Cancels all currently running and scheduled effects + * on the element + * + * @param Element element + * @return void + */ +function fx_cancel_all(element) { + var uid = $uid(element._); + + (running_fx[uid] || []).each('cancel'); + (scheduled_fx[uid] || []).splice(0); +} + +/** + * Initializes the fx rendering timer + * + * @param Fx fx + * @return void + */ +function fx_start_timer(fx) { + var options = fx.options, + duration = Fx.Durations[options.duration] || options.duration, + steps = Math.ceil(duration / 1000 * options.fps), + transition = Bezier_sequence(options.transition, steps), + interval = Math.round(1000 / options.fps), + number = 0; + + fx._timer = setInterval(function() { + if (number === steps) { + fx.finish(); + } else { + fx.render(transition[number]); + number++; + } + }, interval); +} + +/** + * Cancels the Fx rendering timer (if any) + * + * @param Fx fx + * @return void + */ +function fx_stop_timer(fx) { + if (fx._timer) { + clearInterval(fx._timer); + } +} + + +/////////////////////////////////////////////////////////////////////////////// +// CSS3 Cubic Bezier sequentions emulator +// Backport from Lovely.IO (http://lovely.io) +// See also: +// http://st-on-it.blogspot.com/2011/05/calculating-cubic-bezier-function.html +/////////////////////////////////////////////////////////////////////////////// + +// CSS3 cubic-bezier presets +var Bezier_presets = { + 'default': '(.25,.1,.25,1)', + 'linear': '(0,0,1,1)', + 'ease-in': '(.42,0,1,1)', + 'ease-out': '(0,0,.58,1)', + 'ease-in-out': '(.42,0,.58,1)', + 'ease-out-in': '(0,.42,1,.58)' +}, + +// Bezier loockup tables cache +Bezier_cache = {}; + +// builds a loockup table of parametric values with a given size +function Bezier_sequence(params, size) { + params = Bezier_presets[params] || native_fx_functions[params] || params; + params = params.match(/([\d\.]+)[\s,]+([\d\.]+)[\s,]+([\d\.]+)[\s,]+([\d\.]+)/); + params = [0, params[1]-0, params[2]-0, params[3]-0, params[4]-0]; // cleaning up + + var name = params.join(',') + ',' + size, Cx, Bx, Ax, Cy, By, Ay, sequence, step, x; + + function bezier_x(t) { return t * (Cx + t * (Bx + t * Ax)); } + function bezier_y(t) { return t * (Cy + t * (By + t * Ay)); } + + // a quick search for a more or less close parametric + // value using several iterations by Newton's method + + function bezier_x_der(t) { // bezier_x derivative + return Cx + t * (2*Bx + t * 3*Ax) + 1e-3; + } + function find_parametric(t) { + var x=t, i=0, z; + + while (i < 5) { + z = bezier_x(x) - t; + + if (Math.abs(z) < 1e-3) { break; } + + x = x - z/bezier_x_der(x); + i++; + } + + return x; + } + + if (!(name in Bezier_cache)) { + // defining bezier functions in a polynomial form (coz it's faster) + Cx = 3 * params[1]; + Bx = 3 * (params[3] - params[1]) - Cx; + Ax = 1 - Cx - Bx; + + Cy = 3 * params[2]; + By = 3 * (params[4] - params[2]) - Cy; + Ay = 1 - Cy - By; + + + // building the actual lookup table + Bezier_cache[name] = sequence = []; + x=0; step=1/size; + + while (x < 1.0001) { // should include 1.0 + sequence.push(bezier_y(find_parametric(x))); + x += step; + } + } + + return Bezier_cache[name]; +} + +/** + * There are the String unit extensions for the effects library + * + * Copyright (C) 2008-2009 Nikolay V. Nemshilov + */ +String.COLORS = { + maroon: '#800000', + red: '#ff0000', + orange: '#ffA500', + yellow: '#ffff00', + olive: '#808000', + purple: '#800080', + fuchsia: '#ff00ff', + white: '#ffffff', + lime: '#00ff00', + green: '#008000', + navy: '#000080', + blue: '#0000ff', + aqua: '#00ffff', + teal: '#008080', + black: '#000000', + silver: '#c0c0c0', + gray: '#808080', + brown: '#a52a2a' +}; + +String.include({ + /** + * converts a #XXX or rgb(X, X, X) sring into standard #XXXXXX color string + * + * @return String hex color + */ + toHex: function() { + var match = /^#(\w)(\w)(\w)$/.exec(this); + + if (match) { + match = "#"+ match[1]+match[1]+match[2]+match[2]+match[3]+match[3]; + } else if ((match = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/.exec(this))) { + match = "#"+ match.slice(1).map(function(bit) { + bit = (bit-0).toString(16); + return bit.length == 1 ? '0'+bit : bit; + }).join(''); + } else { + match = String.COLORS[this] || this; + } + + return match; + }, + + /** + * converts a hex string into an rgb array + * + * @param boolean flag if need an array + * @return String rgb(R,G,B) or Array [R,G,B] + */ + toRgb: function(array) { + var match = /#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})/i.exec(this.toHex()||''); + + if (match) { + match = match.slice(1).map('toInt', 16); + match = array ? match : 'rgb('+match+')'; + } + + return match; + } +}); + + +/** + * This block contains additional Element shortcuts for effects easy handling + * + * Credits: + * Some ideas are inspired by + * - MooTools (http://mootools.net) Copyright (C) Valerio Proietti + * + * Copyright (C) 2008-2011 Nikolay V. Nemshilov + */ +Element.include({ + /** + * Stops all the visual effects on the element + * + * @return Element this + */ + stop: function() { + fx_cancel_all(this); + return this; + }, + + /** + * hides the element with given visual effect + * + * @param String fx name + * @param Object fx options + * @return Element this + */ + hide: function(fx, options) { + return (fx && this.visible()) ? call_fx(this, fx, ['out', options]) : this.$super(); + }, + + /** + * shows the element with the given visual effect + * + * @param String fx name + * @param Object fx options + * @return Element this + */ + show: function(fx, options) { + return (fx && !this.visible()) ? call_fx(this, fx, ['in', options]) : this.$super(); + }, + + /** + * Toggles the element state with visual effect + * + * @param String fx name + * @param Object fx options + * @return Element this + */ + toggle: function(fx, options) { + return fx ? call_fx(this, fx, ['toggle', options]) : this.$super(); + }, + + /** + * Removes the element out of the DOM structure + * + * @param String fx name + * @param Object fx options + * @return Element this + */ + remove: function(fx, options) { + return (fx && this.visible()) ? call_fx(this, fx, ['out', $ext(options || {}, { + onFinish: this.$super.bind(this) + })]) : this.$super(); + }, + + /** + * runs the Fx.Morth effect to the given style + * + * @param style Object style + * @param options Object optional effect options + * @return Element self + */ + morph: function(style, options) { + return call_fx(this, 'morph', [style, options || {}]); // <- don't replace with arguments + }, + + /** + * highlights the element + * + * @param start String start color + * @param end String optional end color + * @param Object effect options + * @return Element self + */ + highlight: function() { + return call_fx(this, 'highlight', arguments); + }, + + /** + * runs the Fx.Fade effect on the element + * + * @param mixed fade direction 'in' 'out' or a float number + * @return Element self + */ + fade: function() { + return call_fx(this, 'fade', arguments); + }, + + /** + * runs the Fx.Slide effect on the element + * + * @param String 'in' or 'out' + * @param Object effect options + * @return Element self + */ + slide: function() { + return call_fx(this, 'slide', arguments); + }, + + /** + * Starts the smooth scrolling effect + * + * @param position Object {x: NNN, y: NNN} where to scroll + * @param options Object fx-options + * @return Element this + */ + scroll: function(value, options) { + return call_fx(this, 'scroll', [value, options||{}]); + }, + + /** + * wraps the old scroll to be able to run it with fxes + * + * If you send two hashes then will start a smooth scrolling + * otherwise will just jump over with the usual method + * + * @return Element this + */ + scrollTo: function(value, options) { + return isHash(options) ? this.scroll(value, options) : this.$super.apply(this, arguments); + } +}); + +/** + * Calls the visual effect on the element + * + * @param Element context + * @param String fx-name + * @param Object fx-options + * @return Element context + */ +function call_fx(element, name, params) { + var args = $A(params).compact(), + options = isHash(args.last()) ? args.pop() : {}, + fx = new Fx[name.capitalize()](element, options); + + fx.start.apply(fx, args); + + return element; +} + + +/** + * This class provides the basic effect for styles manipulation + * + * Copyright (C) 2008-2011 Nikolay Nemshilov + */ + +///////////////////////////////////////////////////////////////////////////// +// Native css-transitions based implementation +///////////////////////////////////////////////////////////////////////////// + +var native_fx_prefix = ['WebkitT', 'OT', 'MozT', 'MsT', 't'].first(function(name) { + return name + 'ransition' in HTML.style; +}), +native_fx_transition = native_fx_prefix + 'ransition', +native_fx_property = native_fx_transition + 'Property', +native_fx_duration = native_fx_transition + 'Duration', +native_fx_function = native_fx_transition + 'TimingFunction', + +// basic transition algorithm replacements +native_fx_functions = { + Sin: 'cubic-bezier(.3,0,.6,1)', + Cos: 'cubic-bezier(0,.3,.6,0)', + Log: 'cubic-bezier(0,.6,.3,.8)', + Exp: 'cubic-bezier(.6,0,.8,.3)', + Lin: 'cubic-bezier(0,0,1,1)' +}; + +function native_fx_prepare(style) { + var options = this.options, + element = this.element, + element_style = element._.style, + old_style = Object.only( + element.computedStyles(), + native_fx_property, + native_fx_duration, + native_fx_function + ); + + function reset_transitions_style() { + for (var key in old_style) { + element_style[key] = old_style[key]; + } + } + + this + .onFinish(reset_transitions_style) + .onCancel(function() { + element_style[native_fx_property] = 'none'; + setTimeout(reset_transitions_style, 1); + }); + + // setting up the transition + element_style[native_fx_property] = 'all'; + element_style[native_fx_duration] = (Fx.Durations[options.duration] || options.duration) +'ms'; + element_style[native_fx_function] = native_fx_functions[options.transition] || options.transition; + + setTimeout(function() { element.setStyle(style); }, 0); +} + +// NOTE: OPERA's css-transitions are a bit jerky so we disable them by default +Fx.Options.engine = native_fx_prefix === undefined || Browser_Opera ? 'javascript' : 'native'; + +//////////////////////////////////////////////////////////////////////////// +// Manual version +//////////////////////////////////////////////////////////////////////////// + +Fx.Morph = new Class(Fx, { +// protected + + // parepares the effect + prepare: function(style) { + if (this.options.engine === 'native' && native_fx_prefix !== undefined) { + this.render = this.transition = function() {}; + native_fx_prepare.call(this, style); + } else { + var keys = style_keys(style), + before = clone_style(this.element, keys), + after = end_style(this.element, style, keys); + + clean_styles(this.element, before, after); + + this.before = parse_style(before); + this.after = parse_style(after); + } + }, + + render: function(delta) { + var before, after, value, style = this.element._.style, key, i, l; + for (key in this.after) { + before = this.before[key]; + after = this.after[key]; + + for (i=0, l = after.length; i < l; i++) { + value = before[i] + (after[i] - before[i]) * delta; + if (after.r) { + value = Math.round(value); + } + after.t[i*2 + 1] = value; + } + + style[key] = after.t.join(''); + } + } +}); + +// a list of common style names to compact the code a bit +var directions = $w('Top Left Right Bottom'); + +// adds variants to the style names list +function add_variants(keys, key, variants) { + for (var i=0; i < variants.length; i++) { + keys.push(key + variants[i]); + } +} + +// creates an appropriate style-keys list out of the user styles +function style_keys(style) { + var keys = [], border_types = ['Style', 'Color', 'Width'], key, i, j; + + for (key in style) { + if (key.startsWith('border')) { + for (i=0; i < 3; i++) { + for (j=0; j < 4; j++) { + keys.push('border' + directions[j] + border_types[i]); + } + } + } else if (key === 'margin' || key === 'padding') { + add_variants(keys, key, directions); + } else if (key.startsWith('background')) { + add_variants(keys, 'background', ['Color', 'Position', 'PositionX', 'PositionY']); + } else if (key === 'opacity' && IE_OPACITY) { + keys.push('filter'); + } else { + keys.push(key); + } + } + + return keys; +} + + +// checks if the color is transparent +function is_transparent(color) { + return color === 'transparent' || color === 'rgba(0, 0, 0, 0)'; +} + +// adjusts the border-styles +function check_border_styles(element, before, after) { + for (var i=0; i < 4; i++) { + var + bd_style = 'border' + directions[i] + 'Style', + bd_width = 'border' + directions[i] + 'Width', + bd_color = 'border' + directions[i] + 'Color'; + + if (bd_style in before && before[bd_style] != after[bd_style]) { + var style = element._.style; + + if (before[bd_style] == 'none') { + style[bd_width] = '0px'; + } + + style[bd_style] = after[bd_style]; + if (is_transparent(before[bd_color])) { + style[bd_color] = element.getStyle('Color'); + } + } + } +} + +// parses the style hash into a processable format +function parse_style(values) { + var result = {}, re = /[\d\.\-]+/g, m, key, value, i; + + for (key in values) { + m = values[key].match(re); + value = m.map('toFloat'); + value.t = values[key].split(re); + value.r = value.t[0] === 'rgb('; + + if (value.t.length == 1) { value.t.unshift(''); } + + for (i=0; i < value.length; i++) { + value.t.splice(i*2 + 1, 0, value[i]); + } + result[key] = value; + } + + return result; +} + +// cleans up and optimizies the styles +function clean_styles(element, before, after) { + var key; + + for (key in after) { + // checking the height/width options + if ((key == 'width' || key == 'height') && before[key] == 'auto') { + before[key] = element._['offset'+key.capitalize()] + 'px'; + } + } + + // IE opacity filter fix + if (IE_OPACITY && after.filter && !before.filter) { + before.filter = 'alpha(opacity=100)'; + } + + // adjusting the border style + check_border_styles(element, before, after); + + // cleaing up the list + for (key in after) { + // proprocessing colors + if (after[key] !== before[key] && /color/i.test(key)) { + if (Browser_Opera) { + after[key] = after[key].replace(/"/g, ''); + before[key] = before[key].replace(/"/g, ''); + } + + if (!is_transparent(after[key])) { after[key] = after[key].toRgb(); } + if (!is_transparent(before[key])) { before[key] = before[key].toRgb(); } + + if (!after[key] || !before[key]) { after[key] = before[key] = ''; } + } + + // filling up the missing size + if (/\d/.test(after[key]) && !/\d/.test(before[key])) { + before[key] = after[key].replace(/[\d\.\-]+/g, '0'); + } + + // removing unprocessable keys + if (after[key] === before[key] || !/\d/.test(before[key]) || !/\d/.test(after[key])) { + delete(after[key]); + delete(before[key]); + } + } +} + +// cloning the element current styles hash +function clone_style(element, keys) { + var i=0, len = keys.length, style = element.computedStyles(), clean = {}, key; + + for (; i < len; i++) { + key = keys[i]; + + if (key in style) { + clean[key] = ''+ style[key]; + + // libwebkit bug fix for in case of languages pack applied + if (key === 'opacity') { + clean[key] = clean[key].replace(',', '.'); + } + } + } + + return clean; +} + +// calculating the end styles hash +function end_style(element, style, keys) { + var dummy = element.clone() + .setStyle('position:absolute;z-index:-1;visibility:hidden') + .setWidth(element.size().x) + .setStyle(style), after; + + if (element.parent()) { + element.insert(dummy, 'before'); + } + + after = clone_style(dummy, keys); + dummy.remove(); + + return after; +} + + +/** + * the elements hightlighting effect + * + * Copyright (C) 2008-2011 Nikolay V. Nemshilov + */ +Fx.Highlight = new Class(Fx.Morph, { + extend: { + Options: Object.merge(Fx.Options, { + color: '#FF8', + transition: 'Exp' + }) + }, + +// protected + + /** + * starts the transition + * + * @param high String the hightlight color + * @param back String optional fallback color + * @return self + */ + prepare: function(start, end) { + var element = this.element, + element_style = element._.style, + style_name = 'backgroundColor', + end_color = end || element.getStyle(style_name); + + if (is_transparent(end_color)) { + this.onFinish(function() { element_style[style_name] = 'transparent'; }); + + // trying to find the end color + end_color = [element].concat(element.parents()) + .map('getStyle', style_name) + .reject(is_transparent) + .compact().first() || '#FFF'; + } + + element_style[style_name] = (start || this.options.color); + + return this.$super({backgroundColor: end_color}); + } +}); + + +/** + * this is a superclass for the bidirectional effects + * + * Copyright (C) 2008-2011 Nikolay V. Nemshilov + */ +Fx.Twin = new Class(Fx.Morph, { + + /** + * hides the element if it meant to be switched off + * + * @return Fx self + */ + finish: function() { + if (this.how === 'out') { + // calling 'prototype' to prevent circular calls from subclasses + Element.prototype.hide.call(this.element); + } + + return this.$super(); + }, + +// protected + + /** + * assigns the direction of the effect in or out + * + * @param String 'in', 'out' or 'toggle', 'toggle' by default + */ + setHow: function(how) { + this.how = how || 'toggle'; + + if (this.how === 'toggle') { + this.how = this.element.visible() ? 'out' : 'in'; + } + } + +}); + + +/** + * the slide effects wrapper + * + * Copyright (C) 2008-2011 Nikolay V. Nemshilov + */ +Fx.Slide = new Class(Fx.Twin, { + extend: { + Options: Object.merge(Fx.Options, { + direction: 'top' + }) + }, + +// protected + prepare: function(how) { + this.setHow(how); + + // calling 'prototype' to prevent circular calls from subclasses + var element = Element.prototype.show.call(this.element), + element_style = element._.style, + old_styles = Object.only( + element_style, + 'overflow', 'width', 'height', + 'marginTop', 'marginLeft' + ); + + function restore_styles() { + for (var key in old_styles) { + element_style[key] = old_styles[key]; + } + } + + this.onFinish(restore_styles).onCancel(restore_styles); + + element_style.overflow = 'hidden'; + + return this.$super(fx_slide_prepare_styles( + element_style, + element.size(), + this.options.direction, + this.how + )); + } +}); + +function fx_slide_prepare_styles(element_style, size, direction, how) { + var style = {}, + margin_left = element_style.marginLeft.toFloat() || 0, + margin_top = element_style.marginTop.toFloat() || 0, + to_right = direction === 'right', + to_bottom = direction === 'bottom', + vertical = direction === 'top' || to_bottom; + + if (how === 'out') { + style[vertical ? 'height' : 'width'] = '0px'; + + if (to_right) { + style.marginLeft = margin_left + size.x+'px'; + } else if (to_bottom) { + style.marginTop = margin_top + size.y +'px'; + } + } else { + if (vertical) { + style.height = size.y + 'px'; + element_style.height = '0px'; + } else { + style.width = size.x + 'px'; + element_style.width = '0px'; + } + + if (to_right) { + style.marginLeft = margin_left + 'px'; + element_style.marginLeft = margin_left + size.x + 'px'; + } else if (to_bottom) { + style.marginTop = margin_top + 'px'; + element_style.marginTop = margin_top + size.y + 'px'; + } + } + + return style; +} + + +/** + * The opacity effects wrapper + * + * Copyright (C) 2008-2011 Nikolay V. Nemshilov + */ +Fx.Fade = new Class(Fx.Twin, { + prepare: function(how) { + this.setHow(how); + + if (this.how === 'in') { + // calling 'prototype' to prevent circular calls from subclasses + Element.prototype.show.call(this.element.setStyle({opacity: 0})); + } + + return this.$super({opacity: this.how === 'in' ? 1 : 0}); + } +}); + + +/** + * An abstract attributes based Fx + * + * Copyright (C) 2010 Nikolay Nemshilov + */ +Fx.Attr = new Class(Fx, { + + prepare: function(attrs) { + this.before = {}; + this.after = attrs; + var key, element = this.element._; + + for (key in attrs) { + this.before[key] = element[key]; + } + }, + + render: function(delta) { + var key, element = this.element._, before = this.before; + for (key in before) { + element[key] = before[key] + (this.after[key] - before[key]) * delta; + } + } + +}); + +/** + * A smooth scrolling visual effect + * + * Copyright (C) 2009-2011 Nikolay Nemshilov + */ +Fx.Scroll = new Class(Fx.Attr, { + + initialize: function(element, options) { + element = $(element); + // swapping the actual scrollable when it's the window + this.$super( + element instanceof Window ? + element._.document[ + Browser.WebKit ? 'body' : 'documentElement' + ] : element, + options + ); + }, + + prepare: function(value) { + var attrs = {}; + + if ('x' in value) { attrs.scrollLeft = value.x; } + if ('y' in value) { attrs.scrollTop = value.y; } + + this.$super(attrs); + } + +}); + + +/** + * this module handles the work with cookies + * + * Credits: + * Most things in the unit are take from + * - MooTools (http://mootools.net) Copyright (C) Valerio Proietti + * + * Copyright (C) 2008-2010 Nikolay V. Nemshilov + */ +var Cookie = RightJS.Cookie = new Class({ + include: Options, + + extend: { + // sets the cookie + set: function(name, value, options) { + return new this(name, options).set(value); + }, + // gets the cookie + get: function(name, options) { + return new this(name, options).get(); + }, + // deletes the cookie + remove: function(name, options) { + return new this(name, options).remove(); + }, + + // checks if the cookies are enabled + enabled: function() { + document.cookie = "__t=1"; + return document.cookie.indexOf("__t=1")!=-1; + }, + + // some basic options + Options: { + secure: false, + document: document + } + }, + + /** + * constructor + * @param String cookie name + * @param Object options + * @return void + */ + initialize: function(name, options) { + this.name = name; + this.setOptions(options); + }, + + /** + * sets the cookie with the name + * + * @param mixed value + * @return Cookie this + */ + set: function(data) { + if (!isString(data)) { data = JSON.stringify(data); } + + var value = encodeURIComponent(data), options = this.options; + + if (options.domain) { value += '; domain=' + options.domain; } + if (options.path) { value += '; path=' + options.path; } + if (options.duration) { + var date = new Date(); + date.setTime(date.getTime() + options.duration * 24 * 60 * 60 * 1000); + value += '; expires=' + date.toGMTString(); + } + if (options.secure) { value += '; secure'; } + options.document.cookie = this.name + '=' + value; + return this; + }, + + /** + * searches for a cookie with the name + * + * @return mixed saved value or null if nothing found + */ + get: function() { + var value = this.options.document.cookie.match( + '(?:^|;)\\s*' + RegExp.escape(this.name) + '=([^;]*)' + ); + if (value) { + value = decodeURIComponent(value[1]); + try { value = JSON.parse(value); } + catch (e) {} + } + return value || null; + }, + + /** + * removes the cookie + * + * @return Cookie this + */ + remove: function() { + this.options.duration = -1; + return this.set(''); + } +}); + + +// globalizing the top-level variables +$ext(window, Object.without(RightJS, 'version', 'modules')); + +return RightJS; +})(window, document, Object, Array, String, Function, Number, Math); +/** + * The old browsers support patch loading script + * will be included in the core file when it's built + * with the no-olds option + * + * Basically it just checks all the script tags on the page + * finds the core inclusion tag and uses it's src attribute + * to dynamically load the olds patch + * + * Copyright (C) 2009-2011 Nikolay V. Nemshilov + */ +if (RightJS.Browser.OLD) { + (function(d) { + var script = d.createElement('script'), + scripts = d.getElementsByTagName('script'), + rjs_spt = scripts[scripts.length - 1]; + + script.src = rjs_spt.src.replace(/(^|\/)(right)([^\/]+)$/, '$1$2-olds$3'); + + rjs_spt.parentNode.appendChild(script); + })(document); +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/history.js/vendor/zepto.js b/sites/all/themes/gui/materiobasetheme/bower_components/history.js/vendor/zepto.js new file mode 100644 index 00000000..b54eb7a6 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/history.js/vendor/zepto.js @@ -0,0 +1,1355 @@ +/* Zepto v1.0rc1 - polyfill zepto event detect fx ajax form touch - zeptojs.com/license */ +;(function(undefined){ + if (String.prototype.trim === undefined) // fix for iOS 3.2 + String.prototype.trim = function(){ return this.replace(/^\s+/, '').replace(/\s+$/, '') } + + // For iOS 3.x + // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce + if (Array.prototype.reduce === undefined) + Array.prototype.reduce = function(fun){ + if(this === void 0 || this === null) throw new TypeError() + var t = Object(this), len = t.length >>> 0, k = 0, accumulator + if(typeof fun != 'function') throw new TypeError() + if(len == 0 && arguments.length == 1) throw new TypeError() + + if(arguments.length >= 2) + accumulator = arguments[1] + else + do{ + if(k in t){ + accumulator = t[k++] + break + } + if(++k >= len) throw new TypeError() + } while (true) + + while (k < len){ + if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t) + k++ + } + return accumulator + } + +})() +var Zepto = (function() { + var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, + document = window.document, + elementDisplay = {}, classCache = {}, + getComputedStyle = document.defaultView.getComputedStyle, + cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 }, + fragmentRE = /^\s*<(\w+|!)[^>]*>/, + + // Used by `$.zepto.init` to wrap elements, text/comment nodes, document, + // and document fragment node types. + elementTypes = [1, 3, 8, 9, 11], + + adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ], + table = document.createElement('table'), + tableRow = document.createElement('tr'), + containers = { + 'tr': document.createElement('tbody'), + 'tbody': table, 'thead': table, 'tfoot': table, + 'td': tableRow, 'th': tableRow, + '*': document.createElement('div') + }, + readyRE = /complete|loaded|interactive/, + classSelectorRE = /^\.([\w-]+)$/, + idSelectorRE = /^#([\w-]+)$/, + tagSelectorRE = /^[\w-]+$/, + toString = ({}).toString, + zepto = {}, + camelize, uniq, + tempParent = document.createElement('div') + + zepto.matches = function(element, selector) { + if (!element || element.nodeType !== 1) return false + var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector || + element.oMatchesSelector || element.matchesSelector + if (matchesSelector) return matchesSelector.call(element, selector) + // fall back to performing a selector: + var match, parent = element.parentNode, temp = !parent + if (temp) (parent = tempParent).appendChild(element) + match = ~zepto.qsa(parent, selector).indexOf(element) + temp && tempParent.removeChild(element) + return match + } + + function isFunction(value) { return toString.call(value) == "[object Function]" } + function isObject(value) { return value instanceof Object } + function isPlainObject(value) { + var key, ctor + if (toString.call(value) !== "[object Object]") return false + ctor = (isFunction(value.constructor) && value.constructor.prototype) + if (!ctor || !hasOwnProperty.call(ctor, 'isPrototypeOf')) return false + for (key in value); + return key === undefined || hasOwnProperty.call(value, key) + } + function isArray(value) { return value instanceof Array } + function likeArray(obj) { return typeof obj.length == 'number' } + + function compact(array) { return array.filter(function(item){ return item !== undefined && item !== null }) } + function flatten(array) { return array.length > 0 ? [].concat.apply([], array) : array } + camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) } + function dasherize(str) { + return str.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/_/g, '-') + .toLowerCase() + } + uniq = function(array){ return array.filter(function(item, idx){ return array.indexOf(item) == idx }) } + + function classRE(name) { + return name in classCache ? + classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)')) + } + + function maybeAddPx(name, value) { + return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value + } + + function defaultDisplay(nodeName) { + var element, display + if (!elementDisplay[nodeName]) { + element = document.createElement(nodeName) + document.body.appendChild(element) + display = getComputedStyle(element, '').getPropertyValue("display") + element.parentNode.removeChild(element) + display == "none" && (display = "block") + elementDisplay[nodeName] = display + } + return elementDisplay[nodeName] + } + + // `$.zepto.fragment` takes a html string and an optional tag name + // to generate DOM nodes nodes from the given html string. + // The generated DOM nodes are returned as an array. + // This function can be overriden in plugins for example to make + // it compatible with browsers that don't support the DOM fully. + zepto.fragment = function(html, name) { + if (name === undefined) name = fragmentRE.test(html) && RegExp.$1 + if (!(name in containers)) name = '*' + var container = containers[name] + container.innerHTML = '' + html + return $.each(slice.call(container.childNodes), function(){ + container.removeChild(this) + }) + } + + // `$.zepto.Z` swaps out the prototype of the given `dom` array + // of nodes with `$.fn` and thus supplying all the Zepto functions + // to the array. Note that `__proto__` is not supported on Internet + // Explorer. This method can be overriden in plugins. + zepto.Z = function(dom, selector) { + dom = dom || [] + dom.__proto__ = arguments.callee.prototype + dom.selector = selector || '' + return dom + } + + // `$.zepto.isZ` should return `true` if the given object is a Zepto + // collection. This method can be overriden in plugins. + zepto.isZ = function(object) { + return object instanceof zepto.Z + } + + // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and + // takes a CSS selector and an optional context (and handles various + // special cases). + // This method can be overriden in plugins. + zepto.init = function(selector, context) { + // If nothing given, return an empty Zepto collection + if (!selector) return zepto.Z() + // If a function is given, call it when the DOM is ready + else if (isFunction(selector)) return $(document).ready(selector) + // If a Zepto collection is given, juts return it + else if (zepto.isZ(selector)) return selector + else { + var dom + // normalize array if an array of nodes is given + if (isArray(selector)) dom = compact(selector) + // if a JavaScript object is given, return a copy of it + // this is a somewhat peculiar option, but supported by + // jQuery so we'll do it, too + else if (isPlainObject(selector)) + dom = [$.extend({}, selector)], selector = null + // wrap stuff like `document` or `window` + else if (elementTypes.indexOf(selector.nodeType) >= 0 || selector === window) + dom = [selector], selector = null + // If it's a html fragment, create nodes from it + else if (fragmentRE.test(selector)) + dom = zepto.fragment(selector.trim(), RegExp.$1), selector = null + // If there's a context, create a collection on that context first, and select + // nodes from there + else if (context !== undefined) return $(context).find(selector) + // And last but no least, if it's a CSS selector, use it to select nodes. + else dom = zepto.qsa(document, selector) + // create a new Zepto collection from the nodes found + return zepto.Z(dom, selector) + } + } + + // `$` will be the base `Zepto` object. When calling this + // function just call `$.zepto.init, whichs makes the implementation + // details of selecting nodes and creating Zepto collections + // patchable in plugins. + $ = function(selector, context){ + return zepto.init(selector, context) + } + + // Copy all but undefined properties from one or more + // objects to the `target` object. + $.extend = function(target){ + slice.call(arguments, 1).forEach(function(source) { + for (key in source) + if (source[key] !== undefined) + target[key] = source[key] + }) + return target + } + + // `$.zepto.qsa` is Zepto's CSS selector implementation which + // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`. + // This method can be overriden in plugins. + zepto.qsa = function(element, selector){ + var found + return (element === document && idSelectorRE.test(selector)) ? + ( (found = element.getElementById(RegExp.$1)) ? [found] : emptyArray ) : + (element.nodeType !== 1 && element.nodeType !== 9) ? emptyArray : + slice.call( + classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) : + tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) : + element.querySelectorAll(selector) + ) + } + + function filtered(nodes, selector) { + return selector === undefined ? $(nodes) : $(nodes).filter(selector) + } + + function funcArg(context, arg, idx, payload) { + return isFunction(arg) ? arg.call(context, idx, payload) : arg + } + + $.isFunction = isFunction + $.isObject = isObject + $.isArray = isArray + $.isPlainObject = isPlainObject + + $.inArray = function(elem, array, i){ + return emptyArray.indexOf.call(array, elem, i) + } + + $.trim = function(str) { return str.trim() } + + // plugin compatibility + $.uuid = 0 + + $.map = function(elements, callback){ + var value, values = [], i, key + if (likeArray(elements)) + for (i = 0; i < elements.length; i++) { + value = callback(elements[i], i) + if (value != null) values.push(value) + } + else + for (key in elements) { + value = callback(elements[key], key) + if (value != null) values.push(value) + } + return flatten(values) + } + + $.each = function(elements, callback){ + var i, key + if (likeArray(elements)) { + for (i = 0; i < elements.length; i++) + if (callback.call(elements[i], i, elements[i]) === false) return elements + } else { + for (key in elements) + if (callback.call(elements[key], key, elements[key]) === false) return elements + } + + return elements + } + + // Define methods that will be available on all + // Zepto collections + $.fn = { + // Because a collection acts like an array + // copy over these useful array functions. + forEach: emptyArray.forEach, + reduce: emptyArray.reduce, + push: emptyArray.push, + indexOf: emptyArray.indexOf, + concat: emptyArray.concat, + + // `map` and `slice` in the jQuery API work differently + // from their array counterparts + map: function(fn){ + return $.map(this, function(el, i){ return fn.call(el, i, el) }) + }, + slice: function(){ + return $(slice.apply(this, arguments)) + }, + + ready: function(callback){ + if (readyRE.test(document.readyState)) callback($) + else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false) + return this + }, + get: function(idx){ + return idx === undefined ? slice.call(this) : this[idx] + }, + toArray: function(){ return this.get() }, + size: function(){ + return this.length + }, + remove: function(){ + return this.each(function(){ + if (this.parentNode != null) + this.parentNode.removeChild(this) + }) + }, + each: function(callback){ + this.forEach(function(el, idx){ callback.call(el, idx, el) }) + return this + }, + filter: function(selector){ + return $([].filter.call(this, function(element){ + return zepto.matches(element, selector) + })) + }, + add: function(selector,context){ + return $(uniq(this.concat($(selector,context)))) + }, + is: function(selector){ + return this.length > 0 && zepto.matches(this[0], selector) + }, + not: function(selector){ + var nodes=[] + if (isFunction(selector) && selector.call !== undefined) + this.each(function(idx){ + if (!selector.call(this,idx)) nodes.push(this) + }) + else { + var excludes = typeof selector == 'string' ? this.filter(selector) : + (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector) + this.forEach(function(el){ + if (excludes.indexOf(el) < 0) nodes.push(el) + }) + } + return $(nodes) + }, + eq: function(idx){ + return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1) + }, + first: function(){ + var el = this[0] + return el && !isObject(el) ? el : $(el) + }, + last: function(){ + var el = this[this.length - 1] + return el && !isObject(el) ? el : $(el) + }, + find: function(selector){ + var result + if (this.length == 1) result = zepto.qsa(this[0], selector) + else result = this.map(function(){ return zepto.qsa(this, selector) }) + return $(result) + }, + closest: function(selector, context){ + var node = this[0] + while (node && !zepto.matches(node, selector)) + node = node !== context && node !== document && node.parentNode + return $(node) + }, + parents: function(selector){ + var ancestors = [], nodes = this + while (nodes.length > 0) + nodes = $.map(nodes, function(node){ + if ((node = node.parentNode) && node !== document && ancestors.indexOf(node) < 0) { + ancestors.push(node) + return node + } + }) + return filtered(ancestors, selector) + }, + parent: function(selector){ + return filtered(uniq(this.pluck('parentNode')), selector) + }, + children: function(selector){ + return filtered(this.map(function(){ return slice.call(this.children) }), selector) + }, + siblings: function(selector){ + return filtered(this.map(function(i, el){ + return slice.call(el.parentNode.children).filter(function(child){ return child!==el }) + }), selector) + }, + empty: function(){ + return this.each(function(){ this.innerHTML = '' }) + }, + // `pluck` is borrowed from Prototype.js + pluck: function(property){ + return this.map(function(){ return this[property] }) + }, + show: function(){ + return this.each(function(){ + this.style.display == "none" && (this.style.display = null) + if (getComputedStyle(this, '').getPropertyValue("display") == "none") + this.style.display = defaultDisplay(this.nodeName) + }) + }, + replaceWith: function(newContent){ + return this.before(newContent).remove() + }, + wrap: function(newContent){ + return this.each(function(){ + $(this).wrapAll($(newContent)[0].cloneNode(false)) + }) + }, + wrapAll: function(newContent){ + if (this[0]) { + $(this[0]).before(newContent = $(newContent)) + newContent.append(this) + } + return this + }, + unwrap: function(){ + this.parent().each(function(){ + $(this).replaceWith($(this).children()) + }) + return this + }, + clone: function(){ + return $(this.map(function(){ return this.cloneNode(true) })) + }, + hide: function(){ + return this.css("display", "none") + }, + toggle: function(setting){ + return (setting === undefined ? this.css("display") == "none" : setting) ? this.show() : this.hide() + }, + prev: function(){ return $(this.pluck('previousElementSibling')) }, + next: function(){ return $(this.pluck('nextElementSibling')) }, + html: function(html){ + return html === undefined ? + (this.length > 0 ? this[0].innerHTML : null) : + this.each(function(idx){ + var originHtml = this.innerHTML + $(this).empty().append( funcArg(this, html, idx, originHtml) ) + }) + }, + text: function(text){ + return text === undefined ? + (this.length > 0 ? this[0].textContent : null) : + this.each(function(){ this.textContent = text }) + }, + attr: function(name, value){ + var result + return (typeof name == 'string' && value === undefined) ? + (this.length == 0 || this[0].nodeType !== 1 ? undefined : + (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() : + (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result + ) : + this.each(function(idx){ + if (this.nodeType !== 1) return + if (isObject(name)) for (key in name) this.setAttribute(key, name[key]) + else this.setAttribute(name, funcArg(this, value, idx, this.getAttribute(name))) + }) + }, + removeAttr: function(name){ + return this.each(function(){ if (this.nodeType === 1) this.removeAttribute(name) }) + }, + prop: function(name, value){ + return (value === undefined) ? + (this[0] ? this[0][name] : undefined) : + this.each(function(idx){ + this[name] = funcArg(this, value, idx, this[name]) + }) + }, + data: function(name, value){ + var data = this.attr('data-' + dasherize(name), value) + return data !== null ? data : undefined + }, + val: function(value){ + return (value === undefined) ? + (this.length > 0 ? this[0].value : undefined) : + this.each(function(idx){ + this.value = funcArg(this, value, idx, this.value) + }) + }, + offset: function(){ + if (this.length==0) return null + var obj = this[0].getBoundingClientRect() + return { + left: obj.left + window.pageXOffset, + top: obj.top + window.pageYOffset, + width: obj.width, + height: obj.height + } + }, + css: function(property, value){ + if (value === undefined && typeof property == 'string') + return ( + this.length == 0 + ? undefined + : this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property)) + + var css = '' + for (key in property) + if(typeof property[key] == 'string' && property[key] == '') + this.each(function(){ this.style.removeProperty(dasherize(key)) }) + else + css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';' + + if (typeof property == 'string') + if (value == '') + this.each(function(){ this.style.removeProperty(dasherize(property)) }) + else + css = dasherize(property) + ":" + maybeAddPx(property, value) + + return this.each(function(){ this.style.cssText += ';' + css }) + }, + index: function(element){ + return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]) + }, + hasClass: function(name){ + if (this.length < 1) return false + else return classRE(name).test(this[0].className) + }, + addClass: function(name){ + return this.each(function(idx){ + classList = [] + var cls = this.className, newName = funcArg(this, name, idx, cls) + newName.split(/\s+/g).forEach(function(klass){ + if (!$(this).hasClass(klass)) classList.push(klass) + }, this) + classList.length && (this.className += (cls ? " " : "") + classList.join(" ")) + }) + }, + removeClass: function(name){ + return this.each(function(idx){ + if (name === undefined) + return this.className = '' + classList = this.className + funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){ + classList = classList.replace(classRE(klass), " ") + }) + this.className = classList.trim() + }) + }, + toggleClass: function(name, when){ + return this.each(function(idx){ + var newName = funcArg(this, name, idx, this.className) + ;(when === undefined ? !$(this).hasClass(newName) : when) ? + $(this).addClass(newName) : $(this).removeClass(newName) + }) + } + } + + // Generate the `width` and `height` functions + ;['width', 'height'].forEach(function(dimension){ + $.fn[dimension] = function(value){ + var offset, Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() }) + if (value === undefined) return this[0] == window ? window['inner' + Dimension] : + this[0] == document ? document.documentElement['offset' + Dimension] : + (offset = this.offset()) && offset[dimension] + else return this.each(function(idx){ + var el = $(this) + el.css(dimension, funcArg(this, value, idx, el[dimension]())) + }) + } + }) + + function insert(operator, target, node) { + var parent = (operator % 2) ? target : target.parentNode + parent ? parent.insertBefore(node, + !operator ? target.nextSibling : // after + operator == 1 ? parent.firstChild : // prepend + operator == 2 ? target : // before + null) : // append + $(node).remove() + } + + function traverseNode(node, fun) { + fun(node) + for (var key in node.childNodes) traverseNode(node.childNodes[key], fun) + } + + // Generate the `after`, `prepend`, `before`, `append`, + // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods. + adjacencyOperators.forEach(function(key, operator) { + $.fn[key] = function(){ + // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings + var nodes = $.map(arguments, function(n){ return isObject(n) ? n : zepto.fragment(n) }) + if (nodes.length < 1) return this + var size = this.length, copyByClone = size > 1, inReverse = operator < 2 + + return this.each(function(index, target){ + for (var i = 0; i < nodes.length; i++) { + var node = nodes[inReverse ? nodes.length-i-1 : i] + traverseNode(node, function(node){ + if (node.nodeName != null && node.nodeName.toUpperCase() === 'SCRIPT' && (!node.type || node.type === 'text/javascript')) + window['eval'].call(window, node.innerHTML) + }) + if (copyByClone && index < size - 1) node = node.cloneNode(true) + insert(operator, target, node) + } + }) + } + + $.fn[(operator % 2) ? key+'To' : 'insert'+(operator ? 'Before' : 'After')] = function(html){ + $(html)[key](this) + return this + } + }) + + zepto.Z.prototype = $.fn + + // Export internal API functions in the `$.zepto` namespace + zepto.camelize = camelize + zepto.uniq = uniq + $.zepto = zepto + + return $ +})() + +// If `$` is not yet defined, point it to `Zepto` +window.Zepto = Zepto +'$' in window || (window.$ = Zepto) +;(function($){ + var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={} + + specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents' + + function zid(element) { + return element._zid || (element._zid = _zid++) + } + function findHandlers(element, event, fn, selector) { + event = parse(event) + if (event.ns) var matcher = matcherFor(event.ns) + return (handlers[zid(element)] || []).filter(function(handler) { + return handler + && (!event.e || handler.e == event.e) + && (!event.ns || matcher.test(handler.ns)) + && (!fn || zid(handler.fn) === zid(fn)) + && (!selector || handler.sel == selector) + }) + } + function parse(event) { + var parts = ('' + event).split('.') + return {e: parts[0], ns: parts.slice(1).sort().join(' ')} + } + function matcherFor(ns) { + return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)') + } + + function eachEvent(events, fn, iterator){ + if ($.isObject(events)) $.each(events, iterator) + else events.split(/\s/).forEach(function(type){ iterator(type, fn) }) + } + + function add(element, events, fn, selector, getDelegate, capture){ + capture = !!capture + var id = zid(element), set = (handlers[id] || (handlers[id] = [])) + eachEvent(events, fn, function(event, fn){ + var delegate = getDelegate && getDelegate(fn, event), + callback = delegate || fn + var proxyfn = function (event) { + var result = callback.apply(element, [event].concat(event.data)) + if (result === false) event.preventDefault() + return result + } + var handler = $.extend(parse(event), {fn: fn, proxy: proxyfn, sel: selector, del: delegate, i: set.length}) + set.push(handler) + element.addEventListener(handler.e, proxyfn, capture) + }) + } + function remove(element, events, fn, selector){ + var id = zid(element) + eachEvent(events || '', fn, function(event, fn){ + findHandlers(element, event, fn, selector).forEach(function(handler){ + delete handlers[id][handler.i] + element.removeEventListener(handler.e, handler.proxy, false) + }) + }) + } + + $.event = { add: add, remove: remove } + + $.proxy = function(fn, context) { + if ($.isFunction(fn)) { + var proxyFn = function(){ return fn.apply(context, arguments) } + proxyFn._zid = zid(fn) + return proxyFn + } else if (typeof context == 'string') { + return $.proxy(fn[context], fn) + } else { + throw new TypeError("expected function") + } + } + + $.fn.bind = function(event, callback){ + return this.each(function(){ + add(this, event, callback) + }) + } + $.fn.unbind = function(event, callback){ + return this.each(function(){ + remove(this, event, callback) + }) + } + $.fn.one = function(event, callback){ + return this.each(function(i, element){ + add(this, event, callback, null, function(fn, type){ + return function(){ + var result = fn.apply(element, arguments) + remove(element, type, fn) + return result + } + }) + }) + } + + var returnTrue = function(){return true}, + returnFalse = function(){return false}, + eventMethods = { + preventDefault: 'isDefaultPrevented', + stopImmediatePropagation: 'isImmediatePropagationStopped', + stopPropagation: 'isPropagationStopped' + } + function createProxy(event) { + var proxy = $.extend({originalEvent: event}, event) + $.each(eventMethods, function(name, predicate) { + proxy[name] = function(){ + this[predicate] = returnTrue + return event[name].apply(event, arguments) + } + proxy[predicate] = returnFalse + }) + return proxy + } + + // emulates the 'defaultPrevented' property for browsers that have none + function fix(event) { + if (!('defaultPrevented' in event)) { + event.defaultPrevented = false + var prevent = event.preventDefault + event.preventDefault = function() { + this.defaultPrevented = true + prevent.call(this) + } + } + } + + $.fn.delegate = function(selector, event, callback){ + var capture = false + if(event == 'blur' || event == 'focus'){ + if($.iswebkit) + event = event == 'blur' ? 'focusout' : event == 'focus' ? 'focusin' : event + else + capture = true + } + + return this.each(function(i, element){ + add(element, event, callback, selector, function(fn){ + return function(e){ + var evt, match = $(e.target).closest(selector, element).get(0) + if (match) { + evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element}) + return fn.apply(match, [evt].concat([].slice.call(arguments, 1))) + } + } + }, capture) + }) + } + $.fn.undelegate = function(selector, event, callback){ + return this.each(function(){ + remove(this, event, callback, selector) + }) + } + + $.fn.live = function(event, callback){ + $(document.body).delegate(this.selector, event, callback) + return this + } + $.fn.die = function(event, callback){ + $(document.body).undelegate(this.selector, event, callback) + return this + } + + $.fn.on = function(event, selector, callback){ + return selector == undefined || $.isFunction(selector) ? + this.bind(event, selector) : this.delegate(selector, event, callback) + } + $.fn.off = function(event, selector, callback){ + return selector == undefined || $.isFunction(selector) ? + this.unbind(event, selector) : this.undelegate(selector, event, callback) + } + + $.fn.trigger = function(event, data){ + if (typeof event == 'string') event = $.Event(event) + fix(event) + event.data = data + return this.each(function(){ + // items in the collection might not be DOM elements + // (todo: possibly support events on plain old objects) + if('dispatchEvent' in this) this.dispatchEvent(event) + }) + } + + // triggers event handlers on current element just as if an event occurred, + // doesn't trigger an actual event, doesn't bubble + $.fn.triggerHandler = function(event, data){ + var e, result + this.each(function(i, element){ + e = createProxy(typeof event == 'string' ? $.Event(event) : event) + e.data = data + e.target = element + $.each(findHandlers(element, event.type || event), function(i, handler){ + result = handler.proxy(e) + if (e.isImmediatePropagationStopped()) return false + }) + }) + return result + } + + // shortcut methods for `.bind(event, fn)` for each event type + ;('focusin focusout load resize scroll unload click dblclick '+ + 'mousedown mouseup mousemove mouseover mouseout '+ + 'change select keydown keypress keyup error').split(' ').forEach(function(event) { + $.fn[event] = function(callback){ return this.bind(event, callback) } + }) + + ;['focus', 'blur'].forEach(function(name) { + $.fn[name] = function(callback) { + if (callback) this.bind(name, callback) + else if (this.length) try { this.get(0)[name]() } catch(e){} + return this + } + }) + + $.Event = function(type, props) { + var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true + if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name]) + event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null) + return event + } + +})(Zepto) +;(function($){ + function detect(ua){ + var os = this.os = {}, browser = this.browser = {}, + webkit = ua.match(/WebKit\/([\d.]+)/), + android = ua.match(/(Android)\s+([\d.]+)/), + ipad = ua.match(/(iPad).*OS\s([\d_]+)/), + iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/), + webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/), + touchpad = webos && ua.match(/TouchPad/), + kindle = ua.match(/Kindle\/([\d.]+)/), + silk = ua.match(/Silk\/([\d._]+)/), + blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/) + + // todo clean this up with a better OS/browser + // separation. we need to discern between multiple + // browsers on android, and decide if kindle fire in + // silk mode is android or not + + if (browser.webkit = !!webkit) browser.version = webkit[1] + + if (android) os.android = true, os.version = android[2] + if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.') + if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.') + if (webos) os.webos = true, os.version = webos[2] + if (touchpad) os.touchpad = true + if (blackberry) os.blackberry = true, os.version = blackberry[2] + if (kindle) os.kindle = true, os.version = kindle[1] + if (silk) browser.silk = true, browser.version = silk[1] + if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true + } + + detect.call($, navigator.userAgent) + // make available to unit tests + $.__detect = detect + +})(Zepto) +;(function($, undefined){ + var prefix = '', eventPrefix, endEventName, endAnimationName, + vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' }, + document = window.document, testEl = document.createElement('div'), + supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, + clearProperties = {} + + function downcase(str) { return str.toLowerCase() } + function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) } + + $.each(vendors, function(vendor, event){ + if (testEl.style[vendor + 'TransitionProperty'] !== undefined) { + prefix = '-' + downcase(vendor) + '-' + eventPrefix = event + return false + } + }) + + clearProperties[prefix + 'transition-property'] = + clearProperties[prefix + 'transition-duration'] = + clearProperties[prefix + 'transition-timing-function'] = + clearProperties[prefix + 'animation-name'] = + clearProperties[prefix + 'animation-duration'] = '' + + $.fx = { + off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined), + cssPrefix: prefix, + transitionEnd: normalizeEvent('TransitionEnd'), + animationEnd: normalizeEvent('AnimationEnd') + } + + $.fn.animate = function(properties, duration, ease, callback){ + if ($.isObject(duration)) + ease = duration.easing, callback = duration.complete, duration = duration.duration + if (duration) duration = duration / 1000 + return this.anim(properties, duration, ease, callback) + } + + $.fn.anim = function(properties, duration, ease, callback){ + var transforms, cssProperties = {}, key, that = this, wrappedCallback, endEvent = $.fx.transitionEnd + if (duration === undefined) duration = 0.4 + if ($.fx.off) duration = 0 + + if (typeof properties == 'string') { + // keyframe animation + cssProperties[prefix + 'animation-name'] = properties + cssProperties[prefix + 'animation-duration'] = duration + 's' + endEvent = $.fx.animationEnd + } else { + // CSS transitions + for (key in properties) + if (supportedTransforms.test(key)) { + transforms || (transforms = []) + transforms.push(key + '(' + properties[key] + ')') + } + else cssProperties[key] = properties[key] + + if (transforms) cssProperties[prefix + 'transform'] = transforms.join(' ') + if (!$.fx.off && typeof properties === 'object') { + cssProperties[prefix + 'transition-property'] = Object.keys(properties).join(', ') + cssProperties[prefix + 'transition-duration'] = duration + 's' + cssProperties[prefix + 'transition-timing-function'] = (ease || 'linear') + } + } + + wrappedCallback = function(event){ + if (typeof event !== 'undefined') { + if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below" + $(event.target).unbind(endEvent, arguments.callee) + } + $(this).css(clearProperties) + callback && callback.call(this) + } + if (duration > 0) this.bind(endEvent, wrappedCallback) + + setTimeout(function() { + that.css(cssProperties) + if (duration <= 0) setTimeout(function() { + that.each(function(){ wrappedCallback.call(this) }) + }, 0) + }, 0) + + return this + } + + testEl = null +})(Zepto) +;(function($){ + var jsonpID = 0, + isObject = $.isObject, + document = window.document, + key, + name, + rscript = /)<[^<]*)*<\/script>/gi, + scriptTypeRE = /^(?:text|application)\/javascript/i, + xmlTypeRE = /^(?:text|application)\/xml/i, + jsonType = 'application/json', + htmlType = 'text/html', + blankRE = /^\s*$/ + + // trigger a custom event and return false if it was cancelled + function triggerAndReturn(context, eventName, data) { + var event = $.Event(eventName) + $(context).trigger(event, data) + return !event.defaultPrevented + } + + // trigger an Ajax "global" event + function triggerGlobal(settings, context, eventName, data) { + if (settings.global) return triggerAndReturn(context || document, eventName, data) + } + + // Number of active Ajax requests + $.active = 0 + + function ajaxStart(settings) { + if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart') + } + function ajaxStop(settings) { + if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop') + } + + // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable + function ajaxBeforeSend(xhr, settings) { + var context = settings.context + if (settings.beforeSend.call(context, xhr, settings) === false || + triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) + return false + + triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]) + } + function ajaxSuccess(data, xhr, settings) { + var context = settings.context, status = 'success' + settings.success.call(context, data, status, xhr) + triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]) + ajaxComplete(status, xhr, settings) + } + // type: "timeout", "error", "abort", "parsererror" + function ajaxError(error, type, xhr, settings) { + var context = settings.context + settings.error.call(context, xhr, type, error) + triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error]) + ajaxComplete(type, xhr, settings) + } + // status: "success", "notmodified", "error", "timeout", "abort", "parsererror" + function ajaxComplete(status, xhr, settings) { + var context = settings.context + settings.complete.call(context, xhr, status) + triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]) + ajaxStop(settings) + } + + // Empty function, used as default callback + function empty() {} + + $.ajaxJSONP = function(options){ + var callbackName = 'jsonp' + (++jsonpID), + script = document.createElement('script'), + abort = function(){ + $(script).remove() + if (callbackName in window) window[callbackName] = empty + ajaxComplete('abort', xhr, options) + }, + xhr = { abort: abort }, abortTimeout + + if (options.error) script.onerror = function() { + xhr.abort() + options.error() + } + + window[callbackName] = function(data){ + clearTimeout(abortTimeout) + $(script).remove() + delete window[callbackName] + ajaxSuccess(data, xhr, options) + } + + serializeData(options) + script.src = options.url.replace(/=\?/, '=' + callbackName) + $('head').append(script) + + if (options.timeout > 0) abortTimeout = setTimeout(function(){ + xhr.abort() + ajaxComplete('timeout', xhr, options) + }, options.timeout) + + return xhr + } + + $.ajaxSettings = { + // Default type of request + type: 'GET', + // Callback that is executed before request + beforeSend: empty, + // Callback that is executed if the request succeeds + success: empty, + // Callback that is executed the the server drops error + error: empty, + // Callback that is executed on request complete (both: error and success) + complete: empty, + // The context for the callbacks + context: null, + // Whether to trigger "global" Ajax events + global: true, + // Transport + xhr: function () { + return new window.XMLHttpRequest() + }, + // MIME types mapping + accepts: { + script: 'text/javascript, application/javascript', + json: jsonType, + xml: 'application/xml, text/xml', + html: htmlType, + text: 'text/plain' + }, + // Whether the request is to another domain + crossDomain: false, + // Default timeout + timeout: 0 + } + + function mimeToDataType(mime) { + return mime && ( mime == htmlType ? 'html' : + mime == jsonType ? 'json' : + scriptTypeRE.test(mime) ? 'script' : + xmlTypeRE.test(mime) && 'xml' ) || 'text' + } + + function appendQuery(url, query) { + return (url + '&' + query).replace(/[&?]{1,2}/, '?') + } + + // serialize payload and append it to the URL for GET requests + function serializeData(options) { + if (isObject(options.data)) options.data = $.param(options.data) + if (options.data && (!options.type || options.type.toUpperCase() == 'GET')) + options.url = appendQuery(options.url, options.data) + } + + $.ajax = function(options){ + var settings = $.extend({}, options || {}) + for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key] + + ajaxStart(settings) + + if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) && + RegExp.$2 != window.location.host + + var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url) + if (dataType == 'jsonp' || hasPlaceholder) { + if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?') + return $.ajaxJSONP(settings) + } + + if (!settings.url) settings.url = window.location.toString() + serializeData(settings) + + var mime = settings.accepts[dataType], + baseHeaders = { }, + protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol, + xhr = $.ajaxSettings.xhr(), abortTimeout + + if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest' + if (mime) { + baseHeaders['Accept'] = mime + if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0] + xhr.overrideMimeType && xhr.overrideMimeType(mime) + } + if (settings.contentType || (settings.data && settings.type.toUpperCase() != 'GET')) + baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded') + settings.headers = $.extend(baseHeaders, settings.headers || {}) + + xhr.onreadystatechange = function(){ + if (xhr.readyState == 4) { + clearTimeout(abortTimeout) + var result, error = false + if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) { + dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type')) + result = xhr.responseText + + try { + if (dataType == 'script') (1,eval)(result) + else if (dataType == 'xml') result = xhr.responseXML + else if (dataType == 'json') result = blankRE.test(result) ? null : JSON.parse(result) + } catch (e) { error = e } + + if (error) ajaxError(error, 'parsererror', xhr, settings) + else ajaxSuccess(result, xhr, settings) + } else { + ajaxError(null, 'error', xhr, settings) + } + } + } + + var async = 'async' in settings ? settings.async : true + xhr.open(settings.type, settings.url, async) + + for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name]) + + if (ajaxBeforeSend(xhr, settings) === false) { + xhr.abort() + return false + } + + if (settings.timeout > 0) abortTimeout = setTimeout(function(){ + xhr.onreadystatechange = empty + xhr.abort() + ajaxError(null, 'timeout', xhr, settings) + }, settings.timeout) + + // avoid sending empty string (#319) + xhr.send(settings.data ? settings.data : null) + return xhr + } + + $.get = function(url, success){ return $.ajax({ url: url, success: success }) } + + $.post = function(url, data, success, dataType){ + if ($.isFunction(data)) dataType = dataType || success, success = data, data = null + return $.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType }) + } + + $.getJSON = function(url, success){ + return $.ajax({ url: url, success: success, dataType: 'json' }) + } + + $.fn.load = function(url, success){ + if (!this.length) return this + var self = this, parts = url.split(/\s/), selector + if (parts.length > 1) url = parts[0], selector = parts[1] + $.get(url, function(response){ + self.html(selector ? + $(document.createElement('div')).html(response.replace(rscript, "")).find(selector).html() + : response) + success && success.call(self) + }) + return this + } + + var escape = encodeURIComponent + + function serialize(params, obj, traditional, scope){ + var array = $.isArray(obj) + $.each(obj, function(key, value) { + if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']' + // handle data in serializeArray() format + if (!scope && array) params.add(value.name, value.value) + // recurse into nested objects + else if (traditional ? $.isArray(value) : isObject(value)) + serialize(params, value, traditional, key) + else params.add(key, value) + }) + } + + $.param = function(obj, traditional){ + var params = [] + params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) } + serialize(params, obj, traditional) + return params.join('&').replace('%20', '+') + } +})(Zepto) +;(function ($) { + $.fn.serializeArray = function () { + var result = [], el + $( Array.prototype.slice.call(this.get(0).elements) ).each(function () { + el = $(this) + var type = el.attr('type') + if (this.nodeName.toLowerCase() != 'fieldset' && + !this.disabled && type != 'submit' && type != 'reset' && type != 'button' && + ((type != 'radio' && type != 'checkbox') || this.checked)) + result.push({ + name: el.attr('name'), + value: el.val() + }) + }) + return result + } + + $.fn.serialize = function () { + var result = [] + this.serializeArray().forEach(function (elm) { + result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) ) + }) + return result.join('&') + } + + $.fn.submit = function (callback) { + if (callback) this.bind('submit', callback) + else if (this.length) { + var event = $.Event('submit') + this.eq(0).trigger(event) + if (!event.defaultPrevented) this.get(0).submit() + } + return this + } + +})(Zepto) +;(function($){ + var touch = {}, touchTimeout + + function parentIfText(node){ + return 'tagName' in node ? node : node.parentNode + } + + function swipeDirection(x1, x2, y1, y2){ + var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2) + return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down') + } + + var longTapDelay = 750, longTapTimeout + + function longTap(){ + longTapTimeout = null + if (touch.last) { + touch.el.trigger('longTap') + touch = {} + } + } + + function cancelLongTap(){ + if (longTapTimeout) clearTimeout(longTapTimeout) + longTapTimeout = null + } + + $(document).ready(function(){ + var now, delta + + $(document.body).bind('touchstart', function(e){ + now = Date.now() + delta = now - (touch.last || now) + touch.el = $(parentIfText(e.touches[0].target)) + touchTimeout && clearTimeout(touchTimeout) + touch.x1 = e.touches[0].pageX + touch.y1 = e.touches[0].pageY + if (delta > 0 && delta <= 250) touch.isDoubleTap = true + touch.last = now + longTapTimeout = setTimeout(longTap, longTapDelay) + }).bind('touchmove', function(e){ + cancelLongTap() + touch.x2 = e.touches[0].pageX + touch.y2 = e.touches[0].pageY + }).bind('touchend', function(e){ + cancelLongTap() + + // double tap (tapped twice within 250ms) + if (touch.isDoubleTap) { + touch.el.trigger('doubleTap') + touch = {} + + // swipe + } else if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) || + (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30)) { + touch.el.trigger('swipe') && + touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2))) + touch = {} + + // normal tap + } else if ('last' in touch) { + touch.el.trigger('tap') + + touchTimeout = setTimeout(function(){ + touchTimeout = null + touch.el.trigger('singleTap') + touch = {} + }, 250) + } + }).bind('touchcancel', function(){ + if (touchTimeout) clearTimeout(touchTimeout) + if (longTapTimeout) clearTimeout(longTapTimeout) + longTapTimeout = touchTimeout = null + touch = {} + }) + }) + + ;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){ + $.fn[m] = function(callback){ return this.bind(m, callback) } + }) +})(Zepto) \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/.bower.json new file mode 100644 index 00000000..c4d54c35 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/.bower.json @@ -0,0 +1,33 @@ +{ + "name": "jquery-placeholder", + "description": "A jQuery plugin that enables HTML5 placeholder behavior for browsers that aren’t trying hard enough yet", + "version": "2.0.9", + "license": "MIT", + "main": [ + "jquery.placeholder.js" + ], + "keywords": [ + "form", + "placeholder", + "jQuery", + "jquery-plugin" + ], + "dependencies": { + "jquery": ">=1.6" + }, + "ignore": [ + "*", + "!/bower.json", + "!/jquery.placeholder.js" + ], + "homepage": "https://github.com/mathiasbynens/jquery-placeholder", + "_release": "2.0.9", + "_resolution": { + "type": "version", + "tag": "v2.0.9", + "commit": "510a577397713934b46ccaceaa7ecc558cff313a" + }, + "_source": "git://github.com/mathiasbynens/jquery-placeholder.git", + "_target": "~2.0.7", + "_originalSource": "jquery-placeholder" +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/bower.json new file mode 100644 index 00000000..8b55e159 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/bower.json @@ -0,0 +1,21 @@ +{ + "name": "jquery-placeholder", + "description": "A jQuery plugin that enables HTML5 placeholder behavior for browsers that aren’t trying hard enough yet", + "version": "2.0.8", + "license": "MIT", + "main": ["jquery.placeholder.js"], + "keywords": [ + "form", + "placeholder", + "jQuery", + "jquery-plugin" + ], + "dependencies": { + "jquery": ">=1.6" + }, + "ignore": [ + "*", + "!/bower.json", + "!/jquery.placeholder.js" + ] +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/jquery.placeholder.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/jquery.placeholder.js new file mode 100644 index 00000000..94e5e2ca --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery-placeholder/jquery.placeholder.js @@ -0,0 +1,192 @@ +/*! http://mths.be/placeholder v2.0.9 by @mathias */ +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function($) { + + // Opera Mini v7 doesn’t support placeholder although its DOM seems to indicate so + var isOperaMini = Object.prototype.toString.call(window.operamini) == '[object OperaMini]'; + var isInputSupported = 'placeholder' in document.createElement('input') && !isOperaMini; + var isTextareaSupported = 'placeholder' in document.createElement('textarea') && !isOperaMini; + var valHooks = $.valHooks; + var propHooks = $.propHooks; + var hooks; + var placeholder; + + if (isInputSupported && isTextareaSupported) { + + placeholder = $.fn.placeholder = function() { + return this; + }; + + placeholder.input = placeholder.textarea = true; + + } else { + + placeholder = $.fn.placeholder = function() { + var $this = this; + $this + .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]') + .not('.placeholder') + .bind({ + 'focus.placeholder': clearPlaceholder, + 'blur.placeholder': setPlaceholder + }) + .data('placeholder-enabled', true) + .trigger('blur.placeholder'); + return $this; + }; + + placeholder.input = isInputSupported; + placeholder.textarea = isTextareaSupported; + + hooks = { + 'get': function(element) { + var $element = $(element); + + var $passwordInput = $element.data('placeholder-password'); + if ($passwordInput) { + return $passwordInput[0].value; + } + + return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value; + }, + 'set': function(element, value) { + var $element = $(element); + + var $passwordInput = $element.data('placeholder-password'); + if ($passwordInput) { + return $passwordInput[0].value = value; + } + + if (!$element.data('placeholder-enabled')) { + return element.value = value; + } + if (value === '') { + element.value = value; + // Issue #56: Setting the placeholder causes problems if the element continues to have focus. + if (element != safeActiveElement()) { + // We can't use `triggerHandler` here because of dummy text/password inputs :( + setPlaceholder.call(element); + } + } else if ($element.hasClass('placeholder')) { + clearPlaceholder.call(element, true, value) || (element.value = value); + } else { + element.value = value; + } + // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363 + return $element; + } + }; + + if (!isInputSupported) { + valHooks.input = hooks; + propHooks.value = hooks; + } + if (!isTextareaSupported) { + valHooks.textarea = hooks; + propHooks.value = hooks; + } + + $(function() { + // Look for forms + $(document).delegate('form', 'submit.placeholder', function() { + // Clear the placeholder values so they don't get submitted + var $inputs = $('.placeholder', this).each(clearPlaceholder); + setTimeout(function() { + $inputs.each(setPlaceholder); + }, 10); + }); + }); + + // Clear placeholder values upon page reload + $(window).bind('beforeunload.placeholder', function() { + $('.placeholder').each(function() { + this.value = ''; + }); + }); + + } + + function args(elem) { + // Return an object of element attributes + var newAttrs = {}; + var rinlinejQuery = /^jQuery\d+$/; + $.each(elem.attributes, function(i, attr) { + if (attr.specified && !rinlinejQuery.test(attr.name)) { + newAttrs[attr.name] = attr.value; + } + }); + return newAttrs; + } + + function clearPlaceholder(event, value) { + var input = this; + var $input = $(input); + if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) { + if ($input.data('placeholder-password')) { + $input = $input.hide().nextAll('input[type="password"]:first').show().attr('id', $input.removeAttr('id').data('placeholder-id')); + // If `clearPlaceholder` was called from `$.valHooks.input.set` + if (event === true) { + return $input[0].value = value; + } + $input.focus(); + } else { + input.value = ''; + $input.removeClass('placeholder'); + input == safeActiveElement() && input.select(); + } + } + } + + function setPlaceholder() { + var $replacement; + var input = this; + var $input = $(input); + var id = this.id; + if (input.value === '') { + if (input.type === 'password') { + if (!$input.data('placeholder-textinput')) { + try { + $replacement = $input.clone().attr({ 'type': 'text' }); + } catch(e) { + $replacement = $('').attr($.extend(args(this), { 'type': 'text' })); + } + $replacement + .removeAttr('name') + .data({ + 'placeholder-password': $input, + 'placeholder-id': id + }) + .bind('focus.placeholder', clearPlaceholder); + $input + .data({ + 'placeholder-textinput': $replacement, + 'placeholder-id': id + }) + .before($replacement); + } + $input = $input.removeAttr('id').hide().prevAll('input[type="text"]:first').attr('id', id).show(); + // Note: `$input[0] != input` now! + } + $input.addClass('placeholder'); + $input[0].value = $input.attr('placeholder'); + } else { + $input.removeClass('placeholder'); + } + } + + function safeActiveElement() { + // Avoid IE9 `document.activeElement` of death + // https://github.com/mathiasbynens/jquery-placeholder/pull/99 + try { + return document.activeElement; + } catch (exception) {} + } + +})); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/.bower.json new file mode 100644 index 00000000..f0f5bfac --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/.bower.json @@ -0,0 +1,30 @@ +{ + "name": "jquery.columnizer", + "version": "1.6.2", + "description": "Automatically layout your content in newspaper column format. Specify column width or a static number of columns.", + "main": "src/jquery.columnizer.js", + "author": "Adam Wulf", + "ignore": [ + "samples", + "tools", + "src/jquery.js", + "compress.sh" + ], + "dependencies": { + "jquery": ">= 1.10.0" + }, + "keywords": [ + "jquery, layout, column" + ], + "homepage": "https://github.com/adamwulf/Columnizer-jQuery-Plugin", + "_release": "1.6.2", + "_resolution": { + "type": "version", + "tag": "1.6.2", + "commit": "0416e343e09ddaa8e91ab81ab9fd6a7e9383d82a" + }, + "_source": "git://github.com/adamwulf/Columnizer-jQuery-Plugin.git", + "_target": "~1.6.2", + "_originalSource": "jquery.columnizer", + "_direct": true +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/LICENSE b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/LICENSE new file mode 100644 index 00000000..1d658d6d --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/LICENSE @@ -0,0 +1,319 @@ +Creative Commons Legal Code + +Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/README.md b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/README.md new file mode 100644 index 00000000..4bcc6aec --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/README.md @@ -0,0 +1,136 @@ +## Documentation + +### CSS Classes for Created Columns + +Columnizer will add CSS classes to the columns it creates. Each column will have a "column" classname. The first column will have "first" and last column will have "last". This lets you target specific columns in your CSS markup more easily. + +### Options + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Option NamePurpose
    widtha rough width your columns, and Columnizer will create as many as will fit in the browser window
    heightThis option can only be used in conjunction with the width option. When both the width and height options are set, columns will continue to be built to those measurements to fill all of the content. This is useful for scrolling columns horizontally. See sample 5 for an example.
    columnsan alternative to the width option. Sets a static number of columns to build, regardless of widget.
    targetAn optional CSS selector may be used here to determine where the columnized content should be placed. If a target is specified, the columnized node will remain unchanged, and the target node will contain columnized content.
    doneFuncThis function will be called when columnizing is complete.
    ignoreImageLoading
    +
    true by default. If set to false, Columnizer will try to wait until images in the content have loaded before columnizing the data.
    columnFloatdefault is “left”. Change to “right” for right to left languages.
    lastNeverTallest
    +
    false by default. Set to true to ensure that the last column of the columnized content is not the tallest column.
    buildOnceif buildOnce is false, the content will be re-columnized when the window is resized. If buildOnce is true, the content will only be columnized once.
    overflowIf this option is used, then a static height is set to the columnized content, and any content that does not fit within the height is put into the element specified by $(id). See demo 1 for an example.
    height (required): the static height for the columnized content
    id (required): The id of the element to put the remainder of the content
    doneFunc (optional): a function to be called after the content has been columnized. This is a great place to columnize the remainder content.
    manualBreaksDefaults to false. Set to true if you only want to create columns with manual column breaks. If true, then width, height, columns options are ignored.
    + + +### CSS Classes + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class NamePurpose
    columnbreakAny node that has the CSS class “columnbreak” will act as a column break, as you'd expect in any word processor. The "columnbreak" node will always be the last node in its column. Works well with the optional "columnBreak" option.
    dontsplitAny node that has the CSS class “dontsplit” won’t be split into multiple columns. This is handy to make sure that tables, etc, aren’t chopped in half if they land at the bottom of a column.
    dontendAny node that has the CSS class “dontend” will never be put at the end of a column.
    removeiffirstAny node that has the CSS class “removeiffirst” will be removed from the content if it is the first node in a column.
    removeiflastAny node that has the CSS class “removeiflast” will be removed from the content if it is the last node in a column.
    + + +### Helpful Hints + +1. You can specify a rough width your columns, and Columnizer will create as many as will fit in the browser window. Just use: $(‘selector’).columnize({width: 400 }) syntax +2. You can specify a specific number of columns, and Columnizer will distribute your content between that many columns. Just use: $(‘selector’).columnize({columns: 2 }) syntax +3. When using the width and height options to scroll horizontally, make sure that the .column CSS class does not specify any padding or margin or border. See CSS for sample 5 for an example on how to create buffer between columns. +4. Make sure that you are columnizing visible content. If your content is display:none it may not columnize correctly. Try visibility:hidden and display:block instead. +5. Columnizer does not auto-class any of your content. See the Suggested Defaults For Your Content section. + + +### Suggested Defaults For Your Content + +Columnizer does not add default "dontsplit" or "dontend" classes to your content. If you are finding your content is breaking columns at awkward locations, try the following: + + $yourContent.find('table, thead, tbody, tfoot, colgroup, caption, label, legend, script, style, textarea, button, object, embed, tr, th, td, li, h1, h2, h3, h4, h5, h6, form').addClass('dontsplit'); + $yourContent.find('h1, h2, h3, h4, h5, h6').addClass('dontend'); + $yourContent.find('br').addClass('removeiflast').addClass('removeiffirst'); + + +## Troubleshooting + +### Why isn't my content columnizing? + +Make sure that your content "has display". If the content you're columnizing has display:none, then the browser has difficulty estimating the size of some nodes, which makes columnizing impossible. instead of display:none, use visibility:hidden and keep display:block. then in the doneFunc() of columnizer, change the visibility and display to whatever your page or application needs. + + +## Additional Notes + +### Minimize +To compress into a zip file, run compress.sh + +### Bug report? +Check the issues on the [GitHub page](https://github.com/adamwulf/Columnizer-jQuery-Plugin/issues) diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/bower.json new file mode 100644 index 00000000..7a238b9f --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/bower.json @@ -0,0 +1,19 @@ +{ + "name": "jquery.columnizer", + "version": "1.6.2", + "description": "Automatically layout your content in newspaper column format. Specify column width or a static number of columns.", + "main": "src/jquery.columnizer.js", + "author": "Adam Wulf", + "ignore": [ + "samples", + "tools", + "src/jquery.js", + "compress.sh" + ], + "dependencies": { + "jquery": ">= 1.10.0" + }, + "keywords": [ + "jquery, layout, column" + ] +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/minify.sh b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/minify.sh new file mode 100755 index 00000000..b3804758 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/minify.sh @@ -0,0 +1,3 @@ +rm src/jquery.columnizer.min.js +php tools/compress.php +echo "wrote src/jquery.columnizer.min.js" diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.columnizer.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/src/jquery.columnizer.js similarity index 59% rename from sites/all/themes/gui/materiobasetheme/js/libs/jquery.columnizer.js rename to sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/src/jquery.columnizer.js index ad75643c..b63a410f 100644 --- a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.columnizer.js +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/src/jquery.columnizer.js @@ -1,11 +1,18 @@ -// version 1.6.0 +// version 1.6.2 // http://welcome.totheinter.net/columnizer-jquery-plugin/ // created by: Adam Wulf @adamwulf, adam.wulf@gmail.com (function($){ $.fn.columnize = function(options) { - + this.cols =[]; + this.offset= 0; + this.before=[]; + this.lastOther=0; + this.prevMax =0; + this.debug=0; + this.setColumnStart =null; + this.elipsisText=''; var defaults = { // default width of columns @@ -34,23 +41,62 @@ // text nodes. smaller numbers will result in higher accuracy // column widths, but will take slightly longer accuracy : false, + // false to round down column widths (for compatibility) + // true to conserve all decimals in the column widths + precise : false, // don't automatically layout columns, only use manual columnbreak manualBreaks : false, // previx for all the CSS classes used by this plugin // default to empty string for backwards compatibility - cssClassPrefix : "" + cssClassPrefix : "", + elipsisText:'...', + debug:0 }; - var options = $.extend(defaults, options); - + options = $.extend(defaults, options); + if(typeof(options.width) == "string"){ - options.width = parseInt(options.width); + options.width = parseInt(options.width,10); if(isNaN(options.width)){ options.width = defaults.width; } } + if(typeof options.setColumnStart== 'function') { + this.setColumnStart=options.setColumnStart; + } + if(typeof options.elipsisText== 'string') { + this.elipsisText=options.elipsisText; + } + if(options.debug) { // assert is off by default + this.debug=options.debug; + } + if(!options.setWidth) { + if (options.precise) { + options.setWidth = function (numCols) { + return 100 / numCols; + }; + } else { + options.setWidth = function (numCols) { + return Math.floor(100 / numCols); + }; + } + } + + /** + * appending a text node to a will + * cause a jquery crash. + * so wrap all append() calls and revert to + * a simple appendChild() in case it fails + */ + function appendSafe($target, $elem){ + try{ + $target.append($elem); + }catch(e){ + $target[0].appendChild($elem[0]); + } + } return this.each(function() { - var $inBox = options.target ? $(options.target) : $(this); + var $inBox = options.target ? $(options.target) : $(this); var maxHeight = $(this).height(); var $cache = $('
    '); // this is where we'll put the real content var lastWidth = 0; @@ -61,53 +107,50 @@ cssClassPrefix = options.cssClassPrefix; } - + var adjustment = 0; - - $cache.append($(this).contents().clone(true)); - - // images loading after dom load - // can screw up the column heights, - // so recolumnize after images load - if(!options.ignoreImageLoading && !options.target){ - if(!$inBox.data("imageLoaded")){ - $inBox.data("imageLoaded", true); - if($(this).find("img").length > 0){ - // only bother if there are - // actually images... - var func = function($inBox,$cache){ return function(){ - if(!$inBox.data("firstImageLoaded")){ - $inBox.data("firstImageLoaded", "true"); - $inBox.empty().append($cache.children().clone(true)); - $inBox.columnize(options); - } - }}($(this), $cache); - $(this).find("img").one("load", func); - $(this).find("img").one("abort", func); - return; - } - } - } - + + appendSafe($cache, $(this).contents().clone(true)); + + // images loading after dom load + // can screw up the column heights, + // so recolumnize after images load + if(!options.ignoreImageLoading && !options.target){ + if(!$inBox.data("imageLoaded")){ + $inBox.data("imageLoaded", true); + if($(this).find("img").length > 0){ + // only bother if there are + // actually images... + var func = function($inBox,$cache){ return function(){ + if(!$inBox.data("firstImageLoaded")){ + $inBox.data("firstImageLoaded", "true"); + appendSafe($inBox.empty(), $cache.children().clone(true)); + $inBox.columnize(options); + } + }; + }($(this), $cache); + $(this).find("img").one("load", func); + $(this).find("img").one("abort", func); + return; + } + } + } + $inBox.empty(); - + columnizeIt(); - + if(!options.buildOnce){ $(window).resize(function() { - if(!options.buildOnce && $.browser.msie){ + if(!options.buildOnce){ if($inBox.data("timeout")){ clearTimeout($inBox.data("timeout")); } $inBox.data("timeout", setTimeout(columnizeIt, 200)); - }else if(!options.buildOnce){ - columnizeIt(); - }else{ - // don't rebuild } }); } - + function prefixTheClassName(className, withDot){ var dot = withDot ? "." : ""; if(cssClassPrefix.length){ @@ -115,8 +158,7 @@ } return dot + className; } - - + /** * this fuction builds as much of a column as it can without * splitting nodes in half. If the last node in the new column @@ -138,8 +180,8 @@ // add as many nodes to the column as we can, // but stop once our height is too tall while((manualBreaks || $parentColumn.height() < targetHeight) && - $pullOutHere[0].childNodes.length){ - var node = $pullOutHere[0].childNodes[0] + $pullOutHere[0].childNodes.length){ + var node = $pullOutHere[0].childNodes[0]; // // Because we're not cloning, jquery will actually move the element" // http://welcome.totheinter.net/2009/03/19/the-undocumented-life-of-jquerys-append/ @@ -153,17 +195,16 @@ // our column is on a column break, so just end here return; } - $putInHere.append(node); + appendSafe($putInHere, $(node)); } - if($putInHere[0].childNodes.length == 0) return; - + if($putInHere[0].childNodes.length === 0) return; + // now we're too tall, so undo the last one var kids = $putInHere[0].childNodes; var lastKid = kids[kids.length-1]; $putInHere[0].removeChild(lastKid); var $item = $(lastKid); - - // + // now lets try to split that last node // to fit as much of it as we can into this column if($item[0].nodeType == 3){ @@ -175,22 +216,29 @@ var columnText; var latestTextNode = null; while($parentColumn.height() < targetHeight && oText.length){ + // + // it's been brought up that this won't work for chinese + // or other languages that don't have the same use of whitespace + // as english. This will need to be updated in the future + // to better handle non-english languages. + // + // https://github.com/adamwulf/Columnizer-jQuery-Plugin/issues/124 var indexOfSpace = oText.indexOf(' ', counter2); if (indexOfSpace != -1) { - columnText = oText.substring(0, oText.indexOf(' ', counter2)); + columnText = oText.substring(0, indexOfSpace); } else { columnText = oText; } latestTextNode = document.createTextNode(columnText); - $putInHere.append(latestTextNode); - + appendSafe($putInHere, $(latestTextNode)); + if(oText.length > counter2 && indexOfSpace != -1){ oText = oText.substring(indexOfSpace); }else{ oText = ""; } } - if($parentColumn.height() >= targetHeight && latestTextNode != null){ + if($parentColumn.height() >= targetHeight && latestTextNode !== null){ // too tall :( $putInHere[0].removeChild(latestTextNode); oText = latestTextNode.nodeValue + oText; @@ -201,16 +249,16 @@ return false; // we ate the whole text node, move on to the next node } } - + if($pullOutHere.contents().length){ $pullOutHere.prepend($item); }else{ - $pullOutHere.append($item); + appendSafe($pullOutHere, $item); } - + return $item[0].nodeType == 3; } - + /** * Split up an element, which is more complex than splitting text. We need to create * two copies of the element with it's contents divided between each @@ -230,8 +278,8 @@ var $cloneMe = $pullOutHere.contents(":first"); // // make sure we're splitting an element - if($cloneMe.get(0).nodeType != 1) return; - + if( typeof $cloneMe.get(0) == 'undefined' || $cloneMe.get(0).nodeType != 1 ) return; + // // clone the node with all data and events var $clone = $cloneMe.clone(true); @@ -242,20 +290,20 @@ // // ok, we have a columnbreak, so add it into // the column and exit - $putInHere.append($clone); + appendSafe($putInHere, $clone); $cloneMe.remove(); }else if (manualBreaks){ // keep adding until we hit a manual break - $putInHere.append($clone); + appendSafe($putInHere, $clone); $cloneMe.remove(); - }else if($clone.get(0).nodeType == 1 && !$clone.hasClass(prefixTheClassName("dontend"))){ - $putInHere.append($clone); + }else if($clone.get(0).nodeType == 1 && !$clone.hasClass(prefixTheClassName("dontend"))){ + appendSafe($putInHere, $clone); if($clone.is("img") && $parentColumn.height() < targetHeight + 20){ // // we can't split an img in half, so just add it // to the column and remove it from the pullOutHere section $cloneMe.remove(); - }else if(!$cloneMe.hasClass(prefixTheClassName("dontsplit")) && $parentColumn.height() < targetHeight + 20){ + }else if($cloneMe.hasClass(prefixTheClassName("dontsplit")) && $parentColumn.height() < targetHeight + 20){ // // pretty close fit, and we're not allowed to split it, so just // add it to the column, remove from pullOutHere, and be done @@ -273,9 +321,16 @@ // it in half, leaving some of it in pullOutHere $clone.empty(); if(!columnize($clone, $cloneMe, $parentColumn, targetHeight)){ - // this node still has non-text nodes to split + // this node may still have non-text nodes to split // add the split class and then recur $cloneMe.addClass(prefixTheClassName("split")); + + //if this node was ol element, the child should continue the number ordering + if($cloneMe.get(0).tagName == 'OL'){ + var startWith = $clone.get(0).childElementCount + $clone.get(0).start; + $cloneMe.attr('start',startWith+1); + } + if($cloneMe.children().length){ split($clone, $cloneMe, $parentColumn, targetHeight); } @@ -284,29 +339,43 @@ // split class and move on. $cloneMe.addClass(prefixTheClassName("split")); } - if($clone.get(0).childNodes.length == 0){ + if($clone.get(0).childNodes.length === 0){ // it was split, but nothing is in it :( $clone.remove(); - } + $cloneMe.removeClass(prefixTheClassName("split")); + }else if($clone.get(0).childNodes.length == 1){ + // was the only child node a text node w/ whitespace? + var onlyNode = $clone.get(0).childNodes[0]; + if(onlyNode.nodeType == 3){ + // text node + var whitespace = /\s/; + var str = onlyNode.nodeValue; + if(whitespace.test(str)){ + // yep, only a whitespace textnode + $clone.remove(); + $cloneMe.removeClass(prefixTheClassName("split")); + } + } + } } } } } - - + + function singleColumnizeIt() { if ($inBox.data("columnized") && $inBox.children().length == 1) { return; } $inBox.data("columnized", true); $inBox.data("columnizing", true); - + $inBox.empty(); $inBox.append($("
    ")); //" + + prefixTheClassName("first") + " " + + prefixTheClassName("last") + " " + + prefixTheClassName("column") + " " + + "' style='width:100%; float: " + options.columnFloat + ";'>")); //" $col = $inBox.children().eq($inBox.children().length-1); $destroyable = $cache.clone(true); if(options.overflow){ @@ -316,7 +385,7 @@ if(!$destroyable.contents().find(":first-child").hasClass(prefixTheClassName("dontend"))){ split($col, $destroyable, $col, targetHeight); } - + while($col.contents(":last").length && checkDontEndColumn($col.contents(":last").get(0))){ var $lastKid = $col.contents(":last"); $lastKid.remove(); @@ -329,7 +398,7 @@ var kid = $destroyable[0].childNodes[0]; if(kid.attributes){ for(var i=0;i")); //" + $inBox.append($("
    ")); //" $col = $inBox.children(":last"); - $col.append($cache.clone()); + appendSafe($col, $cache.clone()); maxHeight = $col.height(); $inBox.empty(); - + var targetHeight = maxHeight / numCols; var firstTime = true; var maxLoops = 3; @@ -423,7 +490,7 @@ targetHeight = optionHeight; scrollHorizontally = true; } - + // // We loop as we try and workout a good height to use. We know it initially as an average // but if the last column is higher than the first ones (which can happen, depending on split @@ -432,9 +499,9 @@ // also, lets hard code the max loops to 20. that's /a lot/ of loops for columnizer, // and should keep run aways in check. if somehow someone has content combined with // options that would cause an infinite loop, then this'll definitely stop it. - for(var loopCount=0;loopCount")); //" + className = (i == numCols - 1) ? (prefixTheClassName("last") + " " + className) : className; + $inBox.append($("
    ")); //" } - + // fill all but the last column (unless overflowing) - var i = 0; + i = 0; while(i < numCols - (options.overflow ? 0 : 1) || scrollHorizontally && $destroyable.contents().length){ if($inBox.children().length <= i){ // we ran out of columns, make another - $inBox.append($("
    ")); //" + $inBox.append($("
    ")); //" + } + $col = $inBox.children().eq(i); + if(scrollHorizontally){ + $col.width(optionWidth + "px"); } - var $col = $inBox.children().eq(i); columnize($col, $destroyable, $col, targetHeight); // make sure that the last item in the column isn't a "dontend" split($col, $destroyable, $col, targetHeight); - + while($col.contents(":last").length && checkDontEndColumn($col.contents(":last").get(0))){ - var $lastKid = $col.contents(":last"); + $lastKid = $col.contents(":last"); $lastKid.remove(); $destroyable.prepend($lastKid); } i++; - + // // https://github.com/adamwulf/Columnizer-jQuery-Plugin/issues/47 // @@ -480,7 +550,7 @@ // // this results in empty columns being added with the dontsplit item // perpetually waiting to get put into a column. lets force the issue here - if($col.contents().length == 0 && $destroyable.contents().length){ + if($col.contents().length === 0 && $destroyable.contents().length){ // // ok, we're building zero content columns. this'll happen forever // since nothing can ever get taken out of destroyable. @@ -499,18 +569,22 @@ numCols ++; } } - } if(options.overflow && !scrollHorizontally){ - var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/; + var IE6 = false; + /*@cc_on + @if (@_jscript_version < 5.7) + IE6 = true; + @end + @*/ var IE7 = (document.all) && (navigator.appVersion.indexOf("MSIE 7.") != -1); if(IE6 || IE7){ var html = ""; var div = document.createElement('DIV'); while($destroyable[0].childNodes.length > 0){ var kid = $destroyable[0].childNodes[0]; - for(var i=0;i*'); + + if( ($rest.last())[0].tagName!=$tag1.toUpperCase()) { + if(this.debug) { + console.log("Last item in previous column, isn't a list..."); + } + return 0; + } + $rest = $rest.length; + var $tint = 1; + + if(this.lastOther<=0) { + $tint = this.before.children().length+1; + } else { + $tint = $($parents[this.lastOther]).children().length+1; + } + // if the first LI in the current column is split, decrement, as we want the same number/key + if( $($cols[this.offset]).find($tag1+':first li.split').length ) { + var $whereElipsis=$($cols[this.offset-1]).find($tag1+':last li:last'); + if( this.elipsisText==='' || + $($cols[this.offset-1]).find($tag1+':last ~ div').length || + $($cols[this.offset-1]).find($tag1+':last ~ p').length ) { + ; + } else { + if($($whereElipsis).find('ul, ol, dl').length ==0 ) { + + var $txt=$whereElipsis.last().text(); + // char counting, 'cus MSIE 8 is appearently stupid + var $len=$txt.length; + if($txt.substring($len-1)==';') { + if($txt.substring($len-4)!=this.elipsisText+';') { + $txt=$txt.substring(0, $len-1)+this.elipsisText+';'; + } + } else { + if($txt.substring($len-3)!=this.elipsisText) { + $txt+=this.elipsisText; + } + } + $whereElipsis.last().text($txt); + } + } + // an item in split between two columns. it only holds one key... + if($($cols[this.offset]).find($tag1+':first >li.split >'+$tag1).length==0) { + $tint--; + } + } + if($rest==1) { + // the last column only held one thing, so assume its wrapped to the column before that as well. + $tint += this.prevMax ; + } + if(this.nest>1) { + if(this.debug) { + console.log("Supposed to be a nested list...decr"); + } + $tint--; +// some how, id previous list starts split, need secins decrement, +// if "split" is now correct, reference this + var $tt = $($cols[this.offset -1]).find($tag1+':first li.split:first'); + if($tt.length>0) { + if(this.debug) { + console.log("Previous column started with a split item, so that count is one less than expected"); + } + $tint--; + } + + + $tt = $($cols[this.offset]).find($tag1+':first li:first').clone(); + $tt.children().remove(); + if( $.trim($tt.text()).length>0 ){ + if(this.debug) { + console.log("If that was a complete list in the previous column, don't decr."); + } + $tint++; + + if($($cols[this.offset-1]).find(">"+$tag1+':last ').children().length==0 ) { + if(this.debug) { + console.log("unless that was empty, in which case revert"); + } + $tint--; + } + } + + } else { + var $tt = $($cols[this.offset]).find($tag1+':first li:first '+$tag1+".split li.split"); + if($tt.length>0) { + if(this.debug) { + console.log("[Nested] Column started with a split item, so that count is one less than expected"); + } + $tint--; + } + + } + + if(this.debug) { + console.log("Setting the start value to "+$tint+" ("+this.prevMax +")"); + } + if($tint >0) { + // if the above computation leads to 0, or an empty list (more likely), don't set, leave as 1 + if(typeof this.setColumnStart == 'function') { + this.setColumnStart($list, $tint); + } else { + $list.attr('start', $tint); + } + } + return 0; + } + + if(typeof $targetId === 'undefined') { $targetId=false; } + if(typeof $targetClass === 'undefined') { $targetClass=false; } + if(! $targetId && !$targetClass ) { + throw "renumberByJS(): Bad param, must pass an id or a class"; + } + + var $target =''; + this.prevMax =1; + + if($targetClass) { + $target ="."+$targetClass; + } else { + $target ="#"+$targetId; + } + var $tag1 = $searchTag.toLowerCase(); + var $tag2 = $searchTag.toUpperCase(); + + this.cols = $($target); + if(this.debug) { + console.log("There are "+this.cols.length+" items, looking for "+$tag1); + } + + this.before = $(this.cols[0]).find($tag1+':last'); + this.prevMax = this.before.children().length; + +// start at 1, as must compare to previous... + for(this.offset=1; this.offset"+$tag1+':first li '+$tag1+":first").length) { + this.nest = 2; + } + this.setList(this.cols, $list, $tag1); + this.lastOther--; + $list = $(this.cols[this.offset]).find($tag1+':first li '+$tag1+":first"); + if($list.length) { +// I hope the two columns have same nesting, or its busted + + this.before= $(this.cols[this.offset-1]).find(">"+$tag1+':last li '+$tag1+":last"); + this.prevMax= 0; + this.nest =1; + this.setList(this.cols, $list, $tag1); + } + var $reset = $(this.cols[this.offset-1]).find(">"+$tag1+':last'); + this.prevMax = $reset.children().length; + } + } + return 0; +}; + })(jQuery); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/src/jquery.columnizer.min.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/src/jquery.columnizer.min.js new file mode 100644 index 00000000..b6b5da13 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.columnizer/src/jquery.columnizer.min.js @@ -0,0 +1,90 @@ + +(function($){$.fn.columnize=function(options){this.cols=[];this.offset=0;this.before=[];this.lastOther=0;this.prevMax=0;this.debug=0;this.setColumnStart=null;this.elipsisText='';var defaults={width:400,columns:false,buildOnce:false,overflow:false,doneFunc:function(){},target:false,ignoreImageLoading:true,columnFloat:"left",lastNeverTallest:false,accuracy:false,precise:false,manualBreaks:false,cssClassPrefix:"",elipsisText:'...',debug:0};options=$.extend(defaults,options);if(typeof(options.width)=="string"){options.width=parseInt(options.width,10);if(isNaN(options.width)){options.width=defaults.width;}} +if(typeof options.setColumnStart=='function'){this.setColumnStart=options.setColumnStart;} +if(typeof options.elipsisText=='string'){this.elipsisText=options.elipsisText;} +if(options.debug){this.debug=options.debug;} +if(!options.setWidth){if(options.precise){options.setWidth=function(numCols){return 100/numCols;};}else{options.setWidth=function(numCols){return Math.floor(100/numCols);};}} +function appendSafe($target,$elem){try{$target.append($elem);}catch(e){$target[0].appendChild($elem[0]);}} +return this.each(function(){var $inBox=options.target?$(options.target):$(this);var maxHeight=$(this).height();var $cache=$('
    ');var lastWidth=0;var columnizing=false;var manualBreaks=options.manualBreaks;var cssClassPrefix=defaults.cssClassPrefix;if(typeof(options.cssClassPrefix)=="string"){cssClassPrefix=options.cssClassPrefix;} +var adjustment=0;appendSafe($cache,$(this).contents().clone(true));if(!options.ignoreImageLoading&&!options.target){if(!$inBox.data("imageLoaded")){$inBox.data("imageLoaded",true);if($(this).find("img").length>0){var func=function($inBox,$cache){return function(){if(!$inBox.data("firstImageLoaded")){$inBox.data("firstImageLoaded","true");appendSafe($inBox.empty(),$cache.children().clone(true));$inBox.columnize(options);}};}($(this),$cache);$(this).find("img").one("load",func);$(this).find("img").one("abort",func);return;}}} +$inBox.empty();columnizeIt();if(!options.buildOnce){$(window).resize(function(){if(!options.buildOnce){if($inBox.data("timeout")){clearTimeout($inBox.data("timeout"));} +$inBox.data("timeout",setTimeout(columnizeIt,200));}});} +function prefixTheClassName(className,withDot){var dot=withDot?".":"";if(cssClassPrefix.length){return dot+cssClassPrefix+"-"+className;} +return dot+className;} +function columnize($putInHere,$pullOutHere,$parentColumn,targetHeight){while((manualBreaks||$parentColumn.height()counter2&&indexOfSpace!=-1){oText=oText.substring(indexOfSpace);}else{oText="";}} +if($parentColumn.height()>=targetHeight&&latestTextNode!==null){$putInHere[0].removeChild(latestTextNode);oText=latestTextNode.nodeValue+oText;} +if(oText.length){$item[0].nodeValue=oText;}else{return false;}} +if($pullOutHere.contents().length){$pullOutHere.prepend($item);}else{appendSafe($pullOutHere,$item);} +return $item[0].nodeType==3;} +function split($putInHere,$pullOutHere,$parentColumn,targetHeight){if($putInHere.contents(":last").find(prefixTheClassName("columnbreak",true)).length){return;} +if($putInHere.contents(":last").hasClass(prefixTheClassName("columnbreak"))){return;} +if($pullOutHere.contents().length){var $cloneMe=$pullOutHere.contents(":first");if(typeof $cloneMe.get(0)=='undefined'||$cloneMe.get(0).nodeType!=1)return;var $clone=$cloneMe.clone(true);if($cloneMe.hasClass(prefixTheClassName("columnbreak"))){appendSafe($putInHere,$clone);$cloneMe.remove();}else if(manualBreaks){appendSafe($putInHere,$clone);$cloneMe.remove();}else if($clone.get(0).nodeType==1&&!$clone.hasClass(prefixTheClassName("dontend"))){appendSafe($putInHere,$clone);if($clone.is("img")&&$parentColumn.height()"));$col=$inBox.children().eq($inBox.children().length-1);$destroyable=$cache.clone(true);if(options.overflow){targetHeight=options.overflow.height;columnize($col,$destroyable,$col,targetHeight);if(!$destroyable.contents().find(":first-child").hasClass(prefixTheClassName("dontend"))){split($col,$destroyable,$col,targetHeight);} +while($col.contents(":last").length&&checkDontEndColumn($col.contents(":last").get(0))){var $lastKid=$col.contents(":last");$lastKid.remove();$destroyable.prepend($lastKid);} +var html="";var div=document.createElement('DIV');while($destroyable[0].childNodes.length>0){var kid=$destroyable[0].childNodes[0];if(kid.attributes){for(var i=0;i"));$col=$inBox.children(":last");appendSafe($col,$cache.clone());maxHeight=$col.height();$inBox.empty();var targetHeight=maxHeight/numCols;var firstTime=true;var maxLoops=3;var scrollHorizontally=false;if(options.overflow){maxLoops=1;targetHeight=options.overflow.height;}else if(optionHeight&&optionWidth){maxLoops=1;targetHeight=optionHeight;scrollHorizontally=true;} +for(var loopCount=0;loopCount"));} +i=0;while(i"));} +$col=$inBox.children().eq(i);if(scrollHorizontally){$col.width(optionWidth+"px");} +columnize($col,$destroyable,$col,targetHeight);split($col,$destroyable,$col,targetHeight);while($col.contents(":last").length&&checkDontEndColumn($col.contents(":last").get(0))){$lastKid=$col.contents(":last");$lastKid.remove();$destroyable.prepend($lastKid);} +i++;if($col.contents().length===0&&$destroyable.contents().length){$col.append($destroyable.contents(":first"));}else if(i==numCols-(options.overflow?0:1)&&!options.overflow){if($destroyable.find(prefixTheClassName("columnbreak",true)).length){numCols++;}}} +if(options.overflow&&!scrollHorizontally){var IE6=false;var IE7=(document.all)&&(navigator.appVersion.indexOf("MSIE 7.")!=-1);if(IE6||IE7){var html="";var div=document.createElement('DIV');while($destroyable[0].childNodes.length>0){var kid=$destroyable[0].childNodes[0];for(i=0;imax){max=h;lastIsMax=true;} +if(h30){targetHeight=avgH+30;}else if(Math.abs(avgH-targetHeight)>20){targetHeight=avgH;}else{loopCount=maxLoops;}}else{$inBox.children().each(function(i){$col=$inBox.children().eq(i);$col.width(optionWidth+"px");if(i===0){$col.addClass(prefixTheClassName("first"));}else if(i==$inBox.children().length-1){$col.addClass(prefixTheClassName("last"));}else{$col.removeClass(prefixTheClassName("first"));$col.removeClass(prefixTheClassName("last"));}});$inBox.width($inBox.children().length*optionWidth+"px");} +$inBox.append($("
    "));} +$inBox.find(prefixTheClassName("column",true)).find(":first"+prefixTheClassName("removeiffirst",true)).remove();$inBox.find(prefixTheClassName("column",true)).find(':last'+prefixTheClassName("removeiflast",true)).remove();$inBox.find(prefixTheClassName("split",true)).find(":first"+prefixTheClassName("removeiffirst",true)).remove();$inBox.find(prefixTheClassName("split",true)).find(':last'+prefixTheClassName("removeiflast",true)).remove();$inBox.data("columnizing",false);if(options.overflow){options.overflow.doneFunc();} +options.doneFunc();}});};$.fn.renumberByJS=function($searchTag,$colno,$targetId,$targetClass){this.setList=function($cols,$list,$tag1){var $parents=this.before.parents();var $rest;$rest=$($cols[this.offset-1]).find('>*');if(($rest.last())[0].tagName!=$tag1.toUpperCase()){if(this.debug){console.log("Last item in previous column, isn't a list...");} +return 0;} +$rest=$rest.length;var $tint=1;if(this.lastOther<=0){$tint=this.before.children().length+1;}else{$tint=$($parents[this.lastOther]).children().length+1;} +if($($cols[this.offset]).find($tag1+':first li.split').length){var $whereElipsis=$($cols[this.offset-1]).find($tag1+':last li:last');if(this.elipsisText===''||$($cols[this.offset-1]).find($tag1+':last ~ div').length||$($cols[this.offset-1]).find($tag1+':last ~ p').length){;}else{if($($whereElipsis).find('ul, ol, dl').length==0){var $txt=$whereElipsis.last().text();var $len=$txt.length;if($txt.substring($len-1)==';'){if($txt.substring($len-4)!=this.elipsisText+';'){$txt=$txt.substring(0,$len-1)+this.elipsisText+';';}}else{if($txt.substring($len-3)!=this.elipsisText){$txt+=this.elipsisText;}} +$whereElipsis.last().text($txt);}} +if($($cols[this.offset]).find($tag1+':first >li.split >'+$tag1).length==0){$tint--;}} +if($rest==1){$tint+=this.prevMax;} +if(this.nest>1){if(this.debug){console.log("Supposed to be a nested list...decr");} +$tint--;var $tt=$($cols[this.offset-1]).find($tag1+':first li.split:first');if($tt.length>0){if(this.debug){console.log("Previous column started with a split item, so that count is one less than expected");} +$tint--;} +$tt=$($cols[this.offset]).find($tag1+':first li:first').clone();$tt.children().remove();if($.trim($tt.text()).length>0){if(this.debug){console.log("If that was a complete list in the previous column, don't decr.");} +$tint++;if($($cols[this.offset-1]).find(">"+$tag1+':last ').children().length==0){if(this.debug){console.log("unless that was empty, in which case revert");} +$tint--;}}}else{var $tt=$($cols[this.offset]).find($tag1+':first li:first '+$tag1+".split li.split");if($tt.length>0){if(this.debug){console.log("[Nested] Column started with a split item, so that count is one less than expected");} +$tint--;}} +if(this.debug){console.log("Setting the start value to "+$tint+" ("+this.prevMax+")");} +if($tint>0){if(typeof this.setColumnStart=='function'){this.setColumnStart($list,$tint);}else{$list.attr('start',$tint);}} +return 0;} +if(typeof $targetId==='undefined'){$targetId=false;} +if(typeof $targetClass==='undefined'){$targetClass=false;} +if(!$targetId&&!$targetClass){throw"renumberByJS(): Bad param, must pass an id or a class";} +var $target='';this.prevMax=1;if($targetClass){$target="."+$targetClass;}else{$target="#"+$targetId;} +var $tag1=$searchTag.toLowerCase();var $tag2=$searchTag.toUpperCase();this.cols=$($target);if(this.debug){console.log("There are "+this.cols.length+" items, looking for "+$tag1);} +this.before=$(this.cols[0]).find($tag1+':last');this.prevMax=this.before.children().length;for(this.offset=1;this.offset"+$tag1+':first li '+$tag1+":first").length){this.nest=2;} +this.setList(this.cols,$list,$tag1);this.lastOther--;$list=$(this.cols[this.offset]).find($tag1+':first li '+$tag1+":first");if($list.length){this.before=$(this.cols[this.offset-1]).find(">"+$tag1+':last li '+$tag1+":last");this.prevMax=0;this.nest=1;this.setList(this.cols,$list,$tag1);} +var $reset=$(this.cols[this.offset-1]).find(">"+$tag1+':last');this.prevMax=$reset.children().length;}} +return 0;};})(jQuery); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/.bower.json new file mode 100644 index 00000000..a5f30d3e --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/.bower.json @@ -0,0 +1,28 @@ +{ + "name": "jquery.cookie", + "version": "1.4.1", + "main": [ + "./jquery.cookie.js" + ], + "dependencies": { + "jquery": ">=1.2" + }, + "ignore": [ + "test", + ".*", + "*.json", + "*.md", + "*.txt", + "Gruntfile.js" + ], + "homepage": "https://github.com/carhartl/jquery-cookie", + "_release": "1.4.1", + "_resolution": { + "type": "version", + "tag": "v1.4.1", + "commit": "92b7715518f2e6e90f4cfc7a07f9726a614ebe66" + }, + "_source": "git://github.com/carhartl/jquery-cookie.git", + "_target": "~1.4.0", + "_originalSource": "jquery.cookie" +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/bower.json new file mode 100644 index 00000000..2d8c25b0 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/bower.json @@ -0,0 +1,18 @@ +{ + "name": "jquery.cookie", + "version": "1.4.1", + "main": [ + "./jquery.cookie.js" + ], + "dependencies": { + "jquery": ">=1.2" + }, + "ignore": [ + "test", + ".*", + "*.json", + "*.md", + "*.txt", + "Gruntfile.js" + ] +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/jquery.cookie.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/jquery.cookie.js new file mode 100644 index 00000000..c7f3a59b --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.cookie/jquery.cookie.js @@ -0,0 +1,117 @@ +/*! + * jQuery Cookie Plugin v1.4.1 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2013 Klaus Hartl + * Released under the MIT license + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + var pluses = /\+/g; + + function encode(s) { + return config.raw ? s : encodeURIComponent(s); + } + + function decode(s) { + return config.raw ? s : decodeURIComponent(s); + } + + function stringifyCookieValue(value) { + return encode(config.json ? JSON.stringify(value) : String(value)); + } + + function parseCookieValue(s) { + if (s.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + try { + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + s = decodeURIComponent(s.replace(pluses, ' ')); + return config.json ? JSON.parse(s) : s; + } catch(e) {} + } + + function read(s, converter) { + var value = config.raw ? s : parseCookieValue(s); + return $.isFunction(converter) ? converter(value) : value; + } + + var config = $.cookie = function (key, value, options) { + + // Write + + if (value !== undefined && !$.isFunction(value)) { + options = $.extend({}, config.defaults, options); + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setTime(+t + days * 864e+5); + } + + return (document.cookie = [ + encode(key), '=', stringifyCookieValue(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 result = key ? undefined : {}; + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling $.cookie(). + var cookies = document.cookie ? document.cookie.split('; ') : []; + + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + var name = decode(parts.shift()); + var cookie = parts.join('='); + + if (key && key === name) { + // If second argument (value) is a function it's a converter... + result = read(cookie, value); + break; + } + + // Prevent storing a cookie that we couldn't decode. + if (!key && (cookie = read(cookie)) !== undefined) { + result[name] = cookie; + } + } + + return result; + }; + + config.defaults = {}; + + $.removeCookie = function (key, options) { + if ($.cookie(key) === undefined) { + return false; + } + + // Must not alter options, thus extending a fresh object... + $.cookie(key, '', $.extend({}, options, { expires: -1 })); + return !$.cookie(key); + }; + +})); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/.bower.json new file mode 100644 index 00000000..7a005764 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/.bower.json @@ -0,0 +1,44 @@ +{ + "name": "jquery.hotkeys", + "description": "jQuery Hotkeys lets you watch for keyboard events anywhere in your code supporting almost any key combination.", + "homepage": "http://github.com/jeresig/jquery.hotkeys", + "repository": "git://github.com/jeresig/jquery.hotkeys.git", + "keywords": [ + "jquery", + "hotkeys", + "keyboard", + "events", + "key", + "bindings" + ], + "authors": [ + "John Resig (http://ejohn.org)" + ], + "main": "jquery.hotkeys.js", + "ignore": [ + "jquery-*", + "test*", + "*.yml", + ".gitignore", + "Gruntfile.js", + "*.json" + ], + "dependencies": { + "jquery": ">= 1.4.2" + }, + "license": [ + "MIT", + "GPL-2.0" + ], + "version": "0.2.0", + "_release": "0.2.0", + "_resolution": { + "type": "version", + "tag": "0.2.0", + "commit": "05a1370a55fac597ffe538c38e5f67bcb010450d" + }, + "_source": "git://github.com/jeresig/jquery.hotkeys.git", + "_target": "~0.2.0", + "_originalSource": "jeresig/jquery.hotkeys", + "_direct": true +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/README.md b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/README.md new file mode 100644 index 00000000..6511f24a --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/README.md @@ -0,0 +1,106 @@ +# jQuery.Hotkeys [![Build Status](https://secure.travis-ci.org/jeresig/jquery.hotkeys.png)](http://travis-ci.org/jeresig/jquery.hotkeys) + +#About +**jQuery Hotkeys** is a plug-in that lets you easily add and remove handlers for keyboard events anywhere in your code supporting almost any key combination. + +This plugin is based off of the plugin by Tzury Bar Yochay: [jQuery.hotkeys](https://github.com/tzuryby/jquery.hotkeys) + +The syntax is as follows: + +```javascript +$(expression).bind(types, keys, handler); +$(expression).unbind(types, handler); + +$(document).bind('keydown', 'ctrl+a', fn); + +// e.g. replace '$' sign with 'EUR' +$('input.foo').bind('keyup', '$', function(){ + this.value = this.value.replace('$', 'EUR'); +}); +``` + +Syntax when wanting to use jQuery's `on()`/`off` methods: + +```javascript +$(expression).on(types, null, keys, handler); +$(expression).off(types, handler); + +$(document).on('keydown', null, 'ctrl+a', fn); + +// e.g. replace '$' sign with 'EUR' +$('input.foo').on('keyup', null, '$', function(){ + this.value = this.value.replace('$', 'EUR'); +}); +``` + +## Example + +[Example](https://rawgit.com/jeresig/jquery.hotkeys/master/test-static-01.html) + +## Event Types + +Supported types are `'keydown'`, `'keyup'` and `'keypress'` + +## jQuery Compatibility + +Works with jQuery 1.4.2 and newer. + +It is known to be working with all the major browsers on all available platforms (Win/Mac/Linux) + + * IE 6/7/8+ + * FF 1.5/2/3+ + * Opera-9+ + * Safari-3+ + * Chrome-0.2+ + +## Browserify Compatibility +If you want to include this module in a Browserified project, just add it to node_modules and require it. +```javascript +require('jquery.javascript'); +``` + +This will work if jQuery is global (ex. served from a CDN). If it's not, you need to (shim it)[https://github.com/thlorenz/browserify-shim#a-expose-global-variables-via-global]: +```javascript +{ + "browserify-shim": { + "jquery": "global:jQuery" + } +} +``` + +## Notes + +Modifiers are not case sensitive (`Ctrl` == `ctrl` == `cTRL`) + +If you want to use more than one modifier (e.g. `alt+ctrl+z`) you should define them by an alphabetical order e.g. alt+ctrl+shift + +Hotkeys aren't tracked if you're inside of an input element (unless you explicitly bind the hotkey directly to the input). This helps to avoid conflict with normal user typing. + +You can use namespacing by adding a suffix to the event type (e.g. `keyup.toggle`) + + +### Meta and Hyper Keys +Meta and hyper keys don't register on `keyup` in any browser tested. + +#### Chrome 33.0.1750.117 +Meta key registers on `keydown` event. +Hyper key registers on `keydown` event. + +#### Firefox 27.0.1 and Safari 7.0.1 +Meta key registers on `keydown` and `keypress` events. +Hyper key registers on `keydown` and `keypress` events. + +#### Opera 19.0 +Meta key doesn't register at all :( +Hyper key registers on `keydown` and `keypress` events. + +#### TL;DR +Bind to `keydown` event for meta and hyper keys, but meta key does not work in Opera ;) + +### Addendum + +Firefox is the most liberal one in the manner of letting you capture all short-cuts even those that are built-in in the browser such as `Ctrl-t` for new tab, or `Ctrl-a` for selecting all text. You can always bubble them up to the browser by returning `true` in your handler. + +Others, (IE) either let you handle built-in short-cuts, but will add their functionality after your code has executed. Or (Opera/Safari) will *not* pass those events to the DOM at all. + +*So, if you bind `Ctrl-Q` or `Alt-F4` and your Safari/Opera window is closed don't be surprised.* diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/bower.json new file mode 100644 index 00000000..405ef30a --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/bower.json @@ -0,0 +1,21 @@ +{ + "name": "jquery.hotkeys", + "description": "jQuery Hotkeys lets you watch for keyboard events anywhere in your code supporting almost any key combination.", + "homepage": "http://github.com/jeresig/jquery.hotkeys", + "repository": "git://github.com/jeresig/jquery.hotkeys.git", + "keywords": ["jquery", "hotkeys", "keyboard", "events", "key", "bindings"], + "authors": ["John Resig (http://ejohn.org)"], + "main": "jquery.hotkeys.js", + "ignore": [ + "jquery-*", + "test*", + "*.yml", + ".gitignore", + "Gruntfile.js", + "*.json" + ], + "dependencies": { + "jquery": ">= 1.4.2" + }, + "license": ["MIT", "GPL-2.0"] +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/jquery.hotkeys.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/jquery.hotkeys.js new file mode 100644 index 00000000..6ff40136 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.hotkeys/jquery.hotkeys.js @@ -0,0 +1,196 @@ +/*jslint browser: true*/ +/*jslint jquery: true*/ + +/* + * jQuery Hotkeys Plugin + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Based upon the plugin by Tzury Bar Yochay: + * http://github.com/tzuryby/hotkeys + * + * Original idea by: + * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ + */ + +/* + * One small change is: now keys are passed by object { keys: '...' } + * Might be useful, when you want to pass some other data to your handler + */ + +(function(jQuery) { + + jQuery.hotkeys = { + version: "0.8", + + specialKeys: { + 8: "backspace", + 9: "tab", + 10: "return", + 13: "return", + 16: "shift", + 17: "ctrl", + 18: "alt", + 19: "pause", + 20: "capslock", + 27: "esc", + 32: "space", + 33: "pageup", + 34: "pagedown", + 35: "end", + 36: "home", + 37: "left", + 38: "up", + 39: "right", + 40: "down", + 45: "insert", + 46: "del", + 59: ";", + 61: "=", + 96: "0", + 97: "1", + 98: "2", + 99: "3", + 100: "4", + 101: "5", + 102: "6", + 103: "7", + 104: "8", + 105: "9", + 106: "*", + 107: "+", + 109: "-", + 110: ".", + 111: "/", + 112: "f1", + 113: "f2", + 114: "f3", + 115: "f4", + 116: "f5", + 117: "f6", + 118: "f7", + 119: "f8", + 120: "f9", + 121: "f10", + 122: "f11", + 123: "f12", + 144: "numlock", + 145: "scroll", + 173: "-", + 186: ";", + 187: "=", + 188: ",", + 189: "-", + 190: ".", + 191: "/", + 192: "`", + 219: "[", + 220: "\\", + 221: "]", + 222: "'" + }, + + shiftNums: { + "`": "~", + "1": "!", + "2": "@", + "3": "#", + "4": "$", + "5": "%", + "6": "^", + "7": "&", + "8": "*", + "9": "(", + "0": ")", + "-": "_", + "=": "+", + ";": ": ", + "'": "\"", + ",": "<", + ".": ">", + "/": "?", + "\\": "|" + }, + + // excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url + textAcceptingInputTypes: [ + "text", "password", "number", "email", "url", "range", "date", "month", "week", "time", "datetime", + "datetime-local", "search", "color", "tel"], + + options: { + filterTextInputs: true + } + }; + + function keyHandler(handleObj) { + if (typeof handleObj.data === "string") { + handleObj.data = { + keys: handleObj.data + }; + } + + // Only care when a possible input has been specified + if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== "string") { + return; + } + + var origHandler = handleObj.handler, + keys = handleObj.data.keys.toLowerCase().split(" "); + + handleObj.handler = function(event) { + // Don't fire in text-accepting inputs that we didn't directly bind to + if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) || + (jQuery.hotkeys.options.filterTextInputs && + jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1))) { + return; + } + + var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[event.which], + character = String.fromCharCode(event.which).toLowerCase(), + modif = "", + possible = {}; + + jQuery.each(["alt", "ctrl", "shift"], function(index, specialKey) { + + if (event[specialKey + 'Key'] && special !== specialKey) { + modif += specialKey + '+'; + } + }); + + // metaKey is triggered off ctrlKey erronously + if (event.metaKey && !event.ctrlKey && special !== "meta") { + modif += "meta+"; + } + + if (event.metaKey && special !== "meta" && modif.indexOf("alt+ctrl+shift+") > -1) { + modif = modif.replace("alt+ctrl+shift+", "hyper+"); + } + + if (special) { + possible[modif + special] = true; + } + else { + possible[modif + character] = true; + possible[modif + jQuery.hotkeys.shiftNums[character]] = true; + + // "$" can be triggered as "Shift+4" or "Shift+$" or just "$" + if (modif === "shift+") { + possible[jQuery.hotkeys.shiftNums[character]] = true; + } + } + + for (var i = 0, l = keys.length; i < l; i++) { + if (possible[keys[i]]) { + return origHandler.apply(this, arguments); + } + } + }; + } + + jQuery.each(["keydown", "keyup", "keypress"], function() { + jQuery.event.special[this] = { + add: keyHandler + }; + }); + +})(jQuery || this.jQuery || window.jQuery); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/.bower.json new file mode 100644 index 00000000..89237482 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/.bower.json @@ -0,0 +1,37 @@ +{ + "name": "jquery_lazyload", + "version": "1.9.5", + "homepage": "http://www.appelsiini.net/projects/lazyload", + "authors": [ + "Mika Tuupola " + ], + "description": "jQuery plugin for lazy loading images", + "main": [ + "jquery.lazyload.js", + "jquery.scrollstop.js" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "**/*.min.js", + "**/*.html", + "**/*.textile", + "Gruntfile.js", + "lazyload.jquery.json", + "package.json", + "node_modules", + "bower_components", + "test", + "img" + ], + "_release": "1.9.5", + "_resolution": { + "type": "version", + "tag": "1.9.5", + "commit": "e54df43adef6ba76cb6f73edf80ec7f6935772d0" + }, + "_source": "git://github.com/tuupola/jquery_lazyload.git", + "_target": "~1.9.5", + "_originalSource": "jquery.lazyload", + "_direct": true +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/CONTRIBUTING.md b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/CONTRIBUTING.md new file mode 100644 index 00000000..4a5fb22a --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/CONTRIBUTING.md @@ -0,0 +1,39 @@ +# Contributing to Lazy Load + +## Only one feature or change per pull request + +Make pull requests only one feature or change at the time. For example you have fixed a bug. You also have optimized some code. Optimization is not related to a bug. These should be submitted as separate pull requests. This way I can easily choose what to include. It is also easier to understand the code changes. Commit messages should be descriptive and full sentences. + +Do not commit minified versions. Do not touch the version number. Make the pull requests against [1.9.x branch](https://github.com/tuupola/jquery_lazyload/commits/1.9.x). + +## Write meaningful commit messages + +Proper commit message is full sentence. It starts with capital letter but does not end with period. Headlines do not end with period. The GitHub default `Update filename.js` is not enough. When needed include also longer explanation what the commit does. + +``` +Capitalized, short (50 chars or less) summary + +More detailed explanatory text, if necessary. Wrap it to about 72 +characters or so. In some contexts, the first line is treated as the +subject of an email and the rest of the text as the body. The blank +line separating the summary from the body is critical (unless you omit +the body entirely); tools like rebase can get confused if you run the +two together. +``` + +When in doubt see Tim Pope's blogpost [A Note About Git Commit Messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + +## Follow the existing coding standards + +When contributing to open source project it is polite to follow the original authors coding standars. They might be different than yours. It is not a holy war. Just follow then original. + +```javascript +var snake_case = "something"; + +function camelCase(options) { +} + +if (true !== false) { + console.log("here be dragons"); +} +``` diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/README.md b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/README.md new file mode 100644 index 00000000..1be45d8e --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/README.md @@ -0,0 +1,48 @@ +# Lazy Load Plugin for jQuery + +Lazy Load delays loading of images in long web pages. Images outside of viewport wont be loaded before user scrolls to them. This is opposite of image preloading. + +Using Lazy Load on long web pages containing many large images makes the page load faster. Browser will be in ready state after loading visible images. In some cases it can also help to reduce server load. + +Lazy Load is inspired by [YUI ImageLoader](http://developer.yahoo.com/yui/imageloader/) Utility by Matt Mlinac. + +## How to Use? + +Lazy Load depends on jQuery. Include them both in end of your HTML code: + +``` + + +``` + +You must alter your HTML code. URL of the real image must be put into data-original attribute. It is good idea to give Lazy Loaded image a specific class. This way you can easily control which images plugin is binded to. Note that you should have width and height attributes in your image tag. + +``` + +``` + +then in your code do: + +``` +$("img.lazy").lazyload(); +``` + +This causes all images of class lazy to be lazy loaded. + +More information on [Lazy Load](http://www.appelsiini.net/projects/lazyload) project page. + +## Install + +You can install with [bower](http://bower.io/) or [npm](https://www.npmjs.com/). + + +``` +$ bower install jquery.lazyload +$ npm install jquery-lazyload +``` + + +# License + +All code licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). All images licensed under [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/deed.en_US). In other words you are basically free to do whatever you want. Just don't remove my name from the source. + diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/bower.json new file mode 100644 index 00000000..929d3c44 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/bower.json @@ -0,0 +1,27 @@ +{ + "name": "jquery_lazyload", + "version": "1.9.4", + "homepage": "http://www.appelsiini.net/projects/lazyload", + "authors": [ + "Mika Tuupola " + ], + "description": "jQuery plugin for lazy loading images", + "main": [ + "jquery.lazyload.js", + "jquery.scrollstop.js" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "**/*.min.js", + "**/*.html", + "**/*.textile", + "Gruntfile.js", + "lazyload.jquery.json", + "package.json", + "node_modules", + "bower_components", + "test", + "img" + ] +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/jquery.lazyload.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/jquery.lazyload.js new file mode 100644 index 00000000..5d106b58 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/jquery.lazyload.js @@ -0,0 +1,242 @@ +/* + * Lazy Load - jQuery plugin for lazy loading images + * + * Copyright (c) 2007-2015 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * http://www.appelsiini.net/projects/lazyload + * + * Version: 1.9.5 + * + */ + +(function($, window, document, undefined) { + var $window = $(window); + + $.fn.lazyload = function(options) { + var elements = this; + var $container; + var settings = { + threshold : 0, + failure_limit : 0, + event : "scroll", + effect : "show", + container : window, + data_attribute : "original", + skip_invisible : false, + appear : null, + load : null, + placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" + }; + + function update() { + var counter = 0; + + elements.each(function() { + var $this = $(this); + if (settings.skip_invisible && !$this.is(":visible")) { + return; + } + if ($.abovethetop(this, settings) || + $.leftofbegin(this, settings)) { + /* Nothing. */ + } else if (!$.belowthefold(this, settings) && + !$.rightoffold(this, settings)) { + $this.trigger("appear"); + /* if we found an image we'll load, reset the counter */ + counter = 0; + } else { + if (++counter > settings.failure_limit) { + return false; + } + } + }); + + } + + if(options) { + /* Maintain BC for a couple of versions. */ + if (undefined !== options.failurelimit) { + options.failure_limit = options.failurelimit; + delete options.failurelimit; + } + if (undefined !== options.effectspeed) { + options.effect_speed = options.effectspeed; + delete options.effectspeed; + } + + $.extend(settings, options); + } + + /* Cache container as jQuery as object. */ + $container = (settings.container === undefined || + settings.container === window) ? $window : $(settings.container); + + /* Fire one scroll event per scroll. Not one scroll event per image. */ + if (0 === settings.event.indexOf("scroll")) { + $container.bind(settings.event, function() { + return update(); + }); + } + + this.each(function() { + var self = this; + var $self = $(self); + + self.loaded = false; + + /* If no src attribute given use data:uri. */ + if ($self.attr("src") === undefined || $self.attr("src") === false) { + if ($self.is("img")) { + $self.attr("src", settings.placeholder); + } + } + + /* When appear is triggered load original image. */ + $self.one("appear", function() { + if (!this.loaded) { + if (settings.appear) { + var elements_left = elements.length; + settings.appear.call(self, elements_left, settings); + } + $("") + .bind("load", function() { + + var original = $self.attr("data-" + settings.data_attribute); + $self.hide(); + if ($self.is("img")) { + $self.attr("src", original); + } else { + $self.css("background-image", "url('" + original + "')"); + } + $self[settings.effect](settings.effect_speed); + + self.loaded = true; + + /* Remove image from array so it is not looped next time. */ + var temp = $.grep(elements, function(element) { + return !element.loaded; + }); + elements = $(temp); + + if (settings.load) { + var elements_left = elements.length; + settings.load.call(self, elements_left, settings); + } + }) + .attr("src", $self.attr("data-" + settings.data_attribute)); + } + }); + + /* When wanted event is triggered load original image */ + /* by triggering appear. */ + if (0 !== settings.event.indexOf("scroll")) { + $self.bind(settings.event, function() { + if (!self.loaded) { + $self.trigger("appear"); + } + }); + } + }); + + /* Check if something appears when window is resized. */ + $window.bind("resize", function() { + update(); + }); + + /* With IOS5 force loading images when navigating with back button. */ + /* Non optimal workaround. */ + if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) { + $window.bind("pageshow", function(event) { + if (event.originalEvent && event.originalEvent.persisted) { + elements.each(function() { + $(this).trigger("appear"); + }); + } + }); + } + + /* Force initial check if images should appear. */ + $(document).ready(function() { + update(); + }); + + return this; + }; + + /* Convenience methods in jQuery namespace. */ + /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ + + $.belowthefold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop(); + } else { + fold = $(settings.container).offset().top + $(settings.container).height(); + } + + return fold <= $(element).offset().top - settings.threshold; + }; + + $.rightoffold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.width() + $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left + $(settings.container).width(); + } + + return fold <= $(element).offset().left - settings.threshold; + }; + + $.abovethetop = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollTop(); + } else { + fold = $(settings.container).offset().top; + } + + return fold >= $(element).offset().top + settings.threshold + $(element).height(); + }; + + $.leftofbegin = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left; + } + + return fold >= $(element).offset().left + settings.threshold + $(element).width(); + }; + + $.inviewport = function(element, settings) { + return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && + !$.belowthefold(element, settings) && !$.abovethetop(element, settings); + }; + + /* Custom selectors for your convenience. */ + /* Use as $("img:below-the-fold").something() or */ + /* $("img").filter(":below-the-fold").something() which is faster */ + + $.extend($.expr[":"], { + "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, + "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, + "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, + /* Maintain BC for couple of versions. */ + "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } + }); + +})(jQuery, window, document); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/jquery.scrollstop.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/jquery.scrollstop.js new file mode 100644 index 00000000..a0bb6371 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery.lazyload/jquery.scrollstop.js @@ -0,0 +1,72 @@ +/* http://james.padolsey.com/javascript/special-scroll-events-for-jquery/ */ + +(function(){ + + var special = jQuery.event.special, + uid1 = "D" + (+new Date()), + uid2 = "D" + (+new Date() + 1); + + special.scrollstart = { + setup: function() { + + var timer, + handler = function(evt) { + + var _self = this, + _args = arguments; + + if (timer) { + clearTimeout(timer); + } else { + evt.type = "scrollstart"; + jQuery.event.dispatch.apply(_self, _args); + } + + timer = setTimeout( function(){ + timer = null; + }, special.scrollstop.latency); + + }; + + jQuery(this).bind("scroll", handler).data(uid1, handler); + + }, + teardown: function(){ + jQuery(this).unbind( "scroll", jQuery(this).data(uid1) ); + } + }; + + special.scrollstop = { + latency: 300, + setup: function() { + + var timer, + handler = function(evt) { + + var _self = this, + _args = arguments; + + if (timer) { + clearTimeout(timer); + } + + timer = setTimeout( function(){ + + timer = null; + evt.type = "scrollstop"; + jQuery.event.dispatch.apply(_self, _args); + + + }, special.scrollstop.latency); + + }; + + jQuery(this).bind("scroll", handler).data(uid2, handler); + + }, + teardown: function() { + jQuery(this).unbind( "scroll", jQuery(this).data(uid2) ); + } + }; + +})(); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery/.bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/.bower.json new file mode 100644 index 00000000..d9a564bb --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/.bower.json @@ -0,0 +1,37 @@ +{ + "name": "jquery", + "version": "2.1.3", + "main": "dist/jquery.js", + "license": "MIT", + "ignore": [ + "**/.*", + "build", + "speed", + "test", + "*.md", + "AUTHORS.txt", + "Gruntfile.js", + "package.json" + ], + "devDependencies": { + "sizzle": "2.1.1-jquery.2.1.2", + "requirejs": "2.1.10", + "qunit": "1.14.0", + "sinon": "1.8.1" + }, + "keywords": [ + "jquery", + "javascript", + "library" + ], + "homepage": "https://github.com/jquery/jquery", + "_release": "2.1.3", + "_resolution": { + "type": "version", + "tag": "2.1.3", + "commit": "8f2a9d9272d6ed7f32d3a484740ab342c02541e0" + }, + "_source": "git://github.com/jquery/jquery.git", + "_target": ">=1.6", + "_originalSource": "jquery" +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery/MIT-LICENSE.txt b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/MIT-LICENSE.txt new file mode 100644 index 00000000..cdd31b5c --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/MIT-LICENSE.txt @@ -0,0 +1,21 @@ +Copyright 2014 jQuery Foundation and other contributors +http://jquery.com/ + +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. diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery/bower.json b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/bower.json new file mode 100644 index 00000000..61c94872 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/bower.json @@ -0,0 +1,27 @@ +{ + "name": "jquery", + "version": "2.1.3", + "main": "dist/jquery.js", + "license": "MIT", + "ignore": [ + "**/.*", + "build", + "speed", + "test", + "*.md", + "AUTHORS.txt", + "Gruntfile.js", + "package.json" + ], + "devDependencies": { + "sizzle": "2.1.1-jquery.2.1.2", + "requirejs": "2.1.10", + "qunit": "1.14.0", + "sinon": "1.8.1" + }, + "keywords": [ + "jquery", + "javascript", + "library" + ] +} diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/jquery/dist/jquery.js b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/dist/jquery.js new file mode 100644 index 00000000..79d631ff --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/jquery/dist/jquery.js @@ -0,0 +1,9205 @@ +/*! + * jQuery JavaScript Library v2.1.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-18T15:11Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// + +var arr = []; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + version = "2.1.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // 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 just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // 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 ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + 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: arr.sort, + splice: arr.splice +}; + +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; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // 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 ( i === length ) { + 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({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isPlainObject: function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf("use strict") === 1 ) { + script = document.createElement("script"); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.0-pre + * http://sizzlejs.com/ + * + * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-16 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + nodeType = context.nodeType; + + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + if ( !seed && documentIsHTML ) { + + // Try to shortcut find operations when possible (e.g., not under DocumentFragment) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType !== 1 && selector; + + // 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 + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = 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).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + parent = doc.defaultView; + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Support tests + ---------------------------------------------------------------------- */ + documentIsHTML = !isXML( doc ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "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; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + // 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: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }, + + sibling: function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter(function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} + return cur; +} + +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 sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "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 elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.unique( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // 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, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // 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.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // We once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[0], key ) : emptyGet; +}; + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( owner ) { + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + +function Data() { + // Support: Android<4, + // Old WebKit does not have Object.preventExtensions/freeze method, + // return new empty object instead with no [[set]] accessor + Object.defineProperty( this.cache = {}, 0, { + get: function() { + return {}; + } + }); + + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; +Data.accepts = jQuery.acceptData; + +Data.prototype = { + key: function( owner ) { + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return the key for a frozen object. + if ( !Data.accepts( owner ) ) { + return 0; + } + + var descriptor = {}, + // Check if the owner object already has a cache key + unlock = owner[ this.expando ]; + + // If not, create one + if ( !unlock ) { + unlock = Data.uid++; + + // Secure it in a non-enumerable, non-writable property + try { + descriptor[ this.expando ] = { value: unlock }; + Object.defineProperties( owner, descriptor ); + + // Support: Android<4 + // Fallback to a less secure definition + } catch ( e ) { + descriptor[ this.expando ] = unlock; + jQuery.extend( owner, descriptor ); + } + } + + // Ensure the cache object + if ( !this.cache[ unlock ] ) { + this.cache[ unlock ] = {}; + } + + return unlock; + }, + set: function( owner, data, value ) { + var prop, + // There may be an unlock assigned to this node, + // if there is no entry for this "owner", create one inline + // and set the unlock as though an owner entry had always existed + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + // Fresh assignments by object are shallow copied + if ( jQuery.isEmptyObject( cache ) ) { + jQuery.extend( this.cache[ unlock ], data ); + // Otherwise, copy the properties one-by-one to the cache object + } else { + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + } + return cache; + }, + get: function( owner, key ) { + // Either a valid cache is found, or will be created. + // New caches will be created and the unlock returned, + // allowing direct access to the newly created + // empty data object. A valid owner object must be provided. + var cache = this.cache[ this.key( owner ) ]; + + return key === undefined ? + cache : cache[ key ]; + }, + access: function( owner, key, value ) { + var stored; + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ((key && typeof key === "string") && value === undefined) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase(key) ); + } + + // [*]When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + if ( key === undefined ) { + this.cache[ unlock ] = {}; + + } else { + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + }, + hasData: function( owner ) { + return !jQuery.isEmptyObject( + this.cache[ owner[ this.expando ] ] || {} + ); + }, + discard: function( owner ) { + if ( owner[ this.expando ] ) { + delete this.cache[ owner[ this.expando ] ]; + } + } +}; +var data_priv = new Data(); + +var data_user = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + data_user.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend({ + hasData: function( elem ) { + return data_user.hasData( elem ) || data_priv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return data_user.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + data_user.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to data_priv methods, these can be deprecated. + _data: function( elem, name, data ) { + return data_priv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + data_priv.remove( elem, name ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = data_user.get( elem ); + + if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + data_priv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + data_user.set( this, key ); + }); + } + + return access( this, function( value ) { + var data, + camelKey = jQuery.camelCase( key ); + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + // Attempt to get data from the cache + // with the key as-is + data = data_user.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to get data from the cache + // with the key camelized + data = data_user.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each(function() { + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = data_user.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + data_user.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf("-") !== -1 && data !== undefined ) { + data_user.set( this, key, value ); + } + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + data_user.remove( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = data_priv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = data_priv.access( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return data_priv.get( elem, key ) || data_priv.access( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + data_priv.remove( elem, [ type + "queue", key ] ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = data_priv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +})(); +var strundefined = typeof undefined; + + + +support.focusinBubbles = "onfocusin" in window; + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.hasData( elem ) && data_priv.get( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + data_priv.remove( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // 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. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } +}; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // 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.defaultPrevented === undefined && + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = 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 = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && e.preventDefault ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && e.stopPropagation ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// Support: Chrome 15+ +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// Support: Firefox, Chrome, Safari +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + data_priv.remove( doc, fix ); + + } else { + data_priv.access( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + + // Support: IE9 + option: [ 1, "" ], + + thead: [ 1, "
    ", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] + }; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: 1.x compatibility +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute("type"); + } + + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + data_priv.set( + elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) + ); + } +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( data_priv.hasData( src ) ) { + pdataOld = data_priv.access( src ); + pdataCur = data_priv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( data_user.hasData( src ) ) { + udataOld = data_user.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + data_user.set( dest, udataCur ); + } +} + +function getAll( context, tag ) { + var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : + context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + }, + + cleanData: function( elems ) { + var data, elem, type, key, + special = jQuery.event.special, + i = 0; + + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + if ( jQuery.acceptData( elem ) ) { + key = elem[ data_priv.expando ]; + + if ( key && (data = data_priv.cache[ key ]) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + if ( data_priv.cache[ key ] ) { + // Discard any remaining `private` data + delete data_priv.cache[ key ]; + } + } + } + // Discard any remaining `user` data + delete data_user.cache[ elem[ data_user.expando ] ]; + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each(function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + }); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + // Support: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optimization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "
    iframe with addEventListener('hashchange', function() { + document.body.style.background = 'lime'; +}, false); +
    + + +

    Session history management

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "history"
    + +

    Auto

    Test if history.pushState was successful
    + + +

    IndexedDB

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "indexeddb"
    + + +

    JSON parsing

    [Table] [Single feat]  +

    Auto

    + +

    Auto

    Create a JS object, convert to JSON string, convert back to object and compare.
    + + +

    CSS3 Multiple backgrounds

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "multiplebgs"
    + +

    Visual-square

    background-repeat: repeat-x; +background-image: url(caniuse_files/green5x5.png), url(caniuse_files/green5x5.png), url(caniuse_files/green5x5.png), url(caniuse_files/green5x5.png), url(caniuse_files/green5x5.png), url(caniuse_files/green5x5.png); +background-position: 0 0, 0 5px, 0 10px, 0 15px, 0 20px, 0 25px;
    + + +

    CSS3 Multiple column layout

    [Table] [Single feat] -pre- +

    Auto (m)

    Modernizr test for: "csscolumns"
    + +

    Visual-square

    +
    +
    +
    +
    column-width: 15px; +column-gap: 0;
    + + +

    Web Storage - name/value pairs

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "localstorage"
    + +

    Auto

    Test if getItem, setItem and removeItem work.
    + + +

    Web Notifications

    [Table] [Single feat]  +

    Auto

    + + +

    Offline web applications

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "applicationcache"
    + + +

    querySelector/querySelectorAll

    [Table] [Single feat]  +

    Auto

    + +

    Auto

    +
    +
    +
    +
    +
    querySelector test on selector '[data-foo=bar] + *'
    + +

    Auto

    +
    +
    +
    +
    +
    querySelectorAll test on selector '[data-foo=bar] + *'
    + + +

    SVG (basic support)

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "svg"
    + +

    Visual-square

    SVG fail +
    SVG in <object>
    + + +

    SVG effects for HTML

    [Table] [Single feat]  + +

    Visual

    SVG fail +

    Text must appear blurry

    SVG with feGaussianBlur filter on foreignObject
    + + +

    Inline SVG in HTML5

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "inlinesvg"
    + +

    Visual-square

    + + +
    + + +

    SVG SMIL animation

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "smil"
    + +

    Visual-square

    SVG fail +
    SVG with animate element inside a rect
    + + +

    Touch events

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "touch"
    + + +

    CSS3 Transforms

    [Table] [Single feat] -pre- +

    Auto (m)

    Modernizr test for: "csstransforms"
    + +

    Visual-square

    +
    +
    +
    transform: translate(30px);
    + + +

    CSS3 3D Transforms

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "csstransforms3d"
    + +

    Visual-square

    +
    +
    +
    Parent: +perspective: 600; +perspective-origin: 0 200px; + +Child: + +transform: translate3d(-234px, 0, 0) rotate3d(0, 1, 0, -70deg);
    + + +

    Video element

    [Table] [Single feat]  +

    Auto

    + +

    Interact

    Video with controls and all three formats available.
    + +

    Interact

    Video with controls and all three formats available (with MIME).
    + + +

    Web Sockets

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "websockets"
    + + +

    Web Workers

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "webworkers"
    + +

    Auto

    Create a new Worker using new Worker('worker.js'); + +Then, test postMessage and onmessage event.
    + + +

    Cross-document messaging

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "postmessage"
    + + +

    XMLHttpRequest 2

    [Table] [Single feat]  +

    Auto

    + + +

    XHTML served as application/xhtml+xml

    [Table] [Single feat]  +

    Auto

    + + +

    CSS Generated content

    [Table] [Single feat]  +

    Visual

    +-
    Element with CSS: +#gencontent:before { + content: 'A'; +} +#gencontent:after { + content: 'Z'; +}
    + + +

    CSS Table display

    [Table] [Single feat]  +

    Visual

    +
    +
    +
    +
    topleft
    +
    topright
    +
    +
    +
    bottomleft
    +
    bottomright
    +
    +
    +

    Should be 2x2 table

    + + +

    HTML5 form features

    [Table] [Single feat]  +

    Visual




    date/time/range/number widgets

    + + +

    MathML

    [Table] [Single feat]  +

    Visual

    + + +

    PNG alpha transparency

    [Table] [Single feat]  +

    Visual

    + + +

    Ruby annotation

    [Table] [Single feat]  +

    Visual

    +
    +(bottom1)(top1)(bottom2)(top2) +

    Elements should be stacked on top of each other

    + + +

    SVG filters

    [Table] [Single feat]  +

    Visual

    + object SVG not supported + +
    + +

    Visual-square

    SVG fail +

    Must be green (not lime)

    SVG with <feColorMatrix type="hueRotate" values="120"/>
    + +

    Visual-square

    SVG fail +
    SVG with <feFlood flood-color="lime"/>
    + + +

    CSS3 Word-wrap

    [Table] [Single feat]  +

    Visual

    +
    abcdefghijklmnopqrstuvwxyz
    + + +

    Text should wrap

    + +

    Visual

    + +
    abcdefghijklmnopqrstuvwxyz
    +

    Text should overflow box

    + +

    Visual-square

    +
    abcdefghijklmnop
    +
    +
    word-wrap: break-word;
    + + +

    calc() as CSS unit value

    [Table] [Single feat]  +

    Visual-square

    +
    +
    width: calc(10px + 20px);
    + +

    Visual-square

    +
    +
    height: calc(60px - 100%); +width: calc((100% / 2) + 15px - 0.5em); +border-right: calc(0.5em) solid lime;
    + + +

    CSS Grid Layout

    [Table] [Single feat]  +

    Visual-square

    + +
    +
    +
    +
    +
    + +
    Grid with two columns, two rows and three elements taking up space.
    + + +

    CSS3 Media Queries

    [Table] [Single feat]  +

    Visual-square

    + +
    +
    +
    +
    + + +

    CSS 2.1 selectors

    [Table] [Single feat]  +

    Visual-square

    +
    +
    +
    +
    Test for child ( > )selector
    + +

    Visual-square

    +
    +
    +
    Adjacent sibling selector test ( + )
    + +

    Visual-square

    +
    Attribute selector ( [role="none"] )
    + + +

    CSS3 Box-sizing

    [Table] [Single feat]  +

    Visual-square

    +
    +
    + + +

    Data URLs

    [Table] [Single feat]  +

    Visual-square

    div with data URL as background image
    + + +

    New semantic elements

    [Table] [Single feat]  +

    Visual-square

    + +
    +
    +
    + +
    +
    +
    + +
    section, article, aside, hgroup, header, footer, nav tested for default "block" style.
    + + +

    CSS inline-block

    [Table] [Single feat]  +

    Visual-square

    + + +

    CSS min/max-width/height

    [Table] [Single feat]  +

    Visual-square

    + +

    Visual-square

    + +

    Visual-square

    + +

    Visual-square

    + + +

    CSS3 object-fit/object-position

    [Table] [Single feat]  +

    Visual-square

    + +
    + +
    object-fit: contain
    + +

    Visual-square

    + +
    + +
    +
    object-position: 30px 30px;
    + + +

    rem (root em) units

    [Table] [Single feat]  +

    Visual-square

    + A +
    span with single character and font-size: 5rem;
    + + +

    SVG in CSS backgrounds

    [Table] [Single feat]  +

    Visual-square

    + +
    + + +

    SVG in HTML img element

    [Table] [Single feat]  +

    Visual-square

    + + +

    contenteditable attribute (basic support)

    [Table] [Single feat]  +

    Interact

    +

    This element should be editable.

    +
    Div element with attribute contenteditable="true"
    + + +

    CSS3 selectors

    [Table] [Single feat]  +

    Interact

    Test here
    + + +

    Drag and Drop

    [Table] [Single feat]  +

    Interact

    Test here
    + + +

    WAI-ARIA Accessibility features

    [Table] [Single feat]  + + +

    Text API for Canvas

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "canvastext"
    + + +

    WebGL - 3D Canvas graphics

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "webgl"
    + +

    Visual-square

    + +
    + + +

    SVG fonts

    [Table] [Single feat]  +

    Visual

    +

    Windsong font

    +
    + + +

    TTF/OTF - TrueType and OpenType font support

    [Table] [Single feat]  +

    Visual

    +

    Windsong font

    +
    OTF font test
    + +

    Visual

    +

    Windsong font

    +
    TTF font test
    + + +

    WOFF - Web Open Font Format

    [Table] [Single feat]  +

    Visual

    +

    Windsong font

    +
    + + +

    Progress & Meter

    [Table] [Single feat]  +

    Visual

    +fail +fail +

    Progress and meter widgets at 50%

    + + +

    Datalist element

    [Table] [Single feat]  +

    Interact

    + + + + +

    Show "foo" and "foobar" as options when "f" is entered

    + + +

    Form validation

    [Table] [Single feat]  +

    Interact

    Form should show warning and NOT submit

    + + +

    MPEG-4/H.264 video format

    [Table] [Single feat]  +

    Auto

    + +

    Interact

    Video, no MIME, no type attribute.
    + +

    Interact

    Video with source element
    + +

    Interact

    Video with source element and MIME set
    + + +

    Ogg/Theora video format

    [Table] [Single feat]  +

    Auto

    + +

    Interact

    Video, no MIME, no type attribute.
    + +

    Interact

    Video with source element and MIME set
    + +

    Interact

    Video with source element
    + + +

    WebM/VP8 video format

    [Table] [Single feat]  +

    Auto

    + +

    Interact

    Video, no MIME, no type attribute.
    + +

    Interact

    Video with source element
    + +

    Interact

    Video with source element and MIME set
    + + +

    Animated PNG (APNG) [unoff]

    [Table] [Single feat]  +

    Auto

    Test for second frame using Canvas element
    + +

    Visual

    Must animate

    + + +

    CSS Canvas Drawings [unoff]

    [Table] [Single feat] -pre- +

    Auto

    'getCSSCanvasContext' in document
    + + +

    CSS Reflections [unoff]

    [Table] [Single feat] -pre- +

    Auto (m)

    Modernizr test for: "cssreflections"
    + + +

    Visual-square

    + +
    +
    + +
    + + + +

    Web SQL Database [unoff]

    [Table] [Single feat]  +

    Auto (m)

    Modernizr test for: "websqldatabase"
    + + +

    Stream API [unoff]

    [Table] [Single feat]  +

    Auto

    Test for "getUserMedia" in navigator object
    + + +

    CSS Masks [unoff]

    [Table] [Single feat] -pre- +

    Visual

    +
    + +
    mask-image: url(caniuse_files/alpha.png);
    + + +

    CSS3 Text-overflow [unoff]

    [Table] [Single feat]  +

    Visual

    + +
    +abcdefghijklmnopqrstuvwxyz +

    Should end with ellipsis

    text-overflow: ellipsis;
    + + +

    CSS text-stroke [unoff]

    [Table] [Single feat] -pre- +

    Visual

    + +
    +green stroked text +
    text-stroke: 2px lime;
    + + +

    EOT - Embedded OpenType fonts [unoff]

    [Table] [Single feat]  +

    Visual

    +

    Windsong font

    +
    + + +

    XHTML+SMIL animation [unoff]

    [Table] [Single feat]  + + + +

    Most tests by Alexis Deveria, additional contributions by Paul Irish

    + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.eot b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.eot new file mode 100644 index 00000000..768d0530 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.eot differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.otf b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.otf new file mode 100644 index 00000000..369e6409 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.otf differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.svg b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.svg new file mode 100644 index 00000000..b200eb52 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.svg @@ -0,0 +1,147 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Bright Ideas Magazine + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.ttf b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.ttf new file mode 100644 index 00000000..4d341921 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.ttf differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.woff b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.woff new file mode 100644 index 00000000..1aa47d4c Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/Windsong-webfont.woff differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/alpha.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/alpha.png new file mode 100644 index 00000000..b7a0f352 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/alpha.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/apng_test.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/apng_test.png new file mode 100644 index 00000000..f359d3c0 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/apng_test.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/before-after.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/before-after.png new file mode 100644 index 00000000..7a94c4b1 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/before-after.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/form_validation.html b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/form_validation.html new file mode 100644 index 00000000..e7a060cf --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/form_validation.html @@ -0,0 +1,15 @@ + + + + +
    + + + + +
    + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/ga.js b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/ga.js new file mode 100644 index 00000000..76a01b02 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/ga.js @@ -0,0 +1,43 @@ +(function(){var k=void 0,aa=encodeURIComponent,l=String,o=Math,ba="push",ca="cookie",p="charAt",q="indexOf",da="getTime",r="toString",t="window",v="length",w="document",x="split",y="location",ea="protocol",fa="href",z="substring",A="join",C="toLowerCase";var ga="_gat",ha="_gaq",ia="4.9.4",ja="_gaUserPrefs",ka="ioo",D="&",E="=",F="__utma=",H="__utmb=",la="__utmc=",ma="__utmk=",I="__utmv=",J="__utmz=",na="__utmx=",oa="GASO=";var pa=function(){var d=this,f=[],b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";d.set=function(b){f[b]=!0};d.Sc=function(){for(var d=[],e=0;e=0};b.Xc=function(){return b.Jb("Firefox")&&![].reduce};b.Vc=function(){return L[t][ja]};b.Gc=function(){return L[t].external};b.Hc=function(){return L[t].performance||L[t].webkitPerformance};b.Ic=function(){return L[t].top==L[t]};b.Ya=function(b){var e=L[t]&&L[t].gaGlobal;if(b&&!e)e={},L[t].gaGlobal=e;return e};b.ec=function(b){L[w][y].href=b};b.qb= +function(d){if(!d||!b.Jb("Firefox"))return d;for(var d=d.replace(/\n|\r/g," "),e=0,f=d[v];e-1&&(b=d[q](b,e),b<0&&(b=d[v]),h=d[z](e+f[q](E)+1,b)));return h},xa=function(d){var f=!1,b=0,h,e;if(!M(d)){f= +!0;for(h=0;h-1)}return f},P=function(d,f){var b=aa;return b instanceof Function?f?encodeURI(d):b(d):(K(68),escape(d))},Q=function(d,f){var b=decodeURIComponent,h,d=d[x]("+")[A](" ");if(b instanceof Function)try{h=f?decodeURI(d):b(d)}catch(e){K(17),h=unescape(d)}else K(68),h=unescape(d);return h},R=function(d,f){return d[q](f)>-1}; +function ya(d){if(!d||""==d)return"";for(;d[p](0)[v]>0&&" \n\r\t"[q](d[p](0))>-1;)d=d[z](1);for(;d[p](d[v]-1)[v]>0&&" \n\r\t"[q](d[p](d[v]-1))>-1;)d=d[z](0,d[v]-1);return d}var T=function(d,f){d[ba]||K(94);d[d[v]]=f},za=function(d){var f=1,b=0,h;if(!M(d)){f=0;for(h=d[v]-1;h>=0;h--)b=d.charCodeAt(h),f=(f<<6&268435455)+b+(b<<14),b=f&266338304,f=b!=0?f^b>>21:f}return f},Aa=function(){return o.round(o.random()*2147483647)},Ba=function(){};var Ca=function(d,f){this.ib=d;this.jb=f},Da=function(){function d(b){for(var d=[],b=b[x](","),e,f=0;f0&&(i=i[x]("^")[0]);b=i[x](":");i=b[1];d=parseInt(b[0],10);!j&&d0?h(b):"";m.o&&(c=e.Oc(L[w][ca],a,m.o,c,b),a="2"+a,j=b>0?h(m.s):"");a+=c;a=L.qb(a);a[v]>2E3&&(K(69),a=a[z](0,2E3));j=a+"; path="+m.f+"; "+j+e.hb();if(!V.pb())L[w].cookie=j};e.Oc=function(a,c,d,j,i){var g="",i=i||m.s,j=b([j,e.m+i*1],d),g=N(a,"2"+c,";");if(!M(g))return a=b(f(a,c,d,!0),d),g=g[x](a)[A](""),g=j+g;return j};e.hb=function(){return M(m.b)?"":"domain="+ +m.b+";"}};var Fa=function(d){function f(a){a=ua(a)?a[A]("."):"";return M(a)?"-":a}function b(a,c){var n=[],b;if(!M(a)&&(n=a[x]("."),c))for(b=0;b')}catch(m){e=h.createElement("iframe"),e.name=f}e.height="0";e.width="0";e.style.display="none";e.style.visibility="hidden";var g=h[y], +g=g[ea]+"//"+g.host+"/favicon.ico",g=Ga+"u/post_iframe.html#"+aa(g),a=function(){e.src="";e.parentNode&&e.parentNode.removeChild(e)};ta(L[t],"beforeunload",a);var c=!1,u=0,j=function(){if(!c){try{if(u>9||e.contentWindow[y].host==h[y].host){c=!0;a();var d=L[t],g="beforeunload",n=a;d.removeEventListener?d.removeEventListener(g,n,!1):d.detachEvent&&d.detachEvent("on"+g,n);b&&b();return}}catch(f){}u++;L.setTimeout(j,200)}};ta(e,"load",j);h.body.appendChild(e);e.src=g}else L.setTimeout(function(){d.Ob(f, +b)},100)}};var Ka=function(d){var f=this,b=d,h=new Fa(b),e=null,m=!V.pb(),g=function(){};f.Uc=function(){return"https:"==L[w][y][ea]?"https://ssl.google-analytics.com/__utm.gif":"http://www.google-analytics.com/__utm.gif"};f.A=function(a,c,d,j,i,s){e||(e=new Ja);var n=b.B,O=L[w][y];h.Z(d);var B=h.z()[x](".");if(B[1]<500||j){if(i){var S=(new Date)[da](),X;X=(S-B[3])*(b.Ac/1E3);X>=1&&(B[2]=o.min(o.floor(B[2]*1+X),b.zc),B[3]=S)}if(j||!i||B[2]>=1){!j&&i&&(B[2]=B[2]*1-1);j=B[1]*1+1;B[1]=j;i="utmwv="+ia;S="&utms="+ +j;X="&utmn="+Aa();j=i+"e"+S+X;a=i+S+X+(M(O.hostname)?"":"&utmhn="+P(O.hostname))+(b.L==100?"":"&utmsp="+P(b.L))+a;if(0==n||2==n)O=2==n?g:s||g,m&&e.Bb(b.ga,a,j,O,!0);if(1==n||2==n)c="&utmac="+c,j+=c,a+=c+"&utmcc="+f.Tc(d),V.Ab&&(d="&aip=1",j+=d,a+=d),a+="&utmu="+qa.Sc(),m&&e.Bb(f.Uc(),a,j,s)}}h.$(B[A]("."));h.aa()};f.Tc=function(a){for(var c=[],b=[F,J,I,na],d=h.g(),i,g=0;g0)for(b=0;b0;)d+=a--^c++;return za(d)}};var Z=function(d,f,b,h){function e(a){var c="",c=a[x]("://")[1][C]();R(c,"/")&&(c=c[x]("/")[0]);return c}var m=h,g=this;g.a=d;g.ob=f;g.m=b;g.mb=function(a){var c=g.ua();return new Z.v(N(a,m.Ea+E,D),N(a,m.Ha+E,D),N(a,m.Ja+E,D),g.R(a,m.Ca,"(not set)"),g.R(a,m.Fa,"(not set)"),g.R(a,m.Ia,c&&!M(c.G)?Q(c.G):k),g.R(a,m.Da,k),N(a,m.vc+E,D))};g.nb=function(a){var c=e(a),b;b=a;var d="";b=b[x]("://")[1][C]();R(b,"/")&&(b=b[x]("/")[1],R(b,"?")&&(d=b[x]("?")[0]));b=d;if(R(c,"google")&&(a=a[x]("?")[A](D),R(a,D+ +m.xc+E)&&b==m.wc))return!0;return!1};g.ua=function(){var a,c=g.ob,b,d=m.J;if(!M(c)&&"0"!=c&&R(c,"://")&&!g.nb(c)){a=e(c);for(var i=0;i9?h[z](n+1)*1:0,f++,h=0==h?1:h,a.ra([B,g.m,h,f,e.H()][A](".")),a.sa()}}}}; +Z.v=function(d,f,b,h,e,m,g,a){var c=this;c.q=d;c.Q=f;c.ya=b;c.n=h;c.P=e;c.G=m;c.Gb=g;c.xa=a;c.H=function(){var a=[],b=[["cid",c.q],["csr",c.Q],["gclid",c.ya],["ccn",c.n],["cmd",c.P],["ctr",c.G],["cct",c.Gb],["dclid",c.xa]],d,e;if(c.fb())for(d=0;d0&&b<=a.Ta){var f=P(c),h=P(d);f[v]+h[v]<=64&&(e.r[b]=[c,d,g],e.T(),n=!0)}return n};e.Zb=function(a){if((a=e.r[a])&&1===a[2])return a[1]};e.Yb=function(a){var b=e.r;b[a]&&(delete b[a],e.T())};e.Pc=function(){c.t(8);c.t(9);c.t(11);var a=e.r,b,d;for(d in a)if(b=a[d])c.j(8,d,b[0]),c.j(9,d,b[1]),(b=b[2])&&3!=b&&c.j(11,d,""+b)}};var Na=function(){function d(a,b,c,d){k==g[a]&&(g[a]={});k==g[a][b]&&(g[a][b]=[]);g[a][b][c]=d}function f(a,b,c){if(k!=g[a]&&k!=g[a][b])return g[a][b][c]}function b(a,b){if(k!=g[a]&&k!=g[a][b]){g[a][b]=k;var c=!0,d;for(d=0;d0?b+"00":"0"};b.sb=function(){var d=b.Kc();if(d==k||isNaN(d))return!1;if(d<=0)return!0;if(d>2147483648)return!1; +var a=b.rb;a.t(14);a.ia(14);var c=b.Jc(d);a.j(14,1,c)&&a.ja(14,1,d)&&b.Lc();h&&h.isValidLoadTime!=k&&h.setPageReadyTime();return!1};b.Wa=function(){if(!b.Mc())return!1;if(!L.Ic())return!1;b.sb()&&ta(L[t],"load",b.sb,!1);return!0}};var $=function(){};$.Zc=function(d){var f="gaso=",b=L[w][y].hash;d=b&&1==b[q](f)?N(b,f,D):(b=L[t].name)&&0<=b[q](f)?N(b,f,D):N(d.g(),oa,";");return d};$.ad=function(d,f){var b=(f||"www")+".google.com",b="https://"+b+"/analytics/reporting/overlay_js?gaso="+d+D+Aa(),h="_gasojs",e=L[w].createElement("script");e.type="text/javascript";e.src=b;if(h)e.id=h;(L[w].getElementsByTagName("head")[0]||L[w].getElementsByTagName("body")[0]).appendChild(e)}; +$.load=function(d,f){if(!$.$c){var b=$.Zc(f),h=b&&b.match(/^(?:\|([-0-9a-z.]{1,30})\|)?([-.\w]{10,1200})$/i);if(h)f.Dc(b),f.Ec(),V._gasoDomain=d.b,V._gasoCPath=d.f,$.ad(h[2],h[1]);$.$c=!0}};var Qa=function(d,f,b){function h(){if("auto"==j.b){var a=L[w].domain;"www."==a[z](0,4)&&(a=a[z](4));j.b=a}j.b=j.b[C]()}function e(){h();var a=j.b,b=a[q]("www.google.")*a[q](".google.")*a[q]("google.");return b||"/"!=j.f||a[q]("google.org")>-1}function m(b,c,d){if(M(b)||M(c)||M(d))return"-";b=N(b,F+a.a+".",c);M(b)||(b=b[x]("."),b[5]=""+(b[5]?b[5]*1+1:1),b[3]=b[4],b[4]=d,b=b[A]("."));return b}function g(){return"file:"!=L[w][y][ea]&&e()}var a=this,c=sa(a),u=k,j=new Da,i=!1,s=k;a.n=d;a.m=o.round((new Date)[da]()/ +1E3);a.p=f||"UA-XXXXX-X";a.ab=L[w].referrer;a.oa=k;a.d=k;a.F=!1;a.O=k;a.e=k;a.bb=k;a.pa=k;a.a=k;a.k=k;j.o=b?P(b):k;a.eb=!1;a.mc=function(){return Aa()^a.O.cc()&2147483647};a.lc=function(){if(!j.b||""==j.b||"none"==j.b)return j.b="",1;h();return j.Ua?za(j.b):1};a.kc=function(a,b){if(M(a))a="-";else{b+=j.f&&"/"!=j.f?j.f:"";var c=a[q](b),a=c>=0&&c<=8?"0":"["==a[p](0)&&"]"==a[p](a[v]-1)?"-":a}return a};a.na=function(b){var c="";c+=j.ka?a.O.dc():"";c+=j.la&&!M(L[w].title)?"&utmdt="+P(L[w].title):"";var d; +d=L.Ya(!0);if(!d.hid)d.hid=Aa();d=d.hid;c+="&utmhid="+d+"&utmr="+P(l(a.oa))+"&utmp="+P(a.pc(b));return c};a.pc=function(a){var b=L[w][y];a&&K(13);return a=k!=a&&""!=a?P(a,!0):P(b.pathname+b.search,!0)};a.uc=function(b){if(a.D()){var c="";a.e!=k&&a.e.C()[v]>0&&(c+="&utme="+P(a.e.C()));c+=a.na(b);u.A(c,a.p,a.a)}};a.jc=function(){var b=new Fa(j);return b.Z(a.a)?b.Tb():k};a.cb=c("_getLinkerUrl",52,function(b,c){var d=b[x]("#"),e=b,f=a.jc();if(f)if(c&&1>=d[v])e+="#"+f;else if(!c||1>=d[v])1>=d[v]?e+=(R(b, +"?")?D:"?")+f:e=d[0]+(R(b,"?")?D:"?")+f+"#"+d[1];return e});a.nc=function(){var b=a.m,c=a.k,d=c.g(),e=a.a+"",f=L.Ya(),g,h=R(d,F+e+"."),i=R(d,H+e),u=R(d,la+e),s,G=[],Y="",Ia=!1,d=M(d)?"":d;if(j.w&&!a.eb){g=L[w][y]&&L[w][y].hash?L[w][y][fa][z](L[w][y][fa][q]("#")):"";j.U&&!M(g)&&(Y=g+D);Y+=L[w][y].search;if(!M(Y)&&R(Y,F))c.Sb(Y),c.Ba()||c.Qb(),s=c.ba(),a.eb=!0;g=c.ea;var va=c.Pa,U=c.Sa;M(g())||(va(Q(g())),R(g(),";")||U());g=c.da;va=c.X;U=c.Y;M(g())||(va(g()),R(g(),";")||U())}M(s)?h?(s=!i||!u)?(s=m(d, +";",l(b)),a.F=!0):(s=N(d,F+e+".",";"),G=N(d,H+e,";")[x](".")):(s=[e,a.mc(),b,b,b,1][A]("."),Ia=a.F=!0):M(c.z())||M(c.ca())?(s=m(Y,D,l(b)),a.F=!0):(G=c.z()[x]("."),e=G[0]);s=s[x](".");L[t]&&f&&f.dh==e&&!j.o&&(s[4]=f.sid?f.sid:s[4],Ia&&(s[3]=f.sid?f.sid:s[4],f.vid&&(b=f.vid[x]("."),s[1]=b[0],s[2]=b[1])));c.Na(s[A]("."));G[0]=e;G[1]=G[1]?G[1]:0;G[2]=k!=G[2]?G[2]:j.Wb;G[3]=G[3]?G[3]:s[4];c.$(G[A]("."));c.Oa(e);M(c.Rb())||c.fa(c.K());c.Qa();c.aa();c.Ra()};a.oc=function(){u=new Ka(j)};a.getName=c("_getName", +58,function(){return a.n});a.c=c("_initData",2,function(){var b;if(!i){if(!a.O)a.O=new La(j.ma);a.a=a.lc();a.k=new Fa(j);a.e=new Na;s=new Ma(j,l(a.a),a.k,a.e);a.oc()}if(g()){if(!i)a.oa=a.kc(a.ab,L[w].domain),b=new Z(l(a.a),a.oa,a.m,j);a.nc(b);s.$b()}if(!i)g()&&b.Pb(a.k,a.F),a.bb=new Na,$.load(j,a.k),i=!0});a.Xa=c("_visitCode",54,function(){a.c();var b=N(a.k.g(),F+a.a+".",";"),b=b[x](".");return b[v]<4?"":b[1]});a.qd=c("_cookiePathCopy",30,function(b){a.c();a.k&&a.k.Ub(a.a,b)});a.D=function(){return a.Xa()% +1E40&&(f=g[z](0,a),g=g[z](a+1));var c=f==ga?V:f==ha?Sa:V.Hb(f);c[g].apply(c,b[e].slice(1))}}catch(u){d++}return d}};var V=new Ra;var Ua=L[t][ga];Ua&&typeof Ua._getTracker=="function"?V=Ua:L[t][ga]=V;var Sa=new Ta;a:{var Va=L[t][ha],Wa=!1;if(Va&&typeof Va[ba]=="function"&&(Wa=ua(Va),!Wa))break a;L[t][ha]=Sa;Wa&&Sa[ba].apply(Sa,Va)};})(); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/green5x5.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/green5x5.png new file mode 100644 index 00000000..18255477 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/green5x5.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/hashchange.html b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/hashchange.html new file mode 100644 index 00000000..ad95f698 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/hashchange.html @@ -0,0 +1,16 @@ + + + + + hashchange test + + + + + diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/jquery.min.js b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/jquery.min.js new file mode 100644 index 00000000..b2ac1747 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/jquery.min.js @@ -0,0 +1,18 @@ +/*! + * jQuery JavaScript Library v1.6.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu May 12 15:04:36 2011 -0400 + */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(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(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem +)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument|| +b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/mathml.html b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/mathml.html new file mode 100644 index 00000000..8203884c --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/mathml.html @@ -0,0 +1,120 @@ + + + + + Untitled + + + + + k + = + + + + + + + 2 + + z + + + + + x + 2 + + + + + + + + 2 + + z + + + + + y + 2 + + + + - + + + ( + + + + + 2 + + z + + + + x + + y + + + ) + + 2 + + + + + + ( + 1 + + + + + ( + + + + z + + + + x + + + ) + + 2 + + + + + + ( + + + + z + + + + y + + + ) + + 2 + + ) + + 2 + + + + + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/mathml_ref.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/mathml_ref.png new file mode 100644 index 00000000..1633e58d Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/mathml_ref.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/modernizr-1.7.min.js b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/modernizr-1.7.min.js new file mode 100644 index 00000000..6f54850c --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/modernizr-1.7.min.js @@ -0,0 +1,2 @@ +// Modernizr v1.7 www.modernizr.com +window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c + + + + popstate event test + + + + + + + diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/red30x30.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/red30x30.png new file mode 100644 index 00000000..561c8d2d Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/red30x30.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/ruby.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/ruby.png new file mode 100644 index 00000000..4fe06dd3 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/ruby.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/stroked-text.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/stroked-text.png new file mode 100644 index 00000000..e75890fa Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/stroked-text.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/style.css b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/style.css new file mode 100644 index 00000000..d90731bc --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/style.css @@ -0,0 +1,168 @@ +body { + font-family: "Lucida Grande", Lucida, Verdana, sans-serif; + font-size: 12px; +} + +a { + text-decoration: none; +} +a:hover { + text-decoration: underline; +} + +table, tr, th, td { + border: 1px solid #AAA; +} + +table { + margin-top: 1em; + width: 100%; +} + +tbody th { + text-align: left; + font-size: 14px; + width: 200px; +} + +th h3 { + margin: 3px; + font-size: 12px; +} + +th span.links { + font-size: 10px; +} + +dt { + font-weight: bold; +} + +tr:hover > th, +tr:hover > td + td { background-color: #FFC; } + +div.test_wrap { + display: -moz-inline-stack; + display: inline-block; + border: 1px solid #CCC; + text-align: center; + vertical-align: top; + min-height: 50px; + margin-right: 5px; + background: white; + position: relative; +} + +div.test_wrap h3 { + text-align: center; + margin: 2px; + font-size: 10px; +} + +div.auto { + display: -moz-inline-stack; + display: inline-block; + border: 1px solid; + width: 30px; + height: 30px; +} + +div.square { + display: -moz-inline-stack; + display: inline-block; + border: 1px solid; + width: 30px; + height: 30px; + background: red; +} + +div.info { + display: none; + position: absolute; + top: 100%; + z-index: 2; + left: 0; + background: white; + padding: 2px; + min-width: 300px; + border: 1px solid; + text-align: left; +} + +div.test_wrap:hover > div.info { + display: block; +} + + +div.vis_test { + display: -moz-inline-stack; + display: inline-block; +} + +div.vis_ref { + display: -moz-inline-stack; + display: inline-block; + border-left: 1px dashed black; + margin-left: 5px; + padding-left: 5px; + vertical-align: top; +} + +p.condition { + font-style: italic; + margin: 2px; + clear: both; +} + +.pass { + background: lime; +} + +.fail { + background: red; +} + +.partial { + background: yellow; +} + +.unknown { + background: #aaa; +} + +.current span { + border-radius: 6px; + -moz-border-radius: 6px; + background: none repeat scroll 0 0 #E6EA69; + color: black; + float: right; + font-size: 8px; + padding: 0 1px; +} + +#intro, #options { + width: 400px; + background: #EEE; + border-radius: 10px; + padding: 5px 10px; + margin: 10px; + float: left; +} + +#intro dt::after { + content: ':'; +} + +#intro dd { + margin-bottom: 1em; +} + +#opt_submit { + display: block; + margin: 10px; +} + +#options label { + display: block; + margin: 5px; +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-html-blur.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-html-blur.png new file mode 100644 index 00000000..549b2975 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-html-blur.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-img.svg b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-img.svg new file mode 100644 index 00000000..c0a867f9 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-img.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-img.svg.1 b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-img.svg.1 new file mode 100644 index 00000000..c0a867f9 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg-img.svg.1 @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg_blur.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg_blur.png new file mode 100644 index 00000000..17cb6e3a Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/svg_blur.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/table.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/table.png new file mode 100644 index 00000000..e9b9b9d7 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/table.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/text-shadow1.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/text-shadow1.png new file mode 100644 index 00000000..47b3ceaf Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/text-shadow1.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/text-shadow2.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/text-shadow2.png new file mode 100644 index 00000000..f335189c Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/text-shadow2.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/windsong_font.png b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/windsong_font.png new file mode 100644 index 00000000..b983d2ac Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/windsong_font.png differ diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/xhtml.html b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/xhtml.html new file mode 100644 index 00000000..af4be89e --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/caniuse_files/xhtml.html @@ -0,0 +1,14 @@ + + + + + Untitled + +

    true

    + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/index.html b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/index.html new file mode 100644 index 00000000..587f0c87 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/index.html @@ -0,0 +1,104 @@ + + + + + Modernizr Test Suite + + + + + + + + + + + + + + + + + + + + + + + + +

    Modernizr Test Suite

    +

    +
    +

    + +
      + +
      +
      + + +
      + +
      + + + + +
      JSON.stringify(Modernizr)
      + + Show the Ref Tests from Caniuse and Modernizr + + + + + + + + diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/basic.html b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/basic.html new file mode 100644 index 00000000..9f378a96 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/basic.html @@ -0,0 +1,65 @@ + + + + + Modernizr Test Suite + + + + + + + + + + + + + + + + + + +

      Modernizr Test Suite

      +

      +
      +

      + +
        + +
        +
        + + +
        + +
        + + + + diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/dumpdata.js b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/dumpdata.js new file mode 100644 index 00000000..43c667b7 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/dumpdata.js @@ -0,0 +1,75 @@ +function dumpModernizr(){ + var str = ''; + dumpModernizr.old = dumpModernizr.old || {}; + + for (var prop in Modernizr) { + + // skip previously done ones. + if (dumpModernizr.old[prop]) continue; + else dumpModernizr.old[prop] = true; + + if (typeof Modernizr[prop] === 'function') continue; + // skip unit test items + if (/^test/.test(prop)) continue; + + if (~TEST.inputs.indexOf(prop)) { + str += '
      1. '+prop+'{}
          '; + for (var field in Modernizr[prop]) { + str += '
        • ' + field + ': ' + Modernizr[prop][field] + '
        • '; + } + str += '
      2. '; + } else { + str += '
      3. ' + prop + ': ' + Modernizr[prop] + '
      4. '; + } + } + return str; +} + + +function grabFeatDetects(){ + // thx github.js + $.getScript('https://api.github.com/repos/Modernizr/Modernizr/git/trees/master?recursive=1&callback=processTree'); +} + + +function processTree(data){ + var filenames = []; + + for (var i = 0; i < data.data.tree.length; i++){ + var file = data.data.tree[i]; + var match = file.path.match(/^feature-detects\/(.*)/); + if (!match) continue; + + var relpath = location.host == "modernizr.github.com" ? + '../modernizr-git/' : '../'; + + filenames.push(relpath + match[0]); + } + + var jqxhrs = filenames.map(function(filename){ + return jQuery.getScript(filename); + }); + + jQuery.when.apply(jQuery, jqxhrs).done(resultsToDOM); + +} + +function resultsToDOM(){ + + var modOutput = document.createElement('div'), + ref = document.getElementById('qunit-testresult') || document.getElementById('qunit-tests'); + + modOutput.className = 'output'; + modOutput.innerHTML = dumpModernizr(); + + ref.parentNode.insertBefore(modOutput, ref); + + // Modernizr object as text + document.getElementsByTagName('textarea')[0].innerHTML = JSON.stringify(Modernizr); + +} + +/* uno */ resultsToDOM(); +/* dos */ grabFeatDetects(); +/* tres */ setTimeout(resultsToDOM, 5e3); +/* quatro */ setTimeout(resultsToDOM, 15e3); diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/lib/detect-global.js b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/lib/detect-global.js new file mode 100644 index 00000000..48b4ac24 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/lib/detect-global.js @@ -0,0 +1,153 @@ +// https://github.com/kangax/detect-global + +// tweaked to run without a UI. + +(function () { + function getPropertyDescriptors(object) { + var props = { }; + for (var prop in object) { + + // nerfing for firefox who goes crazy over some objects like sessionStorage + try { + + props[prop] = { + type: typeof object[prop], + value: object[prop] + }; + + } catch(e){ + props[prop] = {}; + } + } + return props; + } + + function getCleanWindow() { + var elIframe = document.createElement('iframe'); + elIframe.style.display = 'none'; + + var ref = document.getElementsByTagName('script')[0]; + ref.parentNode.insertBefore(elIframe, ref); + + elIframe.src = 'about:blank'; + return elIframe.contentWindow; + } + + function appendControl(el, name) { + var elCheckbox = document.createElement('input'); + elCheckbox.type = 'checkbox'; + elCheckbox.checked = true; + elCheckbox.id = '__' + name; + + var elLabel = document.createElement('label'); + elLabel.htmlFor = '__' + name; + elLabel.innerHTML = 'Exclude ' + name + ' properties?'; + elLabel.style.marginLeft = '0.5em'; + + var elWrapper = document.createElement('p'); + elWrapper.style.marginBottom = '0.5em'; + + elWrapper.appendChild(elCheckbox); + elWrapper.appendChild(elLabel); + + el.appendChild(elWrapper); + } + + function appendAnalyze(el) { + var elAnalyze = document.createElement('button'); + elAnalyze.id = '__analyze'; + elAnalyze.innerHTML = 'Analyze'; + elAnalyze.style.marginTop = '1em'; + el.appendChild(elAnalyze); + } + + function appendCancel(el) { + var elCancel = document.createElement('a'); + elCancel.href = '#'; + elCancel.innerHTML = 'Cancel'; + elCancel.style.cssText = 'color:#eee;margin-left:0.5em;'; + elCancel.onclick = function() { + el.parentNode.removeChild(el); + return false; + }; + el.appendChild(elCancel); + } + + function initConfigPopup() { + var el = document.createElement('div'); + + el.style.cssText = 'position:fixed; left:10px; top:10px; width:300px; background:rgba(50,50,50,0.9);' + + '-moz-border-radius:10px; padding:1em; color: #eee; text-align: left;' + + 'font-family: "Helvetica Neue", Verdana, Arial, sans serif; z-index: 99999;'; + + for (var prop in propSets) { + appendControl(el, prop); + } + + appendAnalyze(el); + appendCancel(el); + + var ref = document.getElementsByTagName('script')[0]; + ref.parentNode.insertBefore(el, ref); + } + + function getPropsCount(object) { + var count = 0; + for (var prop in object) { + count++; + } + return count; + } + + function shouldDeleteProperty(propToCheck) { + for (var prop in propSets) { + var elCheckbox = document.getElementById('__' + prop); + var isPropInSet = propSets[prop].indexOf(propToCheck) > -1; + if (isPropInSet && (elCheckbox ? elCheckbox.checked : true) ) { + return true; + } + } + } + + function analyze() { + var global = (function(){ return this; })(), + globalProps = getPropertyDescriptors(global), + cleanWindow = getCleanWindow(); + + for (var prop in cleanWindow) { + if (globalProps[prop]) { + delete globalProps[prop]; + } + } + for (var prop in globalProps) { + if (shouldDeleteProperty(prop)) { + delete globalProps[prop]; + } + } + + window.__globalsCount = getPropsCount(globalProps); + window.__globals = globalProps; + + window.console && console.log('Total number of global properties: ' + __globalsCount); + window.console && console.dir(__globals); + } + + var propSets = { + 'Prototype': '$$ $A $F $H $R $break $continue $w Abstract Ajax Class Enumerable Element Field Form ' + + 'Hash Insertion ObjectRange PeriodicalExecuter Position Prototype Selector Template Toggle Try'.split(' '), + + 'Scriptaculous': 'Autocompleter Builder Control Draggable Draggables Droppables Effect Sortable SortableObserver Sound Scriptaculous'.split(' '), + 'Firebug': 'loadFirebugConsole console _getFirebugConsoleElement _FirebugConsole _FirebugCommandLine _firebug'.split(' '), + 'Mozilla': 'Components XPCNativeWrapper XPCSafeJSObjectWrapper getInterface netscape GetWeakReference GeckoActiveXObject'.split(' '), + 'GoogleAnalytics': 'gaJsHost gaGlobal _gat _gaq pageTracker'.split(' '), + 'lazyGlobals': 'onhashchange'.split(' ') + }; + + // initConfigPopup(); // disable because we're going UI-less. + + var analyzeElem = document.getElementById('__analyze'); + analyzeElem && (analyzeElem.onclick = analyze); + + analyze(); // and assign total added globals to window.__globalsCount + +})(); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/lib/jquery-1.7b2.js b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/lib/jquery-1.7b2.js new file mode 100644 index 00000000..98c6d0df --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/bower_components/modernizr/test/js/lib/jquery-1.7b2.js @@ -0,0 +1,9279 @@ +/*! + * jQuery JavaScript Library v1.7b2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Oct 13 21:12:55 2011 -0400 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\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.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // 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 = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + 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.7b2", + + // 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.add( 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 ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + 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, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--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.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // 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; + }, + + isNumeric: 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; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + 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 ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( 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, "")) ) { + + return (new Function( "return " + data ))(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + try { + 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 ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + 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 ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + 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, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && 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 value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, 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, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's 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(); + }, + + // 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 jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// 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; +} + +// 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 as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!memory; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var div = document.createElement( "div" ), + documentElement = document.documentElement, + all, + a, + select, + opt, + input, + marginDiv, + support, + fragment, + body, + testElementParent, + testElement, + testElementStyle, + tds, + events, + eventName, + i, + isSupported, + offsetSupport; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
        a"; + + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + 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 instead) + style: /top/.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 unknown elements (like HTML5 elems) are handled appropriately + unknownElems: !!div.getElementsByTagName( "nav" ).length, + + // 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, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + div.innerHTML = ""; + + // Figure out if the W3C box model works as expected + div.style.width = div.style.paddingLeft = "1px"; + + // We don't want to do body-related feature tests on frameset + // documents, which lack a body. So we use + // document.getElementsByTagName("body")[0], which is undefined in + // frameset documents, while document.body isn’t. (7398) + body = document.getElementsByTagName("body")[ 0 ]; + // We use our own, invisible, body unless the body is already present + // in which case we use a div (#9239) + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + background: "none" + }; + if ( body ) { + jQuery.extend( testElementStyle, { + position: "absolute", + left: "-999px", + top: "-999px" + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + 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; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
        "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.innerHTML = "
        t
        "; + 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) + isSupported = ( 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) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( document.defaultView && document.defaultView.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Remove the body element we added + testElement.innerHTML = ""; + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // 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 ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + } ) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Determine fixed-position support early + testElement.style.position = "static"; + testElement.style.top = "0px"; + testElement.style.marginTop = "1px"; + offsetSupport = (function( body, container ) { + + var outer, inner, table, td, supports, + bodyMarginTop = parseFloat( body.style.marginTop ) || 0, + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;", + style = "style='" + ptlm + "border:5px solid #000;padding:0;'", + html = "
        " + + "" + + "
        "; + + container.style.cssText = ptlm + "border:0;visibility:hidden"; + + container.innerHTML = html; + body.insertBefore( container, body.firstChild ); + outer = container.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + supports = { + doesNotAddBorder: (inner.offsetTop !== 5), + doesAddBorderForTableAndCells: (td.offsetTop === 5) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + supports.supportsFixedPosition = (inner.offsetTop === 20 || inner.offsetTop === 15); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + supports.subtractsBorderForOverflowNotVisible = (inner.offsetTop === -5); + supports.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop); + + return supports; + + })( testElement, div ); + + jQuery.extend( support, offsetSupport ); + testElementParent.removeChild( testElement ); + + // Null connected elements to avoid leaks in IE + testElement = fragment = select = opt = body = marginDiv = div = input = null; + + return support; +})(); + +// Keep track of boxModel +jQuery.boxModel = jQuery.support.boxModel; + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +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 thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // 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 || !cache[id] || (!pvt && !cache[id].data)) && 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 ] = {}; + + // 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 ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( 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; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + 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 ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support space separated names + if ( jQuery.isArray( name ) ) { + name = name; + } else if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // 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 + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + 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 parts, attr, name, + data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { + attr = this[0].attributes; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + jQuery._data( this[0], "parsedAttrs", true ); + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + 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 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( 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; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = (type || "fx") + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = (type || "fx") + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + 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(), + runner = {}; + + // 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" ); + } + + jQuery._data( elem, type + ".run", runner ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, runner ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +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() { + 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( next, runner ) { + var timeout = setTimeout( next, time ); + runner.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = (value || "").split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( 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 ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, 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( rspace ); + + 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].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return undefined; + } + + var isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // 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 + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // 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; + } + }, + select: { + get: function( elem ) { + var value, + 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; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( !("getAttribute" in elem) ) { + return jQuery.prop( elem, name, value ); + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // Normalize the name if needed + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || (rboolean.test( name ) ? boolHook : nodeHook); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return undefined; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, + i = 0; + + if ( elem.nodeType === 1 ) { + attrNames = (value || "").split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ].toLowerCase(); + + // See #9699 for explanation of this approach (setting first, then removal) + jQuery.attr( elem, name, "" ); + elem.removeAttribute( name ); + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { + elem[ propName ] = false; + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return (elem[ name ] = value); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // 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/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !jQuery.support.getSetAttribute ) { + + fixSpecified = { + name: true, + id: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && (fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return (ret.nodeValue = value + ""); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return (elem.style.cssText = "" + value); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); + } + } + }); +}); + + + + +var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspaces = / /g, + rescape = /[^\w\s.|`]/g, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /\bhover(\.\S+)?/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rquickIs = /^([\w\-]+)?(?:#([\w\-]+))?(?:\.([\w\-]+))?(?:\[([\w+\-]+)=["']?([\w\-]*)["']?\])?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 4 5 + // [ _, tag, id, class, attrName, attrValue ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "\\b" + quick[3] + "\\b" ); + } + return quick; + }, + quickIs = function( elem, m ) { + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || elem.id === m[2]) && + (!m[3] || m[3].test( elem.className )) && + (!m[4] || elem.getAttribute( m[4] ) == m[5]) + ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.replace( rhoverHack, "mouseover$1 mouseout$1" ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = (tns[2] || "").split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + namespace: namespaces.join(".") + }, handleObjIn ); + + // Delegated event; pre-analyze selector so it's processed quickly on event dispatch + if ( selector ) { + handleObj.quick = quickParse( selector ); + if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) { + handleObj.isPositional = true; + } + } + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // 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 to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + 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, selector ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // For removal, types can be an Event object + if ( types && types.type && types.handler ) { + handler = types.handler; + types = types.type; + selector = types.selector; + } + + // Once for each type.namespace in types; type may be omitted + types = (types || "").replace( rhoverHack, "mouseover$1 mouseout$1" ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + namespaces = namespaces? "." + namespaces : ""; + for ( j in events ) { + jQuery.event.remove( elem, j + namespaces, handler, selector ); + } + return; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Only need to loop for special events or selective removal + if ( handler || namespaces || selector || special.remove ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( !handler || handler.guid === handleObj.guid ) { + if ( !namespaces || namespaces.test( handleObj.namespace ) ) { + if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + } + } + } else { + // Removing all events + eventType.length = 0; + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // triggerHandler() and global events don't bubble or run the default action + if ( onlyHandlers || !elem ) { + event.preventDefault(); + } + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + event.stopPropagation(); + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + old = null; + for ( cur = elem.parentNode; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length; i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = (jQuery._data( cur, "events" ) || {})[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) ) { + handle.apply( cur, data ); + } + + if ( event.isPropagationStopped() ) { + break; + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.call( elem.ownerDocument, event, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + handle: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + handlerQueue = [], + i, cur, selMatch, matches, handleObj, sel, hit, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + + // Determine handlers that should run if there are delegated events + // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + hit = selMatch[ sel ]; + + if ( handleObj.isPositional ) { + // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/ + hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0; + } else if ( hit === undefined ) { + hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) ); + } + if ( hit ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + + // Copy the remaining (bound) handlers in case they're changed + handlers = handlers.slice( delegateCount ); + + // Run delegates first; they may want to stop propagation beneath us + event.delegateTarget = this; + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + dispatch( matched.elem, event, matched.matches, args ); + } + delete event.delegateTarget; + + // Run non-delegated handlers for this level + if ( handlers.length ) { + dispatch( this, event, handlers, args ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement layerX layerY offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = original.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + focus: { + delegateType: "focusin", + noBubble: true + }, + blur: { + delegateType: "focusout", + noBubble: true + }, + + 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; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // 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. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.handle.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Run jQuery handler functions; called from jQuery.event.handle +function dispatch( target, event, handlers, args ) { + var run_all = !event.exclusive && !event.namespace, + specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle, + j, handleObj, ret; + + event.currentTarget = target; + for ( j = 0; j < handlers.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = handlers[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.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; + + ret = ( specialHandle || handleObj.handler ).apply( target, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } +} + +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, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // 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; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.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 +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + oldType, ret; + + // For a real mouseover/out, always call the handler; for + // mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) { + oldType = event.type; + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = oldType; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + // Form was submitted, bubble the event up the tree + if ( this.parentNode ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + jQuery.event.remove( event.delegateTarget || this, event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on.call( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault ) { + // ( event ) native or jQuery.Event + return this.off( types.type, types.handler, types.selector ); + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = 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; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +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 contextmenu").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; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * 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, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/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, seed ); + + } 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, seed ); + } + } + + } 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, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + 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, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + 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 ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + 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; +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +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 ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + 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 || 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 first, last, + doneName, parent, cache, + count, diff, + 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": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + 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 && 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 = Sizzle.attr ? + Sizzle.attr( elem, name ) : + 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 && Sizzle.attr ? + result != null : + 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 ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + 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; + }; +} + +// 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; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + 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; + } + + 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 ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } 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[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = 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[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = 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, seed ) { + 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, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +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 self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( 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 ( n = length; n < ret.length; n++ ) { + for ( 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 && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + 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 || cur.nodeType === 11 ) { + 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 ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // 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 && selector.nodeType ? [ selector ] : 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 ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + 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; + }); +} + + + + +function createSafeFragment( document ) { + var nodeNames = ( + "abbr article aside audio canvas datalist details figcaption figure footer " + + "header hgroup mark meter nav output progress section summary time video" + ).split( " " ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( nodeNames.length ) { + safeFrag.createElement( + nodeNames.pop() + ); + } + } + return safeFrag; +} + +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, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and - - - - - - - - - - - - - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/css-tests.css b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/css-tests.css deleted file mode 100644 index 0f5604ee..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/css-tests.css +++ /dev/null @@ -1,150 +0,0 @@ -/*! - * Bootstrap CSS Tests - */ - - -/* Remove background image */ -body { - background-image: none; -} - -/* Space out subhead */ -.subhead { - margin-bottom: 36px; -} -/*h4 { - margin-bottom: 5px; -} -*/ - -.type-test { - margin-bottom: 20px; - padding: 0 20px 20px; - background: url(../../docs/assets/img/grid-baseline-20px.png); -} -.type-test h1, -.type-test h2, -.type-test h3, -.type-test h4, -.type-test h5, -.type-test h6 { - background-color: rgba(255,0,0,.2); -} - - -/* colgroup tests */ -.col1 { - background-color: rgba(255,0,0,.1); -} -.col2 { - background-color: rgba(0,255,0,.1); -} -.col3 { - background-color: rgba(0,0,255,.1); -} - - -/* Fluid row inputs */ -#rowInputs .row > [class*=span], -#fluidRowInputs .row-fluid > [class*=span] { - background-color: rgba(255,0,0,.1); -} - - -/* Fluid grid */ -.fluid-grid { - margin-bottom: 45px; -} -.fluid-grid .row { - height: 40px; - padding-top: 10px; - margin-top: 10px; - color: #ddd; - text-align: center; -} -.fluid-grid .span1 { - background-color: #999; -} - - -/* Gradients */ - -[class^="gradient-"] { - width: 100%; - height: 400px; - margin: 20px 0; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.gradient-horizontal { - background-color: #333333; - background-image: -moz-linear-gradient(left, #555555, #333333); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#555555), to(#333333)); - background-image: -webkit-linear-gradient(left, #555555, #333333); - background-image: -o-linear-gradient(left, #555555, #333333); - background-image: linear-gradient(to right, #555555, #333333); - background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=1); -} - -.gradient-vertical { - background-color: #474747; - background-image: -moz-linear-gradient(top, #555555, #333333); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#333333)); - background-image: -webkit-linear-gradient(top, #555555, #333333); - background-image: -o-linear-gradient(top, #555555, #333333); - background-image: linear-gradient(to bottom, #555555, #333333); - background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=0); -} - -.gradient-directional { - background-color: #333333; - background-image: -moz-linear-gradient(45deg, #555555, #333333); - background-image: -webkit-linear-gradient(45deg, #555555, #333333); - background-image: -o-linear-gradient(45deg, #555555, #333333); - background-image: linear-gradient(45deg, #555555, #333333); - background-repeat: repeat-x; -} - -.gradient-vertical-three { - background-color: #8940a5; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f)); - background-image: -webkit-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-image: -moz-linear-gradient(top, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -o-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-image: linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-repeat: no-repeat; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff00b3ee', endColorstr='#ffc3325f', GradientType=0); -} - -.gradient-radial { - background-color: #333333; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(#555555), to(#333333)); - background-image: -webkit-radial-gradient(circle, #555555, #333333); - background-image: -moz-radial-gradient(circle, #555555, #333333); - background-image: -o-radial-gradient(circle, #555555, #333333); - background-repeat: no-repeat; -} - -.gradient-striped { - background-color: #555555; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.gradient-horizontal-three { - background-color: #00b3ee; - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f)); - background-image: -webkit-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -moz-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -o-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: linear-gradient(to right, #00b3ee, #7a43b6 50%, #c3325f); - background-repeat: no-repeat; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00b3ee', endColorstr='#c3325f', GradientType=0); -} diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/css-tests.html b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/css-tests.html deleted file mode 100644 index c69688c7..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/css-tests.html +++ /dev/null @@ -1,1399 +0,0 @@ - - - - - CSS Tests · Twitter Bootstrap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        -
        -

        CSS Tests

        -

        One stop shop for quick debugging and edge-case tests of CSS.

        -
        -
        - - -
        - -
        - - - - - - - -
        -
        -
        -

        h1. Heading 1

        -

        h2. Heading 2

        -

        h3. Heading 3

        -

        h4. Heading 4

        -
        h5. Heading 5
        -
        h6. Heading 6
        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -
        -
        -
        -
        -

        h1. Heading 1

        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -

        h2. Heading 2

        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -

        h3. Heading 3

        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -

        h4. Heading 4

        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -
        h5. Heading 5
        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -
        h6. Heading 6
        -

        Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

        -
        -
        -
        - - - - - - - -
        -
        - -
        -
        - -
        -
        - -
        -
        - -
        - -
        -
        - -
        -
        - -
        -
        - -
        -
        - -

        - - - - - - - - -
        -
        -
        12 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        -
        11 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        1 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        -
        10 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        2 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        -
        9 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        3 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        -
        8 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        4 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        -
        7 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        5 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        -
        6 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        6 -
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        1
        -
        -
        -
        -
        - - - - - - - -
        -
        -

        Bordered without thead

        - - - - - - - - - - - - - - - - - - -
        123
        123
        123
        -

        Bordered without thead, with caption

        - - - - - - - - - - - - - - - - - - - -
        Table caption
        123
        123
        123
        -

        Bordered without thead, with colgroup

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        123
        123
        123
        369
        -

        Bordered with thead, with colgroup

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ABC
        123
        123
        123
        369
        -
        -
        -

        Bordered with thead and caption

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Table caption
        123
        123
        123
        123
        369
        -

        Bordered with rowspan and colspan

        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        123
        1 and 23
        123
        13
        2 and 3
        -
        -
        - - -

        Grid sizing

        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        123
        1 and 23
        123
        13
        2 and 3
        -
        -
        - -

        Nesting and striping

        - - - - - - - - - - - -
        Test
        - - - - - - - - - - - - - - - - - - - - - -
        TestTest
        - test - - test -
        - test - - test -
        - test - - test -
        -
        - -

        Fluid grid sizing

        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        123
        1 and 23
        123
        13
        2 and 3
        -
        -
        - - - - - - - -

        Buttons and button groups

        -
        - - - -
        - -

        Horizontal form errors

        -
        -
        - -
        - - Please correct the error -
        -
        -
        - -
        -
        -

        Prepend and append on inputs

        -
        -
        -
        - @ - -
        -
        -
        -
        - - @ -
        -
        -
        -
        - $ - - .00 -
        -
        -
        -
        -
        -

        Prepend and append with uneditable

        -
        -
        - $ - Some value here -
        -
        - Some value here - .00 -
        -
        - $ - Some value here - .00 -
        -
        -
        -
        -

        Prepend with type="submit"

        - -
        - - -
        -
        - - - -
        -
        -
        - -

        Fluid prepended and appended inputs

        -
        -
        -
        -
        -
        - @ -
        -
        -
        -
        - @ -
        -
        -
        -
        - $.00 -
        -
        -
        -
        -
        - -

        Fixed row with inputs

        -

        Inputs should not extend past the light red background, set on their parent, a .span* column.

        - -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -

        Fluid row with inputs

        -

        Inputs should not extend past the light red background, set on their parent, a .span* column.

        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        -
        - -
        -
        -
        - -
        - -

        Inline form in fluid row

        - -
        -
        -
        - - - - -
        -
        -
        - - -
        - - -

        Fluid textarea at .span12

        -
        -
        - -
        -
        - - -
        - - -

        Selects

        -
        - -
        - - -
        - - - - - - - - -

        Dropdown link with hash URL

        - - -

        Dropdown link with custom URL and data-target

        - - -

        Dropdown on a button

        - - -
        - - - - - - -

        Default thumbnails (no grid sizing)

        -
          -
        • - -
        • -
        • - -
        • -
        • - -
        • -
        • - -
        • -
        - - - -

        Standard grid sizing

        - - -

        Fluid thumbnails

        -
        -
        - -
        -
        - - - - - - - -
        - -
        -
        -

        I'm in Section 1.

        - -
        - -
        -
        -

        I'm in Section 1.1.

        -
        -
        -

        I'm in Section 1.2.

        -
        -
        -

        I'm in Section 1.3.

        -
        -
        -
        -
        -
        -

        Howdy, I'm in Section 2.

        -
        -
        -

        What up girl, this is Section 3.

        -
        -
        -
        - -
        - - - - - - -
        -
        -

        Inline label

        -

        Cras justo odio, dapibus ac facilisis in, egestas eget quam. Maecenas sed diam Label name eget risus varius blandit sit amet non magna. Fusce .class-name dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

        -
        -
        -
        - - Hey! Read this. -
        -
        -
        - - -
        -
        - -
        - - - - - - - - - - - - - -
        - Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue. Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. - -
        - - - - -
        -
        - -

        Mini buttons: text and icon

        -
        - - -
        - -
        - - - - - - - -

        Visible on...

        -
          -
        • Phone✔ Phone
        • -
        • Tablet✔ Tablet
        • -
        • Desktop✔ Desktop
        • -
        -
          -
        • Phone + Tablet✔ Phone + Tablet
        • -
        • Tablet + Desktop✔ Tablet + Desktop
        • -
        • All✔ All
        • -
        - -

        Hidden on...

        -
          -
        • Phone✔ Phone
        • -
        • Tablet✔ Tablet
        • -
        • Desktop✔ Desktop
        • -
        -
          -
        • Phone + Tablet✔ Phone + Tablet
        • -
        • Tablet + Desktop✔ Tablet + Desktop
        • -
        • All✔ All
        • -
        - - - - - - - -

        Horizontal

        -
        - -

        Vertical

        -
        - -

        Directional

        -
        - -

        Three colors

        -
        - -

        Radial

        -
        - -

        Striped

        -
        - -

        Horizontal three colors

        -
        - - - - - -

        Alert default

        -
        - - Alert! Best check yourself, you're not looking too good. -
        -
        - -

        Alert! Best check yourself, you're not looking too good.

        -
        - -

        Success

        -
        - - Success! Best check yourself, you're not looking too good. -
        -
        - -

        Success! Best check yourself, you're not looking too good.

        -
        - -

        Info

        -
        - - Info! Best check yourself, you're not looking too good. -
        -
        - -

        Info! Best check yourself, you're not looking too good.

        -
        - -

        Warning

        -
        - - Warning! Best check yourself, you're not looking too good. -
        -
        - -

        Warning! Best check yourself, you're not looking too good.

        -
        - -

        Error

        -
        - - Error! Best check yourself, you're not looking too good. -
        -
        - -

        Error! Best check yourself, you're not looking too good.

        -
        - - -
        - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/forms-responsive.html b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/forms-responsive.html deleted file mode 100644 index c3e208d0..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/forms-responsive.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Bootstrap, from Twitter - - - - - - - - - - - - - - - - - - - - - - -
        - - - -

        Vertical alignment

        - - - span1 - -

        Width across elements

        -
        - -
        -
        - -
        -
        - span2 -
        - - - - -
        - - - span1 -
        - -
        - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/forms.html b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/forms.html deleted file mode 100644 index a63d728a..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/forms.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - Bootstrap, from Twitter - - - - - - - - - - - - - - - - - - - - - - -
        - - - -
        -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        - - - - -
        -
        - -
        - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar-fixed-top.html b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar-fixed-top.html deleted file mode 100644 index 2d9a7a71..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar-fixed-top.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - Bootstrap, from Twitter - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - -
        -

        Navbar example

        -

        This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.

        -

        - View navbar docs » -

        -
        - -
        - - - - - - - - - - - - - - - - - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar-static-top.html b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar-static-top.html deleted file mode 100644 index 4bead8ec..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar-static-top.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - Bootstrap, from Twitter - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - -
        -

        Navbar example

        -

        This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.

        -

        - View navbar docs » -

        -
        - -
        - - - - - - - - - - - - - - - - - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar.html b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar.html deleted file mode 100644 index d5ad4784..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tests/navbar.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - Bootstrap, from Twitter - - - - - - - - - - - - - - - - - - - - - - -
        - - - - - -
        -

        Navbar example

        -

        This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.

        -

        - View navbar docs » -

        -
        - -
        - - - - - - - - - - - - - - - - - - - diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/thumbnails.less b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/thumbnails.less deleted file mode 100644 index 4fd07d25..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/thumbnails.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files - -// Make wrapper ul behave like the grid -.thumbnails { - margin-left: -@gridGutterWidth; - list-style: none; - .clearfix(); -} -// Fluid rows have no left margin -.row-fluid .thumbnails { - margin-left: 0; -} - -// Float li to make thumbnails appear in a row -.thumbnails > li { - float: left; // Explicity set the float since we don't require .span* classes - margin-bottom: @baseLineHeight; - margin-left: @gridGutterWidth; -} - -// The actual thumbnail (can be `a` or `div`) -.thumbnail { - display: block; - padding: 4px; - line-height: @baseLineHeight; - border: 1px solid #ddd; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 3px rgba(0,0,0,.055)); - .transition(all .2s ease-in-out); -} -// Add a hover/focus state for linked versions only -a.thumbnail:hover, -a.thumbnail:focus { - border-color: @linkColor; - .box-shadow(0 1px 4px rgba(0,105,214,.25)); -} - -// Images and captions -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: @gray; -} diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tooltip.less b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tooltip.less deleted file mode 100644 index 83d5f2bd..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/tooltip.less +++ /dev/null @@ -1,70 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindexTooltip; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - .opacity(0); - &.in { .opacity(80); } - &.top { margin-top: -3px; padding: 5px 0; } - &.right { margin-left: 3px; padding: 0 5px; } - &.bottom { margin-top: 3px; padding: 5px 0; } - &.left { margin-left: -3px; padding: 0 5px; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: @tooltipColor; - text-align: center; - text-decoration: none; - background-color: @tooltipBackground; - .border-radius(@baseBorderRadius); -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth 0; - border-top-color: @tooltipArrowColor; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; - border-right-color: @tooltipArrowColor; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; - border-left-color: @tooltipArrowColor; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; - border-bottom-color: @tooltipArrowColor; - } -} diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/type.less b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/type.less deleted file mode 100644 index 337138ac..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/type.less +++ /dev/null @@ -1,247 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Body text -// ------------------------- - -p { - margin: 0 0 @baseLineHeight / 2; -} -.lead { - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - font-weight: 200; - line-height: @baseLineHeight * 1.5; -} - - -// Emphasis & misc -// ------------------------- - -// Ex: 14px base font * 85% = about 12px -small { font-size: 85%; } - -strong { font-weight: bold; } -em { font-style: italic; } -cite { font-style: normal; } - -// Utility classes -.muted { color: @grayLight; } -a.muted:hover, -a.muted:focus { color: darken(@grayLight, 10%); } - -.text-warning { color: @warningText; } -a.text-warning:hover, -a.text-warning:focus { color: darken(@warningText, 10%); } - -.text-error { color: @errorText; } -a.text-error:hover, -a.text-error:focus { color: darken(@errorText, 10%); } - -.text-info { color: @infoText; } -a.text-info:hover, -a.text-info:focus { color: darken(@infoText, 10%); } - -.text-success { color: @successText; } -a.text-success:hover, -a.text-success:focus { color: darken(@successText, 10%); } - -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6 { - margin: (@baseLineHeight / 2) 0; - font-family: @headingsFontFamily; - font-weight: @headingsFontWeight; - line-height: @baseLineHeight; - color: @headingsColor; - text-rendering: optimizelegibility; // Fix the character spacing for headings - small { - font-weight: normal; - line-height: 1; - color: @grayLight; - } -} - -h1, -h2, -h3 { line-height: @baseLineHeight * 2; } - -h1 { font-size: @baseFontSize * 2.75; } // ~38px -h2 { font-size: @baseFontSize * 2.25; } // ~32px -h3 { font-size: @baseFontSize * 1.75; } // ~24px -h4 { font-size: @baseFontSize * 1.25; } // ~18px -h5 { font-size: @baseFontSize; } -h6 { font-size: @baseFontSize * 0.85; } // ~12px - -h1 small { font-size: @baseFontSize * 1.75; } // ~24px -h2 small { font-size: @baseFontSize * 1.25; } // ~18px -h3 small { font-size: @baseFontSize; } -h4 small { font-size: @baseFontSize; } - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: (@baseLineHeight / 2) - 1; - margin: @baseLineHeight 0 (@baseLineHeight * 1.5); - border-bottom: 1px solid @grayLighter; -} - - - -// Lists -// -------------------------------------------------- - -// Unordered and Ordered lists -ul, ol { - padding: 0; - margin: 0 0 @baseLineHeight / 2 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: @baseLineHeight; -} - -// Remove default list styles -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -// Single-line list items -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; - > li { - display: inline-block; - .ie7-inline-block(); - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-bottom: @baseLineHeight; -} -dt, -dd { - line-height: @baseLineHeight; -} -dt { - font-weight: bold; -} -dd { - margin-left: @baseLineHeight / 2; -} -// Horizontal layout (like forms) -.dl-horizontal { - .clearfix(); // Ensure dl clears floats if empty dd elements present - dt { - float: left; - width: @horizontalComponentOffset - 20; - clear: left; - text-align: right; - .text-overflow(); - } - dd { - margin-left: @horizontalComponentOffset; - } -} - -// MISC -// ---- - -// Horizontal rules -hr { - margin: @baseLineHeight 0; - border: 0; - border-top: 1px solid @hrBorder; - border-bottom: 1px solid @white; -} - -// Abbreviations and acronyms -abbr[title], -// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted @grayLight; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: 0 0 0 15px; - margin: 0 0 @baseLineHeight; - border-left: 5px solid @grayLighter; - p { - margin-bottom: 0; - font-size: @baseFontSize * 1.25; - font-weight: 300; - line-height: 1.25; - } - small { - display: block; - line-height: @baseLineHeight; - color: @grayLight; - &:before { - content: '\2014 \00A0'; - } - } - - // Float right with text-align: right - &.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid @grayLighter; - border-left: 0; - p, - small { - text-align: right; - } - small { - &:before { - content: ''; - } - &:after { - content: '\00A0 \2014'; - } - } - } -} - -// Quotes -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - display: block; - margin-bottom: @baseLineHeight; - font-style: normal; - line-height: @baseLineHeight; -} diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/utilities.less b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/utilities.less deleted file mode 100644 index 314b4ffd..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/utilities.less +++ /dev/null @@ -1,30 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Quick floats -.pull-right { - float: right; -} -.pull-left { - float: left; -} - -// Toggling content -.hide { - display: none; -} -.show { - display: block; -} - -// Visibility -.invisible { - visibility: hidden; -} - -// For Affix plugin -.affix { - position: fixed; -} diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/variables.less b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/variables.less deleted file mode 100644 index 31c131b1..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/variables.less +++ /dev/null @@ -1,301 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -// Global values -// -------------------------------------------------- - - -// Grays -// ------------------------- -@black: #000; -@grayDarker: #222; -@grayDark: #333; -@gray: #555; -@grayLight: #999; -@grayLighter: #eee; -@white: #fff; - - -// Accent colors -// ------------------------- -@blue: #049cdb; -@blueDark: #0064cd; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #f89406; -@pink: #c3325f; -@purple: #7a43b6; - - -// Scaffolding -// ------------------------- -@bodyBackground: @white; -@textColor: @grayDark; - - -// Links -// ------------------------- -@linkColor: #08c; -@linkColorHover: darken(@linkColor, 15%); - - -// Typography -// ------------------------- -@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; -@serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; - -@baseFontSize: 14px; -@baseFontFamily: @sansFontFamily; -@baseLineHeight: 20px; -@altFontFamily: @serifFontFamily; - -@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily -@headingsFontWeight: bold; // instead of browser default, bold -@headingsColor: inherit; // empty to use BS default, @textColor - - -// Component sizing -// ------------------------- -// Based on 14px font-size and 20px line-height - -@fontSizeLarge: @baseFontSize * 1.25; // ~18px -@fontSizeSmall: @baseFontSize * 0.85; // ~12px -@fontSizeMini: @baseFontSize * 0.75; // ~11px - -@paddingLarge: 11px 19px; // 44px -@paddingSmall: 2px 10px; // 26px -@paddingMini: 0 6px; // 22px - -@baseBorderRadius: 4px; -@borderRadiusLarge: 6px; -@borderRadiusSmall: 3px; - - -// Tables -// ------------------------- -@tableBackground: transparent; // overall background-color -@tableBackgroundAccent: #f9f9f9; // for striping -@tableBackgroundHover: #f5f5f5; // for hover -@tableBorder: #ddd; // table and cell border - -// Buttons -// ------------------------- -@btnBackground: @white; -@btnBackgroundHighlight: darken(@white, 10%); -@btnBorder: #ccc; - -@btnPrimaryBackground: @linkColor; -@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); - -@btnInfoBackground: #5bc0de; -@btnInfoBackgroundHighlight: #2f96b4; - -@btnSuccessBackground: #62c462; -@btnSuccessBackgroundHighlight: #51a351; - -@btnWarningBackground: lighten(@orange, 15%); -@btnWarningBackgroundHighlight: @orange; - -@btnDangerBackground: #ee5f5b; -@btnDangerBackgroundHighlight: #bd362f; - -@btnInverseBackground: #444; -@btnInverseBackgroundHighlight: @grayDarker; - - -// Forms -// ------------------------- -@inputBackground: @white; -@inputBorder: #ccc; -@inputBorderRadius: @baseBorderRadius; -@inputDisabledBackground: @grayLighter; -@formActionsBackground: #f5f5f5; -@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border - - -// Dropdowns -// ------------------------- -@dropdownBackground: @white; -@dropdownBorder: rgba(0,0,0,.2); -@dropdownDividerTop: #e5e5e5; -@dropdownDividerBottom: @white; - -@dropdownLinkColor: @grayDark; -@dropdownLinkColorHover: @white; -@dropdownLinkColorActive: @white; - -@dropdownLinkBackgroundActive: @linkColor; -@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; - - - -// COMPONENT VARIABLES -// -------------------------------------------------- - - -// Z-index master list -// ------------------------- -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1030; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; - - -// Sprite icons path -// ------------------------- -@iconSpritePath: "../img/glyphicons-halflings.png"; -@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; - - -// Input placeholder text color -// ------------------------- -@placeholderText: @grayLight; - - -// Hr border color -// ------------------------- -@hrBorder: @grayLighter; - - -// Horizontal forms & lists -// ------------------------- -@horizontalComponentOffset: 180px; - - -// Wells -// ------------------------- -@wellBackground: #f5f5f5; - - -// Navbar -// ------------------------- -@navbarCollapseWidth: 979px; -@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; - -@navbarHeight: 40px; -@navbarBackgroundHighlight: #ffffff; -@navbarBackground: darken(@navbarBackgroundHighlight, 5%); -@navbarBorder: darken(@navbarBackground, 12%); - -@navbarText: #777; -@navbarLinkColor: #777; -@navbarLinkColorHover: @grayDark; -@navbarLinkColorActive: @gray; -@navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); - -@navbarBrandColor: @navbarLinkColor; - -// Inverted navbar -@navbarInverseBackground: #111111; -@navbarInverseBackgroundHighlight: #222222; -@navbarInverseBorder: #252525; - -@navbarInverseText: @grayLight; -@navbarInverseLinkColor: @grayLight; -@navbarInverseLinkColorHover: @white; -@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; -@navbarInverseLinkBackgroundHover: transparent; -@navbarInverseLinkBackgroundActive: @navbarInverseBackground; - -@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); -@navbarInverseSearchBackgroundFocus: @white; -@navbarInverseSearchBorder: @navbarInverseBackground; -@navbarInverseSearchPlaceholderColor: #ccc; - -@navbarInverseBrandColor: @navbarInverseLinkColor; - - -// Pagination -// ------------------------- -@paginationBackground: #fff; -@paginationBorder: #ddd; -@paginationActiveBackground: #f5f5f5; - - -// Hero unit -// ------------------------- -@heroUnitBackground: @grayLighter; -@heroUnitHeadingColor: inherit; -@heroUnitLeadColor: inherit; - - -// Form states and alerts -// ------------------------- -@warningText: #c09853; -@warningBackground: #fcf8e3; -@warningBorder: darken(spin(@warningBackground, -10), 3%); - -@errorText: #b94a48; -@errorBackground: #f2dede; -@errorBorder: darken(spin(@errorBackground, -10), 3%); - -@successText: #468847; -@successBackground: #dff0d8; -@successBorder: darken(spin(@successBackground, -10), 5%); - -@infoText: #3a87ad; -@infoBackground: #d9edf7; -@infoBorder: darken(spin(@infoBackground, -10), 7%); - - -// Tooltips and popovers -// ------------------------- -@tooltipColor: #fff; -@tooltipBackground: #000; -@tooltipArrowWidth: 5px; -@tooltipArrowColor: @tooltipBackground; - -@popoverBackground: #fff; -@popoverArrowWidth: 10px; -@popoverArrowColor: #fff; -@popoverTitleBackground: darken(@popoverBackground, 3%); - -// Special enhancement for popovers -@popoverArrowOuterWidth: @popoverArrowWidth + 1; -@popoverArrowOuterColor: rgba(0,0,0,.25); - - - -// GRID -// -------------------------------------------------- - - -// Default 940px grid -// ------------------------- -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 20px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); - -// 1200px min -@gridColumnWidth1200: 70px; -@gridGutterWidth1200: 30px; -@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); - -// 768px-979px -@gridColumnWidth768: 42px; -@gridGutterWidth768: 20px; -@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); - - -// Fluid grid -// ------------------------- -@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); -@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); - -// 1200px min -@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); -@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); - -// 768px-979px -@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); -@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/wells.less b/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/wells.less deleted file mode 100644 index 84a744b1..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/less/wells.less +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: @wellBackground; - border: 1px solid darken(@wellBackground, 7%); - .border-radius(@baseBorderRadius); - .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-large { - padding: 24px; - .border-radius(@borderRadiusLarge); -} -.well-small { - padding: 9px; - .border-radius(@borderRadiusSmall); -} diff --git a/sites/all/themes/gui/materiobasetheme/components/bootstrap/package.json b/sites/all/themes/gui/materiobasetheme/components/bootstrap/package.json deleted file mode 100644 index 4fc52ca0..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/bootstrap/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "bootstrap" - , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." - , "version": "2.3.2" - , "keywords": ["bootstrap", "css"] - , "homepage": "http://twitter.github.com/bootstrap/" - , "author": "Twitter Inc." - , "scripts": { "test": "make test" } - , "repository": { - "type": "git" - , "url": "https://github.com/twitter/bootstrap.git" - } - , "licenses": [ - { - "type": "Apache-2.0" - , "url": "http://www.apache.org/licenses/LICENSE-2.0" - } - ] - , "devDependencies": { - "uglify-js": "1.3.4" - , "jshint": "0.9.1" - , "recess": "1.1.8" - , "connect": "2.1.3" - , "hogan.js": "2.0.0" - } -} diff --git a/sites/all/themes/gui/materiobasetheme/components/gui/gui.less.orig b/sites/all/themes/gui/materiobasetheme/components/gui/gui.less.orig deleted file mode 100644 index 5e84a944..00000000 --- a/sites/all/themes/gui/materiobasetheme/components/gui/gui.less.orig +++ /dev/null @@ -1,636 +0,0 @@ -<<<<<<< HEAD -/** -* www.g-u-i.net -*/ - -/** font */ - -.8{font-size:8px;} -.9{font-size:9px;} -.10{font-size:10px;} -.11{font-size:10px;} -.12{font-size:12px;} -.14{font-size:14px;} -.16{font-size:16px;} -.18{font-size:18px;} -.20{font-size:18px;} -.24{font-size:24px;} -.28{font-size:28px;} -.30{font-size:30px;} -.36{font-size:36px;} -.48{font-size:48px;} -.60{font-size:60px;} -.72{font-size:72px;} - -.regular{font-weight:normal;} -.bold{font-weight:bold;} -.100{font-weight:100;} -.300{font-weight:300;} -.500{font-weight:500;} -.700{font-weight:700;} -.900{font-weight:900;} - -.upper{text-transform: uppercase;} -.italic{font-style:italic;} -.normal{font-style: normal;} - - -/** shortcuts */ -======= -/* - * www.g-u-i.net - */ - -// = -// = -// = -// = -// = -// ===== TYPOGRAHIE ====================================================================================================== - -.8(){font-size:8px;} -.9(){font-size:9px;} -.10(){font-size:10px;} -.11(){font-size:10px;} -.12(){font-size:12px;} -.14(){font-size:14px;} -.16(){font-size:16px;} -.18(){font-size:18px;} -.24(){font-size:24px;} -.30(){font-size:30px;} -.36(){font-size:36px;} -.48(){font-size:48px;} -.60(){font-size:60px;} -.72(){font-size:72px;} - -.regular(){font-weight:normal;} -.bold(){font-weight:bold;} -.100(){font-weight:100;} -.300(){font-weight:300;} -.500(){font-weight:500;} -.700(){font-weight:700;} -.900(){font-weight:900;} - -.upper(){text-transform: uppercase;} -.italic(){font-style:italic;} -.normal(){font-style: normal;} - -.hyphens(@value: auto) -{ - -webkit-hyphens:@value; - -moz-hyphens:@value; - -ms-hyphens:@value; - -o-hyphens:@value; - hyphens:@value; -} -.font-size(@value: 1em,@lineheight:1.3em) -{ - font-size:@value; - line-height:@lineheight; -} - -@green:#17942A; -@red:#E60000; - -// = -// = -// = -// = -// = -// ===== SHORTCUTS ======================================================================================================= ->>>>>>> bitbucket/master - -// padding -.p(@p){ padding:@arguments; } -.p(@v, @h){ padding:@arguments; } -.p(@t, @l, @b, @l){ padding:@arguments; } - -.pt(@p){ padding-top:@p; } -.pr(@p){ padding-right:@p; } -.pb(@p){ padding-bottom:@p; } -.pl(@p){ padding-left:@p; } - -// margin -.m(@p){ margin:@arguments; } -.m(@v, @h){ margin:@arguments; } -.m(@t, @l, @b, @l){ margin:@arguments; } - -.mt(@m){ margin-top:@m; } -.mr(@m){ margin-right:@m; } -.mb(@m){ margin-bottom:@m; } -.ml(@m){ margin-left:@m; } - -.0(){ margin:0; padding:0; } - -// border -.b(@b){ border: @b; } -.b(@size, @color){ border: @size solid @color; } - -.bt(@b){ border-top: @b;} -.bt(@size, @color){border-top: @size solid @color;} - -.br(@b){ border-right: @b;} -.br(@size, @color){border-right: @size solid @color;} - -.bb(@b){ border-bottom: @b;} -.bb(@size, @color){border-bottom: @size solid @color;} - -.bl(@b){ border-left: @b;} -.bl(@size, @color){border-left: @size solid @color;} - -.bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) -{ - border-top : solid 1px @top-color; - border-right : solid 1px @right-color; - border-bottom: solid 1px @bottom-color; - border-left : solid 1px @left-color; -} - -// Background -.bg(@color, @url, @repeat, @scrollfixed, @pos){background: @arguments;} -.bgc(@color){background-color: @arguments;} -.bkgd(@params){background: @arguments;} -.bkgdc(@color){.bgc(@arguments);} - -<<<<<<< HEAD -// opacity -.opacity(@opacity: 0.5) { - -moz-opacity: @opacity; - -khtml-opacity: @opacity; - -webkit-opacity: @opacity; - opacity: @opacity; -} - -/** Inline blocks */ -.inlineblock(){ - display:moz-inline-stack; - display:inline-block; - vertical-align:top; - zoom:1; - *display:inline; - /* margin-right:-.25em;*/ - .ie7 &{display:inline;} -} - - -// selection style -.selection(@bgcolor,@color){ -======= -// Selection -.selection(@bgcolor,@color) -{ ->>>>>>> bitbucket/master - &::selection { - background:@bgcolor; - color:@color; - } - &::-moz-selection { - background:@bgcolor; - color:@color; - } - &::-webkit-selection { - background:@bgcolor; - color:@color; - } -} - -// Colors -.color(@value) -{ - &, - & *{color:@value;} -} - -// Opacity -.opacity(@opacity: 0.5) -{ - -webkit-opacity: @opacity; - -khtml-opacity: @opacity; - -moz-opacity: @opacity; - opacity: @opacity; -} - -// size -.size(@height, @width) { - width: @width; - height: @height; -} -.square(@size) { - .size(@size, @size); -} - -// center -.center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} - -// = -// = -// = -// = -// = -// ===== DISPLAY UTILS =================================================================================================== - -// Inline blocks -.inlineblock(@align:top) -{ - display:moz-inline-stack; - display:inline-block; - vertical-align:@align; - zoom:1; - *display:inline; - .ie7 &, .ie8 &{display:block;float:left;} -} - -.db(){display:block;} -.dib(){.inlineblock;} -.dib(@align){.inlineblock(@align);} - -// Vertical alignement -// -// ___ .align-child() -// | -// | Permet l’alignement vertical d’un objet par rapport à son premier parent (dans son conteneur direct). -// | -// | 1 param : @vertical-align -// -.align-child(@align:middle){ - &:before { content: ""; .dib(middle); overflow: hidden; visibility: hidden; width: 0; height: 100%; } - & > * { .dib(@align); } -} - -.clear-after(){ - &:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;} -} - -// For clearing floats like a boss h5bp.com/q -.clearix() { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - // Fixes Opera/contenteditable bug: - // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 - line-height: 0; - } - &:after { - clear: both; - } -} - -// = -// = -// = -// = -// = -// ===== CSS3 ============================================================================================================ - -// Gradients -.gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) -{ - background: @color; - background: -webkit-gradient(linear, - left bottom, - left top, - color-stop(0, @start), - color-stop(1, @stop)); - background: -ms-linear-gradient(bottom, - @start, - @stop); - background: -moz-linear-gradient(center bottom, - @start 0%, - @stop 100%); -} -.bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) -{ - background: @color; - background: -webkit-gradient(linear, - left bottom, - left top, - color-stop(0, rgb(@start,@start,@start)), - color-stop(1, rgb(@stop,@stop,@stop))); - background: -ms-linear-gradient(bottom, - rgb(@start,@start,@start) 0%, - rgb(@start,@start,@start) 100%); - background: -moz-linear-gradient(center bottom, - rgb(@start,@start,@start) 0%, - rgb(@stop,@stop,@stop) 100%); -} - -// Shadows -// -// ___ .box-shadow() -// | -// | Ombré extérieur. -// | -// | 1 param : @blur -// | 2+ params : @horizontal / @vertical / @blur / @color: #000 / @spread: 0px -// -// ___ .inset-shadow() -// | -// | Ombré intérieur. -// | -// | 1 param : @blur -// | 2+ params : @horizontal / @vertical / @blur / @color: #000 / @spread: 0px -// -.box-shadow(@blur: 9px) -{ - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 @blur #000; - -moz-box-shadow: 0 0 @blur #000; - -ms-box-shadow: 0 0 @blur #000; - box-shadow: 0 0 @blur #000; -} -.box-shadow(@x, @y, @blur: 9px, @color: #000, @spread: 0px) -{ - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=@x, OffY=@y, Color=~'@{color}'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=@{x}, OffY=@{y}, Color='@{color}')"; - -webkit-box-shadow: @x @y @blur @spread @color; - -moz-box-shadow: @x @y @blur @spread @color; - -ms-box-shadow: @x @y @blur @spread @color; - box-shadow: @x @y @blur @spread @color; -} -.inset-shadow(@blur: 9px) -{ - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 @blur #000 inset; - -moz-box-shadow: 0 0 @blur #000 inset; - -ms-box-shadow: 0 0 @blur #000 inset; - box-shadow: 0 0 @blur #000 inset; -} -.inset-shadow(@x, @y, @blur: 9px, @color: #000, @spread: 0px) -{ - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=@x, OffY=@y, Color=~'@{color}'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='@{color}')"; - -webkit-box-shadow: @x @y @blur @spread @color inset; - -moz-box-shadow: @x @y @blur @spread @color inset; - -ms-box-shadow: @x @y @blur @spread @color inset; - box-shadow: @x @y @blur @spread @color inset; -} - -// Border radius -.rounded(@radius: 2px) -{ - -webkit-border-radius: @radius; - -moz-border-radius: @radius; - border-radius: @radius; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.border-radius(@topleft: 0, @topright: 0, @bottomright: 0, @bottomleft: 0) -{ - -webkit-border-radius:@arguments; - -moz-border-radius:@arguments; - border-radius:@arguments; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -<<<<<<< HEAD -// transitions -.transition-simply-prefix(@string) { - -webkit-transition: @string; - -moz-transition: @string; - -o-transition: @string; - transition: @string; -======= -// Transition -// -// ___ .transition() -// | -// | 1 param : @property -// | 2 params : @property / @duration -// | 3+ params : @property / @duration / @transitiondelay:0s , @timingfunction:ease-out -// -// ___ .transitions() -// | -// | Permet de fixer des paramètres spécifique par propriétés, exemple: -// | -// | .transitions( -// | 'height , padding , margin , box-shadow', -// | '.5s , .2s , .2s , .2s', -// | '0s , 0s , 0s , .3s', -// | 'linear , ease-out , linear , ease-out' -// | ); -// -.transition(@property: all) -{ - -webkit-transition: @property; - -moz-transition: @property; - -o-transition: @property; - transition: @property; ->>>>>>> bitbucket/master -} -.transition(@property, @duration) -{ - -webkit-transition: @arguments; - -moz-transition: @arguments; - -o-transition: @arguments; - transition: @arguments; -} -.transition(@property, @duration, @transitiondelay, @timingfunction:ease-out) -{ - -webkit-transition: @arguments; - -moz-transition: @arguments; - -o-transition: @arguments; - transition: @arguments; -} -.transitions(@property: all, @duration:0s, @transitiondelay:0s, @timingfunction:ease-out) -{ - -webkit-transition-property :~'@{property}'; - -webkit-transition-duration :~'@{duration}'; - -webkit-transition-delay :~'@{transitiondelay}'; - -webkit-transition-timing-function:~'@{timingfunction}'; - -moz-transition-property :~'@{property}'; - -moz-transition-duration :~'@{duration}'; - -moz-transition-delay :~'@{transitiondelay}'; - -moz-transition-timing-function:~'@{timingfunction}'; - -o-transition-property :~'@{property}'; - -o-transition-duration :~'@{duration}'; - -o-transition-delay :~'@{transitiondelay}'; - -o-transition-timing-function:~'@{timingfunction}'; - transition-property :~'@{property}'; - transition-duration :~'@{duration}'; - transition-delay :~'@{transitiondelay}'; - transition-timing-function:~'@{timingfunction}'; -} -<<<<<<< HEAD -.transition(@p, @d, @e, @de) { - -webkit-transition: @arguments; - -moz-transition: @arguments; - -o-transition: @arguments; - transition: @arguments; -} -.transition-delay(@delay: 0s) { - -webkit-transition-delay: @delay; - -moz-transition-delay: @delay; - -o-transition-delay: @delay; - transition-delay: @delay; -} -// rotation -.rotation(@deg:5deg){ -======= - -.transitions-duration(@duration: 0s) -{ - -webkit-transition-duration: ~'@{duration}'; - -moz-transition-duration: ~'@{duration}'; - -o-transition-duration: ~'@{duration}'; - transition-duration: ~'@{duration}'; -} - -.transition-duration(@duration: 0.2s) -{ - -webkit-transition-duration: @duration; - -moz-transition-duration: @duration; - -o-transition-duration: @duration; - transition-duration: @duration; -} - -// Rotate -// -// ___ .rotation() -// | -// | 1 param : @degree -// -// ___ .rotate() -// | -// | Tentative de compatibilté étendue (fonctionne uniquement pour 0, 90, 180 ou 270 degrés). -// | -// | 1 param : @degree -// | 3 params : @degree / @originX / @originY -// -.rotation(@deg:5deg) -{ ->>>>>>> bitbucket/master - -webkit-transform: rotate(@deg); - -moz-transform: rotate(@deg); - transform: rotate(@deg); -} -.rotate(@value, @originX:0%, @originY:0%, @unit:'deg') -{ - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation = (360 / @value) + 1); //0, 1, 2, or 3 rotate 0, 90, 180 or 270 - -webkit-transform: rotate(~"@{value}@{unit}"); // ~"@{value}@{unit}" rather than @value@unit remove the spaces between value and unit. - -moz-transform: rotate(~"@{value}@{unit}"); - -ms-transform: rotate(~"@{value}@{unit}"); - -o-transform: rotate(~"@{value}@{unit}"); - transform: rotate(~"@{value}@{unit}"); - -webkit-transform-origin:@originX @originY; - -moz-transform-origin:@originX @originY; - -ms-transform-origin:@originX @originY; - -o-transform-origin:@originX @originY; - transform-origin:@originX @originY; -} - -// Scale -.scale(@ratio:1.5) -{ - -webkit-transform:scale(@ratio); -<<<<<<< HEAD - -moz-transform:scale(@ratio); - transform:scale(@ratio); -} - -// columns -.columns(@colwidth: 250px) { - -moz-column-width: @colwidth; - -webkit-column-width: @colwidth; - column-width: @colwidth; -} - -.columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) { - -moz-column-width: @colwidth; - -moz-column-count: @colcount; - -moz-column-gap: @colgap; - -moz-column-rule-color: @columnRuleColor; - -moz-column-rule-style: @columnRuleStyle; - -moz-column-rule-width: @columnRuleWidth; - -webkit-column-width: @colwidth; - -webkit-column-count: @colcount; - -webkit-column-gap: @colgap; -======= - -moz-transform:scale(@ratio); - transform:scale(@ratio); -} - -// Translate -.translate(@x:0, @y:0) -{ - -webkit-transform: translate(@x, @y); - -moz-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} - -// Columns -.columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) -{ - -webkit-column-width : @colwidth; - -webkit-column-count : @colcount; - -webkit-column-gap : @colgap; ->>>>>>> bitbucket/master - -webkit-column-rule-color: @columnRuleColor; - -webkit-column-rule-style: @columnRuleStyle; - -webkit-column-rule-width: @columnRuleWidth; - -moz-column-width : @colwidth; - -moz-column-count : @colcount; - -moz-column-gap : @colgap; - -moz-column-rule-color: @columnRuleColor; - -moz-column-rule-style: @columnRuleStyle; - -moz-column-rule-width: @columnRuleWidth; - column-width : @colwidth; - column-count : @colcount; - column-gap : @colgap; - column-rule-color: @columnRuleColor; - column-rule-style: @columnRuleStyle; - column-rule-width: @columnRuleWidth; -} - -.edit-link(@bc:#CCFF2F,@c:#333) -{ - .dib; - background-color:@bc; - border:1px solid; - border-color:darken(desaturate(@bc, 35%),15%) darken(desaturate(@bc, 35%),15%) darken(desaturate(@bc, 35%),20%); - .rounded; - color: @c; - cursor: pointer; - .font-size(.8em,1em); - font-weight: normal; - padding: 0.25em 0.75em; - margin-top:.5em; - - &:hover{background-color:darken(@bc, 20%);} - &:active{ - text-shadow: 0 1px 0 lighten(@bc,5%); - background-color:darken(@bc, 20%); - //.inset-shadow(0,0,2px,darken(@bc,60)); - } -} - -// = -// = -// = -// = -// = -// ===== RETINA ========================================================================================================== - -// retina.less -// A helper mixin for applying high-resolution background images (http://www.retinajs.com) -.at2x(@path, @w: auto, @h: auto) { - background-image: url(@path); - @at2x_path: ~`"@{path}".split('.').slice(0, "@{path}".split('.').length - 1).join(".") + "@2x" + "." + "@{path}".split('.')["@{path}".split('.').length - 1]`; - - @media all and (-webkit-min-device-pixel-ratio : 1.5) { - background-image: url(@at2x_path); - background-size: @w @h; - } -} diff --git a/sites/all/themes/gui/materiobasetheme/css/nonsemantic.css b/sites/all/themes/gui/materiobasetheme/css/nonsemantic.css deleted file mode 100644 index 5a34b8f8..00000000 --- a/sites/all/themes/gui/materiobasetheme/css/nonsemantic.css +++ /dev/null @@ -1,46 +0,0 @@ -/* ==|== non-semantic helper classes ======================================== - Please define your styles before this section. - ========================================================================== */ - -/* For image replacement */ -.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; } -.ir br { display: none; } - -/* Hide from both screenreaders and browsers: h5bp.com/u */ -.hidden { display: none !important; visibility: hidden; } - -/* Hide only visually, but have it available for screenreaders: h5bp.com/v */ -.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } - -/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */ -.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; } - -/* Hide visually and from screenreaders, but maintain layout */ -.invisible { visibility: hidden; } - -/* Contain floats: h5bp.com/q */ -.clearfix:before, .clearfix:after { content: ""; display: table; } -.clearfix:after { clear: both; } -.clearfix { zoom: 1; } - -*:focus{outline:none;} -*::-moz-focus-inner { border: 0; } - -/* ==|== media queries ====================================================== - PLACEHOLDER Media Queries for Responsive Design. - These override the primary ('mobile first') styles - Modify as content requires. - ========================================================================== */ - -@media only screen and (min-width: 480px) { - /* Style adjustments for viewports 480px and over go here */ - -} - -@media only screen and (min-width: 768px) { - /* Style adjustments for viewports 768px and over go here */ - -} - - - diff --git a/sites/all/themes/gui/materiobasetheme/css/normalize.css b/sites/all/themes/gui/materiobasetheme/css/normalize.css deleted file mode 100644 index d4210aac..00000000 --- a/sites/all/themes/gui/materiobasetheme/css/normalize.css +++ /dev/null @@ -1,504 +0,0 @@ -/*! normalize.css v1.0.1 | MIT License | git.io/normalize */ - -/* ========================================================================== - HTML5 display definitions - ========================================================================== */ - -/* - * Corrects `block` display not defined in IE 6/7/8/9 and Firefox 3. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section, -summary { - display: block; -} - -/* - * Corrects `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. - */ - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -/* - * Prevents modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/* - * Addresses styling for `hidden` attribute not present in IE 7/8/9, Firefox 3, - * and Safari 4. - * Known issue: no IE 6 support. - */ - -[hidden] { - display: none; -} - -/* ========================================================================== - Base - ========================================================================== */ - -/* - * 1. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using - * `em` units. - * 2. Prevents iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-size: 100%; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - -ms-text-size-adjust: 100%; /* 2 */ -} - -/* - * Addresses `font-family` inconsistency between `textarea` and other form - * elements. - */ - -html, -button, -input, -select, -textarea { - font-family: sans-serif; -} - -/* - * Addresses margins handled incorrectly in IE 6/7. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/* - * Addresses `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/* - * Improves readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* ========================================================================== - Typography - ========================================================================== */ - -/* - * Addresses font sizes and margins set differently in IE 6/7. - * Addresses font sizes within `section` and `article` in Firefox 4+, Safari 5, - * and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -h2 { - font-size: 1.5em; - margin: 0.83em 0; -} - -h3 { - font-size: 1.17em; - margin: 1em 0; -} - -h4 { - font-size: 1em; - margin: 1.33em 0; -} - -h5 { - font-size: 0.83em; - margin: 1.67em 0; -} - -h6 { - font-size: 0.75em; - margin: 2.33em 0; -} - -/* - * Addresses styling not present in IE 7/8/9, Safari 5, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/* - * Addresses style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -blockquote { - margin: 1em 40px; -} - -/* - * Addresses styling not present in Safari 5 and Chrome. - */ - -dfn { - font-style: italic; -} - -/* - * Addresses styling not present in IE 6/7/8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/* - * Addresses margins set differently in IE 6/7. - */ - -p, -pre { - margin: 1em 0; -} - -/* - * Corrects font family set oddly in IE 6, Safari 4/5, and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - _font-family: 'courier new', monospace; - font-size: 1em; -} - -/* - * Improves readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -/* - * Addresses CSS quotes not supported in IE 6/7. - */ - -q { - quotes: none; -} - -/* - * Addresses `quotes` property not supported in Safari 4. - */ - -q:before, -q:after { - content: ''; - content: none; -} - -/* - * Addresses inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/* - * Prevents `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; -} - -/* ========================================================================== - Lists - ========================================================================== */ - -/* - * Addresses margins set differently in IE 6/7. - */ - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -/* - * Addresses paddings set differently in IE 6/7. - */ - -menu, -ol, -ul { - padding: 0 0 0 40px; -} - -/* - * Corrects list images handled incorrectly in IE 7. - */ - -nav ul, -nav ol { - list-style: none; - list-style-image: none; -} - -/* ========================================================================== - Embedded content - ========================================================================== */ - -/* - * 1. Removes border when inside `a` element in IE 6/7/8/9 and Firefox 3. - * 2. Improves image quality when scaled in IE 7. - */ - -img { - border: 0; /* 1 */ - -ms-interpolation-mode: bicubic; /* 2 */ -} - -/* - * Corrects overflow displayed oddly in IE 9. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* ========================================================================== - Figures - ========================================================================== */ - -/* - * Addresses margin not present in IE 6/7/8/9, Safari 5, and Opera 11. - */ - -figure { - margin: 0; -} - -/* ========================================================================== - Forms - ========================================================================== */ - -/* - * Corrects margin displayed oddly in IE 6/7. - */ - -form { - margin: 0; -} - -/* - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/* - * 1. Corrects color not being inherited in IE 6/7/8/9. - * 2. Corrects text not wrapping in Firefox 3. - * 3. Corrects alignment displayed oddly in IE 6/7. - */ - -legend { - border: 0; /* 1 */ - padding: 0; - white-space: normal; /* 2 */ - *margin-left: -7px; /* 3 */ -} - -/* - * 1. Corrects font size not being inherited in all browsers. - * 2. Addresses margins set differently in IE 6/7, Firefox 3+, Safari 5, - * and Chrome. - * 3. Improves appearance and consistency in all browsers. - */ - -button, -input, -select, -textarea { - font-size: 100%; /* 1 */ - margin: 0; /* 2 */ - vertical-align: baseline; /* 3 */ - *vertical-align: middle; /* 3 */ -} - -/* - * Addresses Firefox 3+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -button, -input { - line-height: normal; -} - -/* - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Corrects inability to style clickable `input` types in iOS. - * 3. Improves usability and consistency of cursor style between image-type - * `input` and others. - * 4. Removes inner spacing in IE 7 without affecting normal text inputs. - * Known issue: inner spacing remains in IE 6. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ - *overflow: visible; /* 4 */ -} - -/* - * Re-set default cursor for disabled elements. - */ - -button[disabled], -input[disabled] { - cursor: default; -} - -/* - * 1. Addresses box sizing set to content-box in IE 8/9. - * 2. Removes excess padding in IE 8/9. - * 3. Removes excess padding in IE 7. - * Known issue: excess padding remains in IE 6. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ - *height: 13px; /* 3 */ - *width: 13px; /* 3 */ -} - -/* - * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Addresses `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; -} - -/* - * Removes 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; -} - -/* - * Removes inner padding and border in Firefox 3+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/* - * 1. Removes default vertical scrollbar in IE 6/7/8/9. - * 2. Improves 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/sites/all/themes/gui/materiobasetheme/css/styles.css b/sites/all/themes/gui/materiobasetheme/css/styles.css index ebaceeb4..2039f777 100644 --- a/sites/all/themes/gui/materiobasetheme/css/styles.css +++ b/sites/all/themes/gui/materiobasetheme/css/styles.css @@ -2,42 +2,40 @@ * Primary Drupal Styles * Author: g-u-i.net */ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. */ -.clearfix { - *zoom: 1; +@import url(../fonts/icon/foundation-icons.css); +/* line 9, ../bower_components/foundation/scss/normalize.scss */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ } -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + +/** + * Remove default margin. + */ +/* line 19, ../bower_components/foundation/scss/normalize.scss */ +body { + margin: 0; } + +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ +/* line 33, ../bower_components/foundation/scss/normalize.scss */ article, aside, details, @@ -46,4669 +44,2328 @@ figure, footer, header, hgroup, +main, +menu, nav, -section { +section, +summary { display: block; } + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +/* line 54, ../bower_components/foundation/scss/normalize.scss */ audio, canvas, +progress, video { display: inline-block; - *display: inline; - *zoom: 1; + /* 1 */ + vertical-align: baseline; + /* 2 */ } + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +/* line 67, ../bower_components/foundation/scss/normalize.scss */ audio:not([controls]) { display: none; + height: 0; } -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ +/* line 77, ../bower_components/foundation/scss/normalize.scss */ +[hidden], +template { + display: none; } -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +/* line 89, ../bower_components/foundation/scss/normalize.scss */ +a { + background-color: transparent; } -a:hover, -a:active { + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +/* line 97, ../bower_components/foundation/scss/normalize.scss */ +a:active, +a:hover { outline: 0; } + +/* Text-level semantics + ========================================================================== */ +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ +/* line 109, ../bower_components/foundation/scss/normalize.scss */ +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ +/* line 117, ../bower_components/foundation/scss/normalize.scss */ +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ +/* line 126, ../bower_components/foundation/scss/normalize.scss */ +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ +/* line 135, ../bower_components/foundation/scss/normalize.scss */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ +/* line 144, ../bower_components/foundation/scss/normalize.scss */ +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ +/* line 153, ../bower_components/foundation/scss/normalize.scss */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +/* line 161, ../bower_components/foundation/scss/normalize.scss */ sub, sup { - position: relative; font-size: 75%; line-height: 0; + position: relative; vertical-align: baseline; } + +/* line 169, ../bower_components/foundation/scss/normalize.scss */ sup { top: -0.5em; } + +/* line 173, ../bower_components/foundation/scss/normalize.scss */ sub { bottom: -0.25em; } + +/* Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9/10. + */ +/* line 184, ../bower_components/foundation/scss/normalize.scss */ img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - vertical-align: middle; border: 0; - -ms-interpolation-mode: bicubic; } -#map_canvas img, -.google-maps img { - max-width: none; + +/** + * Correct overflow not hidden in IE 9/10/11. + */ +/* line 192, ../bower_components/foundation/scss/normalize.scss */ +svg:not(:root) { + overflow: hidden; } + +/* Grouping content + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari. + */ +/* line 203, ../bower_components/foundation/scss/normalize.scss */ +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ +/* line 211, ../bower_components/foundation/scss/normalize.scss */ +hr { + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ +/* line 221, ../bower_components/foundation/scss/normalize.scss */ +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ +/* line 229, ../bower_components/foundation/scss/normalize.scss */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ +/* line 252, ../bower_components/foundation/scss/normalize.scss */ button, input, +optgroup, select, textarea { + color: inherit; + /* 1 */ + font: inherit; + /* 2 */ margin: 0; - font-size: 100%; - vertical-align: middle; + /* 3 */ } + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ +/* line 266, ../bower_components/foundation/scss/normalize.scss */ +button { + overflow: visible; +} + +/** + * 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 Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ +/* line 277, ../bower_components/foundation/scss/normalize.scss */ button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; +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 290, ../bower_components/foundation/scss/normalize.scss */ button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; + /* 2 */ cursor: pointer; + /* 3 */ } -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; + +/** + * Re-set default cursor for disabled elements. + */ +/* line 302, ../bower_components/foundation/scss/normalize.scss */ +button[disabled], +html input[disabled] { + cursor: default; } + +/** + * Remove inner padding and border in Firefox 4+. + */ +/* line 311, ../bower_components/foundation/scss/normalize.scss */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +/* line 322, ../bower_components/foundation/scss/normalize.scss */ +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ +/* line 334, ../bower_components/foundation/scss/normalize.scss */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ +/* line 346, ../bower_components/foundation/scss/normalize.scss */ +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ +/* line 357, ../bower_components/foundation/scss/normalize.scss */ input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -webkit-appearance: textfield; + /* 1 */ + /* 2 */ + box-sizing: content-box; } -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ +/* line 370, ../bower_components/foundation/scss/normalize.scss */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** + * Define consistent border, margin, and padding. + */ +/* line 379, ../bower_components/foundation/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/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +/* line 390, ../bower_components/foundation/scss/normalize.scss */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ +/* line 399, ../bower_components/foundation/scss/normalize.scss */ textarea { overflow: auto; - vertical-align: top; } -@media print { - * { - text-shadow: none !important; - color: #000 !important; - background: transparent !important; - box-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; - } - 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; - } -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.1) #000000; - -moz-box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.1) #000000; - -ms-box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.1) #000000; - box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.1) #000000; -} -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; - -webkit-border-radius: 500px 0 0 0; - -moz-border-radius: 500px 0 0 0; - border-radius: 500px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.12765957%; - *margin-left: 2.07446809%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.12765957%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851%; -} -.row-fluid .span11 { - width: 91.4893617%; - *width: 91.43617021%; -} -.row-fluid .span10 { - width: 82.9787234%; - *width: 82.92553191%; -} -.row-fluid .span9 { - width: 74.46808511%; - *width: 74.41489362%; -} -.row-fluid .span8 { - width: 65.95744681%; - *width: 65.90425532%; -} -.row-fluid .span7 { - width: 57.44680851%; - *width: 57.39361702%; -} -.row-fluid .span6 { - width: 48.93617021%; - *width: 48.88297872%; -} -.row-fluid .span5 { - width: 40.42553191%; - *width: 40.37234043%; -} -.row-fluid .span4 { - width: 31.91489362%; - *width: 31.86170213%; -} -.row-fluid .span3 { - width: 23.40425532%; - *width: 23.35106383%; -} -.row-fluid .span2 { - width: 14.89361702%; - *width: 14.84042553%; -} -.row-fluid .span1 { - width: 6.38297872%; - *width: 6.32978723%; -} -.row-fluid .offset12 { - margin-left: 104.25531915%; - *margin-left: 104.14893617%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957%; - *margin-left: 102.0212766%; -} -.row-fluid .offset11 { - margin-left: 95.74468085%; - *margin-left: 95.63829787%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702128%; - *margin-left: 93.5106383%; -} -.row-fluid .offset10 { - margin-left: 87.23404255%; - *margin-left: 87.12765957%; -} -.row-fluid .offset10:first-child { - margin-left: 85.10638298%; - *margin-left: 85%; -} -.row-fluid .offset9 { - margin-left: 78.72340426%; - *margin-left: 78.61702128%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468%; - *margin-left: 76.4893617%; -} -.row-fluid .offset8 { - margin-left: 70.21276596%; - *margin-left: 70.10638298%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638%; - *margin-left: 67.9787234%; -} -.row-fluid .offset7 { - margin-left: 61.70212766%; - *margin-left: 61.59574468%; -} -.row-fluid .offset7:first-child { - margin-left: 59.57446809%; - *margin-left: 59.46808511%; -} -.row-fluid .offset6 { - margin-left: 53.19148936%; - *margin-left: 53.08510638%; -} -.row-fluid .offset6:first-child { - margin-left: 51.06382979%; - *margin-left: 50.95744681%; -} -.row-fluid .offset5 { - margin-left: 44.68085106%; - *margin-left: 44.57446809%; -} -.row-fluid .offset5:first-child { - margin-left: 42.55319149%; - *margin-left: 42.44680851%; -} -.row-fluid .offset4 { - margin-left: 36.17021277%; - *margin-left: 36.06382979%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319%; - *margin-left: 33.93617021%; -} -.row-fluid .offset3 { - margin-left: 27.65957447%; - *margin-left: 27.55319149%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489%; - *margin-left: 25.42553191%; -} -.row-fluid .offset2 { - margin-left: 19.14893617%; - *margin-left: 19.04255319%; -} -.row-fluid .offset2:first-child { - margin-left: 17.0212766%; - *margin-left: 16.91489362%; -} -.row-fluid .offset1 { - margin-left: 10.63829787%; - *margin-left: 10.53191489%; -} -.row-fluid .offset1:first-child { - margin-left: 8.5106383%; - *margin-left: 8.40425532%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} -small { - font-size: 85%; -} -strong { + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ +/* line 408, ../bower_components/foundation/scss/normalize.scss */ +optgroup { font-weight: bold; } -em { - font-style: italic; + +/* Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +/* line 419, ../bower_components/foundation/scss/normalize.scss */ +table { + border-collapse: collapse; + border-spacing: 0; } -cite { + +/* line 424, ../bower_components/foundation/scss/normalize.scss */ +td, +th { + padding: 0; +} + +/* line 348, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-version { + font-family: "/5.5.1/"; +} + +/* line 352, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-small { + font-family: "/only screen/"; + width: 0; +} + +/* line 357, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-small-only { + font-family: "/only screen and (max-width: 40em)/"; + width: 0; +} + +/* line 362, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-medium { + font-family: "/only screen and (min-width:40.063em)/"; + width: 40.063em; +} + +/* line 367, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-medium-only { + font-family: "/only screen and (min-width:40.063em) and (max-width:64em)/"; + width: 40.063em; +} + +/* line 372, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-large { + font-family: "/only screen and (min-width:64.063em)/"; + width: 64.063em; +} + +/* line 377, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-large-only { + font-family: "/only screen and (min-width:64.063em) and (max-width:90em)/"; + width: 64.063em; +} + +/* line 382, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-xlarge { + font-family: "/only screen and (min-width:90.063em)/"; + width: 90.063em; +} + +/* line 387, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-xlarge-only { + font-family: "/only screen and (min-width:90.063em) and (max-width:120em)/"; + width: 90.063em; +} + +/* line 392, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-mq-xxlarge { + font-family: "/only screen and (min-width:120.063em)/"; + width: 120.063em; +} + +/* line 397, ../bower_components/foundation/scss/foundation/components/_global.scss */ +meta.foundation-data-attribute-namespace { + font-family: false; +} + +/* line 404, ../bower_components/foundation/scss/foundation/components/_global.scss */ +html, body { + height: 100%; +} + +/* line 407, ../bower_components/foundation/scss/foundation/components/_global.scss */ +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* line 413, ../bower_components/foundation/scss/foundation/components/_global.scss */ +html, +body { + font-size: 100%; +} + +/* line 417, ../bower_components/foundation/scss/foundation/components/_global.scss */ +body { + background: #fff; + color: #222; + padding: 0; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; font-style: normal; + line-height: 1.5; + position: relative; + cursor: auto; } -.muted { - color: #999999; + +/* line 430, ../bower_components/foundation/scss/foundation/components/_global.scss */ +a:hover { + cursor: pointer; } -a.muted:hover, -a.muted:focus { - color: #808080; + +/* line 433, ../bower_components/foundation/scss/foundation/components/_global.scss */ +img { + max-width: 100%; + height: auto; } -.text-warning { - color: #c09853; + +/* line 435, ../bower_components/foundation/scss/foundation/components/_global.scss */ +img { + -ms-interpolation-mode: bicubic; } -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; + +/* line 439, ../bower_components/foundation/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; } -.text-error { - color: #b94a48; + +/* line 446, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.left { + float: left !important; } -a.text-error:hover, -a.text-error:focus { - color: #953b39; + +/* line 447, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.right { + float: right !important; } -.text-info { - color: #3a87ad; + +/* line 172, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.clearfix:before, .clearfix:after { + content: " "; + display: table; } -a.text-info:hover, -a.text-info:focus { - color: #2d6987; +/* line 173, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.clearfix:after { + clear: both; } -.text-success { - color: #468847; + +/* line 451, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.hide { + display: none; } -a.text-success:hover, -a.text-success:focus { - color: #356635; + +/* line 456, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.invisible { + visibility: hidden; } + +/* line 462, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* line 465, ../bower_components/foundation/scss/foundation/components/_global.scss */ +img { + display: inline-block; + vertical-align: middle; +} + +/* line 475, ../bower_components/foundation/scss/foundation/components/_global.scss */ +textarea { + height: auto; + min-height: 50px; +} + +/* line 478, ../bower_components/foundation/scss/foundation/components/_global.scss */ +select { + width: 100%; +} + +/* line 155, ../bower_components/foundation/scss/foundation/components/_type.scss */ .text-left { - text-align: left; + text-align: left !important; } + +/* line 156, ../bower_components/foundation/scss/foundation/components/_type.scss */ .text-right { - text-align: right; + text-align: right !important; } + +/* line 157, ../bower_components/foundation/scss/foundation/components/_type.scss */ .text-center { - text-align: center; + text-align: center !important; } + +/* line 158, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.text-justify { + text-align: justify !important; +} + +@media only screen and (max-width: 40em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-only-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-only-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-only-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-only-text-justify { + text-align: justify !important; + } +} +@media only screen { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .small-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-only-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-only-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-only-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-only-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 40.063em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .medium-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 64.063em) and (max-width: 90em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-only-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-only-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-only-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-only-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 64.063em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .large-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 90.063em) and (max-width: 120em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-only-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-only-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-only-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-only-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 90.063em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xlarge-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 120.063em) and (max-width: 99999999em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-only-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-only-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-only-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-only-text-justify { + text-align: justify !important; + } +} +@media only screen and (min-width: 120.063em) { + /* line 162, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-text-left { + text-align: left !important; + } + + /* line 163, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-text-right { + text-align: right !important; + } + + /* line 164, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-text-center { + text-align: center !important; + } + + /* line 165, ../bower_components/foundation/scss/foundation/components/_type.scss */ + .xxlarge-text-justify { + text-align: justify !important; + } +} +/* Typography resets */ +/* line 193, ../bower_components/foundation/scss/foundation/components/_type.scss */ +div, +dl, +dt, +dd, +ul, +ol, +li, h1, h2, h3, h4, h5, -h6 { - margin: 10px 0; +h6, +pre, +form, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; +} + +/* Default Link Styles */ +/* line 217, ../bower_components/foundation/scss/foundation/components/_type.scss */ +a { + color: #008CBA; + text-decoration: none; + line-height: inherit; +} +/* line 222, ../bower_components/foundation/scss/foundation/components/_type.scss */ +a:hover, a:focus { + color: #0078a0; +} +/* line 230, ../bower_components/foundation/scss/foundation/components/_type.scss */ +a img { + border: none; +} + +/* Default paragraph styles */ +/* line 234, ../bower_components/foundation/scss/foundation/components/_type.scss */ +p { font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { font-weight: normal; - line-height: 1; - color: #999999; + font-size: 1rem; + line-height: 1.6; + margin-bottom: 1.25rem; + text-rendering: optimizeLegibility; } -h1, -h2, -h3 { - line-height: 40px; +/* line 242, ../bower_components/foundation/scss/foundation/components/_type.scss */ +p.lead { + font-size: 1.21875rem; + line-height: 1.6; } -h1 { - font-size: 38.5px; +/* line 244, ../bower_components/foundation/scss/foundation/components/_type.scss */ +p aside { + font-size: 0.875rem; + line-height: 1.35; + font-style: italic; } -h2 { - font-size: 31.5px; -} -h3 { - font-size: 24.5px; -} -h4 { - font-size: 17.5px; -} -h5 { - font-size: 14px; -} -h6 { - font-size: 11.9px; -} -h1 small { - font-size: 24.5px; -} -h2 small { - font-size: 17.5px; -} -h3 small { - font-size: 14px; -} -h4 small { - font-size: 14px; -} -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 20px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 20px; -} -dt, -dd { - line-height: 20px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 10px; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -blockquote.pull-right small:before { - content: ''; -} -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 20px; + +/* Default header styles */ +/* line 252, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h1, h2, h3, h4, h5, h6 { + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; font-style: normal; - line-height: 20px; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -pre.prettyprint { - margin-bottom: 20px; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -form { - margin: 0 0 20px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 15px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) #000000; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - margin-top: 1px \9; - /* IE8-9 */ - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - line-height: 30px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.025) #000000; - -moz-box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.025) #000000; - -ms-box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.025) #000000; - box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.025) #000000; - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e #000000; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392 #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392 #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392 #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392 #000000; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b #000000; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075) #000000; -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3 #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3 #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3 #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3 #000000; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 0 6px #f8b9b7 #000000; - -moz-box-shadow: 0 0 0 0 6px #f8b9b7 #000000; - -ms-box-shadow: 0 0 0 0 6px #f8b9b7 #000000; - box-shadow: 0 0 0 0 6px #f8b9b7 #000000; -} -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 10px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 10px; - vertical-align: middle; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0 0 0 0; - -moz-border-radius: 0 4px 4px 0 0 0 0; - border-radius: 0 4px 4px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-border-radius: 0 0 0 0; - -moz-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-append .active, -.input-prepend .active { - background-color: #5ee673; - border-color: #17942a; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px 0 0 0; - -moz-border-radius: 4px 0 0 4px 0 0 0; - border-radius: 4px 0 0 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px 0 0 0; - -moz-border-radius: 4px 0 0 4px 0 0 0; - border-radius: 4px 0 0 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0 0 0 0; - -moz-border-radius: 0 4px 4px 0 0 0 0; - border-radius: 0 4px 4px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0 0 0 0; - -moz-border-radius: 0 4px 4px 0 0 0 0; - border-radius: 0 4px 4px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-border-radius: 0 0 0 0; - -moz-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0 0 0 0; - -moz-border-radius: 0 4px 4px 0 0 0 0; - border-radius: 0 4px 4px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; - -webkit-border-radius: 4px 0 0 4px 0 0 0; - -moz-border-radius: 4px 0 0 4px 0 0 0; - border-radius: 4px 0 0 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -webkit-border-radius: 0 4px 4px 0 0 0 0; - -moz-border-radius: 0 4px 4px 0 0 0 0; - border-radius: 0 4px 4px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; - -webkit-border-radius: 15px 0 0 0; - -moz-border-radius: 15px 0 0 0; - border-radius: 15px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-border-radius: 0 0 0 0; - -moz-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; - -webkit-border-radius: 14px 0 0 14px 0 0 0; - -moz-border-radius: 14px 0 0 14px 0 0 0; - border-radius: 14px 0 0 14px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; - -webkit-border-radius: 0 14px 14px 0 0 0 0; - -moz-border-radius: 0 14px 14px 0 0 0 0; - border-radius: 0 14px 14px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; - -webkit-border-radius: 0 14px 14px 0 0 0 0; - -moz-border-radius: 0 14px 14px 0 0 0 0; - border-radius: 0 14px 14px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; - -webkit-border-radius: 14px 0 0 14px 0 0 0; - -moz-border-radius: 14px 0 0 14px 0 0 0; - border-radius: 14px 0 0 14px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 10px; -} -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 20px; -} -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success > td { - background-color: #dff0d8; -} -.table tbody tr.error > td { - background-color: #f2dede; -} -.table tbody tr.warning > td { - background-color: #fcf8e3; -} -.table tbody tr.info > td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; - width: 16px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; - width: 16px; -} -.icon-folder-open { - background-position: -408px -120px; - width: 16px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.icon-hdd { - background-position: 0 -144px; -} -.icon-bullhorn { - background-position: -24px -144px; -} -.icon-bell { - background-position: -48px -144px; -} -.icon-certificate { - background-position: -72px -144px; -} -.icon-thumbs-up { - background-position: -96px -144px; -} -.icon-thumbs-down { - background-position: -120px -144px; -} -.icon-hand-right { - background-position: -144px -144px; -} -.icon-hand-left { - background-position: -168px -144px; -} -.icon-hand-up { - background-position: -192px -144px; -} -.icon-hand-down { - background-position: -216px -144px; -} -.icon-circle-arrow-right { - background-position: -240px -144px; -} -.icon-circle-arrow-left { - background-position: -264px -144px; -} -.icon-circle-arrow-up { - background-position: -288px -144px; -} -.icon-circle-arrow-down { - background-position: -312px -144px; -} -.icon-globe { - background-position: -336px -144px; -} -.icon-wrench { - background-position: -360px -144px; -} -.icon-tasks { - background-position: -384px -144px; -} -.icon-filter { - background-position: -408px -144px; -} -.icon-briefcase { - background-position: -432px -144px; -} -.icon-fullscreen { - background-position: -456px -144px; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - -moz-box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - -ms-box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; - -webkit-border-radius: 0 6px 6px 6px 0 0 0; - -moz-border-radius: 0 6px 6px 6px 0 0 0; - border-radius: 0 6px 6px 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; - -webkit-border-radius: 5px 5px 5px 0 0 0 0; - -moz-border-radius: 5px 5px 5px 0 0 0 0; - border-radius: 5px 5px 5px 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; - -webkit-border-radius: 6px 0 6px 6px 0 0 0; - -moz-border-radius: 6px 0 6px 6px 0 0 0; - border-radius: 6px 0 6px 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.05) #000000; - -moz-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.05) #000000; - -ms-box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.05) #000000; - box-shadow: 0 0 inset 0 1px 1px rgba(0, 0, 0, 0.05) #000000; -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); - -webkit-opacity: 20; - -khtml-opacity: 20; - -moz-opacity: 20; - opacity: 20; -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); - -webkit-opacity: 40; - -khtml-opacity: 40; - -moz-opacity: 40; - opacity: 40; -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - 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; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - 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); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; -} -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover, -.btn:focus { - 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; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-opacity: 65; - -khtml-opacity: 65; - -moz-opacity: 65; - opacity: 65; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 none #000000; - -moz-box-shadow: 0 0 none #000000; - -ms-box-shadow: 0 0 none #000000; - box-shadow: 0 0 none #000000; -} -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 none #000000; - -moz-box-shadow: 0 0 none #000000; - -ms-box-shadow: 0 0 none #000000; - box-shadow: 0 0 none #000000; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-border-radius: 0 0 0 0; - -moz-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 10px; - margin-bottom: 10px; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-border-radius: 0 0 0 0; - -moz-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} -.btn-group > .btn-mini { - font-size: 10.5px; -} -.btn-group > .btn-small { - font-size: 11.9px; -} -.btn-group > .btn-large { - font-size: 17.5px; -} -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-border-radius: 0 0 0 0; - -moz-border-radius: 0 0 0 0; - border-radius: 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; - -webkit-border-radius: 4px 4px 0 0 0 0 0; - -moz-border-radius: 4px 4px 0 0 0 0 0; - border-radius: 4px 4px 0 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; - -webkit-border-radius: 0 0 4px 4px 0 0 0; - -moz-border-radius: 0 0 4px 4px 0 0 0; - border-radius: 0 0 4px 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; - -webkit-border-radius: 6px 6px 0 0 0 0 0; - -moz-border-radius: 6px 6px 0 0 0 0 0; - border-radius: 6px 6px 0 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px 0 0 0; - -moz-border-radius: 0 0 6px 6px 0 0 0; - border-radius: 0 0 6px 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); - -webkit-opacity: 80; - -khtml-opacity: 80; - -moz-opacity: 80; - opacity: 80; -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -moz-background-clip: padding; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 3px 7px rgba(0, 0, 0, 0.3) #000000; - -moz-box-shadow: 0 0 0 3px 7px rgba(0, 0, 0, 0.3) #000000; - -ms-box-shadow: 0 0 0 3px 7px rgba(0, 0, 0, 0.3) #000000; - box-shadow: 0 0 0 3px 7px rgba(0, 0, 0, 0.3) #000000; - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px 0 0 0; - -moz-border-radius: 0 0 6px 6px 0 0 0; - border-radius: 0 0 6px 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 0 #ffffff #000000; - -moz-box-shadow: 0 0 inset 0 1px 0 #ffffff #000000; - -ms-box-shadow: 0 0 inset 0 1px 0 #ffffff #000000; - box-shadow: 0 0 inset 0 1px 0 #ffffff #000000; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - font-size: 11px; + color: #222222; + text-rendering: optimizeLegibility; + margin-top: 0.2rem; + margin-bottom: 0.5rem; line-height: 1.4; - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; - opacity: 0; } -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); - -webkit-opacity: 80; - -khtml-opacity: 80; - -moz-opacity: 80; - opacity: 80; -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - -moz-box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - -ms-box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - box-shadow: 0 0 0 5px 10px rgba(0, 0, 0, 0.2) #000000; - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0 0 0 0; - -moz-border-radius: 5px 5px 0 0 0 0 0; - border-radius: 5px 5px 0 0 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.popover-title:empty { - display: none; -} -.popover-content { - padding: 9px 14px; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: 11px; -} -.popover .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; +/* line 262, ../bower_components/foundation/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; } -.thumbnails:after { - clear: both; + +/* line 269, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h1 { + font-size: 2.125rem; } -.row-fluid .thumbnails { + +/* line 270, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h2 { + font-size: 1.6875rem; +} + +/* line 271, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h3 { + font-size: 1.375rem; +} + +/* line 272, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h4 { + font-size: 1.125rem; +} + +/* line 273, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h5 { + font-size: 1.125rem; +} + +/* line 274, ../bower_components/foundation/scss/foundation/components/_type.scss */ +h6 { + font-size: 1rem; +} + +/* line 276, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.subheader { + line-height: 1.4; + color: #6f6f6f; + font-weight: normal; + margin-top: 0.2rem; + margin-bottom: 0.5rem; +} + +/* line 278, ../bower_components/foundation/scss/foundation/components/_type.scss */ +hr { + border: solid #DDDDDD; + border-width: 1px 0 0; + clear: both; + margin: 1.25rem 0 1.1875rem; + height: 0; +} + +/* Helpful Typography Defaults */ +/* line 287, ../bower_components/foundation/scss/foundation/components/_type.scss */ +em, +i { + font-style: italic; + line-height: inherit; +} + +/* line 293, ../bower_components/foundation/scss/foundation/components/_type.scss */ +strong, +b { + font-weight: bold; + line-height: inherit; +} + +/* line 299, ../bower_components/foundation/scss/foundation/components/_type.scss */ +small { + font-size: 60%; + line-height: inherit; +} + +/* line 304, ../bower_components/foundation/scss/foundation/components/_type.scss */ +code { + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: normal; + color: #333333; + background-color: #f8f8f8; + border-width: 1px; + border-style: solid; + border-color: #dfdfdf; + padding: 0.125rem 0.3125rem 0.0625rem; +} + +/* Lists */ +/* line 316, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul, +ol, +dl { + font-size: 1rem; + line-height: 1.6; + margin-bottom: 1.25rem; + list-style-position: outside; + font-family: inherit; +} + +/* line 326, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul { + margin-left: 1.1rem; +} +/* line 328, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.no-bullet { margin-left: 0; } -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; +/* line 331, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.no-bullet li ul, +ul.no-bullet li ol { + margin-left: 1.25rem; + margin-bottom: 0; + list-style: none; } -.thumbnail { + +/* Unordered Lists */ +/* line 344, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul li ul, +ul li ol { + margin-left: 1.25rem; + margin-bottom: 0; +} +/* line 353, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.square li ul, ul.circle li ul, ul.disc li ul { + list-style: inherit; +} +/* line 356, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.square { + list-style-type: square; + margin-left: 1.1rem; +} +/* line 357, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.circle { + list-style-type: circle; + margin-left: 1.1rem; +} +/* line 358, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.disc { + list-style-type: disc; + margin-left: 1.1rem; +} +/* line 359, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ul.no-bullet { + list-style: none; +} + +/* Ordered Lists */ +/* line 363, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ol { + margin-left: 1.4rem; +} +/* line 366, ../bower_components/foundation/scss/foundation/components/_type.scss */ +ol li ul, +ol li ol { + margin-left: 1.25rem; + margin-bottom: 0; +} + +/* Definition Lists */ +/* line 376, ../bower_components/foundation/scss/foundation/components/_type.scss */ +dl dt { + margin-bottom: 0.3rem; + font-weight: bold; +} +/* line 380, ../bower_components/foundation/scss/foundation/components/_type.scss */ +dl dd { + margin-bottom: 0.75rem; +} + +/* Abbreviations */ +/* line 384, ../bower_components/foundation/scss/foundation/components/_type.scss */ +abbr, +acronym { + text-transform: uppercase; + font-size: 90%; + color: #222; + cursor: help; +} + +/* line 391, ../bower_components/foundation/scss/foundation/components/_type.scss */ +abbr { + text-transform: none; +} +/* line 393, ../bower_components/foundation/scss/foundation/components/_type.scss */ +abbr[title] { + border-bottom: 1px dotted #DDDDDD; +} + +/* Blockquotes */ +/* line 399, ../bower_components/foundation/scss/foundation/components/_type.scss */ +blockquote { + margin: 0 0 1.25rem; + padding: 0.5625rem 1.25rem 0 1.1875rem; + border-left: 1px solid #DDDDDD; +} +/* line 404, ../bower_components/foundation/scss/foundation/components/_type.scss */ +blockquote cite { display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.055) #000000; - -moz-box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.055) #000000; - -ms-box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.055) #000000; - box-shadow: 0 0 0 1px 3px rgba(0, 0, 0, 0.055) #000000; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 0 1px 4px rgba(0, 105, 214, 0.25) #000000; - -moz-box-shadow: 0 0 0 1px 4px rgba(0, 105, 214, 0.25) #000000; - -ms-box-shadow: 0 0 0 1px 4px rgba(0, 105, 214, 0.25) #000000; - box-shadow: 0 0 0 1px 4px rgba(0, 105, 214, 0.25) #000000; -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; + font-size: 0.8125rem; color: #555555; } -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; +/* line 408, ../bower_components/foundation/scss/foundation/components/_type.scss */ +blockquote cite:before { + content: "\2014 \0020"; } -.media, -.media .media { - margin-top: 15px; +/* line 412, ../bower_components/foundation/scss/foundation/components/_type.scss */ +blockquote cite a, +blockquote cite a:visited { + color: #555555; } -.media:first-child { - margin-top: 0; + +/* line 418, ../bower_components/foundation/scss/foundation/components/_type.scss */ +blockquote, +blockquote p { + line-height: 1.6; + color: #6f6f6f; } -.media-object { + +/* Microformats */ +/* line 425, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.vcard { + display: inline-block; + margin: 0 0 1.25rem 0; + border: 1px solid #DDDDDD; + padding: 0.625rem 0.75rem; +} +/* line 431, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.vcard li { + margin: 0; display: block; } -.media-heading { - margin: 0 0 5px; +/* line 435, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.vcard .fn { + font-weight: bold; + font-size: 0.9375rem; } -.media > .pull-left { + +/* line 442, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.vevent .summary { + font-weight: bold; +} +/* line 444, ../bower_components/foundation/scss/foundation/components/_type.scss */ +.vevent abbr { + cursor: default; + text-decoration: none; + font-weight: bold; + border: none; + padding: 0 0.0625rem; +} + +@media only screen and (min-width: 40.063em) { + /* line 455, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h1, h2, h3, h4, h5, h6 { + line-height: 1.4; + } + + /* line 456, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h1 { + font-size: 2.75rem; + } + + /* line 457, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h2 { + font-size: 2.3125rem; + } + + /* line 458, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h3 { + font-size: 1.6875rem; + } + + /* line 459, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h4 { + font-size: 1.4375rem; + } + + /* line 460, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h5 { + font-size: 1.125rem; + } + + /* line 461, ../bower_components/foundation/scss/foundation/components/_type.scss */ + h6 { + font-size: 1rem; + } +} +/* Clearing Styles */ +/* line 44, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-thumbs, [data-clearing] { + margin-bottom: 0; + margin-left: 0; + list-style: none; +} +/* line 172, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.clearing-thumbs:before, .clearing-thumbs:after, [data-clearing]:before, [data-clearing]:after { + content: " "; + display: table; +} +/* line 173, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.clearing-thumbs:after, [data-clearing]:after { + clear: both; +} +/* line 50, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-thumbs li, [data-clearing] li { + float: left; margin-right: 10px; } -.media > .pull-right { - margin-left: 10px; +/* line 55, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-thumbs[class*="block-grid-"] li, [data-clearing][class*="block-grid-"] li { + margin-right: 0; } -.media-list { - margin-left: 0; - list-style: none; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; -} -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.badge { - padding-left: 9px; - padding-right: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; - -webkit-border-radius: 9px 0 0 0; - -moz-border-radius: 9px 0 0 0; - border-radius: 9px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.1) #000000; - -moz-box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.1) #000000; - -ms-box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.1) #000000; - box-shadow: 0 0 inset 0 1px 2px rgba(0, 0, 0, 0.1) #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 -1px 0 rgba(0, 0, 0, 0.15) #000000; - -moz-box-shadow: 0 0 inset 0 -1px 0 rgba(0, 0, 0, 0.15) #000000; - -ms-box-shadow: 0 0 inset 0 -1px 0 rgba(0, 0, 0, 0.15) #000000; - box-shadow: 0 0 inset 0 -1px 0 rgba(0, 0, 0, 0.15) #000000; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15) #000000; - -moz-box-shadow: 0 0 inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15) #000000; - -ms-box-shadow: 0 0 inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15) #000000; - box-shadow: 0 0 inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15) #000000; -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 20px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - -webkit-border-radius: 23px 0 0 0; - -moz-border-radius: 23px 0 0 0; - border-radius: 23px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - opacity: 0.5; - filter: alpha(opacity=50); - -webkit-opacity: 50; - -khtml-opacity: 50; - -moz-opacity: 50; - opacity: 50; -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); - -webkit-opacity: 90; - -khtml-opacity: 90; - -moz-opacity: 90; - opacity: 90; -} -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} -.carousel-indicators .active { - background-color: #fff; -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; + +/* line 60, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-blackout { background: #333333; - background: rgba(0, 0, 0, 0.75); + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 998; } -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 20px; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-border-radius: 6px 0 0 0; - -moz-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 30px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { +/* line 69, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-blackout .clearing-close { display: block; } -.invisible { - visibility: hidden; + +/* line 72, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-container { + position: relative; + z-index: 998; + height: 100%; + overflow: hidden; + margin: 0; } -.affix { - position: fixed; + +/* line 80, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-touch-label { + position: absolute; + top: 50%; + left: 50%; + color: #AAAAAA; + font-size: 0.6em; } + +/* line 88, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.visible-img { + height: 95%; + position: relative; +} +/* line 92, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.visible-img img { + position: absolute; + left: 50%; + top: 50%; + transform: translateY(-50%) translateX(-50%); + -webkit-transform: translateY(-50%) translateX(-50%); + -ms-transform: translateY(-50%) translateX(-50%); + max-height: 100%; + max-width: 100%; +} + +/* line 111, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-caption { + color: #CCCCCC; + font-size: 0.875em; + line-height: 1.3; + margin-bottom: 0; + text-align: center; + bottom: 0; + background: #333333; + width: 100%; + padding: 10px 30px 20px; + position: absolute; + left: 0; +} + +/* line 125, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-close { + z-index: 999; + padding-left: 20px; + padding-top: 10px; + font-size: 30px; + line-height: 1; + color: #CCCCCC; + display: none; +} +/* line 134, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-close:hover, .clearing-close:focus { + color: #CCCCCC; +} + +/* line 138, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-assembled .clearing-container { + height: 100%; +} +/* line 139, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-assembled .clearing-container .carousel > ul { + display: none; +} + +/* line 143, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-feature li { + display: none; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ +.clearing-feature li.clearing-featured-img { + display: block; +} + +@media only screen and (min-width: 40.063em) { + /* line 152, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-prev, + .clearing-main-next { + position: absolute; + height: 100%; + width: 40px; + top: 0; + } + /* line 158, ../bower_components/foundation/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 12px; + } + /* line 165, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-prev > span:hover, + .clearing-main-next > span:hover { + opacity: 0.8; + } + + /* line 168, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-prev { + left: 0; + } + /* line 170, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-prev > span { + left: 5px; + border-color: transparent; + border-right-color: #CCCCCC; + } + + /* line 176, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-next { + right: 0; + } + /* line 178, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-next > span { + border-color: transparent; + border-left-color: #CCCCCC; + } + + /* line 184, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-main-prev.disabled, + .clearing-main-next.disabled { + opacity: 0.3; + } + + /* line 189, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel { + background: rgba(51, 51, 51, 0.8); + height: 120px; + margin-top: 10px; + text-align: center; + } + /* line 195, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul { + display: inline-block; + z-index: 999; + height: 100%; + position: relative; + float: none; + } + /* line 202, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li { + display: block; + width: 120px; + min-height: inherit; + float: left; + overflow: hidden; + margin-right: 0; + padding: 0; + position: relative; + cursor: pointer; + opacity: 0.4; + clear: none; + } + /* line 216, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li.fix-height img { + height: 100%; + max-width: none; + } + /* line 222, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li a.th { + border: none; + box-shadow: none; + display: block; + } + /* line 228, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li img { + cursor: pointer !important; + width: 100% !important; + } + /* line 233, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li.visible { + opacity: 1; + } + /* line 234, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li:hover { + opacity: 0.8; + } + /* line 239, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .visible-img { + background: #333333; + overflow: hidden; + height: 85%; + } + + /* line 246, ../bower_components/foundation/scss/foundation/components/_clearing.scss */ + .clearing-close { + position: absolute; + top: 10px; + right: 20px; + padding-left: 0; + padding-top: 0; + } +} +/* line 53, ../bower_components/foundation/scss/foundation/components/_inline-lists.scss */ +.inline-list { + margin: 0 auto 1.0625rem auto; + margin-left: -1.375rem; + margin-right: 0; + padding: 0; + list-style: none; + overflow: hidden; +} +/* line 42, ../bower_components/foundation/scss/foundation/components/_inline-lists.scss */ +.inline-list > li { + list-style: none; + float: left; + margin-left: 1.375rem; + display: block; +} +/* line 47, ../bower_components/foundation/scss/foundation/components/_inline-lists.scss */ +.inline-list > li > * { + display: block; +} + +/* line 217, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button, .button { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 1rem; + padding-right: 2rem; + padding-bottom: 1.0625rem; + padding-left: 2rem; + font-size: 1rem; + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button:hover, button:focus, .button:hover, .button:focus { + background-color: #007095; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button:hover, button:focus, .button:hover, .button:focus { + color: #FFFFFF; +} +/* line 224, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.secondary, .button.secondary { + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + background-color: #b9b9b9; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + color: #333333; +} +/* line 225, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.success, .button.success { + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + background-color: #368a55; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + color: #FFFFFF; +} +/* line 226, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.alert, .button.alert { + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + background-color: #cf2a0e; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + color: #FFFFFF; +} +/* line 227, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.warning, .button.warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: #FFFFFF; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { + background-color: #cf6e0e; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { + color: #FFFFFF; +} +/* line 228, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.info, .button.info { + background-color: #a0d3e8; + border-color: #61b6d9; + color: #333333; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { + background-color: #61b6d9; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { + color: #FFFFFF; +} +/* line 230, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.large, .button.large { + padding-top: 1.125rem; + padding-right: 2.25rem; + padding-bottom: 1.1875rem; + padding-left: 2.25rem; + font-size: 1.25rem; +} +/* line 231, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.small, .button.small { + padding-top: 0.875rem; + padding-right: 1.75rem; + padding-bottom: 0.9375rem; + padding-left: 1.75rem; + font-size: 0.8125rem; +} +/* line 232, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.tiny, .button.tiny { + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; +} +/* line 233, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.expand, .button.expand { + padding-right: 0; + padding-left: 0; + width: 100%; +} +/* line 235, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.left-align, .button.left-align { + text-align: left; + text-indent: 0.75rem; +} +/* line 236, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.right-align, .button.right-align { + text-align: right; + padding-right: 0.75rem; +} +/* line 238, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.radius, .button.radius { + border-radius: 3px; +} +/* line 239, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.round, .button.round { + border-radius: 1000px; +} +/* line 241, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled, button[disabled], .button.disabled, .button[disabled] { + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + box-shadow: none; +} +/* line 162, ../bower_components/foundation/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: #007095; +} +/* line 168, ../bower_components/foundation/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: #FFFFFF; +} +/* line 179, ../bower_components/foundation/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: #008CBA; +} +/* line 242, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, .button[disabled].secondary { + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; + cursor: default; + opacity: 0.7; + box-shadow: none; +} +/* line 162, ../bower_components/foundation/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: #b9b9b9; +} +/* line 168, ../bower_components/foundation/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: #333333; +} +/* line 179, ../bower_components/foundation/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: #e7e7e7; +} +/* line 243, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.success, button[disabled].success, .button.disabled.success, .button[disabled].success { + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + box-shadow: none; +} +/* line 162, ../bower_components/foundation/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: #368a55; +} +/* line 168, ../bower_components/foundation/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: #FFFFFF; +} +/* line 179, ../bower_components/foundation/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: #43AC6A; +} +/* line 244, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.alert, button[disabled].alert, .button.disabled.alert, .button[disabled].alert { + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + box-shadow: none; +} +/* line 162, ../bower_components/foundation/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: #cf2a0e; +} +/* line 168, ../bower_components/foundation/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: #FFFFFF; +} +/* line 179, ../bower_components/foundation/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: #f04124; +} +/* line 245, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.warning, button[disabled].warning, .button.disabled.warning, .button[disabled].warning { + background-color: #f08a24; + border-color: #cf6e0e; + color: #FFFFFF; + cursor: default; + opacity: 0.7; + box-shadow: none; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #cf6e0e; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + color: #FFFFFF; +} +/* line 179, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, button[disabled].warning:focus, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #f08a24; +} +/* line 246, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.info, button[disabled].info, .button.disabled.info, .button[disabled].info { + background-color: #a0d3e8; + border-color: #61b6d9; + color: #333333; + cursor: default; + opacity: 0.7; + box-shadow: none; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + background-color: #61b6d9; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + color: #FFFFFF; +} +/* line 179, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, button[disabled].info:focus, .button.disabled.info:hover, .button.disabled.info:focus, .button[disabled].info:hover, .button[disabled].info:focus { + background-color: #a0d3e8; +} + +/* line 251, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +button::-moz-focus-inner { + border: 0; + padding: 0; +} + +@media only screen and (min-width: 40.063em) { + /* line 254, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ + button, .button { + display: inline-block; + } +} +/* line 151, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group { + list-style: none; + margin: 0; + left: 0; +} +/* line 172, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.button-group:before, .button-group:after { + content: " "; + display: table; +} +/* line 173, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.button-group:after { + clear: both; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-2 li { + margin: 0 -2px; + display: inline-block; + width: 50%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-2 li > button, .button-group.even-2 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-2 li:first-child button, .button-group.even-2 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-2 li button, .button-group.even-2 li .button { + width: 100%; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-3 li { + margin: 0 -2px; + display: inline-block; + width: 33.33333%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-3 li > button, .button-group.even-3 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-3 li:first-child button, .button-group.even-3 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-3 li button, .button-group.even-3 li .button { + width: 100%; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-4 li { + margin: 0 -2px; + display: inline-block; + width: 25%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-4 li > button, .button-group.even-4 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-4 li:first-child button, .button-group.even-4 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-4 li button, .button-group.even-4 li .button { + width: 100%; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-5 li { + margin: 0 -2px; + display: inline-block; + width: 20%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-5 li > button, .button-group.even-5 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-5 li:first-child button, .button-group.even-5 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-5 li button, .button-group.even-5 li .button { + width: 100%; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-6 li { + margin: 0 -2px; + display: inline-block; + width: 16.66667%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-6 li > button, .button-group.even-6 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-6 li:first-child button, .button-group.even-6 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-6 li button, .button-group.even-6 li .button { + width: 100%; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-7 li { + margin: 0 -2px; + display: inline-block; + width: 14.28571%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-7 li > button, .button-group.even-7 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-7 li:first-child button, .button-group.even-7 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-7 li button, .button-group.even-7 li .button { + width: 100%; +} +/* line 154, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-8 li { + margin: 0 -2px; + display: inline-block; + width: 12.5%; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-8 li > button, .button-group.even-8 li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-8 li:first-child button, .button-group.even-8 li:first-child .button { + border-left: 0; +} +/* line 145, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.even-8 li button, .button-group.even-8 li .button { + width: 100%; +} +/* line 157, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group > li { + margin: 0 -2px; + display: inline-block; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group > li > button, .button-group > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group > li:first-child button, .button-group > li:first-child .button { + border-left: 0; +} +/* line 160, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack > li { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; + float: none; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack > li > button, .button-group.stack > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack > li:first-child button, .button-group.stack > li:first-child .button { + border-left: 0; +} +/* line 66, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack > li > button, .button-group.stack > li .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; +} +/* line 73, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack > li > button { + width: 100%; +} +/* line 78, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack > li:first-child button, .button-group.stack > li:first-child .button { + border-top: 0; +} +/* line 164, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack-for-small > li { + margin: 0 -2px; + display: inline-block; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-left: 0; +} +@media only screen and (max-width: 40em) { + /* line 164, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.stack-for-small > li { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; + } + /* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + } + /* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-left: 0; + } + /* line 66, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.stack-for-small > li > button, .button-group.stack-for-small > li .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; + } + /* line 73, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.stack-for-small > li > button { + width: 100%; + } + /* line 78, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.stack-for-small > li:first-child button, .button-group.stack-for-small > li:first-child .button { + border-top: 0; + } +} +/* line 172, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius > * { + margin: 0 -2px; + display: inline-block; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius > * > button, .button-group.radius > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius > *:first-child button, .button-group.radius > *:first-child .button { + border-left: 0; +} +/* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius > *, .button-group.radius > * > a, .button-group.radius > * > button, .button-group.radius > * > .button { + border-radius: 0; +} +/* line 118, ../bower_components/foundation/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 { + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +/* line 129, ../bower_components/foundation/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 { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +/* line 173, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > * > button, .button-group.radius.stack > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > *:first-child button, .button-group.radius.stack > *:first-child .button { + border-left: 0; +} +/* line 66, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > * > button, .button-group.radius.stack > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; +} +/* line 73, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > * > button { + width: 100%; +} +/* line 78, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > *:first-child button, .button-group.radius.stack > *:first-child .button { + border-top: 0; +} +/* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > *, .button-group.radius.stack > * > a, .button-group.radius.stack > * > button, .button-group.radius.stack > * > .button { + border-radius: 0; +} +/* line 118, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > *:first-child, .button-group.radius.stack > *:first-child > a, .button-group.radius.stack > *:first-child > button, .button-group.radius.stack > *:first-child > .button { + -webkit-top-left-radius: 3px; + -webkit-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +/* line 129, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.radius.stack > *:last-child, .button-group.radius.stack > *:last-child > a, .button-group.radius.stack > *:last-child > button, .button-group.radius.stack > *:last-child > .button { + -webkit-bottom-left-radius: 3px; + -webkit-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +@media only screen and (min-width: 40.063em) { + /* line 174, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > * { + margin: 0 -2px; + display: inline-block; + } + /* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + } + /* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-left: 0; + } + /* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *, .button-group.radius.stack-for-small > * > a, .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * > .button { + border-radius: 0; + } + /* line 118, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:first-child, .button-group.radius.stack-for-small > *:first-child > a, .button-group.radius.stack-for-small > *:first-child > button, .button-group.radius.stack-for-small > *:first-child > .button { + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + } + /* line 129, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:last-child, .button-group.radius.stack-for-small > *:last-child > a, .button-group.radius.stack-for-small > *:last-child > button, .button-group.radius.stack-for-small > *:last-child > .button { + -webkit-border-bottom-right-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + } +} +@media only screen and (max-width: 40em) { + /* line 174, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; + } + /* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + } + /* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-left: 0; + } + /* line 66, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; + } + /* line 73, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > * > button { + width: 100%; + } + /* line 78, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:first-child button, .button-group.radius.stack-for-small > *:first-child .button { + border-top: 0; + } + /* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *, .button-group.radius.stack-for-small > * > a, .button-group.radius.stack-for-small > * > button, .button-group.radius.stack-for-small > * > .button { + border-radius: 0; + } + /* line 118, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:first-child, .button-group.radius.stack-for-small > *:first-child > a, .button-group.radius.stack-for-small > *:first-child > button, .button-group.radius.stack-for-small > *:first-child > .button { + -webkit-top-left-radius: 3px; + -webkit-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + } + /* line 129, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.radius.stack-for-small > *:last-child, .button-group.radius.stack-for-small > *:last-child > a, .button-group.radius.stack-for-small > *:last-child > button, .button-group.radius.stack-for-small > *:last-child > .button { + -webkit-bottom-left-radius: 3px; + -webkit-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + } +} +/* line 183, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round > * { + margin: 0 -2px; + display: inline-block; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round > * > button, .button-group.round > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round > *:first-child button, .button-group.round > *:first-child .button { + border-left: 0; +} +/* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round > *, .button-group.round > * > a, .button-group.round > * > button, .button-group.round > * > .button { + border-radius: 0; +} +/* line 118, ../bower_components/foundation/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 { + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +/* line 129, ../bower_components/foundation/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 { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; +} +/* line 184, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; +} +/* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > * > button, .button-group.round.stack > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); +} +/* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > *:first-child button, .button-group.round.stack > *:first-child .button { + border-left: 0; +} +/* line 66, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > * > button, .button-group.round.stack > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; +} +/* line 73, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > * > button { + width: 100%; +} +/* line 78, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > *:first-child button, .button-group.round.stack > *:first-child .button { + border-top: 0; +} +/* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > *, .button-group.round.stack > * > a, .button-group.round.stack > * > button, .button-group.round.stack > * > .button { + border-radius: 0; +} +/* line 118, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > *:first-child, .button-group.round.stack > *:first-child > a, .button-group.round.stack > *:first-child > button, .button-group.round.stack > *:first-child > .button { + -webkit-top-left-radius: 1rem; + -webkit-top-right-radius: 1rem; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; +} +/* line 129, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-group.round.stack > *:last-child, .button-group.round.stack > *:last-child > a, .button-group.round.stack > *:last-child > button, .button-group.round.stack > *:last-child > .button { + -webkit-bottom-left-radius: 1rem; + -webkit-bottom-right-radius: 1rem; + border-bottom-left-radius: 1rem; + border-bottom-right-radius: 1rem; +} +@media only screen and (min-width: 40.063em) { + /* line 185, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > * { + margin: 0 -2px; + display: inline-block; + } + /* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + } + /* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-left: 0; + } + /* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *, .button-group.round.stack-for-small > * > a, .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * > .button { + border-radius: 0; + } + /* line 118, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:first-child, .button-group.round.stack-for-small > *:first-child > a, .button-group.round.stack-for-small > *:first-child > button, .button-group.round.stack-for-small > *:first-child > .button { + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; + } + /* line 129, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:last-child, .button-group.round.stack-for-small > *:last-child > a, .button-group.round.stack-for-small > *:last-child > button, .button-group.round.stack-for-small > *:last-child > .button { + -webkit-border-bottom-right-radius: 1000px; + -webkit-border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + } +} +@media only screen and (max-width: 40em) { + /* line 185, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > * { + margin: 0 -2px; + display: inline-block; + display: block; + margin: 0; + } + /* line 39, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-left: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + } + /* line 45, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-left: 0; + } + /* line 66, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * .button { + border-top: 1px solid; + border-color: rgba(255, 255, 255, 0.5); + border-left-width: 0; + margin: 0; + display: block; + } + /* line 73, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > * > button { + width: 100%; + } + /* line 78, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:first-child button, .button-group.round.stack-for-small > *:first-child .button { + border-top: 0; + } + /* line 114, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *, .button-group.round.stack-for-small > * > a, .button-group.round.stack-for-small > * > button, .button-group.round.stack-for-small > * > .button { + border-radius: 0; + } + /* line 118, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:first-child, .button-group.round.stack-for-small > *:first-child > a, .button-group.round.stack-for-small > *:first-child > button, .button-group.round.stack-for-small > *:first-child > .button { + -webkit-top-left-radius: 1rem; + -webkit-top-right-radius: 1rem; + border-top-left-radius: 1rem; + border-top-right-radius: 1rem; + } + /* line 129, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ + .button-group.round.stack-for-small > *:last-child, .button-group.round.stack-for-small > *:last-child > a, .button-group.round.stack-for-small > *:last-child > button, .button-group.round.stack-for-small > *:last-child > .button { + -webkit-bottom-left-radius: 1rem; + -webkit-bottom-right-radius: 1rem; + border-bottom-left-radius: 1rem; + border-bottom-right-radius: 1rem; + } +} + +/* line 172, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.button-bar:before, .button-bar:after { + content: " "; + display: table; +} +/* line 173, ../bower_components/foundation/scss/foundation/components/_global.scss */ +.button-bar:after { + clear: both; +} +/* line 197, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-bar .button-group { + float: left; + margin-right: 0.625rem; +} +/* line 32, ../bower_components/foundation/scss/foundation/components/_button-groups.scss */ +.button-bar .button-group div { + overflow: hidden; +} + /* * www.g-u-i.net */ +/* line 3, ../scss/fonts.scss */ body { font-size: 16px; font-family: "Ubuntu", Arial, "MS Trebuchet", sans-serif; @@ -4716,93 +2373,176 @@ body { font-style: normal; line-height: 1.3; } + +/* line 5, ../scss/fonts.scss */ a { color: #007BC2; text-decoration: none; } + +/* line 7, ../scss/fonts.scss */ h1 { font-size: 1.6em; } + +/* line 8, ../scss/fonts.scss */ h2 { font-size: 1.5em; } + +/* line 9, ../scss/fonts.scss */ h3 { font-size: 1.4em; } + +/* line 10, ../scss/fonts.scss */ h4 { font-size: 1.3em; } + +/* line 11, ../scss/fonts.scss */ h5 { font-size: 1.2em; } + +/* line 12, ../scss/fonts.scss */ h6 { font-size: 1.1em; } -input, -button, -select, -textarea { + +/* line 14, ../scss/fonts.scss */ +input, button, select, textarea { font-family: "Ubuntu", Arial, "MS Trebuchet", sans-serif; font-weight: 500; font-style: normal; } + +/* line 21, ../scss/fonts.scss */ #footer #footer-bottom { text-align: center; } +/* line 22, ../scss/fonts.scss */ #footer #footer-bottom .block { font-size: 8px; } + /** RESPONSIVE break points */ +/* 0, 480px */ +/* 481px, 768px */ +/* 769px, 980px */ +/* 981px, 1200px */ +/* 1201px, ... */ +/* line 66, ../scss/layout.scss */ +* { + box-sizing: content-box; +} +/* line 68, ../scss/layout.scss */ +*:before, *:after { + box-sizing: content-box; +} + +/* line 79, ../scss/layout.scss */ body { overflow-y: scroll; top: 0; } + +/* line 83, ../scss/layout.scss */ +h1, h2, h3, h4, h5, h6 { + font-family: inherit; +} + +/* line 87, ../scss/layout.scss */ +h1 { + font-weight: bold; +} + +/* line 91, ../scss/layout.scss */ +figure { + margin: 0; +} + +/* line 95, ../scss/layout.scss */ +input[type="checkbox"] + label { + margin: 0; +} + +/* line 99, ../scss/layout.scss */ +p { + font-family: inherit; + font-weight: inherit; + font-size: inherit; + line-height: inherit; + margin-bottom: inherit; +} + +/* line 107, ../scss/layout.scss */ +a { + font-size: inherit; +} + +/* line 111, ../scss/layout.scss */ +.column, .columns { + padding: inherit; + float: inherit; +} + /** NIVEAU 0 */ +/* line 119, ../scss/layout.scss */ #root { min-width: 320px; } +/* line 122, ../scss/layout.scss */ .ie8 #root { min-width: 1024px; } + /** NIVEAU 1 */ +/* line 126, ../scss/layout.scss */ #container { margin: 0 auto; position: relative; - -webkit-transition: padding-top 0.5s ease-out ease-out; - -moz-transition: padding-top 0.5s ease-out ease-out; - -o-transition: padding-top 0.5s ease-out ease-out; - transition: padding-top 0.5s ease-out ease-out; + -webkit-transition: padding-top 0.5s ease-out, 1s, ease-out; + transition: padding-top 0.5s ease-out, 1s, ease-out; } + /** NIVEAU 2 */ +/* line 135, ../scss/layout.scss */ #header { z-index: 1000; width: 96%; padding-left: 2%; padding-right: 2%; } -@media screen and (min-width: 768px) { +@media only screen and (min-width: 40.063em) { + /* line 135, ../scss/layout.scss */ #header { position: fixed; top: 0; margin: 0 auto; - background-color: #ffffff; + background-color: #fff; min-width: 310.4px; } } +/* line 141, ../scss/layout.scss */ .editmenu-enabled #header { margin-top: 30px; } +/* line 142, ../scss/layout.scss */ .admin-menu #header { margin-top: 35px; } + +/* line 145, ../scss/layout.scss */ #utilities { z-index: 999; - background-color: #ffffff; + background-color: #fff; width: 96%; padding-left: 2%; padding-right: 2%; } -@media screen and (min-width: 768px) { +@media only screen and (min-width: 40.063em) { + /* line 147, ../scss/layout.scss */ html.no-touch #utilities { position: fixed; top: 0; @@ -4810,103 +2550,112 @@ body { min-width: 310.4px; margin-top: 60px; } + /* line 151, ../scss/layout.scss */ html.no-touch .editmenu-enabled #utilities { margin-top: 80px; } + /* line 152, ../scss/layout.scss */ html.no-touch .admin-menu #utilities { margin-top: 85px; } } -@media screen and (max-width: 767px) { +@media only screen and (max-width: 40em) { + /* line 155, ../scss/layout.scss */ #utilities > .region { padding-top: 5px; padding-bottom: 5px; } } + +/* line 163, ../scss/layout.scss */ #main { width: 96%; padding-left: 2%; padding-right: 2%; overflow-x: hidden; } + +/* line 165, ../scss/layout.scss */ #footer { width: 96%; padding-left: 2%; padding-right: 2%; } + /** NIVEAU 3 */ -.footer-block .region, -.header-block { - display: moz-inline-stack; - display: inline-block; - vertical-align: top; - zoom: 1; - *display: inline; -} /** NIVEAU 4 */ +/* line 179, ../scss/layout.scss */ #center { padding: 5px; } + /** Z-INDEX */ +/* line 182, ../scss/layout.scss */ #block-feedback-form { z-index: 1001; } + +/* line 183, ../scss/layout.scss */ #admin-menu { z-index: 1002; } + +/* line 184, ../scss/layout.scss */ #admin-toolbar { z-index: 1003; } + +/* line 87, ../scss/styles.scss */ .op-visible { visibility: visible; } +/* line 89, ../scss/styles.scss */ .csstransitions .op-visible { - opacity: 0.01; - filter: alpha(opacity=1); - -webkit-opacity: 1; - -khtml-opacity: 1; - -moz-opacity: 1; opacity: 1; -webkit-transition: opacity 0.3s ease-out; - -moz-transition: opacity 0.3s ease-out; - -o-transition: opacity 0.3s ease-out; - transition: opacity 0.3s ease-out; + transition: opacity 0.3s ease-out; } + +/* line 94, ../scss/styles.scss */ .op-hidden { visibility: hidden; } +/* line 96, ../scss/styles.scss */ .op-hidden > * { margin-top: -100000px; } +/* line 99, ../scss/styles.scss */ .csstransition .op-hidden { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } +/* line 102, ../scss/styles.scss */ .csstransition .op-hidden > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } + /** colomnized() */ -/** HEADER */ +/* + __ ___________ ____ __________ + / / / / ____/ | / __ \/ ____/ __ \ + / /_/ / __/ / /| | / / / / __/ / /_/ / + / __ / /___/ ___ |/ /_/ / /___/ _, _/ +/_/ /_/_____/_/ |_/_____/_____/_/ |_| + +*/ +/* line 201, ../scss/styles.scss */ #header { padding-top: 5px; padding-bottom: 10px; height: 45px; } -#header a, -#header a:active, -#header a:visited { +/* line 208, ../scss/styles.scss */ +#header a, #header a:active, #header a:visited { color: #000; } +/* line 212, ../scss/styles.scss */ #header .logo { display: moz-inline-stack; display: inline-block; @@ -4914,6 +2663,7 @@ body { zoom: 1; *display: inline; } +/* line 215, ../scss/styles.scss */ #header .logo h1 { margin: 0; font-size: 36px; @@ -4926,9 +2676,11 @@ body { position: relative; line-height: 1.25; } +/* line 219, ../scss/styles.scss */ #header .logo h1 a:hover { - text-decoration: none ; + text-decoration: none; } +/* line 221, ../scss/styles.scss */ #header .logo span.beta { line-height: 1; letter-spacing: 0.1em; @@ -4939,27 +2691,32 @@ body { padding-left: 0; margin-left: 0; } +/* line 227, ../scss/styles.scss */ #header .logo span.slogan { font-size: 14px; margin-top: -3px; margin-left: -0.5em; font-weight: 900; } -@media screen and (max-width: 979px) { +@media only screen and (max-width: 40em) { + /* line 227, ../scss/styles.scss */ #header .logo span.slogan { display: none; } } +/* line 233, ../scss/styles.scss */ .ie8 #header .logo span.slogan { position: absolute; margin-top: 22px; } +/* line 237, ../scss/styles.scss */ #header #header-blocks { padding-top: 17px; float: right; text-align: right; text-transform: capitalize; } +/* line 244, ../scss/styles.scss */ #header #header-blocks > .region { display: moz-inline-stack; display: inline-block; @@ -4971,17 +2728,20 @@ body { margin-right: 1em; border-right: 1px solid #707070; } -@media screen and (max-width: 767px) { +@media only screen and (max-width: 40em) { + /* line 244, ../scss/styles.scss */ #header #header-blocks > .region { padding-right: 0.3em; margin-right: 0.3em; } } +/* line 249, ../scss/styles.scss */ #header #header-blocks > .region:last-child { border: none; padding: 0; margin: 0; } +/* line 252, ../scss/styles.scss */ #header #header-blocks .block { display: moz-inline-stack; display: inline-block; @@ -4990,32 +2750,39 @@ body { *display: inline; vertical-align: middle; } +/* line 254, ../scss/styles.scss */ #header #header-blocks .block h2 { font-size: 12px; margin: 0; line-height: 1.2; font-weight: normal; } +/* line 257, ../scss/styles.scss */ #header #header-blocks .block:not(:last-child) { padding-right: 0.8em; } -@media screen and (max-width: 1199px) { +@media only screen and (min-width: 90.063em) and (max-width: 120em) { + /* line 257, ../scss/styles.scss */ #header #header-blocks .block:not(:last-child) { padding-right: 0.3em; } } +/* line 263, ../scss/styles.scss */ #header #header-blocks #block-user-login { font-size: 12px; text-align: left; position: relative; } +/* line 266, ../scss/styles.scss */ #header #header-blocks #block-user-login h2 { padding-right: 5px; } +/* line 269, ../scss/styles.scss */ #header #header-blocks #block-user-login h2 i { vertical-align: text-bottom; margin: 0 2px 2px 0; } +/* line 271, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form { position: absolute; overflow: hidden; @@ -5023,92 +2790,89 @@ body { margin: 0; height: 0; -webkit-transition: height 0.3s ease-out; - -moz-transition: height 0.3s ease-out; - -o-transition: height 0.3s ease-out; - transition: height 0.3s ease-out; + transition: height 0.3s ease-out; } +/* line 275, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form > div { padding: 5px; margin: 5px; background-color: #e6e6e6; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); } +/* line 279, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form .form-item { margin: 0; padding-bottom: 5px; } -#header #header-blocks #block-user-login form#user-login-form label, -#header #header-blocks #block-user-login form#user-login-form input { +/* line 280, ../scss/styles.scss */ +#header #header-blocks #block-user-login form#user-login-form label, #header #header-blocks #block-user-login form#user-login-form input { margin: 0; font-size: 10px; } +/* line 285, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form input.form-text { width: 150px; } +/* line 287, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form #edit-actions { margin: 5px 0; padding: 0; background-color: transparent; text-align: right; } +/* line 289, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form #edit-actions input.form-submit { font-size: 12px; padding: 10px; } +/* line 294, ../scss/styles.scss */ #header #header-blocks #block-user-login form#user-login-form div.newpass a { font-size: 12px; color: #686868; } -html.no-touch #header #header-blocks #block-user-login:hover form#user-login-form, -#header #header-blocks #block-user-login.hovered form#user-login-form { +/* line 305, ../scss/styles.scss */ +html.no-touch #header #header-blocks #block-user-login:hover form#user-login-form, #header #header-blocks #block-user-login.hovered form#user-login-form { height: 300px; z-index: 1000; } -@media screen and (max-width: 479px) { +@media only screen and (max-width: 40em) { + /* line 314, ../scss/styles.scss */ #header #header-blocks #block-user-login span.login { display: none; } } +/* line 318, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav { position: relative; } +/* line 320, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav h2 { margin: 0; font-size: 12px; line-height: 1.1; } +/* line 325, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists { position: absolute; z-index: 20; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; min-width: 100%; margin: 0 0 0 -5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); } +/* line 328, ../scss/styles.scss */ .ie8 #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists { background: #FFF; } +/* line 329, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists ul { margin: 0; } +/* line 330, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li { list-style: none; font-size: 12px; @@ -5119,100 +2883,111 @@ html.no-touch #header #header-blocks #block-user-login:hover form#user-login-for height: 0; overflow: hidden; -webkit-transition: height 0.3s ease-out; - -moz-transition: height 0.3s ease-out; - -o-transition: height 0.3s ease-out; - transition: height 0.3s ease-out; + transition: height 0.3s ease-out; } -#header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li a, -#header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li span.preview { +/* line 337, ../scss/styles.scss */ +#header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li a, #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li span.preview { white-space: nowrap; cursor: pointer; } +/* line 338, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li a.open-list { max-width: 150px; } +/* line 339, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li span.count { font-weight: 300; padding: 0 5px; } -#header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li span.preview, -#header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li a.edit-list { +/* line 342, ../scss/styles.scss */ +#header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li span.preview, #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li a.edit-list { padding-right: 5px; } -.no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview, -.no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list { +/* line 345, ../scss/styles.scss */ +.no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview, .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list { visibility: hidden; } -.no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview > *, -.no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list > * { +/* line 118, ../scss/styles.scss */ +.no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview > *, .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list > * { margin-top: -100000px; } -.csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview, -.csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 121, ../scss/styles.scss */ +.csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview, .csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list { opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } -.csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview > *, -.csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list > * { +/* line 124, ../scss/styles.scss */ +.csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) span.preview > *, .csstransition .no-touch #header #header-blocks #block-materio-flag-materio-flag-mylists-nav section.mylists li:not(:hover) a.edit-list > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } +/* line 352, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav:hover section.mylists { padding-bottom: 5px; } +/* line 354, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav:hover section.mylists li { height: 15px; padding: 3px 10px; } +/* line 359, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav h2 i { vertical-align: text-bottom; margin: 0 2px 2px 0; } -@media screen and (min-width: 980px) { - #header #header-blocks #block-materio-flag-materio-flag-mylists-nav h2 i { - display: none; - } -} -@media screen and (max-width: 979px) { +@media only screen and (max-width: 40em) { + /* line 361, ../scss/styles.scss */ #header #header-blocks #block-materio-flag-materio-flag-mylists-nav h2 span.menu-title { display: none; } } +/* line 365, ../scss/styles.scss */ #header #header-blocks #block-ajax-register-ajax-register-block { font-size: 12px; text-transform: lowercase; } +/* line 370, ../scss/styles.scss */ #header #header-blocks #block-logintoboggan-logintoboggan-logged-in { font-size: 12px; } +/* line 372, ../scss/styles.scss */ #header #header-blocks #block-logintoboggan-logintoboggan-logged-in i { vertical-align: text-bottom; - margin: 0 2px 1px 0; + margin: 0 5px 1px 0; } +/* line 376, ../scss/styles.scss */ #header #header-blocks #block-logintoboggan-logintoboggan-logged-in a span.account { text-transform: lowercase; } +/* line 377, ../scss/styles.scss */ #header #header-blocks #block-logintoboggan-logintoboggan-logged-in a span.logout { display: none; margin-left: 5px; } -#header #header-blocks #block-logintoboggan-logintoboggan-logged-in .icon-off { +/* line 378, ../scss/styles.scss */ +#header #header-blocks #block-logintoboggan-logintoboggan-logged-in .fi-power { margin: 0 0.5em 0 0.5em; } -@media screen and (max-width: 767px) { +@media only screen and (min-width: 64.063em) and (max-width: 90em) { + /* line 379, ../scss/styles.scss */ + #header #header-blocks #block-logintoboggan-logintoboggan-logged-in .fi-power { + display: none; + } +} +@media only screen and (min-width: 40.063em) { + /* line 380, ../scss/styles.scss */ + #header #header-blocks #block-logintoboggan-logintoboggan-logged-in a span.logout { + display: none; + } +} +@media only screen and (max-width: 40em) { + /* line 382, ../scss/styles.scss */ #header #header-blocks #block-logintoboggan-logintoboggan-logged-in a span.account { display: none; } } +/* line 386, ../scss/styles.scss */ #header #header-blocks #headerblock-right .block { display: moz-inline-stack; display: inline-block; @@ -5222,49 +2997,55 @@ html.no-touch #header #header-blocks #block-user-login:hover form#user-login-for vertical-align: middle; padding: 0; } +/* line 388, ../scss/styles.scss */ #header #header-blocks #headerblock-right .block:first-child { padding: 0; } +/* line 392, ../scss/styles.scss */ #header #header-blocks #block-locale-language { margin-left: 1em; } -#header #header-blocks #block-locale-language ul, -#header #header-blocks #block-locale-language li { +/* line 395, ../scss/styles.scss */ +#header #header-blocks #block-locale-language ul, #header #header-blocks #block-locale-language li { margin: 0; padding: 0; list-style-type: none; font-size: 12px; line-height: 1; } -#header #header-blocks #block-locale-language ul.active, -#header #header-blocks #block-locale-language li.active { +/* line 399, ../scss/styles.scss */ +#header #header-blocks #block-locale-language ul.active, #header #header-blocks #block-locale-language li.active { display: none; } +/* line 401, ../scss/styles.scss */ .ie8 #header #header-blocks #block-locale-language { padding-top: 5px; } +/* line 429, ../scss/styles.scss */ .ie8 #header #header-blocks #block-menu-menu-top-menu h2 { display: none; } +/* line 430, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu h2 i { vertical-align: text-bottom; margin: 0 0 2px 0; } -#header #header-blocks #block-menu-menu-top-menu ul.menu, -#header #header-blocks #block-menu-menu-top-menu li { +/* line 433, ../scss/styles.scss */ +#header #header-blocks #block-menu-menu-top-menu ul.menu, #header #header-blocks #block-menu-menu-top-menu li { font-size: 12px; list-style: none; } -.ie8 #header #header-blocks #block-menu-menu-top-menu ul.menu, -.ie8 #header #header-blocks #block-menu-menu-top-menu li { +/* line 436, ../scss/styles.scss */ +.ie8 #header #header-blocks #block-menu-menu-top-menu ul.menu, .ie8 #header #header-blocks #block-menu-menu-top-menu li { display: inline; } -@media screen and (min-width: 768px) { +@media only screen and (min-width: 40.063em) { + /* line 440, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu h2 { display: none; } - #header #header-blocks #block-menu-menu-top-menu ul.menu, - #header #header-blocks #block-menu-menu-top-menu li { + /* line 441, ../scss/styles.scss */ + #header #header-blocks #block-menu-menu-top-menu ul.menu, #header #header-blocks #block-menu-menu-top-menu li { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -5274,17 +3055,21 @@ html.no-touch #header #header-blocks #block-user-login:hover form#user-login-for padding: 0; margin: 0; } + /* line 445, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu a { padding: 0 0.5em 0 0; } } -@media screen and (max-width: 767px) { +@media only screen and (max-width: 40em) { + /* line 427, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu { position: relative; } + /* line 451, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu h2 .menu-title { display: none; } + /* line 452, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu .menu-wrapper { position: absolute; width: 150px; @@ -5292,172 +3077,205 @@ html.no-touch #header #header-blocks #block-user-login:hover form#user-login-for right: 0; padding-top: 5px; } + /* line 454, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu .menu-wrapper ul.menu { background-color: #e6e6e6; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; padding: 0 5px 5px 5px; margin: 0; text-align: right; } + /* line 457, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu .menu-wrapper ul.menu li { height: 0; overflow: hidden; -webkit-transition: height 0.3s ease-out; - -moz-transition: height 0.3s ease-out; - -o-transition: height 0.3s ease-out; - transition: height 0.3s ease-out; + transition: height 0.3s ease-out; } + /* line 461, ../scss/styles.scss */ #header #header-blocks #block-menu-menu-top-menu .menu-wrapper ul.menu li a { display: block; width: 100%; padding: 2px 5px; font-size: 12px; } - html.no-touch #header #header-blocks #block-menu-menu-top-menu:hover, - #header #header-blocks #block-menu-menu-top-menu.hovered { + /* line 467, ../scss/styles.scss */ + html.no-touch #header #header-blocks #block-menu-menu-top-menu:hover, #header #header-blocks #block-menu-menu-top-menu.hovered { z-index: 1000; } - html.no-touch #header #header-blocks #block-menu-menu-top-menu:hover .menu-wrapper, - #header #header-blocks #block-menu-menu-top-menu.hovered .menu-wrapper { + /* line 469, ../scss/styles.scss */ + html.no-touch #header #header-blocks #block-menu-menu-top-menu:hover .menu-wrapper, #header #header-blocks #block-menu-menu-top-menu.hovered .menu-wrapper { display: block; } - html.no-touch #header #header-blocks #block-menu-menu-top-menu:hover .menu-wrapper ul.menu li, - #header #header-blocks #block-menu-menu-top-menu.hovered .menu-wrapper ul.menu li { + /* line 471, ../scss/styles.scss */ + html.no-touch #header #header-blocks #block-menu-menu-top-menu:hover .menu-wrapper ul.menu li, #header #header-blocks #block-menu-menu-top-menu.hovered .menu-wrapper ul.menu li { height: 25px; } } +/* line 478, ../scss/styles.scss */ #header #header-blocks #block-materio-user-old-database-link a { font-size: 12px; } +/* line 484, ../scss/styles.scss */ #header #header-blocks #block-materio-user-front-link a { font-size: 12px; } +/* line 487, ../scss/styles.scss */ #header #header-blocks #block-materio-user-front-link i { vertical-align: text-bottom; margin: 0 2px 2px 0; } +/* line 488, ../scss/styles.scss */ #header #header-blocks #block-materio-user-front-link span.text { display: none; } + +/* line 493, ../scss/styles.scss */ #utilities { margin-top: 60px; } +/* line 495, ../scss/styles.scss */ .not-logged-in #utilities { overflow: hidden; } +/* line 497, ../scss/styles.scss */ #utilities.closed { height: 0; } -#utilities.closed .tabs, -#utilities.closed .node-didactique { +/* line 498, ../scss/styles.scss */ +#utilities.closed .tabs, #utilities.closed .node-didactique { display: none; } +@media only screen and (max-width: 40em) { + /* line 493, ../scss/styles.scss */ + #utilities { + margin-top: 0; + } +} + +/* + __ _ __ ___ __ __ __ + / /_ (_)___ _/ /_ / (_)___ _/ /_ / /____ ____/ / + / __ \/ / __ `/ __ \/ / / __ `/ __ \/ __/ _ \/ __ / + / / / / / /_/ / / / / / / /_/ / / / / /_/ __/ /_/ / +/_/ /_/_/\__, /_/ /_/_/_/\__, /_/ /_/\__/\___/\__,_/ + /____/ /____/ +*/ +/* line 512, ../scss/styles.scss */ #highlighted { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.6); - -moz-box-shadow: 0 0 6px rgba(0, 0, 0, 0.6); box-shadow: 0 0 6px rgba(0, 0, 0, 0.6); padding: 0.5em; position: relative; } -@media screen and (min-width: 768px) { +@media only screen and (min-width: 40.063em) { + /* line 512, ../scss/styles.scss */ #highlighted { margin: 20px 0 6px; } + /* line 522, ../scss/styles.scss */ #highlighted .block { display: moz-inline-stack; display: inline-block; + vertical-align: top; zoom: 1; *display: inline; vertical-align: top; } + /* line 523, ../scss/styles.scss */ #highlighted .block-materio-didactique { width: 65%; } + /* line 525, ../scss/styles.scss */ #highlighted .block-materio-didactique .side { display: moz-inline-stack; display: inline-block; + vertical-align: top; zoom: 1; *display: inline; vertical-align: top; position: relative; } + /* line 529, ../scss/styles.scss */ #highlighted .block-materio-didactique .group-sideleft { width: 65%; } + /* line 530, ../scss/styles.scss */ #highlighted .block-materio-didactique .group-sideright { width: 30%; } + /* line 532, ../scss/styles.scss */ #highlighted .block-materio-didactique .field-name-title-field { font-size: 24px; } - #highlighted .block-materio-didactique .node.emvideo .group-sideleft, - #highlighted .block-materio-didactique .node.emvideo .group-sideright { + /* line 536, ../scss/styles.scss */ + #highlighted .block-materio-didactique .node.emvideo .group-sideleft, #highlighted .block-materio-didactique .node.emvideo .group-sideright { width: 47%; } + /* line 537, ../scss/styles.scss */ #highlighted .block-materio-didactique .node.emvideo .group-sideleft { margin-right: 2%; } + /* line 542, ../scss/styles.scss */ #highlighted #block-materio-user-user-register { width: 30%; padding: 5px; height: 290px; } } -@media screen and (min-width: 480px) { +@media only screen { + /* line 549, ../scss/styles.scss */ #highlighted .block-materio-didactique .side { display: moz-inline-stack; display: inline-block; + vertical-align: top; zoom: 1; *display: inline; vertical-align: top; } } -@media screen and (max-width: 767px) { +@media only screen and (max-width: 40em) { + /* line 512, ../scss/styles.scss */ #highlighted { margin: 10px 0 6px; } - #highlighted .block-materio-didactique .group-sideleft, - #highlighted .block-materio-didactique .group-sideright { + /* line 556, ../scss/styles.scss */ + #highlighted .block-materio-didactique .group-sideleft, #highlighted .block-materio-didactique .group-sideright { width: 100%; } - #highlighted .block-materio-didactique .field-name-title-field { + /* line 559, ../scss/styles.scss */ + #highlighted .block-materio-didactique .node-didactique .field-name-title-field { font-size: 20px; - cursor: pointer; + font-weight: normal !important; } - #highlighted .block-materio-didactique .node-didactique:not(:first-child) .field-name-title-field { + /* line 563, ../scss/styles.scss */ + #highlighted .block-materio-didactique .node-didactique .field-name-title-field:after { + content: "\a0\f10b"; + 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; + font-size: 16px; } - #highlighted .block-materio-didactique .node-didactique:not(:first-child) .field-name-title-field:before { - content: "- "; - } + /* line 579, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .node-didactique { height: auto; - height: 25px; + height: 30px; overflow: hidden; } + /* line 582, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .node-didactique.opened { height: auto; } } -@media screen and (min-width: 480px) and (max-width: 767px) { - #highlighted .block-materio-didactique .group-sideleft { - width: 50%; - } - #highlighted .block-materio-didactique .group-sideright { - width: 50%; - } -} +/* line 596, ../scss/styles.scss */ .oldie #highlighted .block { display: moz-inline-stack; display: inline-block; @@ -5465,36 +3283,44 @@ html.no-touch #header #header-blocks #block-user-login:hover form#user-login-for zoom: 1; *display: inline; } +/* line 601, ../scss/styles.scss */ #highlighted .block-materio-didactique .node-didactique { font-size: 14px; - background-color: #ffffff; + background-color: #fff; margin: 0 auto; } +/* line 607, ../scss/styles.scss */ #highlighted .block-materio-didactique .node-didactique .side { position: relative; } +/* line 609, ../scss/styles.scss */ #highlighted .block-materio-didactique .node-didactique .field-name-title-field { font-weight: 900; font-style: italic; padding: 5px 0; } +/* line 614, ../scss/styles.scss */ #highlighted .block-materio-didactique .node-didactique .field-name-field-visuel { text-align: center; } -#highlighted .block-materio-didactique .node-didactique .field-name-field-visuel figure, -#highlighted .block-materio-didactique .node-didactique .field-name-field-visuel img { +/* line 616, ../scss/styles.scss */ +#highlighted .block-materio-didactique .node-didactique .field-name-field-visuel figure, #highlighted .block-materio-didactique .node-didactique .field-name-field-visuel img { display: inline; } +/* line 619, ../scss/styles.scss */ #highlighted .block-materio-didactique .node-didactique.emvideo .field-name-field-visuel { display: none; } +/* line 627, ../scss/styles.scss */ .ie8 #highlighted .block-materio-didactique .node-didactique .player { display: none; } +/* line 633, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique { position: relative; overflow: hidden; } +/* line 636, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides { height: 270px; margin: 0; @@ -5502,6 +3328,7 @@ html.js #highlighted .block-materio-didactique .slides { width: 100%; overflow: hidden; } +/* line 638, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .node-didactique { position: absolute; width: 100%; @@ -5509,94 +3336,110 @@ html.js #highlighted .block-materio-didactique .slides .node-didactique { top: 0; left: 0; } +/* line 639, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .field-name-title-field { height: 30px; } +/* line 640, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper { height: 240px; } +/* line 642, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .side { height: 100%; } -@media screen and (max-width: 479px) { +@media only screen and (max-width: 40em) { + /* line 643, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .field-name-field-emvideo { width: 290px; height: 163.125px; } } -@media screen and (min-width: 480px) and (max-width: 767px) { +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + /* line 643, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .field-name-field-emvideo { width: 216px; height: 121.5px; } } -@media screen and (min-width: 768px) and (max-width: 979px) { +@media only screen and (min-width: 64.063em) and (max-width: 90em) { + /* line 643, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .field-name-field-emvideo { width: 216px; height: 121.5px; } } -@media screen and (min-width: 980px) and (max-width: 1199px) { +@media only screen and (min-width: 90.063em) and (max-width: 120em) { + /* line 643, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .field-name-field-emvideo { width: 280px; height: 157.5px; } } -@media screen and (min-width: 1200px) { +@media only screen and (min-width: 120.063em) and (max-width: 99999999em) { + /* line 643, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .field-name-field-emvideo { width: 340px; height: 191.25px; } } +/* line 650, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .slides .group-column-wrapper .field-name-field-emvideo * { height: 100%; width: 100%; } +/* line 654, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .tabs { height: 30px; margin: 0; text-align: left; } +/* line 656, ../scss/styles.scss */ html.js #highlighted .block-materio-didactique .tabs > * { display: moz-inline-stack; display: inline-block; vertical-align: top; zoom: 1; *display: inline; - vertical-align: top ; + vertical-align: top; padding: 5px 10px; font-size: 12px; cursor: pointer; color: #bfbfbf; } -html.js #highlighted .block-materio-didactique .tabs > *:hover, -html.js #highlighted .block-materio-didactique .tabs > *:focus, -html.js #highlighted .block-materio-didactique .tabs > *.active { +/* line 658, ../scss/styles.scss */ +html.js #highlighted .block-materio-didactique .tabs > *:hover, html.js #highlighted .block-materio-didactique .tabs > *:focus, html.js #highlighted .block-materio-didactique .tabs > *.active { color: #3f3f3f; } -/** block register */ -#block-materio-user-user-register, -#block-materio-user-user-createaccount { + +/* + __ __ __ _ __ + / /_ / /___ _____/ /__ ________ ____ _(_)____/ /____ _____ + / __ \/ / __ \/ ___/ //_/ / ___/ _ \/ __ `/ / ___/ __/ _ \/ ___/ + / /_/ / / /_/ / /__/ ,< / / / __/ /_/ / (__ ) /_/ __/ / +/_.___/_/\____/\___/_/|_| /_/ \___/\__, /_/____/\__/\___/_/ + /____/ +*/ +/* line 673, ../scss/styles.scss */ +#block-materio-user-user-register, #block-materio-user-user-createaccount { min-height: 120px; padding: 5px; - background: transparent url('../img/register-block.png') no-repeat 100% 90%; + background: transparent url("../img/register-block.png") no-repeat 100% 90%; } -.ie8 #block-materio-user-user-register, -.ie8 #block-materio-user-user-createaccount { +/* line 676, ../scss/styles.scss */ +.ie8 #block-materio-user-user-register, .ie8 #block-materio-user-user-createaccount { max-width: 250px; float: right; background-image: none; } -#block-materio-user-user-register h2, -#block-materio-user-user-createaccount h2, -#block-materio-user-user-register h3, -#block-materio-user-user-createaccount h3 { +/* line 679, ../scss/styles.scss */ +#block-materio-user-user-register h2, #block-materio-user-user-register h3, #block-materio-user-user-createaccount h2, #block-materio-user-user-createaccount h3 { font-weight: 900; font-style: italic; padding: 5px 0; margin: 0; line-height: 1; - background-color: #ffffff; + background-color: #fff; display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -5604,20 +3447,18 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { *display: inline; min-width: 50%; } -#block-materio-user-user-register h2, -#block-materio-user-user-createaccount h2 { +/* line 680, ../scss/styles.scss */ +#block-materio-user-user-register h2, #block-materio-user-user-createaccount h2 { font-size: 24px; } -#block-materio-user-user-register h3, -#block-materio-user-user-createaccount h3 { +/* line 680, ../scss/styles.scss */ +#block-materio-user-user-register h3, #block-materio-user-user-createaccount h3 { font-size: 16px; } -#block-materio-user-user-register form, -#block-materio-user-user-createaccount form { +/* line 682, ../scss/styles.scss */ +#block-materio-user-user-register form, #block-materio-user-user-createaccount form { margin: 0; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.7); - *background-color: #ffffff; padding-bottom: 5px; display: moz-inline-stack; display: inline-block; @@ -5625,10 +3466,8 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { zoom: 1; *display: inline; } -#block-materio-user-user-register .form-item, -#block-materio-user-user-createaccount .form-item, -#block-materio-user-user-register .form-wrapper, -#block-materio-user-user-createaccount .form-wrapper { +/* line 684, ../scss/styles.scss */ +#block-materio-user-user-register .form-item, #block-materio-user-user-register .form-wrapper, #block-materio-user-user-createaccount .form-item, #block-materio-user-user-createaccount .form-wrapper { margin: 0; display: moz-inline-stack; display: inline-block; @@ -5638,94 +3477,72 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { vertical-align: middle; position: relative; } -#block-materio-user-user-register #edit-account, -#block-materio-user-user-createaccount #edit-account { +/* line 688, ../scss/styles.scss */ +#block-materio-user-user-register #edit-account, #block-materio-user-user-createaccount #edit-account { margin-right: 5px; } -#block-materio-user-user-register input.form-text, -#block-materio-user-user-createaccount input.form-text { +/* line 690, ../scss/styles.scss */ +#block-materio-user-user-register input.form-text, #block-materio-user-user-createaccount input.form-text { font-size: 12px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; margin-bottom: 4px; } -.ie8 #block-materio-user-user-register input.form-text, -.ie8 #block-materio-user-user-createaccount input.form-text { +/* line 690, ../scss/styles.scss */ +.ie8 #block-materio-user-user-register input.form-text, .ie8 #block-materio-user-user-createaccount input.form-text { margin-right: 5px; } -#block-materio-user-user-register .form-item-mail input.form-text, -#block-materio-user-user-createaccount .form-item-mail input.form-text, -#block-materio-user-user-register .form-item-name input.form-text, -#block-materio-user-user-createaccount .form-item-name input.form-text { +/* line 691, ../scss/styles.scss */ +#block-materio-user-user-register .form-item-mail input.form-text, #block-materio-user-user-register .form-item-name input.form-text, #block-materio-user-user-createaccount .form-item-mail input.form-text, #block-materio-user-user-createaccount .form-item-name input.form-text { width: 11em; } -#block-materio-user-user-register .form-item-pass input.form-text, -#block-materio-user-user-createaccount .form-item-pass input.form-text { +/* line 692, ../scss/styles.scss */ +#block-materio-user-user-register .form-item-pass input.form-text, #block-materio-user-user-createaccount .form-item-pass input.form-text { width: 7em; } -#block-materio-user-user-register #edit-mail-check, -#block-materio-user-user-createaccount #edit-mail-check { +/* line 694, ../scss/styles.scss */ +#block-materio-user-user-register #edit-mail-check, #block-materio-user-user-createaccount #edit-mail-check { position: absolute; bottom: 100%; z-index: 9999; background-image: none; height: auto; padding: 5px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; margin-bottom: 10px; font-size: 10px; background-color: #fff; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.6); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.6); box-shadow: 0 0 5px rgba(0, 0, 0, 0.6); -webkit-transition: bottom 0.1s ease-out; - -moz-transition: bottom 0.1s ease-out; - -o-transition: bottom 0.1s ease-out; - transition: bottom 0.1s ease-out; + transition: bottom 0.1s ease-out; } -#block-materio-user-user-register #edit-mail-check.error, -#block-materio-user-user-createaccount #edit-mail-check.error { +/* line 702, ../scss/styles.scss */ +#block-materio-user-user-register #edit-mail-check.error, #block-materio-user-user-createaccount #edit-mail-check.error { background-color: #f3968d; color: #fff; } -#block-materio-user-user-register #edit-mail-check.ok, -#block-materio-user-user-createaccount #edit-mail-check.ok { +/* line 708, ../scss/styles.scss */ +#block-materio-user-user-register #edit-mail-check.ok, #block-materio-user-user-createaccount #edit-mail-check.ok { display: none; } -#block-materio-user-user-register .form-submit, -#block-materio-user-user-createaccount .form-submit { +/* line 711, ../scss/styles.scss */ +#block-materio-user-user-register .form-submit, #block-materio-user-user-createaccount .form-submit { font-size: 16px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; margin-bottom: 4px; } -#block-materio-user-user-register .form-item-termsofservices, -#block-materio-user-user-createaccount .form-item-termsofservices, -#block-materio-user-user-register #edit-field-newsletter, -#block-materio-user-user-createaccount #edit-field-newsletter { +/* line 718, ../scss/styles.scss */ +#block-materio-user-user-register .form-item-termsofservices, #block-materio-user-user-register #edit-field-newsletter, #block-materio-user-user-createaccount .form-item-termsofservices, #block-materio-user-user-createaccount #edit-field-newsletter { margin-bottom: 0; display: block; line-height: 1; } -#block-materio-user-user-register .form-item-termsofservices > *, -#block-materio-user-user-createaccount .form-item-termsofservices > *, -#block-materio-user-user-register #edit-field-newsletter > *, -#block-materio-user-user-createaccount #edit-field-newsletter > * { +/* line 720, ../scss/styles.scss */ +#block-materio-user-user-register .form-item-termsofservices > *, #block-materio-user-user-register #edit-field-newsletter > *, #block-materio-user-user-createaccount .form-item-termsofservices > *, #block-materio-user-user-createaccount #edit-field-newsletter > * { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -5734,210 +3551,177 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { vertical-align: middle; margin: 0; } -#block-materio-user-user-register .form-item-termsofservices label, -#block-materio-user-user-createaccount .form-item-termsofservices label, -#block-materio-user-user-register #edit-field-newsletter label, -#block-materio-user-user-createaccount #edit-field-newsletter label { +/* line 721, ../scss/styles.scss */ +#block-materio-user-user-register .form-item-termsofservices label, #block-materio-user-user-register #edit-field-newsletter label, #block-materio-user-user-createaccount .form-item-termsofservices label, #block-materio-user-user-createaccount #edit-field-newsletter label { font-size: 10px; background-color: #fff; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -#block-materio-user-user-register #user-register-form .form-submit, -#block-materio-user-user-createaccount #user-register-form .form-submit { +/* line 725, ../scss/styles.scss */ +#block-materio-user-user-register #user-register-form .form-submit, #block-materio-user-user-createaccount #user-register-form .form-submit { border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; } -#block-materio-user-user-register #user-register-form .form-submit:hover, -#block-materio-user-user-createaccount #user-register-form .form-submit:hover, -#block-materio-user-user-register #user-register-form .form-submit:focus, -#block-materio-user-user-createaccount #user-register-form .form-submit:focus { +/* line 66, ../scss/styles.scss */ +#block-materio-user-user-register #user-register-form .form-submit:hover, #block-materio-user-user-register #user-register-form .form-submit:focus, #block-materio-user-user-createaccount #user-register-form .form-submit:hover, #block-materio-user-user-createaccount #user-register-form .form-submit:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -#block-materio-user-user-register #user-register-form .form-submit:active, -#block-materio-user-user-createaccount #user-register-form .form-submit:active { +/* line 69, ../scss/styles.scss */ +#block-materio-user-user-register #user-register-form .form-submit:active, #block-materio-user-user-createaccount #user-register-form .form-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -#block-materio-user-user-register #user-register-form .form-submit[disabled], -#block-materio-user-user-createaccount #user-register-form .form-submit[disabled] { - background-color: #dddddd; +/* line 728, ../scss/styles.scss */ +#block-materio-user-user-register #user-register-form .form-submit[disabled], #block-materio-user-user-createaccount #user-register-form .form-submit[disabled] { + background-color: #ddd; border: 2px solid #ddd; } -#block-materio-user-user-register #user-login .form-submit, -#block-materio-user-user-createaccount #user-login .form-submit { +/* line 735, ../scss/styles.scss */ +#block-materio-user-user-register #user-login .form-submit, #block-materio-user-user-createaccount #user-login .form-submit { border: 2px solid #E6DE1C; - background-color: #e6de1c; + background-color: #E6DE1C; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; } -#block-materio-user-user-register #user-login .form-submit:hover, -#block-materio-user-user-createaccount #user-login .form-submit:hover, -#block-materio-user-user-register #user-login .form-submit:focus, -#block-materio-user-user-createaccount #user-login .form-submit:focus { +/* line 66, ../scss/styles.scss */ +#block-materio-user-user-register #user-login .form-submit:hover, #block-materio-user-user-register #user-login .form-submit:focus, #block-materio-user-user-createaccount #user-login .form-submit:hover, #block-materio-user-user-createaccount #user-login .form-submit:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -#block-materio-user-user-register #user-login .form-submit:active, -#block-materio-user-user-createaccount #user-login .form-submit:active { +/* line 69, ../scss/styles.scss */ +#block-materio-user-user-register #user-login .form-submit:active, #block-materio-user-user-createaccount #user-login .form-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -#block-materio-user-user-register #edit-simplenews, -#block-materio-user-user-createaccount #edit-simplenews { +/* line 741, ../scss/styles.scss */ +#block-materio-user-user-register #edit-simplenews, #block-materio-user-user-createaccount #edit-simplenews { padding-top: 0.5em; } -#block-materio-user-user-register #edit-simplenews .fieldset-description, -#block-materio-user-user-createaccount #edit-simplenews .fieldset-description { +/* line 743, ../scss/styles.scss */ +#block-materio-user-user-register #edit-simplenews .fieldset-description, #block-materio-user-user-createaccount #edit-simplenews .fieldset-description { font-size: 12px; } -#block-materio-user-user-register #edit-simplenews .form-checkboxes .form-item, -#block-materio-user-user-createaccount #edit-simplenews .form-checkboxes .form-item { +/* line 747, ../scss/styles.scss */ +#block-materio-user-user-register #edit-simplenews .form-checkboxes .form-item, #block-materio-user-user-createaccount #edit-simplenews .form-checkboxes .form-item { display: block; } -#block-materio-user-user-register #edit-simplenews .form-checkboxes .form-item label, -#block-materio-user-user-createaccount #edit-simplenews .form-checkboxes .form-item label { +/* line 749, ../scss/styles.scss */ +#block-materio-user-user-register #edit-simplenews .form-checkboxes .form-item label, #block-materio-user-user-createaccount #edit-simplenews .form-checkboxes .form-item label { font-size: 12px; } -#block-materio-user-user-register a.join, -#block-materio-user-user-createaccount a.join { +/* line 754, ../scss/styles.scss */ +#block-materio-user-user-register a.join, #block-materio-user-user-createaccount a.join { display: block; width: 5em; font-size: 16px; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -#block-materio-user-user-register a.join:hover, -#block-materio-user-user-createaccount a.join:hover, -#block-materio-user-user-register a.join:focus, -#block-materio-user-user-createaccount a.join:focus { +/* line 66, ../scss/styles.scss */ +#block-materio-user-user-register a.join:hover, #block-materio-user-user-register a.join:focus, #block-materio-user-user-createaccount a.join:hover, #block-materio-user-user-createaccount a.join:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -#block-materio-user-user-register a.join:active, -#block-materio-user-user-createaccount a.join:active { +/* line 69, ../scss/styles.scss */ +#block-materio-user-user-register a.join:active, #block-materio-user-user-createaccount a.join:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -@media screen and (max-width: 479px) { - #block-materio-user-user-register, - #block-materio-user-user-createaccount { +@media only screen and (max-width: 40em) { + /* line 673, ../scss/styles.scss */ + #block-materio-user-user-register, #block-materio-user-user-createaccount { background-position: 160% 50%; - } - #block-materio-user-user-register .form-item-mail input.form-text, - #block-materio-user-user-createaccount .form-item-mail input.form-text, - #block-materio-user-user-register .form-item-name input.form-text, - #block-materio-user-user-createaccount .form-item-name input.form-text { - width: 7em; - } -} -@media screen and (max-width: 767px) { - #block-materio-user-user-register, - #block-materio-user-user-createaccount { min-height: 60px; padding: 15px 0; } - #block-materio-user-user-register #user-login, - #block-materio-user-user-createaccount #user-login, - #block-materio-user-user-register > h3:first-child, - #block-materio-user-user-createaccount > h3:first-child, - #block-materio-user-user-register > h3 span, - #block-materio-user-user-createaccount > h3 span { - display: none; + /* line 768, ../scss/styles.scss */ + #block-materio-user-user-register .form-item-mail input.form-text, #block-materio-user-user-register .form-item-name input.form-text, #block-materio-user-user-createaccount .form-item-mail input.form-text, #block-materio-user-user-createaccount .form-item-name input.form-text { + width: 7em; } } -#block-materio-user-user-register .message-error, -#block-materio-user-user-createaccount .message-error { +/* line 773, ../scss/styles.scss */ +#block-materio-user-user-register .message-error, #block-materio-user-user-createaccount .message-error { color: #b94a48; font-size: 12px; } -.modal-content #block-materio-user-user-register, -.modal-content #block-materio-user-user-createaccount { +/* line 777, ../scss/styles.scss */ +.modal-content #block-materio-user-user-register, .modal-content #block-materio-user-user-createaccount { padding: 0.5em 0.5em 5em 0.5em; width: 400px; background-color: #fff; padding: 5px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -.modal-content #block-materio-user-user-register #user-register-form div.homepage-textfield, -.modal-content #block-materio-user-user-createaccount #user-register-form div.homepage-textfield { +/* line 787, ../scss/styles.scss */ +.modal-content #block-materio-user-user-register #user-register-form div.homepage-textfield, .modal-content #block-materio-user-user-createaccount #user-register-form div.homepage-textfield { display: none; } -.modal-content #block-materio-user-user-register #user-register-form .description, -.modal-content #block-materio-user-user-createaccount #user-register-form .description { +/* line 789, ../scss/styles.scss */ +.modal-content #block-materio-user-user-register #user-register-form .description, .modal-content #block-materio-user-user-createaccount #user-register-form .description { font-size: 12px; } -/** content-top */ + +/* + __ __ __ + _________ ____ / /____ ____ / /_ / /_____ ____ + / ___/ __ \/ __ \/ __/ _ \/ __ \/ __/_____/ __/ __ \/ __ \ +/ /__/ /_/ / / / / /_/ __/ / / / /_/_____/ /_/ /_/ / /_/ / +\___/\____/_/ /_/\__/\___/_/ /_/\__/ \__/\____/ .___/ + /_/ +*/ +/* line 805, ../scss/styles.scss */ #content-top { - /** flag-list */ + /* + + ___ _ _ _ _ + | _| |___ ___ ___| |_|___| |_ + | _| | .'| . |___| | |_ -| _| + |_| |_|__,|_ | |_|_|___|_| + |___| + */ } -#content-top #block-materio-flag-materio-flag-mybookmarks, -#content-top #block-materio-flag-materio-flag-mylists { +/* line 816, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks, #content-top #block-materio-flag-materio-flag-mylists { font-size: 10px; color: #666666; font-weight: 300; } -.ie8 #content-top #block-materio-flag-materio-flag-mybookmarks, -.ie8 #content-top #block-materio-flag-materio-flag-mylists { +/* line 819, ../scss/styles.scss */ +.ie8 #content-top #block-materio-flag-materio-flag-mybookmarks, .ie8 #content-top #block-materio-flag-materio-flag-mylists { margin-top: 40px; } -#content-top #block-materio-flag-materio-flag-mybookmarks h2, -#content-top #block-materio-flag-materio-flag-mylists h2 { +/* line 821, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks h2, #content-top #block-materio-flag-materio-flag-mylists h2 { font-size: 12px; font-weight: 700; margin: 0; line-height: 1.2; color: #000; } -#content-top #block-materio-flag-materio-flag-mybookmarks h2 a.open-list, -#content-top #block-materio-flag-materio-flag-mylists h2 a.open-list, -#content-top #block-materio-flag-materio-flag-mybookmarks h2 i.icon-remove, -#content-top #block-materio-flag-materio-flag-mylists h2 i.icon-remove { +/* line 823, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks h2 a.open-list, #content-top #block-materio-flag-materio-flag-mybookmarks h2 i.fi-xicon-remove, #content-top #block-materio-flag-materio-flag-mylists h2 a.open-list, #content-top #block-materio-flag-materio-flag-mylists h2 i.fi-xicon-remove { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -5945,120 +3729,100 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { *display: inline; cursor: pointer; color: #000; - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; opacity: 0; -webkit-transition: opacity 0.1s ease-out; - -moz-transition: opacity 0.1s ease-out; - -o-transition: opacity 0.1s ease-out; - transition: opacity 0.1s ease-out; + transition: opacity 0.1s ease-out; } -#content-top #block-materio-flag-materio-flag-mybookmarks:hover a.open-list, -#content-top #block-materio-flag-materio-flag-mylists:hover a.open-list, -#content-top #block-materio-flag-materio-flag-mybookmarks:hover i.icon-remove, -#content-top #block-materio-flag-materio-flag-mylists:hover i.icon-remove { - opacity: 0.01; - filter: alpha(opacity=1); - -webkit-opacity: 1; - -khtml-opacity: 1; - -moz-opacity: 1; +/* line 830, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks:hover a.open-list, #content-top #block-materio-flag-materio-flag-mybookmarks:hover i.fi-x, #content-top #block-materio-flag-materio-flag-mylists:hover a.open-list, #content-top #block-materio-flag-materio-flag-mylists:hover i.fi-x { opacity: 1; } -#content-top #block-materio-flag-materio-flag-mybookmarks span.listname[name=bookmarks], -#content-top #block-materio-flag-materio-flag-mylists span.listname[name=bookmarks] { +/* line 835, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks span.listname[name=bookmarks], #content-top #block-materio-flag-materio-flag-mylists span.listname[name=bookmarks] { cursor: pointer; } -#content-top #block-materio-flag-materio-flag-mybookmarks section.bookmarks, -#content-top #block-materio-flag-materio-flag-mylists section.bookmarks { +/* line 839, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks section.bookmarks, #content-top #block-materio-flag-materio-flag-mylists section.bookmarks { height: 0; overflow: hidden; } -#content-top #block-materio-flag-materio-flag-mybookmarks section.bookmarks.active, -#content-top #block-materio-flag-materio-flag-mylists section.bookmarks.active { +/* line 841, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks section.bookmarks.active, #content-top #block-materio-flag-materio-flag-mylists section.bookmarks.active { height: auto; } -#content-top #block-materio-flag-materio-flag-mybookmarks section.bookmarks article.node.vm-bookmark, -#content-top #block-materio-flag-materio-flag-mylists section.bookmarks article.node.vm-bookmark { +/* line 844, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks section.bookmarks article.node.vm-bookmark, #content-top #block-materio-flag-materio-flag-mylists section.bookmarks article.node.vm-bookmark { overflow: hidden; } -#content-top #block-materio-flag-materio-flag-mybookmarks .mylists section h2, -#content-top #block-materio-flag-materio-flag-mylists .mylists section h2, -#content-top #block-materio-flag-materio-flag-mybookmarks .mylists section .flaged, -#content-top #block-materio-flag-materio-flag-mylists .mylists section .flaged { +/* line 852, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks .mylists section h2, #content-top #block-materio-flag-materio-flag-mybookmarks .mylists section .flaged, #content-top #block-materio-flag-materio-flag-mylists .mylists section h2, #content-top #block-materio-flag-materio-flag-mylists .mylists section .flaged { height: 0; overflow: hidden; } -#content-top #block-materio-flag-materio-flag-mybookmarks .mylists section.active h2, -#content-top #block-materio-flag-materio-flag-mylists .mylists section.active h2, -#content-top #block-materio-flag-materio-flag-mybookmarks .mylists section.active .flaged, -#content-top #block-materio-flag-materio-flag-mylists .mylists section.active .flaged { +/* line 856, ../scss/styles.scss */ +#content-top #block-materio-flag-materio-flag-mybookmarks .mylists section.active h2, #content-top #block-materio-flag-materio-flag-mybookmarks .mylists section.active .flaged, #content-top #block-materio-flag-materio-flag-mylists .mylists section.active h2, #content-top #block-materio-flag-materio-flag-mylists .mylists section.active .flaged { height: auto; } + +/* line 868, ../scss/styles.scss */ #tool-bar { position: relative; } +/* line 871, ../scss/styles.scss */ #tool-bar .inner-content { padding-top: 10px; padding-bottom: 10px; } +/* line 873, ../scss/styles.scss */ #tool-bar .inner-content > * { display: moz-inline-stack; display: inline-block; vertical-align: top; zoom: 1; *display: inline; - vertical-align: middle ; + vertical-align: middle; } -@media screen and (max-width: 479px) { +@media only screen and (max-width: 40em) { + /* line 871, ../scss/styles.scss */ #tool-bar .inner-content { padding: 0; } + /* line 880, ../scss/styles.scss */ #tool-bar .inner-content h1 { line-height: 0.5; } } +/* line 891, ../scss/styles.scss */ .oldie #tool-bar { - background-color: #b1adad; + background-color: #B1ADAD; padding: 0 10px; } +/* line 893, ../scss/styles.scss */ #tool-bar .btn-group { padding: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - background-color: #ffffff; + background-color: #fff; margin: 4px; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); -webkit-transition: box-shadow 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out; - transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; } -#tool-bar .btn-group:hover, -#tool-bar .btn-group:focus { - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.7); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.7); +/* line 40, ../scss/styles.scss */ +#tool-bar .btn-group:hover, #tool-bar .btn-group:focus { box-shadow: 0 0 5px rgba(0, 0, 0, 0.7); } +/* line 43, ../scss/styles.scss */ #tool-bar .btn-group:active { -webkit-transition: box-shadow 0s ease-out; - -moz-transition: box-shadow 0s ease-out; - -o-transition: box-shadow 0s ease-out; - transition: box-shadow 0s ease-out; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + transition: box-shadow 0s ease-out; box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } +/* line 898, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title { margin: 0 10px 0 0; } +/* line 901, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title h1 { margin: 0; font-size: 24px; @@ -6066,59 +3830,55 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { font-weight: 300; line-height: 1; } +/* line 903, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title i { - vertical-align: middle ; + vertical-align: middle; margin-right: 5px; } +/* line 904, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title i.icon-materio-folder { margin-bottom: 2px; } +/* line 905, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title a.edit-list { visibility: hidden; } +/* line 118, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title a.edit-list > * { margin-top: -100000px; } +/* line 121, ../scss/styles.scss */ .csstransition #tool-bar #block-materio-page-title-materio-page-title a.edit-list { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } +/* line 124, ../scss/styles.scss */ .csstransition #tool-bar #block-materio-page-title-materio-page-title a.edit-list > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } +/* line 907, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title a.edit-list i { margin: 0 0 0 5px; } +/* line 910, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title:hover a.edit-list { visibility: visible; } +/* line 110, ../scss/styles.scss */ .csstransitions #tool-bar #block-materio-page-title-materio-page-title:hover a.edit-list { - opacity: 0.01; - filter: alpha(opacity=1); - -webkit-opacity: 1; - -khtml-opacity: 1; - -moz-opacity: 1; opacity: 1; -webkit-transition: opacity 0.3s ease-out; - -moz-transition: opacity 0.3s ease-out; - -o-transition: opacity 0.3s ease-out; - transition: opacity 0.3s ease-out; + transition: opacity 0.3s ease-out; } -@media screen and (max-width: 979px) { +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + /* line 898, ../scss/styles.scss */ #tool-bar #block-materio-page-title-materio-page-title { display: block; } } +/* line 919, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-viewmode .viewmode-link { display: moz-inline-stack; display: inline-block; @@ -6127,42 +3887,42 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { *display: inline; margin: 0 2px; } +/* line 921, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-viewmode .viewmode-link.active { cursor: normal; } +/* line 922, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-viewmode .viewmode-link .inner { display: none; font-size: 10px; } -@media screen and (max-width: 767px) { +@media only screen and (max-width: 40em) { + /* line 925, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-viewmode .viewmode-link { display: block; } + /* line 925, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-viewmode .viewmode-link:not(.active) { display: none; } } -@media screen and (max-width: 479px) { - html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardsmall, - #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardsmall, - html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardmedium, - #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardmedium { +@media only screen and (max-width: 40em) { + /* line 928, ../scss/styles.scss */ + html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardsmall, html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardmedium, #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardsmall, #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardmedium { display: block; } } -@media screen and (min-width: 480px) and (max-width: 767px) { - html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardsmall, - #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardsmall, - html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardmedium, - #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardmedium, - html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardbig, - #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardbig { +@media only screen and (max-width: 40em) { + /* line 932, ../scss/styles.scss */ + html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardsmall, html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardmedium, html.no-touch #tool-bar #block-materio-search-api-materio-search-api-viewmode:hover .viewmode-link.viewmode-cardbig, #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardsmall, #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardmedium, #tool-bar #block-materio-search-api-materio-search-api-viewmode.hovered .viewmode-link.viewmode-cardbig { display: block; } } +/* line 936, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-search { float: right; } +/* line 940, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-search > .inner { display: moz-inline-stack; display: inline-block; @@ -6171,37 +3931,25 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { *display: inline; margin: 0 0 0 10px; padding: 3px 10px; - background-color: #ffffff; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; + background-color: #fff; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); -webkit-transition: box-shadow 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out; - transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; text-align: right; } -#tool-bar #block-materio-search-api-materio-search-api-search > .inner:hover, -#tool-bar #block-materio-search-api-materio-search-api-search > .inner:focus { - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.7); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.7); +/* line 40, ../scss/styles.scss */ +#tool-bar #block-materio-search-api-materio-search-api-search > .inner:hover, #tool-bar #block-materio-search-api-materio-search-api-search > .inner:focus { box-shadow: 0 0 5px rgba(0, 0, 0, 0.7); } +/* line 43, ../scss/styles.scss */ #tool-bar #block-materio-search-api-materio-search-api-search > .inner:active { -webkit-transition: box-shadow 0s ease-out; - -moz-transition: box-shadow 0s ease-out; - -o-transition: box-shadow 0s ease-out; - transition: box-shadow 0s ease-out; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + transition: box-shadow 0s ease-out; box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } +/* line 947, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form { text-align: right; display: moz-inline-stack; @@ -6211,9 +3959,8 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { *display: inline; margin: 0; } -#tool-bar #materio-search-api-search-form .form-item, -#tool-bar #materio-search-api-search-form input, -#tool-bar #materio-search-api-search-form .form-checkboxes { +/* line 951, ../scss/styles.scss */ +#tool-bar #materio-search-api-search-form .form-item, #tool-bar #materio-search-api-search-form input, #tool-bar #materio-search-api-search-form .form-checkboxes { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -6223,157 +3970,132 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { vertical-align: middle; padding: 0; } +/* line 953, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form .form-checkboxes { padding: 3px; font-size: 12px; } +/* line 955, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form .form-checkboxes .form-item { margin: 0 5px; } +/* line 957, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form .form-checkboxes .form-item label { font-size: 10px; } +/* line 961, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form input#edit-searchfield { - border: 1px solid #cccccc; - -webkit-border-radius: 20px; - -moz-border-radius: 20px; + border: 1px solid #ccc; border-radius: 20px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; padding: 4px 5px; - height: 15px; + height: 25px; font-size: 12px; line-height: 1; background-position: 100% 5px; + width: 105%; } +/* line 967, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form input#edit-searchfield.throbbing { background-position: 100% -15px; } +/* line 971, ../scss/styles.scss */ .oldie #tool-bar #materio-search-api-search-form #edit-searchfield-autocomplete-aria-live { background-color: #1a1a1a; } +/* line 976, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form input#edit-create { padding: 3px; } +/* line 978, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form.loading { - background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; + background: transparent url("../img/ajax-loader.gif") no-repeat 98% center; } +/* line 980, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form.loading input#edit-create { visibility: hidden; } -@media screen and (max-width: 479px) { +@media only screen and (max-width: 40em) { + /* line 984, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form input#edit-searchfield { width: 16em; } + /* line 985, ../scss/styles.scss */ #tool-bar #materio-search-api-search-form #edit-bundles-filter { display: none; } } + +/* line 991, ../scss/styles.scss */ #center { background-color: #e6e6e6; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; border-radius: 10px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } +/* line 993, ../scss/styles.scss */ .node-type-page #center { - background-color: #ffffff; + background-color: #fff; } +/* line 994, ../scss/styles.scss */ .ie8 #center { height: 100%; margin-top: 20px; } + +/* line 998, ../scss/styles.scss */ #content { -webkit-transition: height 0.3s ease-out; - -moz-transition: height 0.3s ease-out; - -o-transition: height 0.3s ease-out; - transition: height 0.3s ease-out; + transition: height 0.3s ease-out; } +/* line 1002, ../scss/styles.scss */ #content.faded { - opacity: 0.005; - filter: alpha(opacity=0.5); - -webkit-opacity: 0.5; - -khtml-opacity: 0.5; - -moz-opacity: 0.5; opacity: 0.5; -webkit-transition: opacity 0.3s ease-out; - -moz-transition: opacity 0.3s ease-out; - -o-transition: opacity 0.3s ease-out; - transition: opacity 0.3s ease-out; + transition: opacity 0.3s ease-out; } -#content .materiobase-results, -#content .materiobase-actuality, -#content .materio-flags-list { +/* line 1007, ../scss/styles.scss */ +#content .materiobase-results, #content .materiobase-actuality, #content .materio-flags-list { padding: 0 0 30px 0; margin: 0 0 20px 0; } -#content .materiobase-results.loading, -#content .materiobase-actuality.loading, -#content .materio-flags-list.loading { - background-image: url('../img/ajax-loader.gif'); +/* line 1010, ../scss/styles.scss */ +#content .materiobase-results.loading, #content .materiobase-actuality.loading, #content .materio-flags-list.loading { + background-image: url("../img/ajax-loader.gif"); background-position: center bottom; background-repeat: no-repeat; } -#content .materiobase-results p.search-performance, -#content .materiobase-actuality p.search-performance, -#content .materio-flags-list p.search-performance, -#content .materiobase-results p.flaglist-infos, -#content .materiobase-actuality p.flaglist-infos, -#content .materio-flags-list p.flaglist-infos, -#content .materiobase-results p.actualities-infos, -#content .materiobase-actuality p.actualities-infos, -#content .materio-flags-list p.actualities-infos { +/* line 1016, ../scss/styles.scss */ +#content .materiobase-results p.search-performance, #content .materiobase-results p.flaglist-infos, #content .materiobase-results p.actualities-infos, #content .materiobase-actuality p.search-performance, #content .materiobase-actuality p.flaglist-infos, #content .materiobase-actuality p.actualities-infos, #content .materio-flags-list p.search-performance, #content .materio-flags-list p.flaglist-infos, #content .materio-flags-list p.actualities-infos { font-size: 12px; font-weight: 500; margin: 0; padding: 10px 0 5px 15px; } -#content .materiobase-results .search-results, -#content .materiobase-actuality .search-results, -#content .materio-flags-list .search-results, -#content .materiobase-results .actuality-items, -#content .materiobase-actuality .actuality-items, -#content .materio-flags-list .actuality-items, -#content .materiobase-results .flaglist-items, -#content .materiobase-actuality .flaglist-items, -#content .materio-flags-list .flaglist-items { +/* line 1022, ../scss/styles.scss */ +#content .materiobase-results .search-results, #content .materiobase-results .actuality-items, #content .materiobase-results .flaglist-items, #content .materiobase-actuality .search-results, #content .materiobase-actuality .actuality-items, #content .materiobase-actuality .flaglist-items, #content .materio-flags-list .search-results, #content .materio-flags-list .actuality-items, #content .materio-flags-list .flaglist-items { font-size: 0; text-align: center; } -#content .materiobase-results .search-results > *, -#content .materiobase-actuality .search-results > *, -#content .materio-flags-list .search-results > *, -#content .materiobase-results .actuality-items > *, -#content .materiobase-actuality .actuality-items > *, -#content .materio-flags-list .actuality-items > *, -#content .materiobase-results .flaglist-items > *, -#content .materiobase-actuality .flaglist-items > *, -#content .materio-flags-list .flaglist-items > * { +/* line 1024, ../scss/styles.scss */ +#content .materiobase-results .search-results > *, #content .materiobase-results .actuality-items > *, #content .materiobase-results .flaglist-items > *, #content .materiobase-actuality .search-results > *, #content .materiobase-actuality .actuality-items > *, #content .materiobase-actuality .flaglist-items > *, #content .materio-flags-list .search-results > *, #content .materio-flags-list .actuality-items > *, #content .materio-flags-list .flaglist-items > * { font-size: 16px; } -#content .materiobase-results .search-results > *, -#content .materiobase-actuality .search-results > *, -#content .materio-flags-list .search-results > *, -#content .materiobase-results .actuality-items > *, -#content .materiobase-actuality .actuality-items > *, -#content .materio-flags-list .actuality-items > *, -#content .materiobase-results .flaglist-items > *, -#content .materiobase-actuality .flaglist-items > *, -#content .materio-flags-list .flaglist-items > * { +/* line 1026, ../scss/styles.scss */ +#content .materiobase-results .search-results > *, #content .materiobase-results .actuality-items > *, #content .materiobase-results .flaglist-items > *, #content .materiobase-actuality .search-results > *, #content .materiobase-actuality .actuality-items > *, #content .materiobase-actuality .flaglist-items > *, #content .materio-flags-list .search-results > *, #content .materio-flags-list .actuality-items > *, #content .materio-flags-list .flaglist-items > * { text-align: left; } +/* line 1032, ../scss/styles.scss */ #content ul.pager { padding: 1em 0; text-align: left; } +/* line 1034, ../scss/styles.scss */ .ie8 #content ul.pager { position: absolute; left: 37px; bottom: 35px; } +/* line 1036, ../scss/styles.scss */ #content ul.pager li { margin: 0; display: moz-inline-stack; @@ -6383,76 +4105,89 @@ html.js #highlighted .block-materio-didactique .tabs > *.active { *display: inline; vertical-align: middle; } -#content ul.pager .pager-current, -#content ul.pager a { +/* line 1038, ../scss/styles.scss */ +#content ul.pager .pager-current, #content ul.pager a { color: #000; font-size: 12px; } +/* line 1039, ../scss/styles.scss */ #content ul.pager .pager-current { font-weight: 900; font-size: 14px; } +/* line 1039, ../scss/styles.scss */ .ie8 #content ul.pager .pager-current { background: #fff; padding: 0.3em 1em 0.3em 1em; margin-top: 0.05em; border: 1px solid #333333; } -#content ul.pager .pager-first a, -#content ul.pager .pager-previous a, -#content ul.pager .pager-next a, -#content ul.pager .pager-last a { +/* line 1040, ../scss/styles.scss */ +#content ul.pager .pager-first a, #content ul.pager .pager-previous a, #content ul.pager .pager-next a, #content ul.pager .pager-last a { font-size: 24px; font-weight: 300; } + /** #content-bottom */ +/* line 1051, ../scss/styles.scss */ #content-bottom { padding-top: 10px; } -/** CARDS */ -/** card search performance */ + +/* + _________ ____ ____ _____ + / ____/ | / __ \/ __ \/ ___/ + / / / /| | / /_/ / / / /\__ \ +/ /___/ ___ |/ _, _/ /_/ /___/ / +\____/_/ |_/_/ |_/_____//____/ + +*/ +/* + _ _ ___ + ___ ___ ___ _| | ___ ___ ___ ___ ___| |_ ___ ___ ___| _|___ ___ _____ ___ ___ ___ ___ +| _| .'| _| . | |_ -| -_| .'| _| _| | | . | -_| _| _| . | _| | .'| | _| -_| +|___|__,|_| |___| |___|___|__,|_| |___|_|_| | _|___|_| |_| |___|_| |_|_|_|__,|_|_|___|___| + |_| +*/ +/* line 1243, ../scss/styles.scss */ article.search-performance .inner { padding: 1em; } +/* line 1247, ../scss/styles.scss */ article.search-performance p { font-size: 14px; } +/* line 1249, ../scss/styles.scss */ article.search-performance a.button { display: block; margin: 10px auto; max-width: 10em; font-size: 18px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -article.search-performance a.button:hover, -article.search-performance a.button:focus { +/* line 66, ../scss/styles.scss */ +article.search-performance a.button:hover, article.search-performance a.button:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } +/* line 69, ../scss/styles.scss */ article.search-performance a.button:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } +/* line 1257, ../scss/styles.scss */ article.search-performance.view-mode-cardsmall { width: 327px; height: 140px; @@ -6463,21 +4198,14 @@ article.search-performance.view-mode-cardsmall { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; } +/* line 1260, ../scss/styles.scss */ article.search-performance.view-mode-cardmedium { width: 210px; height: 295px; @@ -6488,24 +4216,18 @@ article.search-performance.view-mode-cardmedium { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; } +/* line 1262, ../scss/styles.scss */ article.search-performance.view-mode-cardmedium .inner { padding: 4em 1em 0; } +/* line 1266, ../scss/styles.scss */ article.search-performance.view-mode-cardbig { width: 425px; height: 115px; @@ -6516,23 +4238,16 @@ article.search-performance.view-mode-cardbig { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; display: block; margin: 0 auto; } +/* line 1270, ../scss/styles.scss */ article.search-performance.view-mode-cardfull { width: 850px; height: 115px; @@ -6543,29 +4258,30 @@ article.search-performance.view-mode-cardfull { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; display: block; margin: 0 auto; } +/* line 1272, ../scss/styles.scss */ article.search-performance.view-mode-cardfull .inner { padding: 1em 212px; } -/** CARD BOOKMARKS */ -article.node-materiau.vm-bookmark, -article.node-breve.vm-bookmark { + +/* + + _____ _____ _____ ____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| | _ | __ | \ | __ | | | | | | _ | __ | | | __| +| --| | -| | | | __ -| | | | | -| | | | | -| -|__ | +|_____|__|__|__|__|____/ |_____|_____|_____|__|__|_|_|_|__|__|__|__|__|__|_____| + +*/ +/* line 1287, ../scss/styles.scss */ +article.node-materiau.vm-bookmark, article.node-breve.vm-bookmark { width: 50px; height: 70px; display: moz-inline-stack; @@ -6575,71 +4291,49 @@ article.node-breve.vm-bookmark { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; margin: 3px; } -article.node-materiau.vm-bookmark > div.side, -article.node-breve.vm-bookmark > div.side { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; +/* line 1092, ../scss/styles.scss */ +article.node-materiau.vm-bookmark > div.side, article.node-breve.vm-bookmark > div.side { border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-bookmark.focused, -article.node-breve.vm-bookmark.focused { - -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); - -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); +/* line 1097, ../scss/styles.scss */ +article.node-materiau.vm-bookmark.focused, article.node-breve.vm-bookmark.focused { box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); } -article.node-materiau.vm-bookmark.just-added, -article.node-breve.vm-bookmark.just-added { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 1099, ../scss/styles.scss */ +article.node-materiau.vm-bookmark.just-added, article.node-breve.vm-bookmark.just-added { opacity: 0; } -article.node-materiau.vm-bookmark.associated, -article.node-breve.vm-bookmark.associated { +/* line 1101, ../scss/styles.scss */ +article.node-materiau.vm-bookmark.associated, article.node-breve.vm-bookmark.associated { -webkit-transition: margin 0.3s ease-out; - -moz-transition: margin 0.3s ease-out; - -o-transition: margin 0.3s ease-out; - transition: margin 0.3s ease-out; + transition: margin 0.3s ease-out; } -article.node-materiau.vm-bookmark.associated.just-added, -article.node-breve.vm-bookmark.associated.just-added { +/* line 1103, ../scss/styles.scss */ +article.node-materiau.vm-bookmark.associated.just-added, article.node-breve.vm-bookmark.associated.just-added { margin-left: -50px; margin-right: 50px; } -.modal-content article.node-materiau.vm-bookmark.associated, -.modal-content article.node-breve.vm-bookmark.associated { +/* line 1105, ../scss/styles.scss */ +.modal-content article.node-materiau.vm-bookmark.associated, .modal-content article.node-breve.vm-bookmark.associated { position: absolute; top: 0; left: 0; z-index: 999; } -article.node-materiau.vm-bookmark.removed, -article.node-breve.vm-bookmark.removed { +/* line 1113, ../scss/styles.scss */ +article.node-materiau.vm-bookmark.removed, article.node-breve.vm-bookmark.removed { -webkit-transition: width 0.3s ease-out; - -moz-transition: width 0.3s ease-out; - -o-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; + transition: width 0.3s ease-out; width: 0; padding-left: 0; padding-right: 0; @@ -6647,59 +4341,51 @@ article.node-breve.vm-bookmark.removed { margin-left: 0; overflow: hidden; } -article.node-materiau.vm-bookmark nav.nav, -article.node-breve.vm-bookmark nav.nav { +/* line 1123, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav, article.node-breve.vm-bookmark nav.nav { position: absolute; top: 0; right: 0; z-index: 11; padding: 5px 0; - -webkit-border-radius: 0 5px 0 3px; - -moz-border-radius: 0 5px 0 3px; border-radius: 0 5px 0 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-bookmark nav.nav a, -article.node-breve.vm-bookmark nav.nav a { +/* line 1135, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav a, article.node-breve.vm-bookmark nav.nav a { color: #000; } -article.node-materiau.vm-bookmark nav.nav ul, -article.node-breve.vm-bookmark nav.nav ul { - background-color: #ffffff; +/* line 1136, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul, article.node-breve.vm-bookmark nav.nav ul { background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; } -article.node-materiau.vm-bookmark nav.nav span.op, -article.node-breve.vm-bookmark nav.nav span.op { +/* line 1137, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav span.op, article.node-breve.vm-bookmark nav.nav span.op { font-weight: 900; font-size: 14px; } -article.node-materiau.vm-bookmark nav.nav ul, -article.node-breve.vm-bookmark nav.nav ul { +/* line 1139, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul, article.node-breve.vm-bookmark nav.nav ul { padding: 0; margin: 0; } -article.node-materiau.vm-bookmark nav.nav section, -article.node-breve.vm-bookmark nav.nav section { +/* line 1141, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav section, article.node-breve.vm-bookmark nav.nav section { position: relative; } -article.node-materiau.vm-bookmark nav.nav section > i, -article.node-breve.vm-bookmark nav.nav section > i { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav section > i, article.node-breve.vm-bookmark nav.nav section > i { margin: 0 5px; } -article.node-materiau.vm-bookmark nav.nav section > i:hover, -article.node-breve.vm-bookmark nav.nav section > i:hover { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav section > i:hover, article.node-breve.vm-bookmark nav.nav section > i:hover { cursor: pointer; } -article.node-materiau.vm-bookmark nav.nav ul, -article.node-breve.vm-bookmark nav.nav ul { +/* line 1147, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul, article.node-breve.vm-bookmark nav.nav ul { position: absolute; right: 0; top: 0; @@ -6707,18 +4393,12 @@ article.node-breve.vm-bookmark nav.nav ul { min-width: 80px; padding: 0; display: block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-bookmark nav.nav ul li, -article.node-breve.vm-bookmark nav.nav ul li { +/* line 1151, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul li, article.node-breve.vm-bookmark nav.nav ul li { padding: 0; margin: 0; line-height: 1; @@ -6726,25 +4406,23 @@ article.node-breve.vm-bookmark nav.nav ul li { height: 0; overflow: hidden; -webkit-transition: height 0.2s ease-out; - -moz-transition: height 0.2s ease-out; - -o-transition: height 0.2s ease-out; - transition: height 0.2s ease-out; + transition: height 0.2s ease-out; } -article.node-materiau.vm-bookmark nav.nav ul li a, -article.node-breve.vm-bookmark nav.nav ul li a { +/* line 1155, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul li a, article.node-breve.vm-bookmark nav.nav ul li a { display: block; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links { +/* line 1158, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links { width: 160px; font-size: 0; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links > *, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links > * { +/* line 1161, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links > *, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links > * { font-size: 11px; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li { +/* line 1166, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -6754,78 +4432,68 @@ article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li { max-width: 98%; padding-left: 2px; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li a, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li a { +/* line 1168, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li a, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li a { color: #a6a6a6; -webkit-transition: color 0.2s ease-out; - -moz-transition: color 0.2s ease-out; - -o-transition: color 0.2s ease-out; - transition: color 0.2s ease-out; + transition: color 0.2s ease-out; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li a:hover, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li a:hover, -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li a.unflag-action, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li a.unflag-action { +/* line 1170, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li a:hover, article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li a.unflag-action, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li a:hover, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li a.unflag-action { color: #000; text-decoration: none; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create { +/* line 1174, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create { display: block; width: 100%; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { +/* line 1176, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { margin-top: 1px; padding-top: 1px; border-top: 1px solid #e6e6e6; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create a, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create a { +/* line 1177, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create a, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.flag-lists-create a { color: #000; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading { - background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; +/* line 1179, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading { + background: transparent url("../img/ajax-loader.gif") no-repeat 98% center; } -article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading a, -article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading a { +/* line 1180, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading a, article.node-breve.vm-bookmark nav.nav ul.flag-lists-entity-links li.loading a { visibility: hidden; } -.ie8 article.node-materiau.vm-bookmark nav.nav ul, -.ie8 article.node-breve.vm-bookmark nav.nav ul { +/* line 1185, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-bookmark nav.nav ul, .ie8 article.node-breve.vm-bookmark nav.nav ul { background: #FFF; } -article.node-materiau.vm-bookmark nav.nav section:hover ul, -article.node-breve.vm-bookmark nav.nav section:hover ul { +/* line 1190, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav section:hover ul, article.node-breve.vm-bookmark nav.nav section:hover ul { padding: 5px 5px; } -article.node-materiau.vm-bookmark nav.nav section:hover ul li, -article.node-breve.vm-bookmark nav.nav section:hover ul li { +/* line 1192, ../scss/styles.scss */ +article.node-materiau.vm-bookmark nav.nav section:hover ul li, article.node-breve.vm-bookmark nav.nav section:hover ul li { height: 17px; } -article.node-materiau.vm-bookmark div.workflow, -article.node-breve.vm-bookmark div.workflow { +/* line 1205, ../scss/styles.scss */ +article.node-materiau.vm-bookmark div.workflow, article.node-breve.vm-bookmark div.workflow { position: absolute; top: 0; left: 0; z-index: 11; padding: 5px; - -webkit-border-radius: 5px 0 3px 0; - -moz-border-radius: 5px 0 3px 0; border-radius: 5px 0 3px 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; vertical-align: top; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-bookmark div.workflow span, -article.node-breve.vm-bookmark div.workflow span { +/* line 1211, ../scss/styles.scss */ +article.node-materiau.vm-bookmark div.workflow span, article.node-breve.vm-bookmark div.workflow span { padding: 3px 0 0 4px; display: moz-inline-stack; display: inline-block; @@ -6833,96 +4501,85 @@ article.node-breve.vm-bookmark div.workflow span { zoom: 1; *display: inline; } -article.node-materiau.vm-bookmark .field-name-field-description .upgrade, -article.node-breve.vm-bookmark .field-name-field-description .upgrade { +/* line 1214, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .field-name-field-description .upgrade, article.node-breve.vm-bookmark .field-name-field-description .upgrade { font-size: 12px; padding-top: 4em; margin-top: -4.5em; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #ffffff 4em); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, #fff 4em); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #fff 4em); position: relative; } -article.node-materiau.vm-bookmark .side.oops p, -article.node-breve.vm-bookmark .side.oops p, -article.node-materiau.vm-bookmark .side .upgrade p, -article.node-breve.vm-bookmark .side .upgrade p { +/* line 1222, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .side.oops p, article.node-materiau.vm-bookmark .side .upgrade p, article.node-breve.vm-bookmark .side.oops p, article.node-breve.vm-bookmark .side .upgrade p { padding: 10px; font-size: 12px; } -article.node-materiau.vm-bookmark .side.oops p a, -article.node-breve.vm-bookmark .side.oops p a, -article.node-materiau.vm-bookmark .side .upgrade p a, -article.node-breve.vm-bookmark .side .upgrade p a { +/* line 1224, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .side.oops p a, article.node-materiau.vm-bookmark .side .upgrade p a, article.node-breve.vm-bookmark .side.oops p a, article.node-breve.vm-bookmark .side .upgrade p a { display: block; margin: 10px 0; font-size: 18px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -article.node-materiau.vm-bookmark .side.oops p a:hover, -article.node-breve.vm-bookmark .side.oops p a:hover, -article.node-materiau.vm-bookmark .side .upgrade p a:hover, -article.node-breve.vm-bookmark .side .upgrade p a:hover, -article.node-materiau.vm-bookmark .side.oops p a:focus, -article.node-breve.vm-bookmark .side.oops p a:focus, -article.node-materiau.vm-bookmark .side .upgrade p a:focus, -article.node-breve.vm-bookmark .side .upgrade p a:focus { +/* line 66, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .side.oops p a:hover, article.node-materiau.vm-bookmark .side.oops p a:focus, article.node-materiau.vm-bookmark .side .upgrade p a:hover, article.node-materiau.vm-bookmark .side .upgrade p a:focus, article.node-breve.vm-bookmark .side.oops p a:hover, article.node-breve.vm-bookmark .side.oops p a:focus, article.node-breve.vm-bookmark .side .upgrade p a:hover, article.node-breve.vm-bookmark .side .upgrade p a:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -article.node-materiau.vm-bookmark .side.oops p a:active, -article.node-breve.vm-bookmark .side.oops p a:active, -article.node-materiau.vm-bookmark .side .upgrade p a:active, -article.node-breve.vm-bookmark .side .upgrade p a:active { +/* line 69, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .side.oops p a:active, article.node-materiau.vm-bookmark .side .upgrade p a:active, article.node-breve.vm-bookmark .side.oops p a:active, article.node-breve.vm-bookmark .side .upgrade p a:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-bookmark .group-header, -article.node-breve.vm-bookmark .group-header { +/* line 1290, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .group-header, article.node-breve.vm-bookmark .group-header { display: none; } -article.node-materiau.vm-bookmark .group-images, -article.node-breve.vm-bookmark .group-images { +/* line 1294, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .group-images, article.node-breve.vm-bookmark .group-images { position: relative; z-index: 1; - background-color: #ffffff; + background-color: #fff; } -article.node-materiau.vm-bookmark .group-images figure, -article.node-breve.vm-bookmark .group-images figure { +/* line 77, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .group-images figure, article.node-breve.vm-bookmark .group-images figure { position: absolute; top: 0; left: 0; } -article.node-materiau.vm-bookmark .group-images figure:first-child, -article.node-breve.vm-bookmark .group-images figure:first-child { +/* line 79, ../scss/styles.scss */ +article.node-materiau.vm-bookmark .group-images figure:first-child, article.node-breve.vm-bookmark .group-images figure:first-child { position: relative; z-index: 1; } -article.node-materiau.vm-bookmark div.workflow, -article.node-breve.vm-bookmark div.workflow { +/* line 1296, ../scss/styles.scss */ +article.node-materiau.vm-bookmark div.workflow, article.node-breve.vm-bookmark div.workflow { display: none; } -/** CARD SMALL */ -article.node-materiau.vm-cardsmall, -article.node-breve.vm-cardsmall { + +/* + + _____ _____ _____ ____ _____ _____ _____ __ __ +| | _ | __ | \ | __| | _ | | | | +| --| | -| | | |__ | | | | | |__| |__ +|_____|__|__|__|__|____/ |_____|_|_|_|__|__|_____|_____| + +*/ +/* line 1307, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall, article.node-breve.vm-cardsmall { width: 100px; height: 140px; display: moz-inline-stack; @@ -6932,70 +4589,48 @@ article.node-breve.vm-cardsmall { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; } -article.node-materiau.vm-cardsmall > div.side, -article.node-breve.vm-cardsmall > div.side { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; +/* line 1092, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall > div.side, article.node-breve.vm-cardsmall > div.side { border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardsmall.focused, -article.node-breve.vm-cardsmall.focused { - -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); - -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); +/* line 1097, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall.focused, article.node-breve.vm-cardsmall.focused { box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); } -article.node-materiau.vm-cardsmall.just-added, -article.node-breve.vm-cardsmall.just-added { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 1099, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall.just-added, article.node-breve.vm-cardsmall.just-added { opacity: 0; } -article.node-materiau.vm-cardsmall.associated, -article.node-breve.vm-cardsmall.associated { +/* line 1101, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall.associated, article.node-breve.vm-cardsmall.associated { -webkit-transition: margin 0.3s ease-out; - -moz-transition: margin 0.3s ease-out; - -o-transition: margin 0.3s ease-out; - transition: margin 0.3s ease-out; + transition: margin 0.3s ease-out; } -article.node-materiau.vm-cardsmall.associated.just-added, -article.node-breve.vm-cardsmall.associated.just-added { +/* line 1103, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall.associated.just-added, article.node-breve.vm-cardsmall.associated.just-added { margin-left: -100px; margin-right: 100px; } -.modal-content article.node-materiau.vm-cardsmall.associated, -.modal-content article.node-breve.vm-cardsmall.associated { +/* line 1105, ../scss/styles.scss */ +.modal-content article.node-materiau.vm-cardsmall.associated, .modal-content article.node-breve.vm-cardsmall.associated { position: absolute; top: 0; left: 0; z-index: 999; } -article.node-materiau.vm-cardsmall.removed, -article.node-breve.vm-cardsmall.removed { +/* line 1113, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall.removed, article.node-breve.vm-cardsmall.removed { -webkit-transition: width 0.3s ease-out; - -moz-transition: width 0.3s ease-out; - -o-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; + transition: width 0.3s ease-out; width: 0; padding-left: 0; padding-right: 0; @@ -7003,59 +4638,51 @@ article.node-breve.vm-cardsmall.removed { margin-left: 0; overflow: hidden; } -article.node-materiau.vm-cardsmall nav.nav, -article.node-breve.vm-cardsmall nav.nav { +/* line 1123, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav, article.node-breve.vm-cardsmall nav.nav { position: absolute; top: 0; right: 0; z-index: 11; padding: 5px 0; - -webkit-border-radius: 0 5px 0 3px; - -moz-border-radius: 0 5px 0 3px; border-radius: 0 5px 0 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardsmall nav.nav a, -article.node-breve.vm-cardsmall nav.nav a { +/* line 1135, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav a, article.node-breve.vm-cardsmall nav.nav a { color: #000; } -article.node-materiau.vm-cardsmall nav.nav ul, -article.node-breve.vm-cardsmall nav.nav ul { - background-color: #ffffff; +/* line 1136, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul, article.node-breve.vm-cardsmall nav.nav ul { background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; } -article.node-materiau.vm-cardsmall nav.nav span.op, -article.node-breve.vm-cardsmall nav.nav span.op { +/* line 1137, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav span.op, article.node-breve.vm-cardsmall nav.nav span.op { font-weight: 900; font-size: 14px; } -article.node-materiau.vm-cardsmall nav.nav ul, -article.node-breve.vm-cardsmall nav.nav ul { +/* line 1139, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul, article.node-breve.vm-cardsmall nav.nav ul { padding: 0; margin: 0; } -article.node-materiau.vm-cardsmall nav.nav section, -article.node-breve.vm-cardsmall nav.nav section { +/* line 1141, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav section, article.node-breve.vm-cardsmall nav.nav section { position: relative; } -article.node-materiau.vm-cardsmall nav.nav section > i, -article.node-breve.vm-cardsmall nav.nav section > i { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav section > i, article.node-breve.vm-cardsmall nav.nav section > i { margin: 0 5px; } -article.node-materiau.vm-cardsmall nav.nav section > i:hover, -article.node-breve.vm-cardsmall nav.nav section > i:hover { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav section > i:hover, article.node-breve.vm-cardsmall nav.nav section > i:hover { cursor: pointer; } -article.node-materiau.vm-cardsmall nav.nav ul, -article.node-breve.vm-cardsmall nav.nav ul { +/* line 1147, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul, article.node-breve.vm-cardsmall nav.nav ul { position: absolute; right: 0; top: 0; @@ -7063,18 +4690,12 @@ article.node-breve.vm-cardsmall nav.nav ul { min-width: 80px; padding: 0; display: block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardsmall nav.nav ul li, -article.node-breve.vm-cardsmall nav.nav ul li { +/* line 1151, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul li, article.node-breve.vm-cardsmall nav.nav ul li { padding: 0; margin: 0; line-height: 1; @@ -7082,25 +4703,23 @@ article.node-breve.vm-cardsmall nav.nav ul li { height: 0; overflow: hidden; -webkit-transition: height 0.2s ease-out; - -moz-transition: height 0.2s ease-out; - -o-transition: height 0.2s ease-out; - transition: height 0.2s ease-out; + transition: height 0.2s ease-out; } -article.node-materiau.vm-cardsmall nav.nav ul li a, -article.node-breve.vm-cardsmall nav.nav ul li a { +/* line 1155, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul li a, article.node-breve.vm-cardsmall nav.nav ul li a { display: block; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links { +/* line 1158, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links { width: 160px; font-size: 0; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links > *, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links > * { +/* line 1161, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links > *, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links > * { font-size: 11px; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li { +/* line 1166, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -7110,78 +4729,68 @@ article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li { max-width: 98%; padding-left: 2px; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li a, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li a { +/* line 1168, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li a, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li a { color: #a6a6a6; -webkit-transition: color 0.2s ease-out; - -moz-transition: color 0.2s ease-out; - -o-transition: color 0.2s ease-out; - transition: color 0.2s ease-out; + transition: color 0.2s ease-out; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li a:hover, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li a:hover, -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li a.unflag-action, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li a.unflag-action { +/* line 1170, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li a:hover, article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li a.unflag-action, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li a:hover, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li a.unflag-action { color: #000; text-decoration: none; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create { +/* line 1174, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create { display: block; width: 100%; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { +/* line 1176, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { margin-top: 1px; padding-top: 1px; border-top: 1px solid #e6e6e6; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create a, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create a { +/* line 1177, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create a, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.flag-lists-create a { color: #000; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading { - background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; +/* line 1179, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading { + background: transparent url("../img/ajax-loader.gif") no-repeat 98% center; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading a, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading a { +/* line 1180, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading a, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li.loading a { visibility: hidden; } -.ie8 article.node-materiau.vm-cardsmall nav.nav ul, -.ie8 article.node-breve.vm-cardsmall nav.nav ul { +/* line 1185, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardsmall nav.nav ul, .ie8 article.node-breve.vm-cardsmall nav.nav ul { background: #FFF; } -article.node-materiau.vm-cardsmall nav.nav section:hover ul, -article.node-breve.vm-cardsmall nav.nav section:hover ul { +/* line 1190, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav section:hover ul, article.node-breve.vm-cardsmall nav.nav section:hover ul { padding: 5px 5px; } -article.node-materiau.vm-cardsmall nav.nav section:hover ul li, -article.node-breve.vm-cardsmall nav.nav section:hover ul li { +/* line 1192, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav section:hover ul li, article.node-breve.vm-cardsmall nav.nav section:hover ul li { height: 17px; } -article.node-materiau.vm-cardsmall div.workflow, -article.node-breve.vm-cardsmall div.workflow { +/* line 1205, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall div.workflow, article.node-breve.vm-cardsmall div.workflow { position: absolute; top: 0; left: 0; z-index: 11; padding: 5px; - -webkit-border-radius: 5px 0 3px 0; - -moz-border-radius: 5px 0 3px 0; border-radius: 5px 0 3px 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; vertical-align: top; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardsmall div.workflow span, -article.node-breve.vm-cardsmall div.workflow span { +/* line 1211, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall div.workflow span, article.node-breve.vm-cardsmall div.workflow span { padding: 3px 0 0 4px; display: moz-inline-stack; display: inline-block; @@ -7189,83 +4798,62 @@ article.node-breve.vm-cardsmall div.workflow span { zoom: 1; *display: inline; } -article.node-materiau.vm-cardsmall .field-name-field-description .upgrade, -article.node-breve.vm-cardsmall .field-name-field-description .upgrade { +/* line 1214, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .field-name-field-description .upgrade, article.node-breve.vm-cardsmall .field-name-field-description .upgrade { font-size: 12px; padding-top: 4em; margin-top: -4.5em; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #ffffff 4em); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, #fff 4em); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #fff 4em); position: relative; } -article.node-materiau.vm-cardsmall .side.oops p, -article.node-breve.vm-cardsmall .side.oops p, -article.node-materiau.vm-cardsmall .side .upgrade p, -article.node-breve.vm-cardsmall .side .upgrade p { +/* line 1222, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .side.oops p, article.node-materiau.vm-cardsmall .side .upgrade p, article.node-breve.vm-cardsmall .side.oops p, article.node-breve.vm-cardsmall .side .upgrade p { padding: 10px; font-size: 12px; } -article.node-materiau.vm-cardsmall .side.oops p a, -article.node-breve.vm-cardsmall .side.oops p a, -article.node-materiau.vm-cardsmall .side .upgrade p a, -article.node-breve.vm-cardsmall .side .upgrade p a { +/* line 1224, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .side.oops p a, article.node-materiau.vm-cardsmall .side .upgrade p a, article.node-breve.vm-cardsmall .side.oops p a, article.node-breve.vm-cardsmall .side .upgrade p a { display: block; margin: 10px 0; font-size: 18px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -article.node-materiau.vm-cardsmall .side.oops p a:hover, -article.node-breve.vm-cardsmall .side.oops p a:hover, -article.node-materiau.vm-cardsmall .side .upgrade p a:hover, -article.node-breve.vm-cardsmall .side .upgrade p a:hover, -article.node-materiau.vm-cardsmall .side.oops p a:focus, -article.node-breve.vm-cardsmall .side.oops p a:focus, -article.node-materiau.vm-cardsmall .side .upgrade p a:focus, -article.node-breve.vm-cardsmall .side .upgrade p a:focus { +/* line 66, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .side.oops p a:hover, article.node-materiau.vm-cardsmall .side.oops p a:focus, article.node-materiau.vm-cardsmall .side .upgrade p a:hover, article.node-materiau.vm-cardsmall .side .upgrade p a:focus, article.node-breve.vm-cardsmall .side.oops p a:hover, article.node-breve.vm-cardsmall .side.oops p a:focus, article.node-breve.vm-cardsmall .side .upgrade p a:hover, article.node-breve.vm-cardsmall .side .upgrade p a:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -article.node-materiau.vm-cardsmall .side.oops p a:active, -article.node-breve.vm-cardsmall .side.oops p a:active, -article.node-materiau.vm-cardsmall .side .upgrade p a:active, -article.node-breve.vm-cardsmall .side .upgrade p a:active { +/* line 69, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .side.oops p a:active, article.node-materiau.vm-cardsmall .side .upgrade p a:active, article.node-breve.vm-cardsmall .side.oops p a:active, article.node-breve.vm-cardsmall .side .upgrade p a:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardsmall .group-header, -article.node-breve.vm-cardsmall .group-header { +/* line 1309, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-header, article.node-breve.vm-cardsmall .group-header { display: none; position: absolute; font-size: 14px; font-weight: 500; } -article.node-materiau.vm-cardsmall .group-header .field-name-title-field, -article.node-breve.vm-cardsmall .group-header .field-name-title-field { +/* line 1312, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-header .field-name-title-field, article.node-breve.vm-cardsmall .group-header .field-name-title-field { font-weight: 700; } -article.node-materiau.vm-cardsmall .group-header .field-name-field-reference-materio, -article.node-breve.vm-cardsmall .group-header .field-name-field-reference-materio, -article.node-materiau.vm-cardsmall .group-header .field-name-field-localisation, -article.node-breve.vm-cardsmall .group-header .field-name-field-localisation { +/* line 1313, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-header .field-name-field-reference-materio, article.node-materiau.vm-cardsmall .group-header .field-name-field-localisation, article.node-breve.vm-cardsmall .group-header .field-name-field-reference-materio, article.node-breve.vm-cardsmall .group-header .field-name-field-localisation { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -7273,111 +4861,101 @@ article.node-breve.vm-cardsmall .group-header .field-name-field-localisation { *display: inline; font-size: 12px; } -article.node-materiau.vm-cardsmall .group-header .field-name-field-localisation, -article.node-breve.vm-cardsmall .group-header .field-name-field-localisation { +/* line 1314, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-header .field-name-field-localisation, article.node-breve.vm-cardsmall .group-header .field-name-field-localisation { float: right; } -article.node-materiau.vm-cardsmall .group-images, -article.node-breve.vm-cardsmall .group-images { +/* line 1316, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-images, article.node-breve.vm-cardsmall .group-images { position: relative; z-index: 1; - background-color: #ffffff; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; + background-color: #fff; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardsmall .group-images figure, -article.node-breve.vm-cardsmall .group-images figure { +/* line 77, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-images figure, article.node-breve.vm-cardsmall .group-images figure { position: absolute; top: 0; left: 0; } -article.node-materiau.vm-cardsmall .group-images figure:first-child, -article.node-breve.vm-cardsmall .group-images figure:first-child { +/* line 79, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall .group-images figure:first-child, article.node-breve.vm-cardsmall .group-images figure:first-child { position: relative; z-index: 1; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links { +/* line 1319, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links { width: 75px; min-width: 75px; } -article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li, -article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li { +/* line 1321, ../scss/styles.scss */ +article.node-materiau.vm-cardsmall nav.nav ul.flag-lists-entity-links li, article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li { width: 98%; } -.ie8 article.node-materiau.vm-cardsmall nav.nav, -.ie8 article.node-breve.vm-cardsmall nav.nav { - background: #ffffff; +/* line 1323, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardsmall nav.nav, .ie8 article.node-breve.vm-cardsmall nav.nav { + background: #FFF; } -.no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav, -.no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav { +/* line 1325, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav, .no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav { visibility: hidden; } -.no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav > *, -.no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav > * { +/* line 118, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav > *, .no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav > * { margin-top: -100000px; } -.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav, -.csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 121, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav, .csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav { opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } -.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav > *, -.csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav > * { +/* line 124, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) nav.nav > *, .csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) nav.nav > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } -.no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow, -.no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow { +/* line 1327, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow, .no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow { visibility: hidden; } -.no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow > *, -.no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow > * { +/* line 118, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow > *, .no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow > * { margin-top: -100000px; } -.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow, -.csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 121, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow, .csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow { opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } -.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow > *, -.csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow > * { +/* line 124, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardsmall:not(.focused) div.workflow > *, .csstransition .no-touch article.node-breve.vm-cardsmall:not(.focused) div.workflow > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } -/** TOOLTIP SMALL CARD */ + +/* + + _____ _____ _____ __ _____ _____ _____ _____ _____ _____ __ __ _____ _____ _____ ____ +|_ _| | | ||_ _| | _ | | __| | _ | | | | | | _ | __ | \ + | | | | | | | |__| | |- -| __| |__ | | | | | |__| |__ | --| | -| | | + |_| |_____|_____|_____|_| |_____|__| |_____|_|_|_|__|__|_____|_____| |_____|__|__|__|__|____/ + +*/ +/* line 1339, ../scss/styles.scss */ #tooltip .group-header.smallcard { font-size: 14px; font-weight: 500; } +/* line 1341, ../scss/styles.scss */ #tooltip .group-header.smallcard .field-name-title-field { font-weight: 700; } -#tooltip .group-header.smallcard .field-name-field-reference-materio, -#tooltip .group-header.smallcard .field-name-field-localisation { +/* line 1342, ../scss/styles.scss */ +#tooltip .group-header.smallcard .field-name-field-reference-materio, #tooltip .group-header.smallcard .field-name-field-localisation { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -7385,12 +4963,21 @@ article.node-breve.vm-cardsmall nav.nav ul.flag-lists-entity-links li { *display: inline; font-size: 12px; } +/* line 1343, ../scss/styles.scss */ #tooltip .group-header.smallcard .field-name-field-localisation { float: right; } -/** CARD MEDIUM */ -article.node-materiau.vm-cardmedium, -article.node-breve.vm-cardmedium { + +/* + + _____ _____ _____ ____ _____ _____ ____ _____ _____ _____ +| | _ | __ | \ | | __| \| | | | | +| --| | -| | | | | | | __| | |- -| | | | | | +|_____|__|__|__|__|____/ |_|_|_|_____|____/|_____|_____|_|_|_| + +*/ +/* line 1355, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium, article.node-breve.vm-cardmedium { width: 210px; height: 295px; display: moz-inline-stack; @@ -7400,70 +4987,48 @@ article.node-breve.vm-cardmedium { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; } -article.node-materiau.vm-cardmedium > div.side, -article.node-breve.vm-cardmedium > div.side { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; +/* line 1092, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium > div.side, article.node-breve.vm-cardmedium > div.side { border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardmedium.focused, -article.node-breve.vm-cardmedium.focused { - -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); - -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); +/* line 1097, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.focused, article.node-breve.vm-cardmedium.focused { box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); } -article.node-materiau.vm-cardmedium.just-added, -article.node-breve.vm-cardmedium.just-added { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 1099, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.just-added, article.node-breve.vm-cardmedium.just-added { opacity: 0; } -article.node-materiau.vm-cardmedium.associated, -article.node-breve.vm-cardmedium.associated { +/* line 1101, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.associated, article.node-breve.vm-cardmedium.associated { -webkit-transition: margin 0.3s ease-out; - -moz-transition: margin 0.3s ease-out; - -o-transition: margin 0.3s ease-out; - transition: margin 0.3s ease-out; + transition: margin 0.3s ease-out; } -article.node-materiau.vm-cardmedium.associated.just-added, -article.node-breve.vm-cardmedium.associated.just-added { +/* line 1103, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.associated.just-added, article.node-breve.vm-cardmedium.associated.just-added { margin-left: -210px; margin-right: 210px; } -.modal-content article.node-materiau.vm-cardmedium.associated, -.modal-content article.node-breve.vm-cardmedium.associated { +/* line 1105, ../scss/styles.scss */ +.modal-content article.node-materiau.vm-cardmedium.associated, .modal-content article.node-breve.vm-cardmedium.associated { position: absolute; top: 0; left: 0; z-index: 999; } -article.node-materiau.vm-cardmedium.removed, -article.node-breve.vm-cardmedium.removed { +/* line 1113, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.removed, article.node-breve.vm-cardmedium.removed { -webkit-transition: width 0.3s ease-out; - -moz-transition: width 0.3s ease-out; - -o-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; + transition: width 0.3s ease-out; width: 0; padding-left: 0; padding-right: 0; @@ -7471,59 +5036,51 @@ article.node-breve.vm-cardmedium.removed { margin-left: 0; overflow: hidden; } -article.node-materiau.vm-cardmedium nav.nav, -article.node-breve.vm-cardmedium nav.nav { +/* line 1123, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav, article.node-breve.vm-cardmedium nav.nav { position: absolute; top: 0; right: 0; z-index: 11; padding: 5px 0; - -webkit-border-radius: 0 5px 0 3px; - -moz-border-radius: 0 5px 0 3px; border-radius: 0 5px 0 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardmedium nav.nav a, -article.node-breve.vm-cardmedium nav.nav a { +/* line 1135, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav a, article.node-breve.vm-cardmedium nav.nav a { color: #000; } -article.node-materiau.vm-cardmedium nav.nav ul, -article.node-breve.vm-cardmedium nav.nav ul { - background-color: #ffffff; +/* line 1136, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul, article.node-breve.vm-cardmedium nav.nav ul { background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; } -article.node-materiau.vm-cardmedium nav.nav span.op, -article.node-breve.vm-cardmedium nav.nav span.op { +/* line 1137, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav span.op, article.node-breve.vm-cardmedium nav.nav span.op { font-weight: 900; font-size: 14px; } -article.node-materiau.vm-cardmedium nav.nav ul, -article.node-breve.vm-cardmedium nav.nav ul { +/* line 1139, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul, article.node-breve.vm-cardmedium nav.nav ul { padding: 0; margin: 0; } -article.node-materiau.vm-cardmedium nav.nav section, -article.node-breve.vm-cardmedium nav.nav section { +/* line 1141, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav section, article.node-breve.vm-cardmedium nav.nav section { position: relative; } -article.node-materiau.vm-cardmedium nav.nav section > i, -article.node-breve.vm-cardmedium nav.nav section > i { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav section > i, article.node-breve.vm-cardmedium nav.nav section > i { margin: 0 5px; } -article.node-materiau.vm-cardmedium nav.nav section > i:hover, -article.node-breve.vm-cardmedium nav.nav section > i:hover { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav section > i:hover, article.node-breve.vm-cardmedium nav.nav section > i:hover { cursor: pointer; } -article.node-materiau.vm-cardmedium nav.nav ul, -article.node-breve.vm-cardmedium nav.nav ul { +/* line 1147, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul, article.node-breve.vm-cardmedium nav.nav ul { position: absolute; right: 0; top: 0; @@ -7531,18 +5088,12 @@ article.node-breve.vm-cardmedium nav.nav ul { min-width: 80px; padding: 0; display: block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardmedium nav.nav ul li, -article.node-breve.vm-cardmedium nav.nav ul li { +/* line 1151, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul li, article.node-breve.vm-cardmedium nav.nav ul li { padding: 0; margin: 0; line-height: 1; @@ -7550,25 +5101,23 @@ article.node-breve.vm-cardmedium nav.nav ul li { height: 0; overflow: hidden; -webkit-transition: height 0.2s ease-out; - -moz-transition: height 0.2s ease-out; - -o-transition: height 0.2s ease-out; - transition: height 0.2s ease-out; + transition: height 0.2s ease-out; } -article.node-materiau.vm-cardmedium nav.nav ul li a, -article.node-breve.vm-cardmedium nav.nav ul li a { +/* line 1155, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul li a, article.node-breve.vm-cardmedium nav.nav ul li a { display: block; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links { +/* line 1158, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links { width: 160px; font-size: 0; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links > *, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links > * { +/* line 1161, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links > *, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links > * { font-size: 11px; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li { +/* line 1166, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -7578,78 +5127,68 @@ article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li { max-width: 98%; padding-left: 2px; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li a, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li a { +/* line 1168, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li a, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li a { color: #a6a6a6; -webkit-transition: color 0.2s ease-out; - -moz-transition: color 0.2s ease-out; - -o-transition: color 0.2s ease-out; - transition: color 0.2s ease-out; + transition: color 0.2s ease-out; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li a:hover, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li a:hover, -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li a.unflag-action, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li a.unflag-action { +/* line 1170, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li a:hover, article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li a.unflag-action, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li a:hover, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li a.unflag-action { color: #000; text-decoration: none; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create { +/* line 1174, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create { display: block; width: 100%; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { +/* line 1176, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { margin-top: 1px; padding-top: 1px; border-top: 1px solid #e6e6e6; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create a, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create a { +/* line 1177, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create a, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.flag-lists-create a { color: #000; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading { - background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; +/* line 1179, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading { + background: transparent url("../img/ajax-loader.gif") no-repeat 98% center; } -article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading a, -article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading a { +/* line 1180, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading a, article.node-breve.vm-cardmedium nav.nav ul.flag-lists-entity-links li.loading a { visibility: hidden; } -.ie8 article.node-materiau.vm-cardmedium nav.nav ul, -.ie8 article.node-breve.vm-cardmedium nav.nav ul { +/* line 1185, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardmedium nav.nav ul, .ie8 article.node-breve.vm-cardmedium nav.nav ul { background: #FFF; } -article.node-materiau.vm-cardmedium nav.nav section:hover ul, -article.node-breve.vm-cardmedium nav.nav section:hover ul { +/* line 1190, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav section:hover ul, article.node-breve.vm-cardmedium nav.nav section:hover ul { padding: 5px 5px; } -article.node-materiau.vm-cardmedium nav.nav section:hover ul li, -article.node-breve.vm-cardmedium nav.nav section:hover ul li { +/* line 1192, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium nav.nav section:hover ul li, article.node-breve.vm-cardmedium nav.nav section:hover ul li { height: 17px; } -article.node-materiau.vm-cardmedium div.workflow, -article.node-breve.vm-cardmedium div.workflow { +/* line 1205, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium div.workflow, article.node-breve.vm-cardmedium div.workflow { position: absolute; top: 0; left: 0; z-index: 11; padding: 5px; - -webkit-border-radius: 5px 0 3px 0; - -moz-border-radius: 5px 0 3px 0; border-radius: 5px 0 3px 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; vertical-align: top; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardmedium div.workflow span, -article.node-breve.vm-cardmedium div.workflow span { +/* line 1211, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium div.workflow span, article.node-breve.vm-cardmedium div.workflow span { padding: 3px 0 0 4px; display: moz-inline-stack; display: inline-block; @@ -7657,84 +5196,65 @@ article.node-breve.vm-cardmedium div.workflow span { zoom: 1; *display: inline; } -article.node-materiau.vm-cardmedium .field-name-field-description .upgrade, -article.node-breve.vm-cardmedium .field-name-field-description .upgrade { +/* line 1214, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description .upgrade, article.node-breve.vm-cardmedium .field-name-field-description .upgrade { font-size: 12px; padding-top: 4em; margin-top: -4.5em; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #ffffff 4em); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, #fff 4em); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #fff 4em); position: relative; } -article.node-materiau.vm-cardmedium .side.oops p, -article.node-breve.vm-cardmedium .side.oops p, -article.node-materiau.vm-cardmedium .side .upgrade p, -article.node-breve.vm-cardmedium .side .upgrade p { +/* line 1222, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .side.oops p, article.node-materiau.vm-cardmedium .side .upgrade p, article.node-breve.vm-cardmedium .side.oops p, article.node-breve.vm-cardmedium .side .upgrade p { padding: 10px; font-size: 12px; } -article.node-materiau.vm-cardmedium .side.oops p a, -article.node-breve.vm-cardmedium .side.oops p a, -article.node-materiau.vm-cardmedium .side .upgrade p a, -article.node-breve.vm-cardmedium .side .upgrade p a { +/* line 1224, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .side.oops p a, article.node-materiau.vm-cardmedium .side .upgrade p a, article.node-breve.vm-cardmedium .side.oops p a, article.node-breve.vm-cardmedium .side .upgrade p a { display: block; margin: 10px 0; font-size: 18px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -article.node-materiau.vm-cardmedium .side.oops p a:hover, -article.node-breve.vm-cardmedium .side.oops p a:hover, -article.node-materiau.vm-cardmedium .side .upgrade p a:hover, -article.node-breve.vm-cardmedium .side .upgrade p a:hover, -article.node-materiau.vm-cardmedium .side.oops p a:focus, -article.node-breve.vm-cardmedium .side.oops p a:focus, -article.node-materiau.vm-cardmedium .side .upgrade p a:focus, -article.node-breve.vm-cardmedium .side .upgrade p a:focus { +/* line 66, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .side.oops p a:hover, article.node-materiau.vm-cardmedium .side.oops p a:focus, article.node-materiau.vm-cardmedium .side .upgrade p a:hover, article.node-materiau.vm-cardmedium .side .upgrade p a:focus, article.node-breve.vm-cardmedium .side.oops p a:hover, article.node-breve.vm-cardmedium .side.oops p a:focus, article.node-breve.vm-cardmedium .side .upgrade p a:hover, article.node-breve.vm-cardmedium .side .upgrade p a:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -article.node-materiau.vm-cardmedium .side.oops p a:active, -article.node-breve.vm-cardmedium .side.oops p a:active, -article.node-materiau.vm-cardmedium .side .upgrade p a:active, -article.node-breve.vm-cardmedium .side .upgrade p a:active { +/* line 69, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .side.oops p a:active, article.node-materiau.vm-cardmedium .side .upgrade p a:active, article.node-breve.vm-cardmedium .side.oops p a:active, article.node-breve.vm-cardmedium .side .upgrade p a:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardmedium .side, -article.node-breve.vm-cardmedium .side { +/* line 1358, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .side, article.node-breve.vm-cardmedium .side { position: absolute; width: 100%; height: 100%; top: 0; left: 0; - background-color: #ffffff; + background-color: #fff; cursor: pointer; } -article.node-materiau.vm-cardmedium .side:nth-child(2), -article.node-breve.vm-cardmedium .side:nth-child(2) { +/* line 1360, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .side:nth-child(2), article.node-breve.vm-cardmedium .side:nth-child(2) { z-index: 1; } -article.node-materiau.vm-cardmedium .group-header, -article.node-breve.vm-cardmedium .group-header { +/* line 1363, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-header, article.node-breve.vm-cardmedium .group-header { position: absolute; bottom: 0; z-index: 2; @@ -7744,36 +5264,24 @@ article.node-breve.vm-cardmedium .group-header { font-size: 20px; font-weight: 300; line-height: 1; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.8); - *background-color: #ffffff; text-shadow: 0 0 4px rgba(255, 255, 255, 0.4); - -webkit-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -moz-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -o-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; + -webkit-transition: background-color 0.2s ease-out; + transition: background-color 0.2s ease-out; border-radius: 0 0 4px 4px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardmedium .group-header .field-name-title-field, -article.node-breve.vm-cardmedium .group-header .field-name-title-field { +/* line 1367, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-header .field-name-title-field, article.node-breve.vm-cardmedium .group-header .field-name-title-field { font-weight: 700; } -article.node-materiau.vm-cardmedium .group-header .field-name-field-nature-titre, -article.node-breve.vm-cardmedium .group-header .field-name-field-nature-titre { +/* line 1368, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-header .field-name-field-nature-titre, article.node-breve.vm-cardmedium .group-header .field-name-field-nature-titre { font-size: 14px; } -article.node-materiau.vm-cardmedium .group-header .field-name-field-reference-materio, -article.node-breve.vm-cardmedium .group-header .field-name-field-reference-materio, -article.node-materiau.vm-cardmedium .group-header .field-name-field-localisation, -article.node-breve.vm-cardmedium .group-header .field-name-field-localisation, -article.node-materiau.vm-cardmedium .group-header .field-name-field-authored-on, -article.node-breve.vm-cardmedium .group-header .field-name-field-authored-on { +/* line 1373, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-header .field-name-field-reference-materio, article.node-materiau.vm-cardmedium .group-header .field-name-field-localisation, article.node-materiau.vm-cardmedium .group-header .field-name-field-authored-on, article.node-breve.vm-cardmedium .group-header .field-name-field-reference-materio, article.node-breve.vm-cardmedium .group-header .field-name-field-localisation, article.node-breve.vm-cardmedium .group-header .field-name-field-authored-on { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -7783,93 +5291,75 @@ article.node-breve.vm-cardmedium .group-header .field-name-field-authored-on { vertical-align: bottom; width: 48%; } -article.node-materiau.vm-cardmedium .group-header .field-name-field-localisation, -article.node-breve.vm-cardmedium .group-header .field-name-field-localisation { +/* line 1374, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-header .field-name-field-localisation, article.node-breve.vm-cardmedium .group-header .field-name-field-localisation { text-align: right; } -.ie8 article.node-materiau.vm-cardmedium .group-header, -.ie8 article.node-breve.vm-cardmedium .group-header { +/* line 1375, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardmedium .group-header, .ie8 article.node-breve.vm-cardmedium .group-header { background: #fff; font-color: #000; line-height: 1em; padding: 10px; } -article.node-materiau.vm-cardmedium.node-breve .group-header, -article.node-breve.vm-cardmedium.node-breve .group-header { +/* line 1379, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.node-breve .group-header, article.node-breve.vm-cardmedium.node-breve .group-header { color: #fff; - background-color: #000000; background-color: rgba(0, 0, 0, 0.7); - *background-color: #000000; text-shadow: 0 0 4px rgba(0, 0, 0, 0.4); - -webkit-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -moz-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -o-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; + -webkit-transition: background-color 0.2s ease-out; + transition: background-color 0.2s ease-out; } -article.node-materiau.vm-cardmedium.node-breve .group-header .field-name-field-authored-on, -article.node-breve.vm-cardmedium.node-breve .group-header .field-name-field-authored-on { +/* line 1382, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium.node-breve .group-header .field-name-field-authored-on, article.node-breve.vm-cardmedium.node-breve .group-header .field-name-field-authored-on { font-size: 12px; font-weight: 500; } -.ie8 article.node-materiau.vm-cardmedium.node-breve .group-header, -.ie8 article.node-breve.vm-cardmedium.node-breve .group-header { +/* line 1383, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardmedium.node-breve .group-header, .ie8 article.node-breve.vm-cardmedium.node-breve .group-header { background: #000; font-size: 15px; line-height: 1.2em; } -article.node-materiau.vm-cardmedium .group-images, -article.node-breve.vm-cardmedium .group-images { +/* line 1390, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-images, article.node-breve.vm-cardmedium .group-images { position: relative; z-index: 1; - background-color: #ffffff; + background-color: #fff; } -article.node-materiau.vm-cardmedium .group-images figure, -article.node-breve.vm-cardmedium .group-images figure { +/* line 77, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-images figure, article.node-breve.vm-cardmedium .group-images figure { position: absolute; top: 0; left: 0; } -article.node-materiau.vm-cardmedium .group-images figure:first-child, -article.node-breve.vm-cardmedium .group-images figure:first-child { +/* line 79, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .group-images figure:first-child, article.node-breve.vm-cardmedium .group-images figure:first-child { position: relative; z-index: 1; } -article.node-materiau.vm-cardmedium .field-name-field-description, -article.node-breve.vm-cardmedium .field-name-field-description, -article.node-materiau.vm-cardmedium .field-name-body, -article.node-breve.vm-cardmedium .field-name-body { +/* line 1393, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description, article.node-materiau.vm-cardmedium .field-name-body, article.node-breve.vm-cardmedium .field-name-field-description, article.node-breve.vm-cardmedium .field-name-body { font-size: 12px; font-weight: 300; overflow: hidden; z-index: -1; padding: 5px; } -article.node-materiau.vm-cardmedium .field-name-field-description.columnized, -article.node-breve.vm-cardmedium .field-name-field-description.columnized, -article.node-materiau.vm-cardmedium .field-name-body.columnized, -article.node-breve.vm-cardmedium .field-name-body.columnized { +/* line 155, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description.columnized, article.node-materiau.vm-cardmedium .field-name-body.columnized, article.node-breve.vm-cardmedium .field-name-field-description.columnized, article.node-breve.vm-cardmedium .field-name-body.columnized { padding: 0; -webkit-transition: margin-left 0.3s ease-out; - -moz-transition: margin-left 0.3s ease-out; - -o-transition: margin-left 0.3s ease-out; - transition: margin-left 0.3s ease-out; + transition: margin-left 0.3s ease-out; } -article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column > *, -article.node-breve.vm-cardmedium .field-name-field-description.columnized .column > *, -article.node-materiau.vm-cardmedium .field-name-body.columnized .column > *, -article.node-breve.vm-cardmedium .field-name-body.columnized .column > * { +/* line 157, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column > *, article.node-materiau.vm-cardmedium .field-name-body.columnized .column > *, article.node-breve.vm-cardmedium .field-name-field-description.columnized .column > *, article.node-breve.vm-cardmedium .field-name-body.columnized .column > * { padding: 5px; } -article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column-switcher, -article.node-breve.vm-cardmedium .field-name-field-description.columnized .column-switcher, -article.node-materiau.vm-cardmedium .field-name-body.columnized .column-switcher, -article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher { +/* line 159, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column-switcher, article.node-materiau.vm-cardmedium .field-name-body.columnized .column-switcher, article.node-breve.vm-cardmedium .field-name-field-description.columnized .column-switcher, article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher { display: inline-block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; color: #fff; background-color: #3e3e3e; @@ -7880,48 +5370,36 @@ article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher { line-height: 0.5; font-weight: normal; } -article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column-switcher.prev-column, -article.node-breve.vm-cardmedium .field-name-field-description.columnized .column-switcher.prev-column, -article.node-materiau.vm-cardmedium .field-name-body.columnized .column-switcher.prev-column, -article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher.prev-column { +/* line 164, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column-switcher.prev-column, article.node-materiau.vm-cardmedium .field-name-body.columnized .column-switcher.prev-column, article.node-breve.vm-cardmedium .field-name-field-description.columnized .column-switcher.prev-column, article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher.prev-column { cursor: w-resize; } -article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column-switcher.next-column, -article.node-breve.vm-cardmedium .field-name-field-description.columnized .column-switcher.next-column, -article.node-materiau.vm-cardmedium .field-name-body.columnized .column-switcher.next-column, -article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher.next-column { +/* line 165, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description.columnized .column-switcher.next-column, article.node-materiau.vm-cardmedium .field-name-body.columnized .column-switcher.next-column, article.node-breve.vm-cardmedium .field-name-field-description.columnized .column-switcher.next-column, article.node-breve.vm-cardmedium .field-name-body.columnized .column-switcher.next-column { cursor: e-resize; } -article.node-materiau.vm-cardmedium .field-name-field-description .column > *, -article.node-breve.vm-cardmedium .field-name-field-description .column > *, -article.node-materiau.vm-cardmedium .field-name-body .column > *, -article.node-breve.vm-cardmedium .field-name-body .column > * { +/* line 1395, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-description .column > *, article.node-materiau.vm-cardmedium .field-name-body .column > *, article.node-breve.vm-cardmedium .field-name-field-description .column > *, article.node-breve.vm-cardmedium .field-name-body .column > * { padding-right: 25px; } -article.node-materiau.vm-cardmedium .column-wrapper, -article.node-breve.vm-cardmedium .column-wrapper { +/* line 1399, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .column-wrapper, article.node-breve.vm-cardmedium .column-wrapper { padding: 5px; } -article.node-materiau.vm-cardmedium .column-wrapper.columnized, -article.node-breve.vm-cardmedium .column-wrapper.columnized { +/* line 155, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .column-wrapper.columnized, article.node-breve.vm-cardmedium .column-wrapper.columnized { padding: 0; -webkit-transition: margin-left 0.3s ease-out; - -moz-transition: margin-left 0.3s ease-out; - -o-transition: margin-left 0.3s ease-out; - transition: margin-left 0.3s ease-out; + transition: margin-left 0.3s ease-out; } -article.node-materiau.vm-cardmedium .column-wrapper.columnized .column > *, -article.node-breve.vm-cardmedium .column-wrapper.columnized .column > * { +/* line 157, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .column-wrapper.columnized .column > *, article.node-breve.vm-cardmedium .column-wrapper.columnized .column > * { padding: 5px; } -article.node-materiau.vm-cardmedium .column-wrapper.columnized .column-switcher, -article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher { +/* line 159, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .column-wrapper.columnized .column-switcher, article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher { display: inline-block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; color: #fff; background-color: #3e3e3e; @@ -7932,120 +5410,97 @@ article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher { line-height: 0.5; font-weight: normal; } -article.node-materiau.vm-cardmedium .column-wrapper.columnized .column-switcher.prev-column, -article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher.prev-column { +/* line 164, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .column-wrapper.columnized .column-switcher.prev-column, article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher.prev-column { cursor: w-resize; } -article.node-materiau.vm-cardmedium .column-wrapper.columnized .column-switcher.next-column, -article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher.next-column { +/* line 165, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .column-wrapper.columnized .column-switcher.next-column, article.node-breve.vm-cardmedium .column-wrapper.columnized .column-switcher.next-column { cursor: e-resize; } -article.node-materiau.vm-cardmedium .field-name-field-company-fab, -article.node-breve.vm-cardmedium .field-name-field-company-fab, -article.node-materiau.vm-cardmedium .field-name-field-company-distrib, -article.node-breve.vm-cardmedium .field-name-field-company-distrib { +/* line 1402, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-company-fab, article.node-materiau.vm-cardmedium .field-name-field-company-distrib, article.node-breve.vm-cardmedium .field-name-field-company-fab, article.node-breve.vm-cardmedium .field-name-field-company-distrib { font-size: 12px; padding: 5px; font-weight: 300; } -article.node-materiau.vm-cardmedium .field-name-field-company-fab .field-label, -article.node-breve.vm-cardmedium .field-name-field-company-fab .field-label, -article.node-materiau.vm-cardmedium .field-name-field-company-distrib .field-label, -article.node-breve.vm-cardmedium .field-name-field-company-distrib .field-label { +/* line 1404, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-company-fab .field-label, article.node-materiau.vm-cardmedium .field-name-field-company-distrib .field-label, article.node-breve.vm-cardmedium .field-name-field-company-fab .field-label, article.node-breve.vm-cardmedium .field-name-field-company-distrib .field-label { font-size: 10px; text-transform: lowercase; margin: 0; } -article.node-materiau.vm-cardmedium .field-name-field-company-fab .field-name-field-tode-company, -article.node-breve.vm-cardmedium .field-name-field-company-fab .field-name-field-tode-company, -article.node-materiau.vm-cardmedium .field-name-field-company-distrib .field-name-field-tode-company, -article.node-breve.vm-cardmedium .field-name-field-company-distrib .field-name-field-tode-company { +/* line 1405, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-company-fab .field-name-field-tode-company, article.node-materiau.vm-cardmedium .field-name-field-company-distrib .field-name-field-tode-company, article.node-breve.vm-cardmedium .field-name-field-company-fab .field-name-field-tode-company, article.node-breve.vm-cardmedium .field-name-field-company-distrib .field-name-field-tode-company { font-size: 14px; } -article.node-materiau.vm-cardmedium .field-name-field-materiau-ref, -article.node-breve.vm-cardmedium .field-name-field-materiau-ref, -article.node-materiau.vm-cardmedium .field-name-field-source, -article.node-breve.vm-cardmedium .field-name-field-source, -article.node-materiau.vm-cardmedium .field-name-field-attachments, -article.node-breve.vm-cardmedium .field-name-field-attachments { +/* line 1409, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-materiau-ref, article.node-materiau.vm-cardmedium .field-name-field-source, article.node-materiau.vm-cardmedium .field-name-field-attachments, article.node-breve.vm-cardmedium .field-name-field-materiau-ref, article.node-breve.vm-cardmedium .field-name-field-source, article.node-breve.vm-cardmedium .field-name-field-attachments { font-size: 12px; padding: 5px; font-weight: 300; } -article.node-materiau.vm-cardmedium .field-name-field-materiau-ref a, -article.node-breve.vm-cardmedium .field-name-field-materiau-ref a, -article.node-materiau.vm-cardmedium .field-name-field-source a, -article.node-breve.vm-cardmedium .field-name-field-source a, -article.node-materiau.vm-cardmedium .field-name-field-attachments a, -article.node-breve.vm-cardmedium .field-name-field-attachments a { +/* line 1411, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-name-field-materiau-ref a, article.node-materiau.vm-cardmedium .field-name-field-source a, article.node-materiau.vm-cardmedium .field-name-field-attachments a, article.node-breve.vm-cardmedium .field-name-field-materiau-ref a, article.node-breve.vm-cardmedium .field-name-field-source a, article.node-breve.vm-cardmedium .field-name-field-attachments a { color: #000; } -article.node-materiau.vm-cardmedium .field-label, -article.node-breve.vm-cardmedium .field-label { +/* line 1413, ../scss/styles.scss */ +article.node-materiau.vm-cardmedium .field-label, article.node-breve.vm-cardmedium .field-label { font-weight: 900; margin: 1em 0 0.5em; } -.no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav, -.no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav { +/* line 1415, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav, .no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav { visibility: hidden; } -.no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav > *, -.no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav > * { +/* line 118, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav > *, .no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav > * { margin-top: -100000px; } -.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav, -.csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 121, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav, .csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav { opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } -.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav > *, -.csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav > * { +/* line 124, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) nav.nav > *, .csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) nav.nav > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } -.no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow, -.no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow { +/* line 1417, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow, .no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow { visibility: hidden; } -.no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow > *, -.no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow > * { +/* line 118, ../scss/styles.scss */ +.no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow > *, .no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow > * { margin-top: -100000px; } -.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow, -.csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 121, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow, .csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow { opacity: 0; - -webkit-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -moz-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - -o-transition: visibility 0s 0.3s, opacity 0.3s ease-out; - transition: visibility 0s 0.3s, opacity 0.3s ease-out; + -webkit-transition: visibility 0s 0.3s; + transition: visibility 0s 0.3s; } -.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow > *, -.csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow > * { +/* line 124, ../scss/styles.scss */ +.csstransition .no-touch article.node-materiau.vm-cardmedium:not(.focused) div.workflow > *, .csstransition .no-touch article.node-breve.vm-cardmedium:not(.focused) div.workflow > * { -webkit-transition: margin-top 0s 0.3s; - -moz-transition: margin-top 0s 0.3s; - -o-transition: margin-top 0s 0.3s; - transition: margin-top 0s 0.3s; + transition: margin-top 0s 0.3s; } -.ie8 article.node-materiau.vm-cardmedium nav.nav, -.ie8 article.node-breve.vm-cardmedium nav.nav { - background: #ffffff; +/* line 1419, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardmedium nav.nav, .ie8 article.node-breve.vm-cardmedium nav.nav { + background: #FFF; } -/** CARD BIG */ -article.node-materiau.vm-cardbig, -article.node-breve.vm-cardbig { + +/* + _____ _____ _____ ____ _____ _____ _____ +| | _ | __ | \ | __ | | __| +| --| | -| | | | __ -|- -| | | +|_____|__|__|__|__|____/ |_____|_____|_____| + +*/ +/* line 1429, ../scss/styles.scss */ +article.node-materiau.vm-cardbig, article.node-breve.vm-cardbig { width: 425px; height: 610px; display: moz-inline-stack; @@ -8055,70 +5510,48 @@ article.node-breve.vm-cardbig { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; } -article.node-materiau.vm-cardbig > div.side, -article.node-breve.vm-cardbig > div.side { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; +/* line 1092, ../scss/styles.scss */ +article.node-materiau.vm-cardbig > div.side, article.node-breve.vm-cardbig > div.side { border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardbig.focused, -article.node-breve.vm-cardbig.focused { - -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); - -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); +/* line 1097, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.focused, article.node-breve.vm-cardbig.focused { box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); } -article.node-materiau.vm-cardbig.just-added, -article.node-breve.vm-cardbig.just-added { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 1099, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.just-added, article.node-breve.vm-cardbig.just-added { opacity: 0; } -article.node-materiau.vm-cardbig.associated, -article.node-breve.vm-cardbig.associated { +/* line 1101, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.associated, article.node-breve.vm-cardbig.associated { -webkit-transition: margin 0.3s ease-out; - -moz-transition: margin 0.3s ease-out; - -o-transition: margin 0.3s ease-out; - transition: margin 0.3s ease-out; + transition: margin 0.3s ease-out; } -article.node-materiau.vm-cardbig.associated.just-added, -article.node-breve.vm-cardbig.associated.just-added { +/* line 1103, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.associated.just-added, article.node-breve.vm-cardbig.associated.just-added { margin-left: -425px; margin-right: 425px; } -.modal-content article.node-materiau.vm-cardbig.associated, -.modal-content article.node-breve.vm-cardbig.associated { +/* line 1105, ../scss/styles.scss */ +.modal-content article.node-materiau.vm-cardbig.associated, .modal-content article.node-breve.vm-cardbig.associated { position: absolute; top: 0; left: 0; z-index: 999; } -article.node-materiau.vm-cardbig.removed, -article.node-breve.vm-cardbig.removed { +/* line 1113, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.removed, article.node-breve.vm-cardbig.removed { -webkit-transition: width 0.3s ease-out; - -moz-transition: width 0.3s ease-out; - -o-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; + transition: width 0.3s ease-out; width: 0; padding-left: 0; padding-right: 0; @@ -8126,59 +5559,51 @@ article.node-breve.vm-cardbig.removed { margin-left: 0; overflow: hidden; } -article.node-materiau.vm-cardbig nav.nav, -article.node-breve.vm-cardbig nav.nav { +/* line 1123, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav, article.node-breve.vm-cardbig nav.nav { position: absolute; top: 0; right: 0; z-index: 11; padding: 5px 0; - -webkit-border-radius: 0 5px 0 3px; - -moz-border-radius: 0 5px 0 3px; border-radius: 0 5px 0 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardbig nav.nav a, -article.node-breve.vm-cardbig nav.nav a { +/* line 1135, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav a, article.node-breve.vm-cardbig nav.nav a { color: #000; } -article.node-materiau.vm-cardbig nav.nav ul, -article.node-breve.vm-cardbig nav.nav ul { - background-color: #ffffff; +/* line 1136, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul, article.node-breve.vm-cardbig nav.nav ul { background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; } -article.node-materiau.vm-cardbig nav.nav span.op, -article.node-breve.vm-cardbig nav.nav span.op { +/* line 1137, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav span.op, article.node-breve.vm-cardbig nav.nav span.op { font-weight: 900; font-size: 14px; } -article.node-materiau.vm-cardbig nav.nav ul, -article.node-breve.vm-cardbig nav.nav ul { +/* line 1139, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul, article.node-breve.vm-cardbig nav.nav ul { padding: 0; margin: 0; } -article.node-materiau.vm-cardbig nav.nav section, -article.node-breve.vm-cardbig nav.nav section { +/* line 1141, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav section, article.node-breve.vm-cardbig nav.nav section { position: relative; } -article.node-materiau.vm-cardbig nav.nav section > i, -article.node-breve.vm-cardbig nav.nav section > i { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav section > i, article.node-breve.vm-cardbig nav.nav section > i { margin: 0 5px; } -article.node-materiau.vm-cardbig nav.nav section > i:hover, -article.node-breve.vm-cardbig nav.nav section > i:hover { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav section > i:hover, article.node-breve.vm-cardbig nav.nav section > i:hover { cursor: pointer; } -article.node-materiau.vm-cardbig nav.nav ul, -article.node-breve.vm-cardbig nav.nav ul { +/* line 1147, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul, article.node-breve.vm-cardbig nav.nav ul { position: absolute; right: 0; top: 0; @@ -8186,18 +5611,12 @@ article.node-breve.vm-cardbig nav.nav ul { min-width: 80px; padding: 0; display: block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardbig nav.nav ul li, -article.node-breve.vm-cardbig nav.nav ul li { +/* line 1151, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul li, article.node-breve.vm-cardbig nav.nav ul li { padding: 0; margin: 0; line-height: 1; @@ -8205,25 +5624,23 @@ article.node-breve.vm-cardbig nav.nav ul li { height: 0; overflow: hidden; -webkit-transition: height 0.2s ease-out; - -moz-transition: height 0.2s ease-out; - -o-transition: height 0.2s ease-out; - transition: height 0.2s ease-out; + transition: height 0.2s ease-out; } -article.node-materiau.vm-cardbig nav.nav ul li a, -article.node-breve.vm-cardbig nav.nav ul li a { +/* line 1155, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul li a, article.node-breve.vm-cardbig nav.nav ul li a { display: block; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links { +/* line 1158, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links { width: 160px; font-size: 0; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links > *, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links > * { +/* line 1161, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links > *, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links > * { font-size: 11px; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li { +/* line 1166, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -8233,78 +5650,68 @@ article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li { max-width: 98%; padding-left: 2px; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li a, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li a { +/* line 1168, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li a, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li a { color: #a6a6a6; -webkit-transition: color 0.2s ease-out; - -moz-transition: color 0.2s ease-out; - -o-transition: color 0.2s ease-out; - transition: color 0.2s ease-out; + transition: color 0.2s ease-out; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li a:hover, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li a:hover, -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li a.unflag-action, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li a.unflag-action { +/* line 1170, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li a:hover, article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li a.unflag-action, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li a:hover, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li a.unflag-action { color: #000; text-decoration: none; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create { +/* line 1174, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create { display: block; width: 100%; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { +/* line 1176, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { margin-top: 1px; padding-top: 1px; border-top: 1px solid #e6e6e6; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create a, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create a { +/* line 1177, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create a, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.flag-lists-create a { color: #000; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading { - background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; +/* line 1179, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading { + background: transparent url("../img/ajax-loader.gif") no-repeat 98% center; } -article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading a, -article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading a { +/* line 1180, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading a, article.node-breve.vm-cardbig nav.nav ul.flag-lists-entity-links li.loading a { visibility: hidden; } -.ie8 article.node-materiau.vm-cardbig nav.nav ul, -.ie8 article.node-breve.vm-cardbig nav.nav ul { +/* line 1185, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardbig nav.nav ul, .ie8 article.node-breve.vm-cardbig nav.nav ul { background: #FFF; } -article.node-materiau.vm-cardbig nav.nav section:hover ul, -article.node-breve.vm-cardbig nav.nav section:hover ul { +/* line 1190, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav section:hover ul, article.node-breve.vm-cardbig nav.nav section:hover ul { padding: 5px 5px; } -article.node-materiau.vm-cardbig nav.nav section:hover ul li, -article.node-breve.vm-cardbig nav.nav section:hover ul li { +/* line 1192, ../scss/styles.scss */ +article.node-materiau.vm-cardbig nav.nav section:hover ul li, article.node-breve.vm-cardbig nav.nav section:hover ul li { height: 17px; } -article.node-materiau.vm-cardbig div.workflow, -article.node-breve.vm-cardbig div.workflow { +/* line 1205, ../scss/styles.scss */ +article.node-materiau.vm-cardbig div.workflow, article.node-breve.vm-cardbig div.workflow { position: absolute; top: 0; left: 0; z-index: 11; padding: 5px; - -webkit-border-radius: 5px 0 3px 0; - -moz-border-radius: 5px 0 3px 0; border-radius: 5px 0 3px 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; vertical-align: top; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardbig div.workflow span, -article.node-breve.vm-cardbig div.workflow span { +/* line 1211, ../scss/styles.scss */ +article.node-materiau.vm-cardbig div.workflow span, article.node-breve.vm-cardbig div.workflow span { padding: 3px 0 0 4px; display: moz-inline-stack; display: inline-block; @@ -8312,97 +5719,74 @@ article.node-breve.vm-cardbig div.workflow span { zoom: 1; *display: inline; } -article.node-materiau.vm-cardbig .field-name-field-description .upgrade, -article.node-breve.vm-cardbig .field-name-field-description .upgrade { +/* line 1214, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description .upgrade, article.node-breve.vm-cardbig .field-name-field-description .upgrade { font-size: 12px; padding-top: 4em; margin-top: -4.5em; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #ffffff 4em); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, #fff 4em); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #fff 4em); position: relative; } -article.node-materiau.vm-cardbig .side.oops p, -article.node-breve.vm-cardbig .side.oops p, -article.node-materiau.vm-cardbig .side .upgrade p, -article.node-breve.vm-cardbig .side .upgrade p { +/* line 1222, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side.oops p, article.node-materiau.vm-cardbig .side .upgrade p, article.node-breve.vm-cardbig .side.oops p, article.node-breve.vm-cardbig .side .upgrade p { padding: 10px; font-size: 12px; } -article.node-materiau.vm-cardbig .side.oops p a, -article.node-breve.vm-cardbig .side.oops p a, -article.node-materiau.vm-cardbig .side .upgrade p a, -article.node-breve.vm-cardbig .side .upgrade p a { +/* line 1224, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side.oops p a, article.node-materiau.vm-cardbig .side .upgrade p a, article.node-breve.vm-cardbig .side.oops p a, article.node-breve.vm-cardbig .side .upgrade p a { display: block; margin: 10px 0; font-size: 18px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -article.node-materiau.vm-cardbig .side.oops p a:hover, -article.node-breve.vm-cardbig .side.oops p a:hover, -article.node-materiau.vm-cardbig .side .upgrade p a:hover, -article.node-breve.vm-cardbig .side .upgrade p a:hover, -article.node-materiau.vm-cardbig .side.oops p a:focus, -article.node-breve.vm-cardbig .side.oops p a:focus, -article.node-materiau.vm-cardbig .side .upgrade p a:focus, -article.node-breve.vm-cardbig .side .upgrade p a:focus { +/* line 66, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side.oops p a:hover, article.node-materiau.vm-cardbig .side.oops p a:focus, article.node-materiau.vm-cardbig .side .upgrade p a:hover, article.node-materiau.vm-cardbig .side .upgrade p a:focus, article.node-breve.vm-cardbig .side.oops p a:hover, article.node-breve.vm-cardbig .side.oops p a:focus, article.node-breve.vm-cardbig .side .upgrade p a:hover, article.node-breve.vm-cardbig .side .upgrade p a:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -article.node-materiau.vm-cardbig .side.oops p a:active, -article.node-breve.vm-cardbig .side.oops p a:active, -article.node-materiau.vm-cardbig .side .upgrade p a:active, -article.node-breve.vm-cardbig .side .upgrade p a:active { +/* line 69, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side.oops p a:active, article.node-materiau.vm-cardbig .side .upgrade p a:active, article.node-breve.vm-cardbig .side.oops p a:active, article.node-breve.vm-cardbig .side .upgrade p a:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardbig .side, -article.node-breve.vm-cardbig .side { +/* line 1432, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side, article.node-breve.vm-cardbig .side { position: absolute; width: 100%; height: 100%; top: 0; left: 0; - background-color: #ffffff; + background-color: #fff; height: 270px; top: 340px; cursor: pointer; } -article.node-materiau.vm-cardbig .side:nth-child(2), -article.node-breve.vm-cardbig .side:nth-child(2) { +/* line 1434, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side:nth-child(2), article.node-breve.vm-cardbig .side:nth-child(2) { z-index: 1; } -article.node-materiau.vm-cardbig .group-side1, -article.node-breve.vm-cardbig .group-side1 { +/* line 1437, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-side1, article.node-breve.vm-cardbig .group-side1 { position: relative; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardbig .group-header, -article.node-breve.vm-cardbig .group-header { +/* line 1439, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-header, article.node-breve.vm-cardbig .group-header { position: absolute; bottom: 0; z-index: 2; @@ -8411,29 +5795,21 @@ article.node-breve.vm-cardbig .group-header { font-size: 20px; font-weight: 300; line-height: 1.1; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.8); - *background-color: #ffffff; text-shadow: 0 0 4px rgba(255, 255, 255, 0.4); - -webkit-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -moz-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -o-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; + -webkit-transition: background-color 0.2s ease-out; + transition: background-color 0.2s ease-out; } -article.node-materiau.vm-cardbig .group-header .field-name-title-field, -article.node-breve.vm-cardbig .group-header .field-name-title-field { +/* line 1443, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-header .field-name-title-field, article.node-breve.vm-cardbig .group-header .field-name-title-field { font-weight: 700; } -article.node-materiau.vm-cardbig .group-header .field-name-field-nature-titre, -article.node-breve.vm-cardbig .group-header .field-name-field-nature-titre { +/* line 1444, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-header .field-name-field-nature-titre, article.node-breve.vm-cardbig .group-header .field-name-field-nature-titre { font-size: 14px; } -article.node-materiau.vm-cardbig .group-header .field-name-field-reference-materio, -article.node-breve.vm-cardbig .group-header .field-name-field-reference-materio, -article.node-materiau.vm-cardbig .group-header .field-name-field-localisation, -article.node-breve.vm-cardbig .group-header .field-name-field-localisation, -article.node-materiau.vm-cardbig .group-header .field-name-field-authored-on, -article.node-breve.vm-cardbig .group-header .field-name-field-authored-on { +/* line 1446, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-header .field-name-field-reference-materio, article.node-materiau.vm-cardbig .group-header .field-name-field-localisation, article.node-materiau.vm-cardbig .group-header .field-name-field-authored-on, article.node-breve.vm-cardbig .group-header .field-name-field-reference-materio, article.node-breve.vm-cardbig .group-header .field-name-field-localisation, article.node-breve.vm-cardbig .group-header .field-name-field-authored-on { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -8443,94 +5819,76 @@ article.node-breve.vm-cardbig .group-header .field-name-field-authored-on { vertical-align: bottom; width: 48%; } -article.node-materiau.vm-cardbig .group-header .field-name-field-localisation, -article.node-breve.vm-cardbig .group-header .field-name-field-localisation { +/* line 1447, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-header .field-name-field-localisation, article.node-breve.vm-cardbig .group-header .field-name-field-localisation { text-align: right; } -.ie8 article.node-materiau.vm-cardbig .group-header, -.ie8 article.node-breve.vm-cardbig .group-header { +/* line 1448, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardbig .group-header, .ie8 article.node-breve.vm-cardbig .group-header { background: #fff; font-color: #000; line-height: 1em; padding: 20px; border-bottom: 1px solid #C6C6C6; } -article.node-materiau.vm-cardbig.node-breve .group-header, -article.node-breve.vm-cardbig.node-breve .group-header { +/* line 1452, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.node-breve .group-header, article.node-breve.vm-cardbig.node-breve .group-header { color: #fff; - background-color: #000000; background-color: rgba(0, 0, 0, 0.7); - *background-color: #000000; text-shadow: 0 0 4px rgba(0, 0, 0, 0.4); - -webkit-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -moz-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -o-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; + -webkit-transition: background-color 0.2s ease-out; + transition: background-color 0.2s ease-out; } -article.node-materiau.vm-cardbig.node-breve .group-header .field-name-field-authored-on, -article.node-breve.vm-cardbig.node-breve .group-header .field-name-field-authored-on { +/* line 1454, ../scss/styles.scss */ +article.node-materiau.vm-cardbig.node-breve .group-header .field-name-field-authored-on, article.node-breve.vm-cardbig.node-breve .group-header .field-name-field-authored-on { font-size: 12px; font-weight: 500; } -.ie8 article.node-materiau.vm-cardbig.node-breve .group-header, -.ie8 article.node-breve.vm-cardbig.node-breve .group-header { +/* line 1455, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardbig.node-breve .group-header, .ie8 article.node-breve.vm-cardbig.node-breve .group-header { background: #000; font-color: #fff; line-height: 1em; padding: 20px; } -article.node-materiau.vm-cardbig .group-images, -article.node-breve.vm-cardbig .group-images { +/* line 1458, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-images, article.node-breve.vm-cardbig .group-images { position: relative; z-index: 1; - background-color: #ffffff; + background-color: #fff; height: auto; } -article.node-materiau.vm-cardbig .group-images figure, -article.node-breve.vm-cardbig .group-images figure { +/* line 77, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-images figure, article.node-breve.vm-cardbig .group-images figure { position: absolute; top: 0; left: 0; } -article.node-materiau.vm-cardbig .group-images figure:first-child, -article.node-breve.vm-cardbig .group-images figure:first-child { +/* line 79, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .group-images figure:first-child, article.node-breve.vm-cardbig .group-images figure:first-child { position: relative; z-index: 1; } -article.node-materiau.vm-cardbig .field-name-field-description, -article.node-breve.vm-cardbig .field-name-field-description, -article.node-materiau.vm-cardbig .field-name-body, -article.node-breve.vm-cardbig .field-name-body { +/* line 1461, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description, article.node-materiau.vm-cardbig .field-name-body, article.node-breve.vm-cardbig .field-name-field-description, article.node-breve.vm-cardbig .field-name-body { font-size: 12px; font-weight: 300; padding: 10px; } -article.node-materiau.vm-cardbig .field-name-field-description.columnized, -article.node-breve.vm-cardbig .field-name-field-description.columnized, -article.node-materiau.vm-cardbig .field-name-body.columnized, -article.node-breve.vm-cardbig .field-name-body.columnized { +/* line 155, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description.columnized, article.node-materiau.vm-cardbig .field-name-body.columnized, article.node-breve.vm-cardbig .field-name-field-description.columnized, article.node-breve.vm-cardbig .field-name-body.columnized { padding: 0; -webkit-transition: margin-left 0.3s ease-out; - -moz-transition: margin-left 0.3s ease-out; - -o-transition: margin-left 0.3s ease-out; - transition: margin-left 0.3s ease-out; + transition: margin-left 0.3s ease-out; } -article.node-materiau.vm-cardbig .field-name-field-description.columnized .column > *, -article.node-breve.vm-cardbig .field-name-field-description.columnized .column > *, -article.node-materiau.vm-cardbig .field-name-body.columnized .column > *, -article.node-breve.vm-cardbig .field-name-body.columnized .column > * { +/* line 157, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description.columnized .column > *, article.node-materiau.vm-cardbig .field-name-body.columnized .column > *, article.node-breve.vm-cardbig .field-name-field-description.columnized .column > *, article.node-breve.vm-cardbig .field-name-body.columnized .column > * { padding: 10px; } -article.node-materiau.vm-cardbig .field-name-field-description.columnized .column-switcher, -article.node-breve.vm-cardbig .field-name-field-description.columnized .column-switcher, -article.node-materiau.vm-cardbig .field-name-body.columnized .column-switcher, -article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher { +/* line 159, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description.columnized .column-switcher, article.node-materiau.vm-cardbig .field-name-body.columnized .column-switcher, article.node-breve.vm-cardbig .field-name-field-description.columnized .column-switcher, article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher { display: inline-block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; color: #fff; background-color: #3e3e3e; @@ -8541,42 +5899,32 @@ article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher { line-height: 0.5; font-weight: normal; } -article.node-materiau.vm-cardbig .field-name-field-description.columnized .column-switcher.prev-column, -article.node-breve.vm-cardbig .field-name-field-description.columnized .column-switcher.prev-column, -article.node-materiau.vm-cardbig .field-name-body.columnized .column-switcher.prev-column, -article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher.prev-column { +/* line 164, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description.columnized .column-switcher.prev-column, article.node-materiau.vm-cardbig .field-name-body.columnized .column-switcher.prev-column, article.node-breve.vm-cardbig .field-name-field-description.columnized .column-switcher.prev-column, article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher.prev-column { cursor: w-resize; } -article.node-materiau.vm-cardbig .field-name-field-description.columnized .column-switcher.next-column, -article.node-breve.vm-cardbig .field-name-field-description.columnized .column-switcher.next-column, -article.node-materiau.vm-cardbig .field-name-body.columnized .column-switcher.next-column, -article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher.next-column { +/* line 165, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-description.columnized .column-switcher.next-column, article.node-materiau.vm-cardbig .field-name-body.columnized .column-switcher.next-column, article.node-breve.vm-cardbig .field-name-field-description.columnized .column-switcher.next-column, article.node-breve.vm-cardbig .field-name-body.columnized .column-switcher.next-column { cursor: e-resize; } -article.node-materiau.vm-cardbig .column-wrapper, -article.node-breve.vm-cardbig .column-wrapper { +/* line 1465, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .column-wrapper, article.node-breve.vm-cardbig .column-wrapper { padding: 10px; } -article.node-materiau.vm-cardbig .column-wrapper.columnized, -article.node-breve.vm-cardbig .column-wrapper.columnized { +/* line 155, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .column-wrapper.columnized, article.node-breve.vm-cardbig .column-wrapper.columnized { padding: 0; -webkit-transition: margin-left 0.3s ease-out; - -moz-transition: margin-left 0.3s ease-out; - -o-transition: margin-left 0.3s ease-out; - transition: margin-left 0.3s ease-out; + transition: margin-left 0.3s ease-out; } -article.node-materiau.vm-cardbig .column-wrapper.columnized .column > *, -article.node-breve.vm-cardbig .column-wrapper.columnized .column > * { +/* line 157, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .column-wrapper.columnized .column > *, article.node-breve.vm-cardbig .column-wrapper.columnized .column > * { padding: 10px; } -article.node-materiau.vm-cardbig .column-wrapper.columnized .column-switcher, -article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher { +/* line 159, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .column-wrapper.columnized .column-switcher, article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher { display: inline-block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; color: #fff; background-color: #3e3e3e; @@ -8587,95 +5935,78 @@ article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher { line-height: 0.5; font-weight: normal; } -article.node-materiau.vm-cardbig .column-wrapper.columnized .column-switcher.prev-column, -article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher.prev-column { +/* line 164, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .column-wrapper.columnized .column-switcher.prev-column, article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher.prev-column { cursor: w-resize; } -article.node-materiau.vm-cardbig .column-wrapper.columnized .column-switcher.next-column, -article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher.next-column { +/* line 165, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .column-wrapper.columnized .column-switcher.next-column, article.node-breve.vm-cardbig .column-wrapper.columnized .column-switcher.next-column { cursor: e-resize; } -article.node-materiau.vm-cardbig .field-name-field-company-fab, -article.node-breve.vm-cardbig .field-name-field-company-fab, -article.node-materiau.vm-cardbig .field-name-field-company-distrib, -article.node-breve.vm-cardbig .field-name-field-company-distrib { +/* line 1469, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-company-fab, article.node-materiau.vm-cardbig .field-name-field-company-distrib, article.node-breve.vm-cardbig .field-name-field-company-fab, article.node-breve.vm-cardbig .field-name-field-company-distrib { font-size: 12px; padding: 10px; font-weight: 300; } -article.node-materiau.vm-cardbig .field-name-field-company-fab .field-label, -article.node-breve.vm-cardbig .field-name-field-company-fab .field-label, -article.node-materiau.vm-cardbig .field-name-field-company-distrib .field-label, -article.node-breve.vm-cardbig .field-name-field-company-distrib .field-label { +/* line 1471, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-company-fab .field-label, article.node-materiau.vm-cardbig .field-name-field-company-distrib .field-label, article.node-breve.vm-cardbig .field-name-field-company-fab .field-label, article.node-breve.vm-cardbig .field-name-field-company-distrib .field-label { font-size: 10px; text-transform: lowercase; float: none; } -article.node-materiau.vm-cardbig .field-name-field-company-fab .field-name-field-tode-company, -article.node-breve.vm-cardbig .field-name-field-company-fab .field-name-field-tode-company, -article.node-materiau.vm-cardbig .field-name-field-company-distrib .field-name-field-tode-company, -article.node-breve.vm-cardbig .field-name-field-company-distrib .field-name-field-tode-company { +/* line 1472, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-company-fab .field-name-field-tode-company, article.node-materiau.vm-cardbig .field-name-field-company-distrib .field-name-field-tode-company, article.node-breve.vm-cardbig .field-name-field-company-fab .field-name-field-tode-company, article.node-breve.vm-cardbig .field-name-field-company-distrib .field-name-field-tode-company { font-size: 14px; } -article.node-materiau.vm-cardbig .field-name-field-materiau-ref, -article.node-breve.vm-cardbig .field-name-field-materiau-ref, -article.node-materiau.vm-cardbig .field-name-field-source, -article.node-breve.vm-cardbig .field-name-field-source, -article.node-materiau.vm-cardbig .field-name-field-attachments, -article.node-breve.vm-cardbig .field-name-field-attachments { +/* line 1476, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-materiau-ref, article.node-materiau.vm-cardbig .field-name-field-source, article.node-materiau.vm-cardbig .field-name-field-attachments, article.node-breve.vm-cardbig .field-name-field-materiau-ref, article.node-breve.vm-cardbig .field-name-field-source, article.node-breve.vm-cardbig .field-name-field-attachments { font-size: 12px; padding: 10px; font-weight: 300; } -article.node-materiau.vm-cardbig .field-name-field-materiau-ref a, -article.node-breve.vm-cardbig .field-name-field-materiau-ref a, -article.node-materiau.vm-cardbig .field-name-field-source a, -article.node-breve.vm-cardbig .field-name-field-source a, -article.node-materiau.vm-cardbig .field-name-field-attachments a, -article.node-breve.vm-cardbig .field-name-field-attachments a { +/* line 1477, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-name-field-materiau-ref a, article.node-materiau.vm-cardbig .field-name-field-source a, article.node-materiau.vm-cardbig .field-name-field-attachments a, article.node-breve.vm-cardbig .field-name-field-materiau-ref a, article.node-breve.vm-cardbig .field-name-field-source a, article.node-breve.vm-cardbig .field-name-field-attachments a { color: #000; } -article.node-materiau.vm-cardbig .field-label, -article.node-breve.vm-cardbig .field-label { +/* line 1479, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .field-label, article.node-breve.vm-cardbig .field-label { font-weight: 900; margin: 0 0 0.5em; } -.ie8 article.node-materiau.vm-cardbig nav.nav, -.ie8 article.node-breve.vm-cardbig nav.nav { - background: #ffffff; +/* line 1483, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardbig nav.nav, .ie8 article.node-breve.vm-cardbig nav.nav { + background: #FFF; } -article.node-materiau.vm-cardbig .side.oops p, -article.node-breve.vm-cardbig .side.oops p, -article.node-materiau.vm-cardbig .side .upgrade p, -article.node-breve.vm-cardbig .side .upgrade p { +/* line 1486, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side.oops p, article.node-materiau.vm-cardbig .side .upgrade p, article.node-breve.vm-cardbig .side.oops p, article.node-breve.vm-cardbig .side .upgrade p { padding: 3em; } -article.node-materiau.vm-cardbig .side.oops p a, -article.node-breve.vm-cardbig .side.oops p a, -article.node-materiau.vm-cardbig .side .upgrade p a, -article.node-breve.vm-cardbig .side .upgrade p a { +/* line 1488, ../scss/styles.scss */ +article.node-materiau.vm-cardbig .side.oops p a, article.node-materiau.vm-cardbig .side .upgrade p a, article.node-breve.vm-cardbig .side.oops p a, article.node-breve.vm-cardbig .side .upgrade p a { border: 2px solid #eee; - background-color: #eeeeee; + background-color: #eee; color: #fff; -webkit-transition: border 0.3s ease-out; - -moz-transition: border 0.3s ease-out; - -o-transition: border 0.3s ease-out; - transition: border 0.3s ease-out; + transition: border 0.3s ease-out; -webkit-transition: background-color 0.3s ease-out; - -moz-transition: background-color 0.3s ease-out; - -o-transition: background-color 0.3s ease-out; - transition: background-color 0.3s ease-out; + transition: background-color 0.3s ease-out; } -article.node-materiau.vm-cardbig:hover .side.oops p a, -article.node-breve.vm-cardbig:hover .side.oops p a, -article.node-materiau.vm-cardbig:hover .side .upgrade p a, -article.node-breve.vm-cardbig:hover .side .upgrade p a { +/* line 1495, ../scss/styles.scss */ +article.node-materiau.vm-cardbig:hover .side.oops p a, article.node-materiau.vm-cardbig:hover .side .upgrade p a, article.node-breve.vm-cardbig:hover .side.oops p a, article.node-breve.vm-cardbig:hover .side .upgrade p a { border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; } -/** CARD FULL */ -article.node-materiau.vm-cardfull, -article.node-breve.vm-cardfull { + +/* + _____ _____ _____ ____ _____ _____ __ __ +| | _ | __ | \ | __| | | | | | +| --| | -| | | | __| | | |__| |__ +|_____|__|__|__|__|____/ |__| |_____|_____|_____| + +*/ +/* line 1508, ../scss/styles.scss */ +article.node-materiau.vm-cardfull, article.node-breve.vm-cardfull { width: 850px; height: 610px; display: moz-inline-stack; @@ -8685,71 +6016,49 @@ article.node-breve.vm-cardfull { *display: inline; position: relative; margin: 7px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -webkit-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -moz-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - -o-transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; - transition: box-shadow 0.3s ease-out, opacity 0.3s ease-out; + -webkit-transition: box-shadow 0.3s ease-out; + transition: box-shadow 0.3s ease-out; font-size: 0px; } -article.node-materiau.vm-cardfull > div.side, -article.node-breve.vm-cardfull > div.side { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; +/* line 1092, ../scss/styles.scss */ +article.node-materiau.vm-cardfull > div.side, article.node-breve.vm-cardfull > div.side { border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; overflow: hidden; } -article.node-materiau.vm-cardfull.focused, -article.node-breve.vm-cardfull.focused { - -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); - -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); +/* line 1097, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.focused, article.node-breve.vm-cardfull.focused { box-shadow: 0 0 7px rgba(0, 0, 0, 0.9); } -article.node-materiau.vm-cardfull.just-added, -article.node-breve.vm-cardfull.just-added { - filter: alpha(opacity=0); - -webkit-opacity: 0; - -khtml-opacity: 0; - -moz-opacity: 0; +/* line 1099, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.just-added, article.node-breve.vm-cardfull.just-added { opacity: 0; } -article.node-materiau.vm-cardfull.associated, -article.node-breve.vm-cardfull.associated { +/* line 1101, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.associated, article.node-breve.vm-cardfull.associated { -webkit-transition: margin 0.3s ease-out; - -moz-transition: margin 0.3s ease-out; - -o-transition: margin 0.3s ease-out; - transition: margin 0.3s ease-out; + transition: margin 0.3s ease-out; } -article.node-materiau.vm-cardfull.associated.just-added, -article.node-breve.vm-cardfull.associated.just-added { +/* line 1103, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.associated.just-added, article.node-breve.vm-cardfull.associated.just-added { margin-left: -850px; margin-right: 850px; } -.modal-content article.node-materiau.vm-cardfull.associated, -.modal-content article.node-breve.vm-cardfull.associated { +/* line 1105, ../scss/styles.scss */ +.modal-content article.node-materiau.vm-cardfull.associated, .modal-content article.node-breve.vm-cardfull.associated { position: absolute; top: 0; left: 0; z-index: 999; } -article.node-materiau.vm-cardfull.removed, -article.node-breve.vm-cardfull.removed { +/* line 1113, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.removed, article.node-breve.vm-cardfull.removed { -webkit-transition: width 0.3s ease-out; - -moz-transition: width 0.3s ease-out; - -o-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; + transition: width 0.3s ease-out; width: 0; padding-left: 0; padding-right: 0; @@ -8757,59 +6066,51 @@ article.node-breve.vm-cardfull.removed { margin-left: 0; overflow: hidden; } -article.node-materiau.vm-cardfull nav.nav, -article.node-breve.vm-cardfull nav.nav { +/* line 1123, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav, article.node-breve.vm-cardfull nav.nav { position: absolute; top: 0; right: 0; z-index: 11; padding: 5px 0; - -webkit-border-radius: 0 5px 0 3px; - -moz-border-radius: 0 5px 0 3px; border-radius: 0 5px 0 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardfull nav.nav a, -article.node-breve.vm-cardfull nav.nav a { +/* line 1135, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav a, article.node-breve.vm-cardfull nav.nav a { color: #000; } -article.node-materiau.vm-cardfull nav.nav ul, -article.node-breve.vm-cardfull nav.nav ul { - background-color: #ffffff; +/* line 1136, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul, article.node-breve.vm-cardfull nav.nav ul { background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; } -article.node-materiau.vm-cardfull nav.nav span.op, -article.node-breve.vm-cardfull nav.nav span.op { +/* line 1137, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav span.op, article.node-breve.vm-cardfull nav.nav span.op { font-weight: 900; font-size: 14px; } -article.node-materiau.vm-cardfull nav.nav ul, -article.node-breve.vm-cardfull nav.nav ul { +/* line 1139, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul, article.node-breve.vm-cardfull nav.nav ul { padding: 0; margin: 0; } -article.node-materiau.vm-cardfull nav.nav section, -article.node-breve.vm-cardfull nav.nav section { +/* line 1141, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav section, article.node-breve.vm-cardfull nav.nav section { position: relative; } -article.node-materiau.vm-cardfull nav.nav section > i, -article.node-breve.vm-cardfull nav.nav section > i { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav section > i, article.node-breve.vm-cardfull nav.nav section > i { margin: 0 5px; } -article.node-materiau.vm-cardfull nav.nav section > i:hover, -article.node-breve.vm-cardfull nav.nav section > i:hover { +/* line 1144, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav section > i:hover, article.node-breve.vm-cardfull nav.nav section > i:hover { cursor: pointer; } -article.node-materiau.vm-cardfull nav.nav ul, -article.node-breve.vm-cardfull nav.nav ul { +/* line 1147, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul, article.node-breve.vm-cardfull nav.nav ul { position: absolute; right: 0; top: 0; @@ -8817,18 +6118,12 @@ article.node-breve.vm-cardfull nav.nav ul { min-width: 80px; padding: 0; display: block; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardfull nav.nav ul li, -article.node-breve.vm-cardfull nav.nav ul li { +/* line 1151, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul li, article.node-breve.vm-cardfull nav.nav ul li { padding: 0; margin: 0; line-height: 1; @@ -8836,25 +6131,23 @@ article.node-breve.vm-cardfull nav.nav ul li { height: 0; overflow: hidden; -webkit-transition: height 0.2s ease-out; - -moz-transition: height 0.2s ease-out; - -o-transition: height 0.2s ease-out; - transition: height 0.2s ease-out; + transition: height 0.2s ease-out; } -article.node-materiau.vm-cardfull nav.nav ul li a, -article.node-breve.vm-cardfull nav.nav ul li a { +/* line 1155, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul li a, article.node-breve.vm-cardfull nav.nav ul li a { display: block; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links { +/* line 1158, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links { width: 160px; font-size: 0; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links > *, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links > * { +/* line 1161, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links > *, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links > * { font-size: 11px; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li { +/* line 1166, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -8864,78 +6157,68 @@ article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li { max-width: 98%; padding-left: 2px; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li a, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li a { +/* line 1168, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li a, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li a { color: #a6a6a6; -webkit-transition: color 0.2s ease-out; - -moz-transition: color 0.2s ease-out; - -o-transition: color 0.2s ease-out; - transition: color 0.2s ease-out; + transition: color 0.2s ease-out; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li a:hover, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li a:hover, -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li a.unflag-action, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li a.unflag-action { +/* line 1170, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li a:hover, article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li a.unflag-action, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li a:hover, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li a.unflag-action { color: #000; text-decoration: none; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create { +/* line 1174, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create { display: block; width: 100%; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { +/* line 1176, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create > *, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create > * { margin-top: 1px; padding-top: 1px; border-top: 1px solid #e6e6e6; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create a, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create a { +/* line 1177, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create a, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.flag-lists-create a { color: #000; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading { - background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; +/* line 1179, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading { + background: transparent url("../img/ajax-loader.gif") no-repeat 98% center; } -article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading a, -article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading a { +/* line 1180, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading a, article.node-breve.vm-cardfull nav.nav ul.flag-lists-entity-links li.loading a { visibility: hidden; } -.ie8 article.node-materiau.vm-cardfull nav.nav ul, -.ie8 article.node-breve.vm-cardfull nav.nav ul { +/* line 1185, ../scss/styles.scss */ +.ie8 article.node-materiau.vm-cardfull nav.nav ul, .ie8 article.node-breve.vm-cardfull nav.nav ul { background: #FFF; } -article.node-materiau.vm-cardfull nav.nav section:hover ul, -article.node-breve.vm-cardfull nav.nav section:hover ul { +/* line 1190, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav section:hover ul, article.node-breve.vm-cardfull nav.nav section:hover ul { padding: 5px 5px; } -article.node-materiau.vm-cardfull nav.nav section:hover ul li, -article.node-breve.vm-cardfull nav.nav section:hover ul li { +/* line 1192, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav section:hover ul li, article.node-breve.vm-cardfull nav.nav section:hover ul li { height: 17px; } -article.node-materiau.vm-cardfull div.workflow, -article.node-breve.vm-cardfull div.workflow { +/* line 1205, ../scss/styles.scss */ +article.node-materiau.vm-cardfull div.workflow, article.node-breve.vm-cardfull div.workflow { position: absolute; top: 0; left: 0; z-index: 11; padding: 5px; - -webkit-border-radius: 5px 0 3px 0; - -moz-border-radius: 5px 0 3px 0; border-radius: 5px 0 3px 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 10px; vertical-align: top; - background-color: #ffffff; background-color: rgba(255, 255, 255, 0.9); - *background-color: #ffffff; color: #000; } -article.node-materiau.vm-cardfull div.workflow span, -article.node-breve.vm-cardfull div.workflow span { +/* line 1211, ../scss/styles.scss */ +article.node-materiau.vm-cardfull div.workflow span, article.node-breve.vm-cardfull div.workflow span { padding: 3px 0 0 4px; display: moz-inline-stack; display: inline-block; @@ -8943,78 +6226,59 @@ article.node-breve.vm-cardfull div.workflow span { zoom: 1; *display: inline; } -article.node-materiau.vm-cardfull .field-name-field-description .upgrade, -article.node-breve.vm-cardfull .field-name-field-description .upgrade { +/* line 1214, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-description .upgrade, article.node-breve.vm-cardfull .field-name-field-description .upgrade { font-size: 12px; padding-top: 4em; margin-top: -4.5em; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #ffffff 4em); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%, #fff 4em); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #fff 4em); position: relative; } -article.node-materiau.vm-cardfull .side.oops p, -article.node-breve.vm-cardfull .side.oops p, -article.node-materiau.vm-cardfull .side .upgrade p, -article.node-breve.vm-cardfull .side .upgrade p { +/* line 1222, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .side.oops p, article.node-materiau.vm-cardfull .side .upgrade p, article.node-breve.vm-cardfull .side.oops p, article.node-breve.vm-cardfull .side .upgrade p { padding: 10px; font-size: 12px; } -article.node-materiau.vm-cardfull .side.oops p a, -article.node-breve.vm-cardfull .side.oops p a, -article.node-materiau.vm-cardfull .side .upgrade p a, -article.node-breve.vm-cardfull .side .upgrade p a { +/* line 1224, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .side.oops p a, article.node-materiau.vm-cardfull .side .upgrade p a, article.node-breve.vm-cardfull .side.oops p a, article.node-breve.vm-cardfull .side .upgrade p a { display: block; margin: 10px 0; font-size: 18px; padding: 0.1em 0.6em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; text-align: center; text-decoration: none; } -article.node-materiau.vm-cardfull .side.oops p a:hover, -article.node-breve.vm-cardfull .side.oops p a:hover, -article.node-materiau.vm-cardfull .side .upgrade p a:hover, -article.node-breve.vm-cardfull .side .upgrade p a:hover, -article.node-materiau.vm-cardfull .side.oops p a:focus, -article.node-breve.vm-cardfull .side.oops p a:focus, -article.node-materiau.vm-cardfull .side .upgrade p a:focus, -article.node-breve.vm-cardfull .side .upgrade p a:focus { +/* line 66, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .side.oops p a:hover, article.node-materiau.vm-cardfull .side.oops p a:focus, article.node-materiau.vm-cardfull .side .upgrade p a:hover, article.node-materiau.vm-cardfull .side .upgrade p a:focus, article.node-breve.vm-cardfull .side.oops p a:hover, article.node-breve.vm-cardfull .side.oops p a:focus, article.node-breve.vm-cardfull .side .upgrade p a:hover, article.node-breve.vm-cardfull .side .upgrade p a:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } -article.node-materiau.vm-cardfull .side.oops p a:active, -article.node-breve.vm-cardfull .side.oops p a:active, -article.node-materiau.vm-cardfull .side .upgrade p a:active, -article.node-breve.vm-cardfull .side .upgrade p a:active { +/* line 69, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .side.oops p a:active, article.node-materiau.vm-cardfull .side .upgrade p a:active, article.node-breve.vm-cardfull .side.oops p a:active, article.node-breve.vm-cardfull .side .upgrade p a:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -article.node-materiau.vm-cardfull nav.nav, -article.node-breve.vm-cardfull nav.nav { +/* line 1510, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav, article.node-breve.vm-cardfull nav.nav { top: 0; } -article.node-materiau.vm-cardfull > *, -article.node-breve.vm-cardfull > * { +/* line 1514, ../scss/styles.scss */ +article.node-materiau.vm-cardfull > *, article.node-breve.vm-cardfull > * { font-size: 16px; } -article.node-materiau.vm-cardfull > .side, -article.node-breve.vm-cardfull > .side { +/* line 1516, ../scss/styles.scss */ +article.node-materiau.vm-cardfull > .side, article.node-breve.vm-cardfull > .side { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -9022,57 +6286,45 @@ article.node-breve.vm-cardfull > .side { *display: inline; width: 50%; } -article.node-materiau.vm-cardfull > .side.group-side-left, -article.node-breve.vm-cardfull > .side.group-side-left { - -webkit-border-radius: 5px 0 0 5px; - -moz-border-radius: 5px 0 0 5px; +/* line 1517, ../scss/styles.scss */ +article.node-materiau.vm-cardfull > .side.group-side-left, article.node-breve.vm-cardfull > .side.group-side-left { border-radius: 5px 0 0 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -article.node-materiau.vm-cardfull > .side.group-side-right, -article.node-breve.vm-cardfull > .side.group-side-right { - -webkit-border-radius: 0 5px 5px 0; - -moz-border-radius: 0 5px 5px 0; +/* line 1520, ../scss/styles.scss */ +article.node-materiau.vm-cardfull > .side.group-side-right, article.node-breve.vm-cardfull > .side.group-side-right { border-radius: 0 5px 5px 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -article.node-materiau.vm-cardfull .group-images, -article.node-breve.vm-cardfull .group-images { +/* line 1526, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .group-images, article.node-breve.vm-cardfull .group-images { position: relative; z-index: 1; - background-color: #ffffff; + background-color: #fff; } -article.node-materiau.vm-cardfull .group-images figure, -article.node-breve.vm-cardfull .group-images figure { +/* line 77, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .group-images figure, article.node-breve.vm-cardfull .group-images figure { position: absolute; top: 0; left: 0; } -article.node-materiau.vm-cardfull .group-images figure:first-child, -article.node-breve.vm-cardfull .group-images figure:first-child { +/* line 79, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .group-images figure:first-child, article.node-breve.vm-cardfull .group-images figure:first-child { position: relative; z-index: 1; } -article.node-materiau.vm-cardfull .group-header, -article.node-breve.vm-cardfull .group-header { +/* line 1528, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .group-header, article.node-breve.vm-cardfull .group-header { font-size: 20px; font-weight: 300; padding: 10px; } -article.node-materiau.vm-cardfull .group-header .field-name-title-field, -article.node-breve.vm-cardfull .group-header .field-name-title-field { +/* line 1530, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .group-header .field-name-title-field, article.node-breve.vm-cardfull .group-header .field-name-title-field { font-weight: 700; } -article.node-materiau.vm-cardfull .group-header .field-name-field-reference-materio, -article.node-breve.vm-cardfull .group-header .field-name-field-reference-materio, -article.node-materiau.vm-cardfull .group-header .field-name-field-localisation, -article.node-breve.vm-cardfull .group-header .field-name-field-localisation, -article.node-materiau.vm-cardfull .group-header .field-name-field-authored-on, -article.node-breve.vm-cardfull .group-header .field-name-field-authored-on { +/* line 1531, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .group-header .field-name-field-reference-materio, article.node-materiau.vm-cardfull .group-header .field-name-field-localisation, article.node-materiau.vm-cardfull .group-header .field-name-field-authored-on, article.node-breve.vm-cardfull .group-header .field-name-field-reference-materio, article.node-breve.vm-cardfull .group-header .field-name-field-localisation, article.node-breve.vm-cardfull .group-header .field-name-field-authored-on { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -9081,39 +6333,31 @@ article.node-breve.vm-cardfull .group-header .field-name-field-authored-on { font-size: 12px; padding-right: 15px; } -article.node-materiau.vm-cardfull.node-breve .group-header, -article.node-breve.vm-cardfull.node-breve .group-header { +/* line 1535, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.node-breve .group-header, article.node-breve.vm-cardfull.node-breve .group-header { color: #fff; - background-color: #000000; background-color: rgba(0, 0, 0, 0.7); - *background-color: #000000; text-shadow: 0 0 4px rgba(0, 0, 0, 0.4); - -webkit-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -moz-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - -o-transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; - transition: background-color 0.2s ease-out, text-shadow 0.2s ease-out; + -webkit-transition: background-color 0.2s ease-out; + transition: background-color 0.2s ease-out; } -article.node-materiau.vm-cardfull.node-breve .group-header .field-name-field-authored-on, -article.node-breve.vm-cardfull.node-breve .group-header .field-name-field-authored-on { +/* line 1537, ../scss/styles.scss */ +article.node-materiau.vm-cardfull.node-breve .group-header .field-name-field-authored-on, article.node-breve.vm-cardfull.node-breve .group-header .field-name-field-authored-on { font-weight: 500; } -article.node-materiau.vm-cardfull .field-name-field-description, -article.node-breve.vm-cardfull .field-name-field-description, -article.node-materiau.vm-cardfull .field-name-body, -article.node-breve.vm-cardfull .field-name-body { +/* line 1541, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-description, article.node-materiau.vm-cardfull .field-name-body, article.node-breve.vm-cardfull .field-name-field-description, article.node-breve.vm-cardfull .field-name-body { font-size: 12px; font-weight: 300; padding: 10px; } -article.node-materiau.vm-cardfull .field-name-field-attachments, -article.node-breve.vm-cardfull .field-name-field-attachments { +/* line 1545, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-attachments, article.node-breve.vm-cardfull .field-name-field-attachments { padding: 10px; font-size: 12px; } -article.node-materiau.vm-cardfull .field-name-field-company-fab, -article.node-breve.vm-cardfull .field-name-field-company-fab, -article.node-materiau.vm-cardfull .field-name-field-company-distrib, -article.node-breve.vm-cardfull .field-name-field-company-distrib { +/* line 1551, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-company-fab, article.node-materiau.vm-cardfull .field-name-field-company-distrib, article.node-breve.vm-cardfull .field-name-field-company-fab, article.node-breve.vm-cardfull .field-name-field-company-distrib { font-size: 12px; padding: 10px; font-weight: 300; @@ -9124,296 +6368,164 @@ article.node-breve.vm-cardfull .field-name-field-company-distrib { *display: inline; width: 40%; } -article.node-materiau.vm-cardfull .field-name-field-company-fab .field-item, -article.node-breve.vm-cardfull .field-name-field-company-fab .field-item, -article.node-materiau.vm-cardfull .field-name-field-company-distrib .field-item, -article.node-breve.vm-cardfull .field-name-field-company-distrib .field-item { +/* line 1554, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-company-fab .field-item, article.node-materiau.vm-cardfull .field-name-field-company-distrib .field-item, article.node-breve.vm-cardfull .field-name-field-company-fab .field-item, article.node-breve.vm-cardfull .field-name-field-company-distrib .field-item { margin-top: 1em; } -article.node-materiau.vm-cardfull .field-name-field-company-fab .field-label, -article.node-breve.vm-cardfull .field-name-field-company-fab .field-label, -article.node-materiau.vm-cardfull .field-name-field-company-distrib .field-label, -article.node-breve.vm-cardfull .field-name-field-company-distrib .field-label { +/* line 1555, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-company-fab .field-label, article.node-materiau.vm-cardfull .field-name-field-company-distrib .field-label, article.node-breve.vm-cardfull .field-name-field-company-fab .field-label, article.node-breve.vm-cardfull .field-name-field-company-distrib .field-label { font-size: 10px; text-transform: lowercase; float: none; } -article.node-materiau.vm-cardfull .field-name-field-company-fab .field-name-field-tode-company, -article.node-breve.vm-cardfull .field-name-field-company-fab .field-name-field-tode-company, -article.node-materiau.vm-cardfull .field-name-field-company-distrib .field-name-field-tode-company, -article.node-breve.vm-cardfull .field-name-field-company-distrib .field-name-field-tode-company { +/* line 1556, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-company-fab .field-name-field-tode-company, article.node-materiau.vm-cardfull .field-name-field-company-distrib .field-name-field-tode-company, article.node-breve.vm-cardfull .field-name-field-company-fab .field-name-field-tode-company, article.node-breve.vm-cardfull .field-name-field-company-distrib .field-name-field-tode-company { font-size: 14px; } -article.node-materiau.vm-cardfull .field-name-field-materiau-ref, -article.node-breve.vm-cardfull .field-name-field-materiau-ref, -article.node-materiau.vm-cardfull .field-name-field-source, -article.node-breve.vm-cardfull .field-name-field-source, -article.node-materiau.vm-cardfull .field-name-field-attachments, -article.node-breve.vm-cardfull .field-name-field-attachments { +/* line 1559, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-materiau-ref, article.node-materiau.vm-cardfull .field-name-field-source, article.node-materiau.vm-cardfull .field-name-field-attachments, article.node-breve.vm-cardfull .field-name-field-materiau-ref, article.node-breve.vm-cardfull .field-name-field-source, article.node-breve.vm-cardfull .field-name-field-attachments { font-size: 12px; padding: 10px; font-weight: 300; } -article.node-materiau.vm-cardfull .field-name-field-materiau-ref a, -article.node-breve.vm-cardfull .field-name-field-materiau-ref a, -article.node-materiau.vm-cardfull .field-name-field-source a, -article.node-breve.vm-cardfull .field-name-field-source a, -article.node-materiau.vm-cardfull .field-name-field-attachments a, -article.node-breve.vm-cardfull .field-name-field-attachments a { +/* line 1560, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-name-field-materiau-ref a, article.node-materiau.vm-cardfull .field-name-field-source a, article.node-materiau.vm-cardfull .field-name-field-attachments a, article.node-breve.vm-cardfull .field-name-field-materiau-ref a, article.node-breve.vm-cardfull .field-name-field-source a, article.node-breve.vm-cardfull .field-name-field-attachments a { color: #000; } -article.node-materiau.vm-cardfull .field-label, -article.node-breve.vm-cardfull .field-label { +/* line 1562, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .field-label, article.node-breve.vm-cardfull .field-label { font-weight: 900; margin: 0 0 0.5em; } -article.node-materiau.vm-cardfull nav.nav, -article.node-breve.vm-cardfull nav.nav { +/* line 1565, ../scss/styles.scss */ +article.node-materiau.vm-cardfull nav.nav, article.node-breve.vm-cardfull nav.nav { margin: 5px; } -article.node-materiau.vm-cardfull div.workflow, -article.node-breve.vm-cardfull div.workflow { +/* line 1567, ../scss/styles.scss */ +article.node-materiau.vm-cardfull div.workflow, article.node-breve.vm-cardfull div.workflow { margin: 5px; } -article.node-materiau.vm-cardfull .side.oops p, -article.node-breve.vm-cardfull .side.oops p, -article.node-materiau.vm-cardfull .side .upgrade p, -article.node-breve.vm-cardfull .side .upgrade p { +/* line 1570, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .side.oops p, article.node-materiau.vm-cardfull .side .upgrade p, article.node-breve.vm-cardfull .side.oops p, article.node-breve.vm-cardfull .side .upgrade p { padding: 3em; } -article.node-materiau.vm-cardfull .side.oops p a, -article.node-breve.vm-cardfull .side.oops p a, -article.node-materiau.vm-cardfull .side .upgrade p a, -article.node-breve.vm-cardfull .side .upgrade p a { +/* line 1572, ../scss/styles.scss */ +article.node-materiau.vm-cardfull .side.oops p a, article.node-materiau.vm-cardfull .side .upgrade p a, article.node-breve.vm-cardfull .side.oops p a, article.node-breve.vm-cardfull .side .upgrade p a { border: 2px solid #eee; - background-color: #eeeeee; + background-color: #eee; color: #fff; -webkit-transition: border 0.3s ease-out; - -moz-transition: border 0.3s ease-out; - -o-transition: border 0.3s ease-out; - transition: border 0.3s ease-out; + transition: border 0.3s ease-out; -webkit-transition: background-color 0.3s ease-out; - -moz-transition: background-color 0.3s ease-out; - -o-transition: background-color 0.3s ease-out; - transition: background-color 0.3s ease-out; + transition: background-color 0.3s ease-out; } -article.node-materiau.vm-cardfull:hover .side.oops p a, -article.node-breve.vm-cardfull:hover .side.oops p a, -article.node-materiau.vm-cardfull:hover .side .upgrade p a, -article.node-breve.vm-cardfull:hover .side .upgrade p a { +/* line 1579, ../scss/styles.scss */ +article.node-materiau.vm-cardfull:hover .side.oops p a, article.node-materiau.vm-cardfull:hover .side .upgrade p a, article.node-breve.vm-cardfull:hover .side.oops p a, article.node-breve.vm-cardfull:hover .side .upgrade p a { border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; } + +/* line 36, ../scss/misc.scss */ div.messages { padding: 9px; margin: 0.5em 0 0; color: #3a87ad; background: #d9edf7; border: 1px solid #bce8f1; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; border-radius: 5px; font-size: 12px; } +/* line 14, ../scss/misc.scss */ div.messages.warning { color: #c09853; background-color: #fcf8e3; border-color: #fbeed5; } +/* line 20, ../scss/misc.scss */ div.messages.error { color: #b94a48; background-color: #f2dede; border-color: #eed3d7; } +/* line 27, ../scss/misc.scss */ div.messages.status { color: #468847; background-color: #dff0d8; border-color: #d6e9c6; font-size: 14px; } + +/* line 38, ../scss/misc.scss */ .messages-label { display: none; } + +/* line 40, ../scss/misc.scss */ #better-messages-wrapper { background-color: rgba(255, 255, 255, 0.7); padding: 10px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 6px rgba(0, 0, 0, 0.4); box-shadow: 0 0 6px rgba(0, 0, 0, 0.4); } +/* line 44, ../scss/misc.scss */ #better-messages-wrapper #better-messages-default div.messages { padding: 9px; margin: 0.5em 0 0; color: #3a87ad; background: #d9edf7; border: 1px solid #bce8f1; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; border-radius: 5px; font-size: 12px; margin: 0 0 10px 0; } +/* line 14, ../scss/misc.scss */ #better-messages-wrapper #better-messages-default div.messages.warning { color: #c09853; background-color: #fcf8e3; border-color: #fbeed5; } +/* line 20, ../scss/misc.scss */ #better-messages-wrapper #better-messages-default div.messages.error { color: #b94a48; background-color: #f2dede; border-color: #eed3d7; } +/* line 27, ../scss/misc.scss */ #better-messages-wrapper #better-messages-default div.messages.status { color: #468847; background-color: #dff0d8; border-color: #d6e9c6; font-size: 14px; } +/* line 47, ../scss/misc.scss */ #better-messages-wrapper #better-messages-default .footer { border: none; padding: 0; margin: 0; } +/* line 49, ../scss/misc.scss */ #better-messages-wrapper #better-messages-default .footer a.message-close { - background: #ffffff url('../img/close.png') no-repeat center center; + background: #fff url("../img/close.png") no-repeat center center; width: 15px; height: 15px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; display: block; } + /** Tab navigation */ /** * icons */ -i.icon-materio-viewmode-cardsmall { - background-image: url('../img/sprite.png'); - width: 20px; - height: 20px; - line-height: 20px; - background-position: -42px 0; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardsmall.active { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: 0 0; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardsmall:hover:not(.active) { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -21px 0; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardmedium { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -42px -21px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardmedium.active { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: 0 -21px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardmedium:hover:not(.active) { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -21px -21px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardbig { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -42px -42px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardbig.active { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: 0 -42px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardbig:hover:not(.active) { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -21px -42px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardfull { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -42px -63px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardfull.active { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: 0 -63px; - background-color: #ffffff; -} -i.icon-materio-viewmode-cardfull:hover:not(.active) { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -21px -63px; - background-color: #ffffff; -} -i.icon-materio-search { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -63px -63px; - background-color: #ffffff; -} -i.icon-materio-folder { - background-image: url('../img/sprite.png'); - width: 21px; - height: 21px; - line-height: 21px; - background-position: -84px -63px; - background-color: #ffffff; -} /** * figures */ +/* line 176, ../scss/misc.scss */ figure figcaption { display: none; } +/* line 179, ../scss/misc.scss */ figure .blank { position: absolute; top: 0; @@ -9421,297 +6533,319 @@ figure .blank { width: 100%; height: 100%; } + /* ==|== print styles ======================================================= Print styles. Inlined to avoid required HTTP connection: h5bp.com/r ========================================================================== */ +/* line 206, ../scss/misc.scss */ a:focus { outline: 0; } + /* * Improves readability when focused and also mouse hovered in all browsers. */ +/* line 214, ../scss/misc.scss */ a:active, a:hover { outline: 0; } + /** COLORBOX */ +/* line 221, ../scss/misc.scss */ #colorbox { - -webkit-border-radius: 2px; - -moz-border-radius: 2px; border-radius: 2px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } +/* line 223, ../scss/misc.scss */ #colorbox #cboxLoadedContent { background-color: #fff; } + /** embed player */ -@media screen and (max-width: 767px) { +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + /* line 229, ../scss/misc.scss */ .embedded-video .player iframe { max-width: 100%; height: auto; } } + /** devel */ +/* line 239, ../scss/misc.scss */ .not-logged-in #tasks ul.tabs.primary { display: none; } -/** AUTOCOMPLETE */ + +/* + ___ __ ____________ __________ __ _______ __ __________________ + / | / / / /_ __/ __ \/ ____/ __ \/ |/ / __ \/ / / ____/_ __/ ____/ + / /| |/ / / / / / / / / / / / / / / /|_/ / /_/ / / / __/ / / / __/ + / ___ / /_/ / / / / /_/ / /___/ /_/ / / / / ____/ /___/ /___ / / / /___ +/_/ |_\____/ /_/ \____/\____/\____/_/ /_/_/ /_____/_____/ /_/ /_____/ + +*/ +/* line 1596, ../scss/styles.scss */ #autocomplete { border: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - background-color: #000000; background-color: rgba(0, 0, 0, 0.6); - *background-color: #000000; text-align: left; margin-left: 2px; } +/* line 1601, ../scss/styles.scss */ .oldie #autocomplete { background-color: #545454; } +/* line 1602, ../scss/styles.scss */ #autocomplete li { color: #FFF; background-color: transparent; font-size: 12px; } +/* line 1604, ../scss/styles.scss */ #autocomplete li.selected { - background-color: #000000; background-color: rgba(0, 0, 0, 0.8); - *background-color: #000000; } +/* line 1605, ../scss/styles.scss */ #autocomplete li div { padding: 0.1em 5px; } + /** * the old modal api (balck bg) for contextual forms (create new flag list) */ +/* line 1646, ../scss/styles.scss */ #modal { background-color: rgba(0, 0, 0, 0.7); - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 0; font-size: 12px; } +/* line 1616, ../scss/styles.scss */ #modal * { color: #fff; background-color: transparent; } +/* line 1618, ../scss/styles.scss */ #modal form { background-color: transparent; color: #fff; border: 0px; } +/* line 1621, ../scss/styles.scss */ #modal form .form-actions { background-color: transparent; margin: 0; padding: 0; border: 0; } -#modal form input.form-text, -#modal form textarea, -#modal form div.grippie { - background-color: #ffffff; +/* line 1624, ../scss/styles.scss */ +#modal form input.form-text, #modal form textarea, #modal form div.grippie { + background-color: #fff; color: #000; border: 0; } +/* line 1626, ../scss/styles.scss */ #modal form .form-actions { - text-align: right ; + text-align: right; } +/* line 1627, ../scss/styles.scss */ #modal form input.form-submit { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; + border-style: solid; + border-width: 0; cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - 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; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - 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); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - color: #000; -} -#modal form input.form-submit:hover, -#modal form input.form-submit:focus, -#modal form input.form-submit:active, -#modal form input.form-submit.active, -#modal form input.form-submit.disabled, -#modal form input.form-submit[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -#modal form input.form-submit:active, -#modal form input.form-submit.active { - background-color: #cccccc \9; -} -#modal form input.form-submit:first-child { - *margin-left: 0; -} -#modal form input.form-submit:hover, -#modal form input.form-submit:focus { - 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; -} -#modal form input.form-submit:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -#modal form input.form-submit.active, -#modal form input.form-submit:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; -} -#modal form input.form-submit.disabled, -#modal form input.form-submit[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-opacity: 65; - -khtml-opacity: 65; - -moz-opacity: 65; - opacity: 65; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 none #000000; - -moz-box-shadow: 0 0 none #000000; - -ms-box-shadow: 0 0 none #000000; - box-shadow: 0 0 none #000000; -} -#modal form input.form-submit .label, -#modal form input.form-submit .badge { + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; position: relative; - top: -1px; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; } -#modal form input.form-submit .label, -#modal form input.form-submit .badge { - top: 0; +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit:hover, #modal form input.form-submit:focus { + background-color: #007095; } +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit:hover, #modal form input.form-submit:focus { + color: #FFFFFF; +} +/* line 1630, ../scss/styles.scss */ #modal form input.form-submit[name="create"] { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; } -#modal form input.form-submit[name="create"]:hover, -#modal form input.form-submit[name="create"]:focus, -#modal form input.form-submit[name="create"]:active, -#modal form input.form-submit[name="create"].active, -#modal form input.form-submit[name="create"].disabled, -#modal form input.form-submit[name="create"][disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="create"]:hover, #modal form input.form-submit[name="create"]:focus { + background-color: #368a55; } -#modal form input.form-submit[name="create"]:active, -#modal form input.form-submit[name="create"].active { - background-color: #24748c \9; +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="create"]:hover, #modal form input.form-submit[name="create"]:focus { + color: #FFFFFF; } -#modal form input.form-submit[name="create"] .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +/* line 1633, ../scss/styles.scss */ +#modal form input.form-submit[name="save"] { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; } +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="save"]:hover, #modal form input.form-submit[name="save"]:focus { + background-color: #368a55; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="save"]:hover, #modal form input.form-submit[name="save"]:focus { + color: #FFFFFF; +} +/* line 1636, ../scss/styles.scss */ +#modal form input.form-submit[name="delete"] { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="delete"]:hover, #modal form input.form-submit[name="delete"]:focus { + background-color: #cf2a0e; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="delete"]:hover, #modal form input.form-submit[name="delete"]:focus { + color: #FFFFFF; +} +/* line 1639, ../scss/styles.scss */ +#modal form input.form-submit[name="cancel"] { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="cancel"]:hover, #modal form input.form-submit[name="cancel"]:focus { + background-color: #b9b9b9; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#modal form input.form-submit[name="cancel"]:hover, #modal form input.form-submit[name="cancel"]:focus { + color: #333333; +} +/* line 1648, ../scss/styles.scss */ #modal > * { padding: 10px; } +/* line 1652, ../scss/styles.scss */ #modal .form-item-flag-lists-name input { width: 95%; } +/* line 1655, ../scss/styles.scss */ #modal .actions { text-align: right; } + /** * the new modal api used for preview and register modal */ +/* line 1663, ../scss/styles.scss */ .modal-wrapper { bottom: 0; left: 0; @@ -9722,6 +6856,7 @@ a:hover { white-space: nowrap; z-index: 99998; } +/* line 1664, ../scss/styles.scss */ .modal-wrapper:before { content: ""; display: inline-block; @@ -9729,10 +6864,11 @@ a:hover { margin-right: -0.25em; vertical-align: middle; } -.modal-wrapper:after, -.modal-wrapper:before { +/* line 1671, ../scss/styles.scss */ +.modal-wrapper:after, .modal-wrapper:before { -moz-box-sizing: border-box; } +/* line 1686, ../scss/styles.scss */ .modal-wrapper .modal-bg { background-color: #000; position: absolute; @@ -9740,13 +6876,9 @@ a:hover { left: 0; width: 100%; height: 100%; - opacity: 0.005; - filter: alpha(opacity=0.5); - -webkit-opacity: 0.5; - -khtml-opacity: 0.5; - -moz-opacity: 0.5; opacity: 0.5; } +/* line 1694, ../scss/styles.scss */ .modal-wrapper .modal-content { position: relative; display: inline-block; @@ -9756,291 +6888,324 @@ a:hover { white-space: normal; min-height: 200px; } -/** MODALCONTENT */ -/** JSCROLLPAN */ + +/* + _______ __________ ____ __ __ ____ ___ _ __ + / / ___// ____/ __ \/ __ \/ / / / / __ \/ | / | / / + __ / /\__ \/ / / /_/ / / / / / / / / /_/ / /| | / |/ / +/ /_/ /___/ / /___/ _, _/ /_/ / /___/ /___/ ____/ ___ |/ /| / +\____//____/\____/_/ |_|\____/_____/_____/_/ /_/ |_/_/ |_/ + +*/ +/* line 1716, ../scss/styles.scss */ .jspContainer .jspVerticalBar { background-color: transparent; width: 5px; } +/* line 1720, ../scss/styles.scss */ .jspContainer .jspVerticalBar .jspTrack { background-color: transparent; } +/* line 1722, ../scss/styles.scss */ .jspContainer .jspVerticalBar .jspTrack .jspDrag { background-color: #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -/** TOOLTIP */ + +/* + __________ ____ __ ______________ + /_ __/ __ \/ __ \/ / /_ __/ _/ __ \ + / / / / / / / / / / / / / // /_/ / + / / / /_/ / /_/ / /___/ / _/ // ____/ +/_/ \____/\____/_____/_/ /___/_/ + +*/ +/* line 1738, ../scss/styles.scss */ #tooltip { position: absolute; z-index: 999; max-width: 180px; - background-color: #ffffff; + background-color: white; padding: 5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-size: 12px; font-weight: 500; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } +/* line 1742, ../scss/styles.scss */ #tooltip.op-visible { - -webkit-transition: opacity 0.1s ease-out, top 0.1s linear; - -moz-transition: opacity 0.1s ease-out, top 0.1s linear; - -o-transition: opacity 0.1s ease-out, top 0.1s linear; - transition: opacity 0.1s ease-out, top 0.1s linear; + -webkit-transition: opacity 0.1s ease-out; + transition: opacity 0.1s ease-out; } -/** FEEDBACK */ -@media screen and (max-width: 767px) { + +/* + ______________________ ____ ___ ________ __ + / ____/ ____/ ____/ __ \/ __ )/ | / ____/ //_/ + / /_ / __/ / __/ / / / / __ / /| |/ / / ,< + / __/ / /___/ /___/ /_/ / /_/ / ___ / /___/ /| | +/_/ /_____/_____/_____/_____/_/ |_\____/_/ |_| + +*/ +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + /* line 1756, ../scss/styles.scss */ #block-feedback-form { bottom: 5px; left: 5px; right: auto; } } +/* line 1760, ../scss/styles.scss */ #block-feedback-form h2 { line-height: 1.2; font-size: 14px; margin: 0; } +/* line 1762, ../scss/styles.scss */ #block-feedback-form h2 .title { display: none; } +/* line 1765, ../scss/styles.scss */ #block-feedback-form #feedback-form-toggle { padding: 2px 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #ff7600; color: #fff; line-height: 2; font-weight: 900; } +/* line 1769, ../scss/styles.scss */ #block-feedback-form .content { background-color: rgba(0, 0, 0, 0.7); - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 0; font-size: 12px; } +/* line 1616, ../scss/styles.scss */ #block-feedback-form .content * { color: #fff; background-color: transparent; } +/* line 1618, ../scss/styles.scss */ #block-feedback-form .content form { background-color: transparent; color: #fff; border: 0px; } +/* line 1621, ../scss/styles.scss */ #block-feedback-form .content form .form-actions { background-color: transparent; margin: 0; padding: 0; border: 0; } -#block-feedback-form .content form input.form-text, -#block-feedback-form .content form textarea, -#block-feedback-form .content form div.grippie { - background-color: #ffffff; +/* line 1624, ../scss/styles.scss */ +#block-feedback-form .content form input.form-text, #block-feedback-form .content form textarea, #block-feedback-form .content form div.grippie { + background-color: #fff; color: #000; border: 0; } +/* line 1626, ../scss/styles.scss */ #block-feedback-form .content form .form-actions { - text-align: right ; + text-align: right; } +/* line 1627, ../scss/styles.scss */ #block-feedback-form .content form input.form-submit { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; + border-style: solid; + border-width: 0; cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - 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; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - 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); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-border-radius: 3px 0 0 0; - -moz-border-radius: 3px 0 0 0; - border-radius: 3px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - color: #000; -} -#block-feedback-form .content form input.form-submit:hover, -#block-feedback-form .content form input.form-submit:focus, -#block-feedback-form .content form input.form-submit:active, -#block-feedback-form .content form input.form-submit.active, -#block-feedback-form .content form input.form-submit.disabled, -#block-feedback-form .content form input.form-submit[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -#block-feedback-form .content form input.form-submit:active, -#block-feedback-form .content form input.form-submit.active { - background-color: #cccccc \9; -} -#block-feedback-form .content form input.form-submit:first-child { - *margin-left: 0; -} -#block-feedback-form .content form input.form-submit:hover, -#block-feedback-form .content form input.form-submit:focus { - 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; -} -#block-feedback-form .content form input.form-submit:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -#block-feedback-form .content form input.form-submit.active, -#block-feedback-form .content form input.form-submit:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; -} -#block-feedback-form .content form input.form-submit.disabled, -#block-feedback-form .content form input.form-submit[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-opacity: 65; - -khtml-opacity: 65; - -moz-opacity: 65; - opacity: 65; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 none #000000; - -moz-box-shadow: 0 0 none #000000; - -ms-box-shadow: 0 0 none #000000; - box-shadow: 0 0 none #000000; -} -#block-feedback-form .content form input.form-submit .label, -#block-feedback-form .content form input.form-submit .badge { + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; position: relative; - top: -1px; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #008CBA; + border-color: #007095; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; } -#block-feedback-form .content form input.form-submit .label, -#block-feedback-form .content form input.form-submit .badge { - top: 0; +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit:hover, #block-feedback-form .content form input.form-submit:focus { + background-color: #007095; } +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit:hover, #block-feedback-form .content form input.form-submit:focus { + color: #FFFFFF; +} +/* line 1630, ../scss/styles.scss */ #block-feedback-form .content form input.form-submit[name="create"] { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; } -#block-feedback-form .content form input.form-submit[name="create"]:hover, -#block-feedback-form .content form input.form-submit[name="create"]:focus, -#block-feedback-form .content form input.form-submit[name="create"]:active, -#block-feedback-form .content form input.form-submit[name="create"].active, -#block-feedback-form .content form input.form-submit[name="create"].disabled, -#block-feedback-form .content form input.form-submit[name="create"][disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="create"]:hover, #block-feedback-form .content form input.form-submit[name="create"]:focus { + background-color: #368a55; } -#block-feedback-form .content form input.form-submit[name="create"]:active, -#block-feedback-form .content form input.form-submit[name="create"].active { - background-color: #24748c \9; +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="create"]:hover, #block-feedback-form .content form input.form-submit[name="create"]:focus { + color: #FFFFFF; } -#block-feedback-form .content form input.form-submit[name="create"] .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +/* line 1633, ../scss/styles.scss */ +#block-feedback-form .content form input.form-submit[name="save"] { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #43AC6A; + border-color: #368a55; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; } +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="save"]:hover, #block-feedback-form .content form input.form-submit[name="save"]:focus { + background-color: #368a55; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="save"]:hover, #block-feedback-form .content form input.form-submit[name="save"]:focus { + color: #FFFFFF; +} +/* line 1636, ../scss/styles.scss */ +#block-feedback-form .content form input.form-submit[name="delete"] { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #f04124; + border-color: #cf2a0e; + color: #FFFFFF; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="delete"]:hover, #block-feedback-form .content form input.form-submit[name="delete"]:focus { + background-color: #cf2a0e; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="delete"]:hover, #block-feedback-form .content form input.form-submit[name="delete"]:focus { + color: #FFFFFF; +} +/* line 1639, ../scss/styles.scss */ +#block-feedback-form .content form input.form-submit[name="cancel"] { + border-style: solid; + border-width: 0; + cursor: pointer; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25rem; + position: relative; + text-decoration: none; + text-align: center; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + display: inline-block; + padding-top: 0.625rem; + padding-right: 1.25rem; + padding-bottom: 0.6875rem; + padding-left: 1.25rem; + font-size: 0.6875rem; + background-color: #e7e7e7; + border-color: #b9b9b9; + color: #333333; + -webkit-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; +} +/* line 162, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="cancel"]:hover, #block-feedback-form .content form input.form-submit[name="cancel"]:focus { + background-color: #b9b9b9; +} +/* line 168, ../bower_components/foundation/scss/foundation/components/_buttons.scss */ +#block-feedback-form .content form input.form-submit[name="cancel"]:hover, #block-feedback-form .content form input.form-submit[name="cancel"]:focus { + color: #333333; +} +/* line 1771, ../scss/styles.scss */ .ie8 #block-feedback-form .content { background: #000; } +/* line 1774, ../scss/styles.scss */ #block-feedback-form #feedback-status-message { - background-color: #ffffff; + background-color: #fff; padding: 5px; } -/** TASK / TABS **/ + +/* + _________ _____ __ __ __ _________ ____ _____ + /_ __/ | / ___// //_/ _/_/ /_ __/ | / __ ) ___/ + / / / /| | \__ \/ ,< _/_/ / / / /| | / __ \__ \ + / / / ___ |___/ / /| | _/_/ / / / ___ |/ /_/ /__/ / +/_/ /_/ |_/____/_/ |_| /_/ /_/ /_/ |_/_____/____/ + +*/ +/* line 1799, ../scss/styles.scss */ #tasks ul.tabs { display: moz-inline-stack; display: inline-block; @@ -10051,144 +7216,110 @@ a:hover { padding: 0; margin: 0; } +/* line 1803, ../scss/styles.scss */ #tasks ul.tabs li { padding: 0; margin: 2px 5px; border: 0 solid #fff; } +/* line 1804, ../scss/styles.scss */ #tasks ul.tabs a { border: 0; color: #7f7f7f; } -#tasks ul.tabs a.active, -#tasks ul.tabs a:hover { +/* line 1806, ../scss/styles.scss */ +#tasks ul.tabs a.active, #tasks ul.tabs a:hover { font-weight: 900; color: #000; } +/* line 1786, ../scss/styles.scss */ #tasks ul.tabs.primary a { font-size: 12px; padding: 5px 10px; background-color: #e6e6e6; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -#tasks ul.tabs.primary a.active, -#tasks ul.tabs.primary a:hover { +/* line 1790, ../scss/styles.scss */ +#tasks ul.tabs.primary a.active, #tasks ul.tabs.primary a:hover { background-color: #e6e6e6; } +/* line 1813, ../scss/styles.scss */ #tasks ul.tabs.secondary { font-size: 10px; padding: 0.5em 1em; } -/** STATICS */ -/** user */ -.page-user #main, -.page-user-edit #main, -.page-user-password #main, -.page-user-reset #main, -.page-toboggan #main { - background: #ffffff url('../img/user-page-bg.gif') no-repeat bottom right; + +/* + ______________ _____________________ + / ___/_ __/ |/_ __/ _/ ____/ ___/ + \__ \ / / / /| | / / / // / \__ \ + ___/ // / / ___ |/ / _/ // /___ ___/ / +/____//_/ /_/ |_/_/ /___/\____//____/ + +*/ +/* + _ _ ___ ___ ___ +| | |_ -| -_| _| +|___|___|___|_| + +*/ +/* line 1836, ../scss/styles.scss */ +.page-user #main, .page-user-edit #main, .page-user-password #main, .page-user-reset #main, .page-toboggan #main { + background: #fff url("../img/user-page-bg.gif") no-repeat bottom right; } -.page-user .messages, -.page-user-edit .messages, -.page-user-password .messages, -.page-user-reset .messages, -.page-toboggan .messages { +/* line 1838, ../scss/styles.scss */ +.page-user .messages, .page-user-edit .messages, .page-user-password .messages, .page-user-reset .messages, .page-toboggan .messages { width: 800px; margin: 0 auto; } -.page-user.role-6 #tasks .tabs.primary, -.page-user-edit.role-6 #tasks .tabs.primary, -.page-user-password.role-6 #tasks .tabs.primary, -.page-user-reset.role-6 #tasks .tabs.primary, -.page-toboggan.role-6 #tasks .tabs.primary { +/* line 1840, ../scss/styles.scss */ +.page-user.role-6 #tasks .tabs.primary, .page-user-edit.role-6 #tasks .tabs.primary, .page-user-password.role-6 #tasks .tabs.primary, .page-user-reset.role-6 #tasks .tabs.primary, .page-toboggan.role-6 #tasks .tabs.primary { display: none; } -.page-user.role-6 #tasks .tabs.secondary a, -.page-user-edit.role-6 #tasks .tabs.secondary a, -.page-user-password.role-6 #tasks .tabs.secondary a, -.page-user-reset.role-6 #tasks .tabs.secondary a, -.page-toboggan.role-6 #tasks .tabs.secondary a { +/* line 1786, ../scss/styles.scss */ +.page-user.role-6 #tasks .tabs.secondary a, .page-user-edit.role-6 #tasks .tabs.secondary a, .page-user-password.role-6 #tasks .tabs.secondary a, .page-user-reset.role-6 #tasks .tabs.secondary a, .page-toboggan.role-6 #tasks .tabs.secondary a { font-size: 12px; padding: 5px 10px; background-color: #e6e6e6; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -.page-user.role-6 #tasks .tabs.secondary a.active, -.page-user-edit.role-6 #tasks .tabs.secondary a.active, -.page-user-password.role-6 #tasks .tabs.secondary a.active, -.page-user-reset.role-6 #tasks .tabs.secondary a.active, -.page-toboggan.role-6 #tasks .tabs.secondary a.active, -.page-user.role-6 #tasks .tabs.secondary a:hover, -.page-user-edit.role-6 #tasks .tabs.secondary a:hover, -.page-user-password.role-6 #tasks .tabs.secondary a:hover, -.page-user-reset.role-6 #tasks .tabs.secondary a:hover, -.page-toboggan.role-6 #tasks .tabs.secondary a:hover { +/* line 1790, ../scss/styles.scss */ +.page-user.role-6 #tasks .tabs.secondary a.active, .page-user.role-6 #tasks .tabs.secondary a:hover, .page-user-edit.role-6 #tasks .tabs.secondary a.active, .page-user-edit.role-6 #tasks .tabs.secondary a:hover, .page-user-password.role-6 #tasks .tabs.secondary a.active, .page-user-password.role-6 #tasks .tabs.secondary a:hover, .page-user-reset.role-6 #tasks .tabs.secondary a.active, .page-user-reset.role-6 #tasks .tabs.secondary a:hover, .page-toboggan.role-6 #tasks .tabs.secondary a.active, .page-toboggan.role-6 #tasks .tabs.secondary a:hover { background-color: #e6e6e6; } -.page-user #content .inner-content > *, -.page-user-edit #content .inner-content > *, -.page-user-password #content .inner-content > *, -.page-user-reset #content .inner-content > *, -.page-toboggan #content .inner-content > * { +/* line 1843, ../scss/styles.scss */ +.page-user #content .inner-content > *, .page-user-edit #content .inner-content > *, .page-user-password #content .inner-content > *, .page-user-reset #content .inner-content > *, .page-toboggan #content .inner-content > * { width: 800px; margin: 0 auto; padding-top: 1em; font-size: 14px; /* #user-profile-form */ } -.page-user #content .inner-content > * fieldset, -.page-user-edit #content .inner-content > * fieldset, -.page-user-password #content .inner-content > * fieldset, -.page-user-reset #content .inner-content > * fieldset, -.page-toboggan #content .inner-content > * fieldset { +/* line 1846, ../scss/styles.scss */ +.page-user #content .inner-content > * fieldset, .page-user-edit #content .inner-content > * fieldset, .page-user-password #content .inner-content > * fieldset, .page-user-reset #content .inner-content > * fieldset, .page-toboggan #content .inner-content > * fieldset { margin-bottom: 1em; } -.page-user #content .inner-content > * legend, -.page-user-edit #content .inner-content > * legend, -.page-user-password #content .inner-content > * legend, -.page-user-reset #content .inner-content > * legend, -.page-toboggan #content .inner-content > * legend { +/* line 1850, ../scss/styles.scss */ +.page-user #content .inner-content > * legend, .page-user-edit #content .inner-content > * legend, .page-user-password #content .inner-content > * legend, .page-user-reset #content .inner-content > * legend, .page-toboggan #content .inner-content > * legend { font-size: 16px; margin: 0; padding: 10px 0 5px 0; line-height: 1; border: 0 solid #fff; } -.page-user #content .inner-content > * legend a, -.page-user-edit #content .inner-content > * legend a, -.page-user-password #content .inner-content > * legend a, -.page-user-reset #content .inner-content > * legend a, -.page-toboggan #content .inner-content > * legend a { +/* line 1852, ../scss/styles.scss */ +.page-user #content .inner-content > * legend a, .page-user-edit #content .inner-content > * legend a, .page-user-password #content .inner-content > * legend a, .page-user-reset #content .inner-content > * legend a, .page-toboggan #content .inner-content > * legend a { color: #000; } -.page-user #content .inner-content > * .form-item, -.page-user-edit #content .inner-content > * .form-item, -.page-user-password #content .inner-content > * .form-item, -.page-user-reset #content .inner-content > * .form-item, -.page-toboggan #content .inner-content > * .form-item { +/* line 1855, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-item, .page-user-edit #content .inner-content > * .form-item, .page-user-password #content .inner-content > * .form-item, .page-user-reset #content .inner-content > * .form-item, .page-toboggan #content .inner-content > * .form-item { margin: 0 0 0.5em 0; width: 100%; } -.page-user #content .inner-content > * .form-item label, -.page-user-edit #content .inner-content > * .form-item label, -.page-user-password #content .inner-content > * .form-item label, -.page-user-reset #content .inner-content > * .form-item label, -.page-toboggan #content .inner-content > * .form-item label, -.page-user #content .inner-content > * .form-item input.form-text, -.page-user-edit #content .inner-content > * .form-item input.form-text, -.page-user-password #content .inner-content > * .form-item input.form-text, -.page-user-reset #content .inner-content > * .form-item input.form-text, -.page-toboggan #content .inner-content > * .form-item input.form-text { +/* line 1857, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-item label, .page-user #content .inner-content > * .form-item input.form-text, .page-user-edit #content .inner-content > * .form-item label, .page-user-edit #content .inner-content > * .form-item input.form-text, .page-user-password #content .inner-content > * .form-item label, .page-user-password #content .inner-content > * .form-item input.form-text, .page-user-reset #content .inner-content > * .form-item label, .page-user-reset #content .inner-content > * .form-item input.form-text, .page-toboggan #content .inner-content > * .form-item label, .page-toboggan #content .inner-content > * .form-item input.form-text { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -10196,95 +7327,43 @@ a:hover { *display: inline; vertical-align: middle; } -.page-user #content .inner-content > * .form-item label, -.page-user-edit #content .inner-content > * .form-item label, -.page-user-password #content .inner-content > * .form-item label, -.page-user-reset #content .inner-content > * .form-item label, -.page-toboggan #content .inner-content > * .form-item label { +/* line 1860, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-item label, .page-user-edit #content .inner-content > * .form-item label, .page-user-password #content .inner-content > * .form-item label, .page-user-reset #content .inner-content > * .form-item label, .page-toboggan #content .inner-content > * .form-item label { margin-right: 1em; min-width: 6em; } -.page-user #content .inner-content > * .form-item input.form-text, -.page-user-edit #content .inner-content > * .form-item input.form-text, -.page-user-password #content .inner-content > * .form-item input.form-text, -.page-user-reset #content .inner-content > * .form-item input.form-text, -.page-toboggan #content .inner-content > * .form-item input.form-text { +/* line 1861, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-item input.form-text, .page-user-edit #content .inner-content > * .form-item input.form-text, .page-user-password #content .inner-content > * .form-item input.form-text, .page-user-reset #content .inner-content > * .form-item input.form-text, .page-toboggan #content .inner-content > * .form-item input.form-text { padding: 2px 4px; } -.page-user #content .inner-content > * .form-wrapper > .form-item, -.page-user-edit #content .inner-content > * .form-wrapper > .form-item, -.page-user-password #content .inner-content > * .form-wrapper > .form-item, -.page-user-reset #content .inner-content > * .form-wrapper > .form-item, -.page-toboggan #content .inner-content > * .form-wrapper > .form-item { +/* line 1866, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-wrapper > .form-item, .page-user-edit #content .inner-content > * .form-wrapper > .form-item, .page-user-password #content .inner-content > * .form-wrapper > .form-item, .page-user-reset #content .inner-content > * .form-wrapper > .form-item, .page-toboggan #content .inner-content > * .form-wrapper > .form-item { margin: 0 0 2em 0; } -.page-user #content .inner-content > * .form-type-password-confirm label, -.page-user-edit #content .inner-content > * .form-type-password-confirm label, -.page-user-password #content .inner-content > * .form-type-password-confirm label, -.page-user-reset #content .inner-content > * .form-type-password-confirm label, -.page-toboggan #content .inner-content > * .form-type-password-confirm label, -.page-user #content .inner-content > * .form-type-new-password-confirm label, -.page-user-edit #content .inner-content > * .form-type-new-password-confirm label, -.page-user-password #content .inner-content > * .form-type-new-password-confirm label, -.page-user-reset #content .inner-content > * .form-type-new-password-confirm label, -.page-toboggan #content .inner-content > * .form-type-new-password-confirm label { +/* line 1870, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-type-password-confirm label, .page-user #content .inner-content > * .form-type-new-password-confirm label, .page-user-edit #content .inner-content > * .form-type-password-confirm label, .page-user-edit #content .inner-content > * .form-type-new-password-confirm label, .page-user-password #content .inner-content > * .form-type-password-confirm label, .page-user-password #content .inner-content > * .form-type-new-password-confirm label, .page-user-reset #content .inner-content > * .form-type-password-confirm label, .page-user-reset #content .inner-content > * .form-type-new-password-confirm label, .page-toboggan #content .inner-content > * .form-type-password-confirm label, .page-toboggan #content .inner-content > * .form-type-new-password-confirm label { width: 9em; } -.page-user #content .inner-content > * .form-type-password-confirm .password-parent, -.page-user-edit #content .inner-content > * .form-type-password-confirm .password-parent, -.page-user-password #content .inner-content > * .form-type-password-confirm .password-parent, -.page-user-reset #content .inner-content > * .form-type-password-confirm .password-parent, -.page-toboggan #content .inner-content > * .form-type-password-confirm .password-parent, -.page-user #content .inner-content > * .form-type-new-password-confirm .password-parent, -.page-user-edit #content .inner-content > * .form-type-new-password-confirm .password-parent, -.page-user-password #content .inner-content > * .form-type-new-password-confirm .password-parent, -.page-user-reset #content .inner-content > * .form-type-new-password-confirm .password-parent, -.page-toboggan #content .inner-content > * .form-type-new-password-confirm .password-parent { +/* line 1871, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-type-password-confirm .password-parent, .page-user #content .inner-content > * .form-type-new-password-confirm .password-parent, .page-user-edit #content .inner-content > * .form-type-password-confirm .password-parent, .page-user-edit #content .inner-content > * .form-type-new-password-confirm .password-parent, .page-user-password #content .inner-content > * .form-type-password-confirm .password-parent, .page-user-password #content .inner-content > * .form-type-new-password-confirm .password-parent, .page-user-reset #content .inner-content > * .form-type-password-confirm .password-parent, .page-user-reset #content .inner-content > * .form-type-new-password-confirm .password-parent, .page-toboggan #content .inner-content > * .form-type-password-confirm .password-parent, .page-toboggan #content .inner-content > * .form-type-new-password-confirm .password-parent { width: auto; } -.page-user #content .inner-content > * .form-type-password-confirm .password-strength, -.page-user-edit #content .inner-content > * .form-type-password-confirm .password-strength, -.page-user-password #content .inner-content > * .form-type-password-confirm .password-strength, -.page-user-reset #content .inner-content > * .form-type-password-confirm .password-strength, -.page-toboggan #content .inner-content > * .form-type-password-confirm .password-strength, -.page-user #content .inner-content > * .form-type-new-password-confirm .password-strength, -.page-user-edit #content .inner-content > * .form-type-new-password-confirm .password-strength, -.page-user-password #content .inner-content > * .form-type-new-password-confirm .password-strength, -.page-user-reset #content .inner-content > * .form-type-new-password-confirm .password-strength, -.page-toboggan #content .inner-content > * .form-type-new-password-confirm .password-strength, -.page-user #content .inner-content > * .form-type-password-confirm .password-confirm, -.page-user-edit #content .inner-content > * .form-type-password-confirm .password-confirm, -.page-user-password #content .inner-content > * .form-type-password-confirm .password-confirm, -.page-user-reset #content .inner-content > * .form-type-password-confirm .password-confirm, -.page-toboggan #content .inner-content > * .form-type-password-confirm .password-confirm, -.page-user #content .inner-content > * .form-type-new-password-confirm .password-confirm, -.page-user-edit #content .inner-content > * .form-type-new-password-confirm .password-confirm, -.page-user-password #content .inner-content > * .form-type-new-password-confirm .password-confirm, -.page-user-reset #content .inner-content > * .form-type-new-password-confirm .password-confirm, -.page-toboggan #content .inner-content > * .form-type-new-password-confirm .password-confirm { +/* line 1872, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-type-password-confirm .password-strength, .page-user #content .inner-content > * .form-type-password-confirm .password-confirm, .page-user #content .inner-content > * .form-type-new-password-confirm .password-strength, .page-user #content .inner-content > * .form-type-new-password-confirm .password-confirm, .page-user-edit #content .inner-content > * .form-type-password-confirm .password-strength, .page-user-edit #content .inner-content > * .form-type-password-confirm .password-confirm, .page-user-edit #content .inner-content > * .form-type-new-password-confirm .password-strength, .page-user-edit #content .inner-content > * .form-type-new-password-confirm .password-confirm, .page-user-password #content .inner-content > * .form-type-password-confirm .password-strength, .page-user-password #content .inner-content > * .form-type-password-confirm .password-confirm, .page-user-password #content .inner-content > * .form-type-new-password-confirm .password-strength, .page-user-password #content .inner-content > * .form-type-new-password-confirm .password-confirm, .page-user-reset #content .inner-content > * .form-type-password-confirm .password-strength, .page-user-reset #content .inner-content > * .form-type-password-confirm .password-confirm, .page-user-reset #content .inner-content > * .form-type-new-password-confirm .password-strength, .page-user-reset #content .inner-content > * .form-type-new-password-confirm .password-confirm, .page-toboggan #content .inner-content > * .form-type-password-confirm .password-strength, .page-toboggan #content .inner-content > * .form-type-password-confirm .password-confirm, .page-toboggan #content .inner-content > * .form-type-new-password-confirm .password-strength, .page-toboggan #content .inner-content > * .form-type-new-password-confirm .password-confirm { width: 15em; margin-top: 0; } -.page-user #content .inner-content > * .form-type-checkbox input, -.page-user-edit #content .inner-content > * .form-type-checkbox input, -.page-user-password #content .inner-content > * .form-type-checkbox input, -.page-user-reset #content .inner-content > * .form-type-checkbox input, -.page-toboggan #content .inner-content > * .form-type-checkbox input { +/* line 1878, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-type-checkbox input, .page-user-edit #content .inner-content > * .form-type-checkbox input, .page-user-password #content .inner-content > * .form-type-checkbox input, .page-user-reset #content .inner-content > * .form-type-checkbox input, .page-toboggan #content .inner-content > * .form-type-checkbox input { margin: 0; } -.page-user #content .inner-content > * .form-type-checkbox label, -.page-user-edit #content .inner-content > * .form-type-checkbox label, -.page-user-password #content .inner-content > * .form-type-checkbox label, -.page-user-reset #content .inner-content > * .form-type-checkbox label, -.page-toboggan #content .inner-content > * .form-type-checkbox label { +/* line 1879, ../scss/styles.scss */ +.page-user #content .inner-content > * .form-type-checkbox label, .page-user-edit #content .inner-content > * .form-type-checkbox label, .page-user-password #content .inner-content > * .form-type-checkbox label, .page-user-reset #content .inner-content > * .form-type-checkbox label, .page-toboggan #content .inner-content > * .form-type-checkbox label { font-size: 14px; margin: 0; } -.page-user #content .inner-content > * #edit-language .form-item, -.page-user-edit #content .inner-content > * #edit-language .form-item, -.page-user-password #content .inner-content > * #edit-language .form-item, -.page-user-reset #content .inner-content > * #edit-language .form-item, -.page-toboggan #content .inner-content > * #edit-language .form-item { +/* line 1883, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-language .form-item, .page-user-edit #content .inner-content > * #edit-language .form-item, .page-user-password #content .inner-content > * #edit-language .form-item, .page-user-reset #content .inner-content > * #edit-language .form-item, .page-toboggan #content .inner-content > * #edit-language .form-item { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -10293,341 +7372,38 @@ a:hover { width: auto; margin-right: 1em; } -.page-user #content .inner-content > * #edit-language .form-item input, -.page-user-edit #content .inner-content > * #edit-language .form-item input, -.page-user-password #content .inner-content > * #edit-language .form-item input, -.page-user-reset #content .inner-content > * #edit-language .form-item input, -.page-toboggan #content .inner-content > * #edit-language .form-item input, -.page-user #content .inner-content > * #edit-language .form-item label, -.page-user-edit #content .inner-content > * #edit-language .form-item label, -.page-user-password #content .inner-content > * #edit-language .form-item label, -.page-user-reset #content .inner-content > * #edit-language .form-item label, -.page-toboggan #content .inner-content > * #edit-language .form-item label { +/* line 1885, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-language .form-item input, .page-user #content .inner-content > * #edit-language .form-item label, .page-user-edit #content .inner-content > * #edit-language .form-item input, .page-user-edit #content .inner-content > * #edit-language .form-item label, .page-user-password #content .inner-content > * #edit-language .form-item input, .page-user-password #content .inner-content > * #edit-language .form-item label, .page-user-reset #content .inner-content > * #edit-language .form-item input, .page-user-reset #content .inner-content > * #edit-language .form-item label, .page-toboggan #content .inner-content > * #edit-language .form-item input, .page-toboggan #content .inner-content > * #edit-language .form-item label { margin: 0; } -.page-user #content .inner-content > * select.form-select, -.page-user-edit #content .inner-content > * select.form-select, -.page-user-password #content .inner-content > * select.form-select, -.page-user-reset #content .inner-content > * select.form-select, -.page-toboggan #content .inner-content > * select.form-select { +/* line 1889, ../scss/styles.scss */ +.page-user #content .inner-content > * select.form-select, .page-user-edit #content .inner-content > * select.form-select, .page-user-password #content .inner-content > * select.form-select, .page-user-reset #content .inner-content > * select.form-select, .page-toboggan #content .inner-content > * select.form-select { width: auto; padding: 2px 4px; height: auto; } -.page-user #content .inner-content > * div.description, -.page-user-edit #content .inner-content > * div.description, -.page-user-password #content .inner-content > * div.description, -.page-user-reset #content .inner-content > * div.description, -.page-toboggan #content .inner-content > * div.description { +/* line 1893, ../scss/styles.scss */ +.page-user #content .inner-content > * div.description, .page-user-edit #content .inner-content > * div.description, .page-user-password #content .inner-content > * div.description, .page-user-reset #content .inner-content > * div.description, .page-toboggan #content .inner-content > * div.description { font-size: 10px; } -.page-user #content .inner-content > * div.form-actions, -.page-user-edit #content .inner-content > * div.form-actions, -.page-user-password #content .inner-content > * div.form-actions, -.page-user-reset #content .inner-content > * div.form-actions, -.page-toboggan #content .inner-content > * div.form-actions { +/* line 1896, ../scss/styles.scss */ +.page-user #content .inner-content > * div.form-actions, .page-user-edit #content .inner-content > * div.form-actions, .page-user-password #content .inner-content > * div.form-actions, .page-user-reset #content .inner-content > * div.form-actions, .page-toboggan #content .inner-content > * div.form-actions { margin: 0; text-align: right; padding: 1em 0.5em; } -.page-user #content .inner-content > * input#edit-submit, -.page-user-edit #content .inner-content > * input#edit-submit, -.page-user-password #content .inner-content > * input#edit-submit, -.page-user-reset #content .inner-content > * input#edit-submit, -.page-toboggan #content .inner-content > * input#edit-submit { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - 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); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05) #000000; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.page-user #content .inner-content > * input#edit-submit:hover, -.page-user-edit #content .inner-content > * input#edit-submit:hover, -.page-user-password #content .inner-content > * input#edit-submit:hover, -.page-user-reset #content .inner-content > * input#edit-submit:hover, -.page-toboggan #content .inner-content > * input#edit-submit:hover, -.page-user #content .inner-content > * input#edit-submit:focus, -.page-user-edit #content .inner-content > * input#edit-submit:focus, -.page-user-password #content .inner-content > * input#edit-submit:focus, -.page-user-reset #content .inner-content > * input#edit-submit:focus, -.page-toboggan #content .inner-content > * input#edit-submit:focus, -.page-user #content .inner-content > * input#edit-submit:active, -.page-user-edit #content .inner-content > * input#edit-submit:active, -.page-user-password #content .inner-content > * input#edit-submit:active, -.page-user-reset #content .inner-content > * input#edit-submit:active, -.page-toboggan #content .inner-content > * input#edit-submit:active, -.page-user #content .inner-content > * input#edit-submit.active, -.page-user-edit #content .inner-content > * input#edit-submit.active, -.page-user-password #content .inner-content > * input#edit-submit.active, -.page-user-reset #content .inner-content > * input#edit-submit.active, -.page-toboggan #content .inner-content > * input#edit-submit.active, -.page-user #content .inner-content > * input#edit-submit.disabled, -.page-user-edit #content .inner-content > * input#edit-submit.disabled, -.page-user-password #content .inner-content > * input#edit-submit.disabled, -.page-user-reset #content .inner-content > * input#edit-submit.disabled, -.page-toboggan #content .inner-content > * input#edit-submit.disabled, -.page-user #content .inner-content > * input#edit-submit[disabled], -.page-user-edit #content .inner-content > * input#edit-submit[disabled], -.page-user-password #content .inner-content > * input#edit-submit[disabled], -.page-user-reset #content .inner-content > * input#edit-submit[disabled], -.page-toboggan #content .inner-content > * input#edit-submit[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.page-user #content .inner-content > * input#edit-submit:active, -.page-user-edit #content .inner-content > * input#edit-submit:active, -.page-user-password #content .inner-content > * input#edit-submit:active, -.page-user-reset #content .inner-content > * input#edit-submit:active, -.page-toboggan #content .inner-content > * input#edit-submit:active, -.page-user #content .inner-content > * input#edit-submit.active, -.page-user-edit #content .inner-content > * input#edit-submit.active, -.page-user-password #content .inner-content > * input#edit-submit.active, -.page-user-reset #content .inner-content > * input#edit-submit.active, -.page-toboggan #content .inner-content > * input#edit-submit.active { - background-color: #cccccc \9; -} -.page-user #content .inner-content > * input#edit-submit:first-child, -.page-user-edit #content .inner-content > * input#edit-submit:first-child, -.page-user-password #content .inner-content > * input#edit-submit:first-child, -.page-user-reset #content .inner-content > * input#edit-submit:first-child, -.page-toboggan #content .inner-content > * input#edit-submit:first-child { - *margin-left: 0; -} -.page-user #content .inner-content > * input#edit-submit:hover, -.page-user-edit #content .inner-content > * input#edit-submit:hover, -.page-user-password #content .inner-content > * input#edit-submit:hover, -.page-user-reset #content .inner-content > * input#edit-submit:hover, -.page-toboggan #content .inner-content > * input#edit-submit:hover, -.page-user #content .inner-content > * input#edit-submit:focus, -.page-user-edit #content .inner-content > * input#edit-submit:focus, -.page-user-password #content .inner-content > * input#edit-submit:focus, -.page-user-reset #content .inner-content > * input#edit-submit:focus, -.page-toboggan #content .inner-content > * input#edit-submit:focus { - 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; -} -.page-user #content .inner-content > * input#edit-submit:focus, -.page-user-edit #content .inner-content > * input#edit-submit:focus, -.page-user-password #content .inner-content > * input#edit-submit:focus, -.page-user-reset #content .inner-content > * input#edit-submit:focus, -.page-toboggan #content .inner-content > * input#edit-submit:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.page-user #content .inner-content > * input#edit-submit.active, -.page-user-edit #content .inner-content > * input#edit-submit.active, -.page-user-password #content .inner-content > * input#edit-submit.active, -.page-user-reset #content .inner-content > * input#edit-submit.active, -.page-toboggan #content .inner-content > * input#edit-submit.active, -.page-user #content .inner-content > * input#edit-submit:active, -.page-user-edit #content .inner-content > * input#edit-submit:active, -.page-user-password #content .inner-content > * input#edit-submit:active, -.page-user-reset #content .inner-content > * input#edit-submit:active, -.page-toboggan #content .inner-content > * input#edit-submit:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -moz-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - -ms-box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; - box-shadow: 0 0 inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05) #000000; -} -.page-user #content .inner-content > * input#edit-submit.disabled, -.page-user-edit #content .inner-content > * input#edit-submit.disabled, -.page-user-password #content .inner-content > * input#edit-submit.disabled, -.page-user-reset #content .inner-content > * input#edit-submit.disabled, -.page-toboggan #content .inner-content > * input#edit-submit.disabled, -.page-user #content .inner-content > * input#edit-submit[disabled], -.page-user-edit #content .inner-content > * input#edit-submit[disabled], -.page-user-password #content .inner-content > * input#edit-submit[disabled], -.page-user-reset #content .inner-content > * input#edit-submit[disabled], -.page-toboggan #content .inner-content > * input#edit-submit[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-opacity: 65; - -khtml-opacity: 65; - -moz-opacity: 65; - opacity: 65; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); - -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; - -webkit-box-shadow: 0 0 none #000000; - -moz-box-shadow: 0 0 none #000000; - -ms-box-shadow: 0 0 none #000000; - box-shadow: 0 0 none #000000; -} -.page-user #content .inner-content > * input#edit-submit .label, -.page-user-edit #content .inner-content > * input#edit-submit .label, -.page-user-password #content .inner-content > * input#edit-submit .label, -.page-user-reset #content .inner-content > * input#edit-submit .label, -.page-toboggan #content .inner-content > * input#edit-submit .label, -.page-user #content .inner-content > * input#edit-submit .badge, -.page-user-edit #content .inner-content > * input#edit-submit .badge, -.page-user-password #content .inner-content > * input#edit-submit .badge, -.page-user-reset #content .inner-content > * input#edit-submit .badge, -.page-toboggan #content .inner-content > * input#edit-submit .badge { - position: relative; - top: -1px; -} -.page-user #content .inner-content > * input#edit-submit:hover, -.page-user-edit #content .inner-content > * input#edit-submit:hover, -.page-user-password #content .inner-content > * input#edit-submit:hover, -.page-user-reset #content .inner-content > * input#edit-submit:hover, -.page-toboggan #content .inner-content > * input#edit-submit:hover, -.page-user #content .inner-content > * input#edit-submit:focus, -.page-user-edit #content .inner-content > * input#edit-submit:focus, -.page-user-password #content .inner-content > * input#edit-submit:focus, -.page-user-reset #content .inner-content > * input#edit-submit:focus, -.page-toboggan #content .inner-content > * input#edit-submit:focus, -.page-user #content .inner-content > * input#edit-submit:active, -.page-user-edit #content .inner-content > * input#edit-submit:active, -.page-user-password #content .inner-content > * input#edit-submit:active, -.page-user-reset #content .inner-content > * input#edit-submit:active, -.page-toboggan #content .inner-content > * input#edit-submit:active, -.page-user #content .inner-content > * input#edit-submit.active, -.page-user-edit #content .inner-content > * input#edit-submit.active, -.page-user-password #content .inner-content > * input#edit-submit.active, -.page-user-reset #content .inner-content > * input#edit-submit.active, -.page-toboggan #content .inner-content > * input#edit-submit.active, -.page-user #content .inner-content > * input#edit-submit.disabled, -.page-user-edit #content .inner-content > * input#edit-submit.disabled, -.page-user-password #content .inner-content > * input#edit-submit.disabled, -.page-user-reset #content .inner-content > * input#edit-submit.disabled, -.page-toboggan #content .inner-content > * input#edit-submit.disabled, -.page-user #content .inner-content > * input#edit-submit[disabled], -.page-user-edit #content .inner-content > * input#edit-submit[disabled], -.page-user-password #content .inner-content > * input#edit-submit[disabled], -.page-user-reset #content .inner-content > * input#edit-submit[disabled], -.page-toboggan #content .inner-content > * input#edit-submit[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.page-user #content .inner-content > * input#edit-submit:active, -.page-user-edit #content .inner-content > * input#edit-submit:active, -.page-user-password #content .inner-content > * input#edit-submit:active, -.page-user-reset #content .inner-content > * input#edit-submit:active, -.page-toboggan #content .inner-content > * input#edit-submit:active, -.page-user #content .inner-content > * input#edit-submit.active, -.page-user-edit #content .inner-content > * input#edit-submit.active, -.page-user-password #content .inner-content > * input#edit-submit.active, -.page-user-reset #content .inner-content > * input#edit-submit.active, -.page-toboggan #content .inner-content > * input#edit-submit.active { - background-color: #408140 \9; -} -.page-user #content .inner-content > * input#edit-submit .caret, -.page-user-edit #content .inner-content > * input#edit-submit .caret, -.page-user-password #content .inner-content > * input#edit-submit .caret, -.page-user-reset #content .inner-content > * input#edit-submit .caret, -.page-toboggan #content .inner-content > * input#edit-submit .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.page-user #content .inner-content > * #edit-profile-adherent-field-first-name, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-first-name, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-first-name, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-first-name, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-first-name, -.page-user #content .inner-content > * #edit-profile-adherent-field-name, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-name, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-name, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-name, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-name, -.page-user #content .inner-content > * #edit-profile-adherent-field-private-quality, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-private-quality, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-private-quality, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-private-quality, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-private-quality, -.page-user #content .inner-content > * #edit-profile-adherent-field-service, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-service, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-service, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-service, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-service, -.page-user #content .inner-content > * #edit-profile-adherent-field-employee, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-employee, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-employee, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-employee, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-employee, -.page-user #content .inner-content > * #edit-profile-adherent-field-naf, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf, -.page-user #content .inner-content > * #edit-profile-adherent-field-siret, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-siret, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret { +/* line 1903, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-first-name, .page-user #content .inner-content > * #edit-profile-adherent-field-name, +.page-user #content .inner-content > * #edit-profile-adherent-field-private-quality, .page-user #content .inner-content > * #edit-profile-adherent-field-service, .page-user #content .inner-content > * #edit-profile-adherent-field-employee, +.page-user #content .inner-content > * #edit-profile-adherent-field-naf, .page-user #content .inner-content > * #edit-profile-adherent-field-siret, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-first-name, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-name, +.page-user-edit #content .inner-content > * #edit-profile-adherent-field-private-quality, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-service, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-employee, +.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret, .page-user-password #content .inner-content > * #edit-profile-adherent-field-first-name, .page-user-password #content .inner-content > * #edit-profile-adherent-field-name, +.page-user-password #content .inner-content > * #edit-profile-adherent-field-private-quality, .page-user-password #content .inner-content > * #edit-profile-adherent-field-service, .page-user-password #content .inner-content > * #edit-profile-adherent-field-employee, +.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf, .page-user-password #content .inner-content > * #edit-profile-adherent-field-siret, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-first-name, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-name, +.page-user-reset #content .inner-content > * #edit-profile-adherent-field-private-quality, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-service, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-employee, +.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-first-name, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-name, +.page-toboggan #content .inner-content > * #edit-profile-adherent-field-private-quality, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-service, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-employee, +.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -10637,112 +7413,53 @@ a:hover { width: auto; margin: 0 1em 0.5em 0; } -.page-user #content .inner-content > * #edit-profile-adherent-field-first-name div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-first-name div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-first-name div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-first-name div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-first-name div, -.page-user #content .inner-content > * #edit-profile-adherent-field-name div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-name div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-name div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-name div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-name div, -.page-user #content .inner-content > * #edit-profile-adherent-field-private-quality div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-private-quality div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-private-quality div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-private-quality div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-private-quality div, -.page-user #content .inner-content > * #edit-profile-adherent-field-service div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-service div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-service div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-service div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-service div, -.page-user #content .inner-content > * #edit-profile-adherent-field-employee div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-employee div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-employee div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-employee div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-employee div, -.page-user #content .inner-content > * #edit-profile-adherent-field-naf div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf div, -.page-user #content .inner-content > * #edit-profile-adherent-field-siret div, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret div, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-siret div, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret div, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret div { +/* line 1907, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-first-name div, .page-user #content .inner-content > * #edit-profile-adherent-field-name div, +.page-user #content .inner-content > * #edit-profile-adherent-field-private-quality div, .page-user #content .inner-content > * #edit-profile-adherent-field-service div, .page-user #content .inner-content > * #edit-profile-adherent-field-employee div, +.page-user #content .inner-content > * #edit-profile-adherent-field-naf div, .page-user #content .inner-content > * #edit-profile-adherent-field-siret div, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-first-name div, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-name div, +.page-user-edit #content .inner-content > * #edit-profile-adherent-field-private-quality div, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-service div, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-employee div, +.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf div, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret div, .page-user-password #content .inner-content > * #edit-profile-adherent-field-first-name div, .page-user-password #content .inner-content > * #edit-profile-adherent-field-name div, +.page-user-password #content .inner-content > * #edit-profile-adherent-field-private-quality div, .page-user-password #content .inner-content > * #edit-profile-adherent-field-service div, .page-user-password #content .inner-content > * #edit-profile-adherent-field-employee div, +.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf div, .page-user-password #content .inner-content > * #edit-profile-adherent-field-siret div, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-first-name div, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-name div, +.page-user-reset #content .inner-content > * #edit-profile-adherent-field-private-quality div, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-service div, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-employee div, +.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf div, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret div, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-first-name div, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-name div, +.page-toboggan #content .inner-content > * #edit-profile-adherent-field-private-quality div, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-service div, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-employee div, +.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf div, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret div { width: auto; margin: 0; padding: 0; } -.page-user #content .inner-content > * #edit-profile-adherent-field-name label, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-name label, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-name label, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-name label, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-name label, -.page-user #content .inner-content > * #edit-profile-adherent-field-service label, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-service label, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-service label, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-service label, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-service label, -.page-user #content .inner-content > * #edit-profile-adherent-field-naf label, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf label, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf label, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf label, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf label, -.page-user #content .inner-content > * #edit-profile-adherent-field-siret label, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret label, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-siret label, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret label, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret label, -.page-user #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, -.page-user-edit #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, -.page-user-password #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, -.page-user-reset #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, -.page-toboggan #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label { +/* line 1913, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-name label, .page-user #content .inner-content > * #edit-profile-adherent-field-service label, +.page-user #content .inner-content > * #edit-profile-adherent-field-naf label, .page-user #content .inner-content > * #edit-profile-adherent-field-siret label, .page-user #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-name label, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-service label, +.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf label, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret label, .page-user-edit #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, .page-user-password #content .inner-content > * #edit-profile-adherent-field-name label, .page-user-password #content .inner-content > * #edit-profile-adherent-field-service label, +.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf label, .page-user-password #content .inner-content > * #edit-profile-adherent-field-siret label, .page-user-password #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-name label, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-service label, +.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf label, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret label, .page-user-reset #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-name label, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-service label, +.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf label, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret label, .page-toboggan #content .inner-content > * .form-item-profile-adherent-field-adresse-und-0-locality label { min-width: auto; } -.page-user #content .inner-content > * #edit-profile-adherent-field-siret input, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret input, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-siret input, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret input, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret input { +/* line 1916, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-siret input, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-siret input, .page-user-password #content .inner-content > * #edit-profile-adherent-field-siret input, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-siret input, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-siret input { width: 8em; } -.page-user #content .inner-content > * #edit-profile-adherent-field-naf input, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf input, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-naf input, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf input, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf input { +/* line 1917, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-naf input, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-naf input, .page-user-password #content .inner-content > * #edit-profile-adherent-field-naf input, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-naf input, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-naf input { width: 13em; } -.page-user #content .inner-content > * #edit-profile-adherent-field-organization, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-organization, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-organization, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-organization, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-organization { +/* line 1919, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-organization, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-organization, .page-user-password #content .inner-content > * #edit-profile-adherent-field-organization, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-organization, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-organization { margin: 2em 0 0 0; } -.page-user #content .inner-content > * #edit-profile-adherent-field-organization input, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-organization input, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-organization input, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-organization input, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-organization input { +/* line 1919, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-organization input, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-organization input, .page-user-password #content .inner-content > * #edit-profile-adherent-field-organization input, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-organization input, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-organization input { width: 35em; } -.page-user #content .inner-content > * #edit-profile-adherent-field-employee input, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-employee input, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-employee input, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-employee input, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-employee input { +/* line 1921, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-employee input, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-employee input, .page-user-password #content .inner-content > * #edit-profile-adherent-field-employee input, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-employee input, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-employee input { width: 4em; } -.page-user #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number { +/* line 1925, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, .page-user-password #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-private-phone .form-phone-number { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -10750,33 +7467,21 @@ a:hover { *display: inline; vertical-align: middle; } -.page-user #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input { +/* line 1932, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, .page-user-password #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-adresse .street-block input { width: 35em; } -.page-user #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item { +/* line 1935, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, .page-user-password #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-adresse .locality-block .form-item { width: auto; margin-right: 1em; } -.page-user #content .inner-content > * #edit-profile-adherent-field-user-website, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-user-website, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-user-website, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-user-website, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-user-website { +/* line 1939, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-user-website, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-user-website, .page-user-password #content .inner-content > * #edit-profile-adherent-field-user-website, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-user-website, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-user-website { margin: 2em 0 0 0; } -.page-user #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > * { +/* line 1941, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, .page-user-password #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > *, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-user-website .form-item > * { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -10784,31 +7489,31 @@ a:hover { *display: inline; vertical-align: middle; } -.page-user #content .inner-content > * #edit-profile-adherent-field-user-website input, -.page-user-edit #content .inner-content > * #edit-profile-adherent-field-user-website input, -.page-user-password #content .inner-content > * #edit-profile-adherent-field-user-website input, -.page-user-reset #content .inner-content > * #edit-profile-adherent-field-user-website input, -.page-toboggan #content .inner-content > * #edit-profile-adherent-field-user-website input { +/* line 1942, ../scss/styles.scss */ +.page-user #content .inner-content > * #edit-profile-adherent-field-user-website input, .page-user-edit #content .inner-content > * #edit-profile-adherent-field-user-website input, .page-user-password #content .inner-content > * #edit-profile-adherent-field-user-website input, .page-user-reset #content .inner-content > * #edit-profile-adherent-field-user-website input, .page-toboggan #content .inner-content > * #edit-profile-adherent-field-user-website input { width: 35em; } -.page-user #content .inner-content > *.profile h3, -.page-user-edit #content .inner-content > *.profile h3, -.page-user-password #content .inner-content > *.profile h3, -.page-user-reset #content .inner-content > *.profile h3, -.page-toboggan #content .inner-content > *.profile h3 { +/* line 1946, ../scss/styles.scss */ +.page-user #content .inner-content > *.profile h3, .page-user-edit #content .inner-content > *.profile h3, .page-user-password #content .inner-content > *.profile h3, .page-user-reset #content .inner-content > *.profile h3, .page-toboggan #content .inner-content > *.profile h3 { border: 0 solid transparent; } -.page-user #content .inner-content > *.profile .field-label, -.page-user-edit #content .inner-content > *.profile .field-label, -.page-user-password #content .inner-content > *.profile .field-label, -.page-user-reset #content .inner-content > *.profile .field-label, -.page-toboggan #content .inner-content > *.profile .field-label { +/* line 1947, ../scss/styles.scss */ +.page-user #content .inner-content > *.profile .field-label, .page-user-edit #content .inner-content > *.profile .field-label, .page-user-password #content .inner-content > *.profile .field-label, .page-user-reset #content .inner-content > *.profile .field-label, .page-toboggan #content .inner-content > *.profile .field-label { display: inline; } -/** SIMPLENEWS */ + +/* + _____ _____ _____ _____ __ _____ _____ _____ _ _ _ _____ +| __| | | _ | | | __| | | __| | | | __| +|__ |- -| | | | __| |__| __| | | | __| | | |__ | +|_____|_____|_|_|_|__| |_____|_____|_|___|_____|_____|_____| + +*/ +/* line 1961, ../scss/styles.scss */ body.node-type-simplenews #content .inner-content { text-align: center; } +/* line 1964, ../scss/styles.scss */ body.node-type-simplenews #content article.node.node-simplenews { display: moz-inline-stack; display: inline-block; @@ -10818,13 +7523,23 @@ body.node-type-simplenews #content article.node.node-simplenews { max-width: 600px; padding: 1em 0; } +/* line 1968, ../scss/styles.scss */ body.node-type-simplenews #content article.node.node-simplenews tbody { border-top: 0px; } -/** PAGE CONTACT */ + +/* + _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| _ | _ | __| __| | | | | |_ _| _ | |_ _| +| __| | | | __| | --| | | | | | | | | | --| | | +|__| |__|__|_____|_____| |_____|_____|_|___| |_| |__|__|_____| |_| + +*/ +/* line 1983, ../scss/styles.scss */ .page-node-11175 #main { - background: #ffffff url('../img/bg-contact.gif') no-repeat bottom right; + background: #fff url("../img/bg-contact.gif") no-repeat bottom right; } +/* line 1987, ../scss/styles.scss */ .page-node-11175 #main .field-name-body p { display: moz-inline-stack; display: inline-block; @@ -10833,15 +7548,21 @@ body.node-type-simplenews #content article.node.node-simplenews tbody { *display: inline; margin: 15px; } +/* line 1989, ../scss/styles.scss */ .page-node-11175 #main .field-name-body p strong { font-size: 18px; } -/** PRICING */ -@media screen and (min-width: 480px) { - body.page-node-11187 .node-11187 .field-name-body div.column, - body.page-node-11187 .node-11187 .field-name-body div.column-demi, - body.page-node-11187 .node-11187 .field-name-body div.column-full, - body.page-node-11187 .node-11187 .field-name-body div.column-auto { + +/* + _____ _____ _____ _____ _____ _____ _____ +| _ | __ | | | | | | __| +| __| -|- -| --|- -| | | | | | +|__| |__|__|_____|_____|_____|_|___|_____| + +*/ +@media only screen and (min-width: 40.063em) { + /* line 2007, ../scss/styles.scss */ + body.page-node-11187 .node-11187 .field-name-body div.column, body.page-node-11187 .node-11187 .field-name-body div.column-demi, body.page-node-11187 .node-11187 .field-name-body div.column-full, body.page-node-11187 .node-11187 .field-name-body div.column-auto { display: moz-inline-stack; display: inline-block; vertical-align: top; @@ -10849,171 +7570,149 @@ body.node-type-simplenews #content article.node.node-simplenews tbody { *display: inline; margin: 10px; } + /* line 2010, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column { width: 22.4%; } + /* line 2012, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column ul.list-text { min-height: 170px; } + /* line 2014, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-demi { width: 46%; } + /* line 2016, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-demi ul.list-text { min-height: 110px; } + /* line 2018, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-full { width: 92%; } + /* line 2022, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-auto { width: auto; max-width: 98%; } + /* line 2029, ../scss/styles.scss */ + body.page-node-11187 #block-materio-user-user-register { + width: 600px; + margin: 0 auto; + } } -@media screen and (max-width: 479px) { +@media only screen and (max-width: 40em) { + /* line 2036, ../scss/styles.scss */ body.page-node-11187 #block-system-help { text-align: center; } } +/* line 2040, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body { text-align: center; } +/* line 2042, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body > * { text-align: left; } -body.page-node-11187 .node-11187 .field-name-body div.column, -body.page-node-11187 .node-11187 .field-name-body div.column-demi, -body.page-node-11187 .node-11187 .field-name-body div.column-full, -body.page-node-11187 .node-11187 .field-name-body div.column-auto { +/* line 2043, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column, body.page-node-11187 .node-11187 .field-name-body div.column-demi, body.page-node-11187 .node-11187 .field-name-body div.column-full, body.page-node-11187 .node-11187 .field-name-body div.column-auto { position: relative; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; - -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 0 6px rgba(0, 0, 0, 0.5); box-shadow: 0 0 6px rgba(0, 0, 0, 0.5); overflow: hidden; } -.ie8 body.page-node-11187 .node-11187 .field-name-body div.column, -.ie8 body.page-node-11187 .node-11187 .field-name-body div.column-demi, -.ie8 body.page-node-11187 .node-11187 .field-name-body div.column-full, -.ie8 body.page-node-11187 .node-11187 .field-name-body div.column-auto { +/* line 2046, ../scss/styles.scss */ +.ie8 body.page-node-11187 .node-11187 .field-name-body div.column, .ie8 body.page-node-11187 .node-11187 .field-name-body div.column-demi, .ie8 body.page-node-11187 .node-11187 .field-name-body div.column-full, .ie8 body.page-node-11187 .node-11187 .field-name-body div.column-auto { max-width: 500px; margin: auto; margin-bottom: 15px; border: 1px solid #C6C6C6; } -body.page-node-11187 .node-11187 .field-name-body div.column > *, -body.page-node-11187 .node-11187 .field-name-body div.column-demi > *, -body.page-node-11187 .node-11187 .field-name-body div.column-full > *, -body.page-node-11187 .node-11187 .field-name-body div.column-auto > * { +/* line 2049, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column > *, body.page-node-11187 .node-11187 .field-name-body div.column-demi > *, body.page-node-11187 .node-11187 .field-name-body div.column-full > *, body.page-node-11187 .node-11187 .field-name-body div.column-auto > * { padding: 0 10px; } -body.page-node-11187 .node-11187 .field-name-body div.column img, -body.page-node-11187 .node-11187 .field-name-body div.column-demi img, -body.page-node-11187 .node-11187 .field-name-body div.column-full img, -body.page-node-11187 .node-11187 .field-name-body div.column-auto img { +/* line 2050, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column img, body.page-node-11187 .node-11187 .field-name-body div.column-demi img, body.page-node-11187 .node-11187 .field-name-body div.column-full img, body.page-node-11187 .node-11187 .field-name-body div.column-auto img { float: left; padding: 0; } -body.page-node-11187 .node-11187 .field-name-body div.column h2, -body.page-node-11187 .node-11187 .field-name-body div.column-demi h2, -body.page-node-11187 .node-11187 .field-name-body div.column-full h2, -body.page-node-11187 .node-11187 .field-name-body div.column-auto h2 { +/* line 2051, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column h2, body.page-node-11187 .node-11187 .field-name-body div.column-demi h2, body.page-node-11187 .node-11187 .field-name-body div.column-full h2, body.page-node-11187 .node-11187 .field-name-body div.column-auto h2 { text-align: left; margin: 5px 0 0; } -body.page-node-11187 .node-11187 .field-name-body div.column .subtitle, -body.page-node-11187 .node-11187 .field-name-body div.column-demi .subtitle, -body.page-node-11187 .node-11187 .field-name-body div.column-full .subtitle, -body.page-node-11187 .node-11187 .field-name-body div.column-auto .subtitle { +/* line 2052, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column .subtitle, body.page-node-11187 .node-11187 .field-name-body div.column-demi .subtitle, body.page-node-11187 .node-11187 .field-name-body div.column-full .subtitle, body.page-node-11187 .node-11187 .field-name-body div.column-auto .subtitle { padding: 0 0 0 1em; font-size: 18px; font-style: italic; font-weight: bold; line-height: 1; } -body.page-node-11187 .node-11187 .field-name-body div.column ul, -body.page-node-11187 .node-11187 .field-name-body div.column-demi ul, -body.page-node-11187 .node-11187 .field-name-body div.column-full ul, -body.page-node-11187 .node-11187 .field-name-body div.column-auto ul { +/* line 2056, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column ul, body.page-node-11187 .node-11187 .field-name-body div.column-demi ul, body.page-node-11187 .node-11187 .field-name-body div.column-full ul, body.page-node-11187 .node-11187 .field-name-body div.column-auto ul { margin: 0; padding: 0 15px; } -body.page-node-11187 .node-11187 .field-name-body div.column li, -body.page-node-11187 .node-11187 .field-name-body div.column-demi li, -body.page-node-11187 .node-11187 .field-name-body div.column-full li, -body.page-node-11187 .node-11187 .field-name-body div.column-auto li { +/* line 2057, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column li, body.page-node-11187 .node-11187 .field-name-body div.column-demi li, body.page-node-11187 .node-11187 .field-name-body div.column-full li, body.page-node-11187 .node-11187 .field-name-body div.column-auto li { list-style: none; font-size: 12px; } -body.page-node-11187 .node-11187 .field-name-body div.column li:before, -body.page-node-11187 .node-11187 .field-name-body div.column-demi li:before, -body.page-node-11187 .node-11187 .field-name-body div.column-full li:before, -body.page-node-11187 .node-11187 .field-name-body div.column-auto li:before { +/* line 2059, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column li:before, body.page-node-11187 .node-11187 .field-name-body div.column-demi li:before, body.page-node-11187 .node-11187 .field-name-body div.column-full li:before, body.page-node-11187 .node-11187 .field-name-body div.column-auto li:before { content: "+ "; font-weight: 900; } -body.page-node-11187 .node-11187 .field-name-body div.column .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-demi .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-full .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-auto .get-link { +/* line 2064, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-demi .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-full .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-auto .get-link { margin: 0; - -webkit-border-radius: 0 0 5px 5px; - -moz-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px 0 0 0; - -moz-border-radius: 0 0 5px 5px 0 0 0; border-radius: 0 0 5px 5px 0 0 0; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 1px solid #fff; min-height: 92px; } -body.page-node-11187 .node-11187 .field-name-body div.column .get-link a, -body.page-node-11187 .node-11187 .field-name-body div.column-demi .get-link a, -body.page-node-11187 .node-11187 .field-name-body div.column-full .get-link a, -body.page-node-11187 .node-11187 .field-name-body div.column-auto .get-link a { +/* line 2066, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column .get-link a, body.page-node-11187 .node-11187 .field-name-body div.column-demi .get-link a, body.page-node-11187 .node-11187 .field-name-body div.column-full .get-link a, body.page-node-11187 .node-11187 .field-name-body div.column-auto .get-link a { display: block; width: 100%; padding: 15px 0; color: #1A1A1A; text-decoration: none; } -body.page-node-11187 .node-11187 .field-name-body div.column.gratos .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-demi.gratos .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-full.gratos .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-auto.gratos .get-link { +/* line 2068, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column.gratos .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-demi.gratos .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-full.gratos .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-auto.gratos .get-link { background-color: #4BA13D; } -body.page-node-11187 .node-11187 .field-name-body div.column.flocon .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-demi.flocon .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-full.flocon .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-auto.flocon .get-link { +/* line 2069, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column.flocon .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-demi.flocon .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-full.flocon .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-auto.flocon .get-link { background-color: #69CDCF; } -body.page-node-11187 .node-11187 .field-name-body div.column.etoile .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-demi.etoile .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-full.etoile .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-auto.etoile .get-link { +/* line 2070, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column.etoile .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-demi.etoile .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-full.etoile .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-auto.etoile .get-link { background-color: #D476AE; } -body.page-node-11187 .node-11187 .field-name-body div.column.cinqetoiles .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-demi.cinqetoiles .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-full.cinqetoiles .get-link, -body.page-node-11187 .node-11187 .field-name-body div.column-auto.cinqetoiles .get-link { +/* line 2071, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column.cinqetoiles .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-demi.cinqetoiles .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-full.cinqetoiles .get-link, body.page-node-11187 .node-11187 .field-name-body div.column-auto.cinqetoiles .get-link { background-color: #E6DE1C; } +/* line 2072, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column.ecole-de-neige, body.page-node-11187 .node-11187 .field-name-body div.column-demi.ecole-de-neige, body.page-node-11187 .node-11187 .field-name-body div.column-full.ecole-de-neige, body.page-node-11187 .node-11187 .field-name-body div.column-auto.ecole-de-neige { + float: none; +} +/* line 2078, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column h2 { padding: 10px 0 0; font-size: 24px; } +/* line 2079, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column .subtitle { min-height: 3em; } +/* line 2080, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column .get-link { padding: 0; font-size: 24px; @@ -11023,100 +7722,116 @@ body.page-node-11187 .node-11187 .field-name-body div.column .get-link { cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; } +/* line 2084, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column .get-link span { font-size: 20px; } -body.page-node-11187 .node-11187 .field-name-body div.column .get-link:hover, -body.page-node-11187 .node-11187 .field-name-body div.column .get-link:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +body.page-node-11187 .node-11187 .field-name-body div.column .get-link:hover, body.page-node-11187 .node-11187 .field-name-body div.column .get-link:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column .get-link:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } +/* line 2089, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-demi h2 { padding: 10px 0 0; font-size: 24px; top: 0; } +/* line 2090, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-demi .subtitle { min-height: 2em; } +/* line 2091, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-demi ul { font-size: 14px; min-height: 120px; } +/* line 2092, ../scss/styles.scss */ body.page-node-11187 .node-11187 .field-name-body div.column-demi .get-link { font-size: 14px; text-align: left; padding: 0 1em; - background-color: #dddddd; + background-color: #ddd; } +/* line 2101, ../scss/styles.scss */ body.page-node-11187.logged-in .column.gratos .get-link { - cursor: auto!important; + cursor: auto !important; } +/* line 2103, ../scss/styles.scss */ body.page-node-11187.logged-in .column.gratos .get-link a { - display: none!important; + display: none !important; } +/* line 2106, ../scss/styles.scss */ body.page-node-11187.logged-in.role-6 .column.flocon .get-link { - cursor: auto!important; + cursor: auto !important; } +/* line 2108, ../scss/styles.scss */ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { - display: none!important; + display: none !important; } -/** ADHESION FORM */ + +/* + _____ ____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| _ | \| | | __| __| | | | | | __| | __ | | +| | | | | __|__ |- -| | | | | | | __| | | -| | | | +|__|__|____/|__|__|_____|_____|_____|_____|_|___| |__| |_____|__|__|_|_|_| + +*/ +/* line 2122, ../scss/styles.scss */ .node-11186 nav ul.links a.language-link { display: none; } + +/* line 2125, ../scss/styles.scss */ #webform-client-form-11186 { background-color: #e6e6e6; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; border-radius: 10px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; } -@media screen and (min-width: 768px) { +@media only screen and (min-width: 40.063em) { + /* line 2125, ../scss/styles.scss */ #webform-client-form-11186 { padding: 10px 30px; } + /* line 2128, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options { margin: 10px 0; } + /* line 2130, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options label { width: auto; } + /* line 2132, ../scss/styles.scss */ #webform-client-form-11186 fieldset { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; padding: 10px; } + /* line 2134, ../scss/styles.scss */ #webform-client-form-11186 fieldset fieldset { border: 0 solid #ddd; padding: 0; } + /* line 2136, ../scss/styles.scss */ #webform-client-form-11186 legend { margin: 0; font-size: 18px; font-weight: 700; } + /* line 2137, ../scss/styles.scss */ #webform-client-form-11186 .form-item { margin: 0 20px 0 0; } + /* line 2138, ../scss/styles.scss */ #webform-client-form-11186 label { font-size: 12px; width: 10em; @@ -11129,6 +7844,7 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { margin-right: 1em; border-bottom: 1px solid #cccccc; } + /* line 2139, ../scss/styles.scss */ #webform-client-form-11186 .description { font-size: 10px; width: 25em; @@ -11141,32 +7857,40 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { margin-left: 1em; color: #7f7f7f; } + /* line 2140, ../scss/styles.scss */ #webform-client-form-11186 input.form-text { width: 13em; } } -@media screen and (max-width: 767px) { +@media only screen and (min-width: 40.063em) and (max-width: 64em) { + /* line 2125, ../scss/styles.scss */ #webform-client-form-11186 { padding: 10px; } + /* line 2145, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options { margin: 0 0 10px 0; } + /* line 2147, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-item { width: 100%; } + /* line 2148, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options label { width: 75%; } + /* line 2150, ../scss/styles.scss */ #webform-client-form-11186 legend { margin: 0; font-size: 16px; font-weight: 700; } + /* line 2151, ../scss/styles.scss */ #webform-client-form-11186 .form-item { margin: 0; float: none; } + /* line 2152, ../scss/styles.scss */ #webform-client-form-11186 label { font-size: 12px; width: 30%; @@ -11178,14 +7902,16 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { vertical-align: middle; margin-right: 0.5em; } - #webform-client-form-11186 input.form-text, - #webform-client-form-11186 select.form-select { + /* line 2153, ../scss/styles.scss */ + #webform-client-form-11186 input.form-text, #webform-client-form-11186 select.form-select { width: 60%; } + /* line 2154, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-infos { font-size: 14px; } } +/* line 2159, ../scss/styles.scss */ #webform-client-form-11186 .fieldset-wrapper > .form-item { display: moz-inline-stack; display: inline-block; @@ -11193,6 +7919,7 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { zoom: 1; *display: inline; } +/* line 2161, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left { display: moz-inline-stack; display: inline-block; @@ -11202,6 +7929,7 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { width: 25%; border: none; } +/* line 2162, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right { display: moz-inline-stack; display: inline-block; @@ -11210,18 +7938,16 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { *display: inline; min-width: 70%; } +/* line 2166, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio { border: 1px solid #ddd; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; padding: 10px 5px; margin: 5px 0; background-color: #fff; } +/* line 2168, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio input { display: moz-inline-stack; display: inline-block; @@ -11229,8 +7955,9 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { zoom: 1; *display: inline; vertical-align: middle; - margin: 0 5px; + margin: 0px 5px; } +/* line 2169, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio label { font-size: 20px; font-weight: 700; @@ -11242,34 +7969,41 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { vertical-align: middle; margin: 0; } +/* line 2171, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio:hover { - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); } +/* line 2172, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio.form-item-submitted-column-left-membership-options:nth-child(1) { background-color: #69CDCF; } +/* line 2173, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio.form-item-submitted-column-left-membership-options:nth-child(2) { background-color: #D476AE; } +/* line 2174, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio.form-item-submitted-column-left-membership-options:nth-child(3) { background-color: #E6DE1C; } +/* line 2176, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options .form-type-radio.form-item-submitted-column-left-membership-options:not(.selected) { opacity: 0.4; } +/* line 2179, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options > label { width: 200px; font-size: 18px; font-weight: 700; } +/* line 2180, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-left--membership-options label { border: 0; } +/* line 2183, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--me--my-account-email { display: block; } +/* line 2188, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--company--administrative-e-mail .description { display: moz-inline-stack; display: inline-block; @@ -11277,9 +8011,11 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { zoom: 1; *display: inline; } +/* line 2191, ../scss/styles.scss */ #webform-client-form-11186 #addressfield-wrapper { margin-top: 1em; } +/* line 2192, ../scss/styles.scss */ #webform-client-form-11186 .street-block .form-item { display: moz-inline-stack; display: inline-block; @@ -11287,10 +8023,12 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { zoom: 1; *display: inline; } +/* line 2194, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--collaborators { margin: 20px 0; overflow: hidden; } +/* line 2196, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--collaborators fieldset { display: moz-inline-stack; display: inline-block; @@ -11299,18 +8037,23 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { *display: inline; width: 33%; } +/* line 2197, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--collaborators .form-item { display: block; } +/* line 2198, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--collaborators label { width: 6em; } +/* line 2199, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--collaborators input { width: 11em; } +/* line 2202, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-infos { margin: 20px 0; } +/* line 2204, ../scss/styles.scss */ #webform-client-form-11186 .form-actions { padding: 0; margin: 0; @@ -11318,38 +8061,33 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { background-color: transparent; text-align: left; } +/* line 2209, ../scss/styles.scss */ #webform-client-form-11186 .form-actions .form-submit { border: 2px solid #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; font-size: 18px; padding: 0.2em 1em 0.3em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; font-weight: bold; margin-bottom: 9px; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; } -#webform-client-form-11186 .form-actions .form-submit:hover, -#webform-client-form-11186 .form-actions .form-submit:focus { +/* line 66, ../scss/styles.scss */ +#webform-client-form-11186 .form-actions .form-submit:hover, #webform-client-form-11186 .form-actions .form-submit:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } +/* line 69, ../scss/styles.scss */ #webform-client-form-11186 .form-actions .form-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } +/* line 2219, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--news-letters > label { margin: 0; font-size: 18px; @@ -11357,6 +8095,7 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { border: none; line-height: 40px; } +/* line 2220, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--news-letters .form-item { display: moz-inline-stack; display: inline-block; @@ -11364,52 +8103,69 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { zoom: 1; *display: inline; } +/* line 2222, ../scss/styles.scss */ #webform-client-form-11186 #webform-component-column-right--news-letters .form-item label { width: auto; } -#webform-client-form-11186 #webform-component-column-right--news-letters .form-item input, -#webform-client-form-11186 #webform-component-column-right--news-letters .form-item label { +/* line 2223, ../scss/styles.scss */ +#webform-client-form-11186 #webform-component-column-right--news-letters .form-item input, #webform-client-form-11186 #webform-component-column-right--news-letters .form-item label { margin: 0; } +/* line 2227, ../scss/styles.scss */ #webform-client-form-11186 #edit-submitted-terms-of-services { margin-bottom: 0.5em; } -#webform-client-form-11186 #edit-submitted-terms-of-services input, -#webform-client-form-11186 #edit-submitted-terms-of-services label { +/* line 2229, ../scss/styles.scss */ +#webform-client-form-11186 #edit-submitted-terms-of-services input, #webform-client-form-11186 #edit-submitted-terms-of-services label { margin: 0 0.3em 0 0; } +/* line 2230, ../scss/styles.scss */ #webform-client-form-11186 #edit-submitted-terms-of-services label { width: auto; } -/** UC CART VIEW FORM */ + +/* + _____ _____ _____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ +| | | | | | _ | __ |_ _| | | | | __| | | | | __| | __ | | +| | | --| | --| | -| | | | | |- -| __| | | | | __| | | -| | | | +|_____|_____| |_____|__|__|__|__| |_| \___/|_____|_____|_____| |__| |_____|__|__|_|_|_| + +*/ +/* line 2241, ../scss/styles.scss */ #uc-cart-view-form { background-color: #e6e6e6; - padding: 10px 30px; + padding: 10px, 30px; display: inline-block; } +/* line 2247, ../scss/styles.scss */ #uc-cart-view-form table { width: auto; display: table; background-color: #fff; } +/* line 2251, ../scss/styles.scss */ #uc-cart-view-form table thead th { border-bottom: none; padding: 1em; } +/* line 2252, ../scss/styles.scss */ #uc-cart-view-form table tbody { border-top: none; } -#uc-cart-view-form table tbody tr.even, -#uc-cart-view-form table tbody tr.odd { +/* line 2254, ../scss/styles.scss */ +#uc-cart-view-form table tbody tr.even, #uc-cart-view-form table tbody tr.odd { background-color: #fff; border-bottom: none; } +/* line 2258, ../scss/styles.scss */ #uc-cart-view-form table tbody td { padding: 1em; } +/* line 2265, ../scss/styles.scss */ #uc-cart-view-form .form-type-uc-quantity input { width: 2em; } +/* line 2269, ../scss/styles.scss */ #uc-cart-view-form .form-actions { padding: 0; margin: 0; @@ -11419,106 +8175,102 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { display: block; width: 100%; } -#uc-cart-view-form .form-actions:before, -#uc-cart-view-form .form-actions:after { +/* line 2276, ../scss/styles.scss */ +#uc-cart-view-form .form-actions:before, #uc-cart-view-form .form-actions:after { display: block; } +/* line 2279, ../scss/styles.scss */ #uc-cart-view-form .form-actions .form-submit { font-size: 16px; font-weight: bold; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 2px solid #ccc; - background-color: #cccccc; + background-color: #ccc; color: #4D4D4D; cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; text-align: center; text-decoration: none; margin-left: 1em; } -#uc-cart-view-form .form-actions .form-submit:hover, -#uc-cart-view-form .form-actions .form-submit:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +#uc-cart-view-form .form-actions .form-submit:hover, #uc-cart-view-form .form-actions .form-submit:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ #uc-cart-view-form .form-actions .form-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } +/* line 2282, ../scss/styles.scss */ #uc-cart-view-form .form-actions .form-submit#edit-checkout--2 { font-size: 16px; font-weight: bold; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 2px solid #ccc; - background-color: #cccccc; + background-color: #ccc; color: #4D4D4D; + cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; text-align: center; text-decoration: none; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; border-color: #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; } -#uc-cart-view-form .form-actions .form-submit#edit-checkout--2:hover, -#uc-cart-view-form .form-actions .form-submit#edit-checkout--2:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +#uc-cart-view-form .form-actions .form-submit#edit-checkout--2:hover, #uc-cart-view-form .form-actions .form-submit#edit-checkout--2:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ #uc-cart-view-form .form-actions .form-submit#edit-checkout--2:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } -#uc-cart-view-form .form-actions .form-submit#edit-checkout--2:hover, -#uc-cart-view-form .form-actions .form-submit#edit-checkout--2:focus { +/* line 66, ../scss/styles.scss */ +#uc-cart-view-form .form-actions .form-submit#edit-checkout--2:hover, #uc-cart-view-form .form-actions .form-submit#edit-checkout--2:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } +/* line 69, ../scss/styles.scss */ #uc-cart-view-form .form-actions .form-submit#edit-checkout--2:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -/** UC CHECKOUT FORM */ + +/* + _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| | | | | | | | __| | | | | | |_ _| | __| | __ | | +| | | --| | --| | __| --| -| | | | | | | | __| | | -| | | | +|_____|_____| |_____|__|__|_____|_____|__|__|_____|_____| |_| |__| |_____|__|__|_|_|_| + +*/ +/* line 2296, ../scss/styles.scss */ #uc-cart-checkout-form { display: inline-block; background-color: #e6e6e6; - padding: 10px 30px; + padding: 10px, 30px; } +/* line 2309, ../scss/styles.scss */ #uc-cart-checkout-form fieldset.form-row { padding-bottom: 20px; margin-bottom: 20px; } +/* line 2315, ../scss/styles.scss */ #uc-cart-checkout-form fieldset.form-column { display: moz-inline-stack; display: inline-block; @@ -11528,14 +8280,17 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { max-width: 39%; margin: 15px 1em; } +/* line 2318, ../scss/styles.scss */ #uc-cart-checkout-form fieldset.form-column > .fieldset-wrapper > .form-wrapper { margin: 10px 0; } +/* line 2325, ../scss/styles.scss */ #uc-cart-checkout-form fieldset.form-column-right { border-left: 1px solid #ccc; margin-left: 2em; padding-left: 2em; } +/* line 2331, ../scss/styles.scss */ #uc-cart-checkout-form legend { margin: 0; font-size: 18px; @@ -11543,15 +8298,19 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { border: none; line-height: 2; } +/* line 2332, ../scss/styles.scss */ #uc-cart-checkout-form .fieldset-description { font-size: 12px; } +/* line 2333, ../scss/styles.scss */ #uc-cart-checkout-form .fieldset-wrapper { font-size: 12px; } +/* line 2334, ../scss/styles.scss */ #uc-cart-checkout-form .form-item { margin: 0 20px 0 0; } +/* line 2336, ../scss/styles.scss */ #uc-cart-checkout-form .description { font-size: 10px; width: 25em; @@ -11564,60 +8323,69 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { margin-left: 1em; color: #7f7f7f; } +/* line 2339, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane > .fieldset-wrapper { display: moz-inline-stack; display: inline-block; vertical-align: top; zoom: 1; *display: inline; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; padding: 10px; - background-color: #ffffff; + background-color: #fff; } +/* line 2346, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane table { font-size: 14px; min-width: 20em; } +/* line 2302, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane table td.price { width: 4em; } +/* line 2350, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane tbody { border: none; } +/* line 2351, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane tr { background-color: transparent; border: none; } +/* line 2352, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane td { padding: 0 5px; vertical-align: bottom; } +/* line 2355, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane td.products { width: auto; } +/* line 2356, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane td.products a { color: inherit; font-weight: 700; } +/* line 2358, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane td.products ul.product-description { margin: 0; font-size: 12px; } +/* line 2359, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane td.products li { list-style: none; } +/* line 2363, ../scss/styles.scss */ #uc-cart-checkout-form #cart-pane tr.subtotal td { font-size: 16px; font-weight: 700; } +/* line 2367, ../scss/styles.scss */ #uc-cart-checkout-form #customer-pane { width: 35em; } +/* line 2370, ../scss/styles.scss */ #uc-cart-checkout-form #billing-pane label { font-size: 12px; width: 8em; @@ -11630,22 +8398,22 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { margin-right: 1em; border-bottom: 1px solid #cccccc; } +/* line 2371, ../scss/styles.scss */ #uc-cart-checkout-form #billing-pane input.form-text { width: 13em; } +/* line 2378, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane { float: right; } +/* line 2381, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane .fieldset-wrapper { - background-color: #ffffff; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; + background-color: #fff; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; padding: 10px; } +/* line 2387, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div { float: none; border: none; @@ -11656,46 +8424,57 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { *display: inline; margin: 10px 0 20px; } +/* line 2390, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div table { font-size: 14px; min-width: 20em; } +/* line 2302, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div table td.price { width: 4em; } +/* line 2391, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div tbody { border: none; } +/* line 2392, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div td { padding: 0 5px; } +/* line 2396, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div tr td { font-weight: 500; } +/* line 2398, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #line-items-div tr.line-item-total td { font-size: 16px; font-weight: 700; text-align: right; } +/* line 2405, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #edit-panes-payment-payment-method label { width: auto; border-bottom: none; } +/* line 2406, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #edit-panes-payment-payment-method .form-item-panes-payment-payment-method { border: 1px solid #ddd; border-radius: 5px; margin: 0.5em; padding: 0.5em; } +/* line 2410, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #edit-panes-payment-payment-method .form-item-panes-payment-payment-method label { font-weight: bold; } +/* line 2414, ../scss/styles.scss */ #uc-cart-checkout-form #payment-pane #payment-details { width: 25em; border-top: none; padding: 0; margin: 0; } +/* line 2420, ../scss/styles.scss */ #uc-cart-checkout-form .form-actions { padding: 0; margin: 0; @@ -11703,140 +8482,153 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { background-color: transparent; text-align: right; } +/* line 2425, ../scss/styles.scss */ #uc-cart-checkout-form .form-actions .form-submit { font-size: 16px; font-weight: bold; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 2px solid #ccc; - background-color: #cccccc; + background-color: #ccc; color: #4D4D4D; cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; text-align: center; text-decoration: none; margin-left: 1em; } -#uc-cart-checkout-form .form-actions .form-submit:hover, -#uc-cart-checkout-form .form-actions .form-submit:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +#uc-cart-checkout-form .form-actions .form-submit:hover, #uc-cart-checkout-form .form-actions .form-submit:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ #uc-cart-checkout-form .form-actions .form-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } +/* line 2428, ../scss/styles.scss */ #uc-cart-checkout-form .form-actions .form-submit#edit-continue { font-size: 16px; font-weight: bold; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 2px solid #ccc; - background-color: #cccccc; + background-color: #ccc; color: #4D4D4D; + cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; text-align: center; text-decoration: none; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; border-color: #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; } -#uc-cart-checkout-form .form-actions .form-submit#edit-continue:hover, -#uc-cart-checkout-form .form-actions .form-submit#edit-continue:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +#uc-cart-checkout-form .form-actions .form-submit#edit-continue:hover, #uc-cart-checkout-form .form-actions .form-submit#edit-continue:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ #uc-cart-checkout-form .form-actions .form-submit#edit-continue:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } -#uc-cart-checkout-form .form-actions .form-submit#edit-continue:hover, -#uc-cart-checkout-form .form-actions .form-submit#edit-continue:focus { +/* line 66, ../scss/styles.scss */ +#uc-cart-checkout-form .form-actions .form-submit#edit-continue:hover, #uc-cart-checkout-form .form-actions .form-submit#edit-continue:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } +/* line 69, ../scss/styles.scss */ #uc-cart-checkout-form .form-actions .form-submit#edit-continue:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -/* UC CART && UC CHECKOUT VALIDATION */ + +/* + + _____ _____ _____ _____ _____ _____ +| | | | | | _ | __ |_ _| +| | | --| | --| | -| | | +|_____|_____| |_____|__|__|__|__| |_| + +&& + + _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ __ _____ ____ _____ _____ _____ _____ _____ +| | | | | | | | __| | | | | | |_ _| | | | _ | | | | \| _ |_ _| | | | | +| | | --| | --| | __| --| -| | | | | | | | | | | |__|- -| | | | | | |- -| | | | | | +|_____|_____| |_____|__|__|_____|_____|__|__|_____|_____| |_| \___/|__|__|_____|_____|____/|__|__| |_| |_____|_____|_|___| + +*/ +/* line 2455, ../scss/styles.scss */ .page-cart-checkout-review #content > .inner-content { display: inline-block; padding: 1em; } +/* line 2463, ../scss/styles.scss */ .page-cart-checkout-review #edit-actions { margin: 0; padding: 0; } -.page-cart-checkout-review #edit-actions:before, -.page-cart-checkout-review #edit-actions:after { +/* line 2465, ../scss/styles.scss */ +.page-cart-checkout-review #edit-actions:before, .page-cart-checkout-review #edit-actions:after { display: block; } +/* line 2469, ../scss/styles.scss */ .page-cart-checkout-review #review-instructions { width: 30em; padding: 1em 0; } +/* line 2475, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table { border: none; } +/* line 2477, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table .pane-title-row { border: none; background-color: transparent; text-align: left; font-size: 18px; } +/* line 2482, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table .pane-title-row td { padding: 1em 0 0 0; } +/* line 2485, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table table.cart-review tr.odd { background-color: transparent; border: none; } +/* line 2490, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table td.title-col { padding: 0; text-align: left; } +/* line 2494, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table td.data-col { padding: 0; width: 75%; } +/* line 2498, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table .review-button-row { border: none; background-color: transparent; } +/* line 2502, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table .review-button-row > td { padding: 3em 0 0 0; } +/* line 2506, ../scss/styles.scss */ .page-cart-checkout-review table.order-review-table .review-button-row form { margin: 0 0.5em 0 0; display: moz-inline-stack; @@ -11845,220 +8637,292 @@ body.page-node-11187.logged-in.role-6 .column.flocon .get-link a { zoom: 1; *display: inline; } +/* line 2513, ../scss/styles.scss */ .page-cart-checkout-review #edit-actions { border: 0px; background-color: transparent; text-align: right; } +/* line 2518, ../scss/styles.scss */ .page-cart-checkout-review input.form-submit { font-size: 16px; font-weight: bold; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 2px solid #ccc; - background-color: #cccccc; + background-color: #ccc; color: #4D4D4D; cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; text-align: center; text-decoration: none; margin-left: 1em; } -.page-cart-checkout-review input.form-submit:hover, -.page-cart-checkout-review input.form-submit:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +.page-cart-checkout-review input.form-submit:hover, .page-cart-checkout-review input.form-submit:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ .page-cart-checkout-review input.form-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } +/* line 2521, ../scss/styles.scss */ .page-cart-checkout-review input.form-submit#edit-submit { font-size: 16px; font-weight: bold; padding: 0.1em 0.3em 0.2em; - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; border-radius: 0.3em; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; border: 2px solid #ccc; - background-color: #cccccc; + background-color: #ccc; color: #4D4D4D; + cursor: pointer; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); -webkit-transition: text-shadow 0.3s ease-out; - -moz-transition: text-shadow 0.3s ease-out; - -o-transition: text-shadow 0.3s ease-out; - transition: text-shadow 0.3s ease-out; + transition: text-shadow 0.3s ease-out; text-align: center; text-decoration: none; cursor: pointer; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); -webkit-transition: text-shadow 0.2s ease-out; - -moz-transition: text-shadow 0.2s ease-out; - -o-transition: text-shadow 0.2s ease-out; - transition: text-shadow 0.2s ease-out; + transition: text-shadow 0.2s ease-out; border-color: #69CDCF; - background-color: #69cdcf; + background-color: #69CDCF; color: #fff; } -.page-cart-checkout-review input.form-submit#edit-submit:hover, -.page-cart-checkout-review input.form-submit#edit-submit:focus { - text-shadow: 0 0 3px #ffffff; +/* line 53, ../scss/styles.scss */ +.page-cart-checkout-review input.form-submit#edit-submit:hover, .page-cart-checkout-review input.form-submit#edit-submit:focus { + text-shadow: 0 0 3px white; } +/* line 56, ../scss/styles.scss */ .page-cart-checkout-review input.form-submit#edit-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(255, 255, 255, 0.2); } -.page-cart-checkout-review input.form-submit#edit-submit:hover, -.page-cart-checkout-review input.form-submit#edit-submit:focus { +/* line 66, ../scss/styles.scss */ +.page-cart-checkout-review input.form-submit#edit-submit:hover, .page-cart-checkout-review input.form-submit#edit-submit:focus { text-shadow: 0 0 2px rgba(0, 0, 0, 0.8); } +/* line 69, ../scss/styles.scss */ .page-cart-checkout-review input.form-submit#edit-submit:active { -webkit-transition: text-shadow 0s ease-out; - -moz-transition: text-shadow 0s ease-out; - -o-transition: text-shadow 0s ease-out; - transition: text-shadow 0s ease-out; + transition: text-shadow 0s ease-out; text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } -/** WHO WE ARE */ + +/* + ____ _____ ____ _____ _____ _____ _____ _____ _____ _____ +| \| | \| _ | |_ _| | | | | __| +| | |- -| | | | --| | | |- -| | | | | __| +|____/|_____|____/|__|__|_____| |_| |_____|__ _|_____|_____| + |__| +*/ +/* line 2537, ../scss/styles.scss */ #didactique-page .node-didactique { - -webkit-border-radius: 5px; - -moz-border-radius: 5px; border-radius: 5px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; background-clip: padding-box; background-color: #FFF; - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); max-width: 850px; font-size: 14px; - background-color: #ffffff; + background-color: #fff; margin: 1em auto; padding: 1em; } +/* line 2544, ../scss/styles.scss */ #didactique-page .node-didactique .field-name-field-emvideo { margin: 1em 0; } +/* line 2548, ../scss/styles.scss */ #didactique-page .node-didactique .field-name-title-field { font-size: 24px; font-weight: 900; font-style: italic; padding: 5px 0; } -#didactique-page .node-didactique .field-name-field-visuel figure, -#didactique-page .node-didactique .field-name-field-visuel img { +/* line 2552, ../scss/styles.scss */ +#didactique-page .node-didactique .field-name-field-visuel figure, #didactique-page .node-didactique .field-name-field-visuel img { max-width: 100%; } -@media screen and (min-width: 480px) { +@media only screen and (min-width: 40.063em) { + /* line 2557, ../scss/styles.scss */ #didactique-page .side { display: moz-inline-stack; display: inline-block; + vertical-align: top; zoom: 1; *display: inline; vertical-align: top; } + /* line 2558, ../scss/styles.scss */ #didactique-page .group-sideleft { width: 60%; } + /* line 2559, ../scss/styles.scss */ #didactique-page .group-sideright { width: 39%; } } -/** DIDACTIQUE */ -@media screen and (max-width: 479px) { + +/* + _ _ _ _____ _____ _ _ _ _____ _____ _____ _____ +| | | | | | | | | | | __| | _ | __ | __| +| | | | | | | | | | | __| | | -| __| +|_____|__|__|_____| |_____|_____| |__|__|__|__|_____| + +*/ +@media only screen and (max-width: 40em) { + /* line 2577, ../scss/styles.scss */ .page-whoweare #tool-bar #block-materio-page-title-materio-page-title { display: none; } } -/** maintenance */ -.maintenance-page #container, -.maintenance-page #header { + +/* + + _ _ + _____ ___|_|___| |_ ___ ___ ___ ___ ___ ___ +| | .'| | | _| -_| | .'| | _| -_| +|_|_|_|__,|_|_|_|_| |___|_|_|__,|_|_|___|___| + +*/ +/* line 2591, ../scss/styles.scss */ +.maintenance-page #container, .maintenance-page #header { text-align: center; padding: 0; position: relative; } +/* line 2592, ../scss/styles.scss */ .maintenance-page #main { background-color: transparent; } +/* line 2593, ../scss/styles.scss */ .maintenance-page #header h1.site-name { font-size: 36px; margin: 0; padding-left: 0; } +/* line 2594, ../scss/styles.scss */ .maintenance-page h2.site-slogan { font-size: 16px; font-weight: 300; margin: 0; line-height: 1.1; } -/** FAQ */ + +/* + _____ _____ _____ +| __| _ | | +| __| | | | +|__| |__|__|__ _| + |__| +*/ +/* line 2604, ../scss/styles.scss */ .page-faq-page #main { - background: #ffffff url('../img/bg-faq.png') no-repeat bottom right; + background: #fff url("../img/bg-faq.png") no-repeat bottom right; } + +/* line 2610, ../scss/styles.scss */ #content .faq-content .faq-description { font-size: 12px; padding-bottom: 2em; } +/* line 2614, ../scss/styles.scss */ #content .faq-content ul.faq-ul-questions-top { margin: 0; } +/* line 2616, ../scss/styles.scss */ #content .faq-content ul.faq-ul-questions-top li { list-style: none; } +/* line 2618, ../scss/styles.scss */ #content .faq-content ul.faq-ul-questions-top li a { font-size: 18px; font-weight: 500; } +/* line 2624, ../scss/styles.scss */ #content .faq-content h3.faq-header { font-size: 20px; font-weight: 700; line-height: 1.2; margin: 0; } +/* line 2627, ../scss/styles.scss */ #content .faq-content h3.faq-header a { color: #000; } +/* line 2630, ../scss/styles.scss */ #content .faq-content .faq-dl-hide-answer { padding: 0; } +/* line 2633, ../scss/styles.scss */ #content .faq-content .faq-category-group { padding-bottom: 1em; } +/* line 2636, ../scss/styles.scss */ #content .faq-content .faq-question-answer { padding: 0.3em 0 0 0.8em; } +/* line 2638, ../scss/styles.scss */ #content .faq-content .faq-question-answer .faq-question { font-size: 16px; padding: 0; font-weight: 500; } +/* line 2640, ../scss/styles.scss */ #content .faq-content .faq-question-answer .faq-question a { color: #000; } +/* line 2642, ../scss/styles.scss */ #content .faq-content .faq-question-answer .faq-answer { padding: 0; margin-bottom: 2em; font-size: 12px; } +/* line 2648, ../scss/styles.scss */ #content .faq-content .field-name-body img { max-width: 50%; height: auto; } + +/* line 2656, ../scss/styles.scss */ +#homev2 h2 { + font-size: 47px; + font-weight: 700; +} +/* line 2657, ../scss/styles.scss */ +#homev2 a { + color: #000; +} +/* line 2659, ../scss/styles.scss */ +#homev2 .pane-menu-menu-home-v2 .menu li { + display: inline-block; +} +/* line 2661, ../scss/styles.scss */ +#homev2 .pane-menu-menu-home-v2 .menu li a { + background-color: #4d4d4d; + border-radius: 5px; + background-clip: padding-box; + padding: 10px 10px; + color: #FFF; + font-size: 18px; + font-weight: 700; +} +/* line 2671, ../scss/styles.scss */ +#homev2 .pane-node { + height: 650px; +} +/* line 2674, ../scss/styles.scss */ +#homev2 .pane-node .pane-content .content { + background-color: rgba(255, 255, 255, 0.5); + width: 40%; + border-radius: 5px; + background-clip: padding-box; + padding: 15px; +} diff --git a/sites/all/themes/gui/materiobasetheme/css/wysiwyg.css b/sites/all/themes/gui/materiobasetheme/css/wysiwyg.css index 9f98c4cf..00278e16 100644 --- a/sites/all/themes/gui/materiobasetheme/css/wysiwyg.css +++ b/sites/all/themes/gui/materiobasetheme/css/wysiwyg.css @@ -1,110 +1,117 @@ +@charset "UTF-8"; /* LISIBILITY */ /* * www.g-u-i.net */ +/* line 5, ../scss/wysiwyg.scss */ * { font-size: 14px; } + +/* line 6, ../scss/wysiwyg.scss */ div { border: 1px dashed #D4D4D4; } -p:after, -ul:after { + +/* line 7, ../scss/wysiwyg.scss */ +p:after, ul:after { content: "¬"; color: red; } -h1:before, -h2:before, -h3:before, -h4:before, -h5:before, -h6:before { + +/* line 9, ../scss/wysiwyg.scss */ +h1:before, h2:before, h3:before, h4:before, h5:before, h6:before { color: blue; font-weight: normal; font-size: 10px; vertical-align: super; } + +/* line 13, ../scss/wysiwyg.scss */ h1:before { content: "h1 "; } + +/* line 14, ../scss/wysiwyg.scss */ h2:before { content: "h2 "; } + +/* line 15, ../scss/wysiwyg.scss */ h3:before { content: "h3 "; } + +/* line 16, ../scss/wysiwyg.scss */ h4:before { content: "h4 "; } + +/* line 17, ../scss/wysiwyg.scss */ h5:before { content: "h5 "; } + +/* line 18, ../scss/wysiwyg.scss */ h6:before { content: "h6 "; } + +/* line 21, ../scss/wysiwyg.scss */ h2 { font-size: 24px; } + +/* line 22, ../scss/wysiwyg.scss */ h3 { font-size: 18px; } + +/* line 23, ../scss/wysiwyg.scss */ h4 { font-size: 16px; } + +/* line 24, ../scss/wysiwyg.scss */ h5 { font-size: 14px; } + +/* line 25, ../scss/wysiwyg.scss */ h6 { font-size: 12px; } + +/* line 27, ../scss/wysiwyg.scss */ br:after { content: "·"; color: red; border: 1px solid #999; } + /* LAYOUT AND GRAPHICS */ -#full { - width: 99%; -} -#demi { - width: 47%; -} -#tiers { - width: 29%; -} -#quart { - width: 23%; -} -#right { - float: right; - margin-left: 2%; -} -#left { - float: left; - margin-right: 2%; -} -#center { - display: block; - margin: 0 auto; -} +/* line 39, ../scss/wysiwyg.scss */ img { height: auto; margin: 0.5em 0; } + +/* line 40, ../scss/wysiwyg.scss */ p { border: 1px dashed #848484; } + +/* line 41, ../scss/wysiwyg.scss */ div { border: 1px solid #1A1A1A; } -img, -p, -div { + +/* line 43, ../scss/wysiwyg.scss */ +img, p, div { position: relative; } -img:before, -p:before, -div:before { +/* line 44, ../scss/wysiwyg.scss */ +img:before, p:before, div:before { font-size: 10px; color: red; background-color: #1A1A1A; @@ -112,179 +119,152 @@ div:before { top: 0; z-index: 3000; } -img.full, -p.full, -div.full { +/* line 46, ../scss/wysiwyg.scss */ +img.full, p.full, div.full { width: 99%; } -img.full:before, -p.full:before, -div.full:before { +/* line 46, ../scss/wysiwyg.scss */ +img.full:before, p.full:before, div.full:before { content: " full "; } -img.demi, -p.demi, -div.demi { +/* line 47, ../scss/wysiwyg.scss */ +img.demi, p.demi, div.demi { width: 47%; margin-right: 2%; } -img.demi:before, -p.demi:before, -div.demi:before { +/* line 47, ../scss/wysiwyg.scss */ +img.demi:before, p.demi:before, div.demi:before { content: " demi "; right: 0; } -img.tiers, -p.tiers, -div.tiers { +/* line 48, ../scss/wysiwyg.scss */ +img.tiers, p.tiers, div.tiers { width: 29%; margin-right: 2%; } -img.tiers:before, -p.tiers:before, -div.tiers:before { +/* line 48, ../scss/wysiwyg.scss */ +img.tiers:before, p.tiers:before, div.tiers:before { content: " tiers "; right: 0; } -img.quart, -p.quart, -div.quart { +/* line 49, ../scss/wysiwyg.scss */ +img.quart, p.quart, div.quart { width: 23%; margin-right: 2%; } -img.quart:before, -p.quart:before, -div.quart:before { +/* line 49, ../scss/wysiwyg.scss */ +img.quart:before, p.quart:before, div.quart:before { content: " quart "; right: 0; } -img.demi-left, -p.demi-left, -div.demi-left { +/* line 51, ../scss/wysiwyg.scss */ +img.demi-left, p.demi-left, div.demi-left { width: 47%; float: left; margin-right: 2%; } -img.demi-left:before, -p.demi-left:before, -div.demi-left:before { +/* line 51, ../scss/wysiwyg.scss */ +img.demi-left:before, p.demi-left:before, div.demi-left:before { content: " demi-left "; left: 0; } -img.demi-right, -p.demi-right, -div.demi-right { +/* line 52, ../scss/wysiwyg.scss */ +img.demi-right, p.demi-right, div.demi-right { width: 47%; float: right; margin-left: 2%; } -img.demi-right:before, -p.demi-right:before, -div.demi-right:before { +/* line 52, ../scss/wysiwyg.scss */ +img.demi-right:before, p.demi-right:before, div.demi-right:before { content: " demi-right "; right: 0; } -img.demi-center, -p.demi-center, -div.demi-center { +/* line 53, ../scss/wysiwyg.scss */ +img.demi-center, p.demi-center, div.demi-center { width: 47%; display: block; margin: 0 auto; } -img.demi-center:before, -p.demi-center:before, -div.demi-center:before { +/* line 53, ../scss/wysiwyg.scss */ +img.demi-center:before, p.demi-center:before, div.demi-center:before { content: " demi-denter "; right: 0; } -img.tiers-left, -p.tiers-left, -div.tiers-left { +/* line 55, ../scss/wysiwyg.scss */ +img.tiers-left, p.tiers-left, div.tiers-left { width: 29%; float: left; margin-right: 2%; } -img.tiers-left:before, -p.tiers-left:before, -div.tiers-left:before { +/* line 55, ../scss/wysiwyg.scss */ +img.tiers-left:before, p.tiers-left:before, div.tiers-left:before { content: " tiers-left "; left: 0; } -img.tiers-right, -p.tiers-right, -div.tiers-right { +/* line 56, ../scss/wysiwyg.scss */ +img.tiers-right, p.tiers-right, div.tiers-right { width: 29%; float: right; margin-left: 2%; } -img.tiers-right:before, -p.tiers-right:before, -div.tiers-right:before { +/* line 56, ../scss/wysiwyg.scss */ +img.tiers-right:before, p.tiers-right:before, div.tiers-right:before { content: " tiers-right "; right: 0; } -img.tiers-center, -p.tiers-center, -div.tiers-center { +/* line 57, ../scss/wysiwyg.scss */ +img.tiers-center, p.tiers-center, div.tiers-center { width: 29%; display: block; margin: 0 auto; } -img.tiers-center:before, -p.tiers-center:before, -div.tiers-center:before { +/* line 57, ../scss/wysiwyg.scss */ +img.tiers-center:before, p.tiers-center:before, div.tiers-center:before { content: " tiers-center "; right: 0; } -img.quart-left, -p.quart-left, -div.quart-left { +/* line 59, ../scss/wysiwyg.scss */ +img.quart-left, p.quart-left, div.quart-left { width: 23%; float: left; margin-right: 2%; } -img.quart-left:before, -p.quart-left:before, -div.quart-left:before { +/* line 59, ../scss/wysiwyg.scss */ +img.quart-left:before, p.quart-left:before, div.quart-left:before { content: " quart-left "; left: 0; } -img.quart-right, -p.quart-right, -div.quart-right { +/* line 60, ../scss/wysiwyg.scss */ +img.quart-right, p.quart-right, div.quart-right { width: 23%; float: right; margin-left: 2%; } -img.quart-right:before, -p.quart-right:before, -div.quart-right:before { +/* line 60, ../scss/wysiwyg.scss */ +img.quart-right:before, p.quart-right:before, div.quart-right:before { content: " quart-right "; right: 0; } -img.quart-center, -p.quart-center, -div.quart-center { +/* line 61, ../scss/wysiwyg.scss */ +img.quart-center, p.quart-center, div.quart-center { width: 23%; display: block; margin: 0 auto; } -img.quart-center:before, -p.quart-center:before, -div.quart-center:before { +/* line 61, ../scss/wysiwyg.scss */ +img.quart-center:before, p.quart-center:before, div.quart-center:before { content: " quart-center "; right: 0; } -table, -tr, -td { + +/* line 67, ../scss/wysiwyg.scss */ +table, tr, td { position: relative; padding: 1em 0.3em 0.3em; width: 100%; } -table:before, -tr:before, -td:before { +/* line 72, ../scss/wysiwyg.scss */ +table:before, tr:before, td:before { font-size: 10px; color: white; background-color: blue; @@ -294,25 +274,35 @@ td:before { z-index: 3000; padding: 1px 3px; } + +/* line 78, ../scss/wysiwyg.scss */ table { - border: 2px solid blue!important; + border: 2px solid blue !important; } +/* line 80, ../scss/wysiwyg.scss */ table:before { content: "table"; } + +/* line 83, ../scss/wysiwyg.scss */ tr { display: block; - border: 1px dashed blue!important; + border: 1px dashed blue !important; } +/* line 86, ../scss/wysiwyg.scss */ tr:before { content: "tr"; } + +/* line 89, ../scss/wysiwyg.scss */ td { - border: 1px dotted blue!important; + border: 1px dotted blue !important; } +/* line 91, ../scss/wysiwyg.scss */ td:before { content: "td"; } +/* line 92, ../scss/wysiwyg.scss */ td p { padding: 0 15px; } diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.eot b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.eot new file mode 100644 index 00000000..8efc9140 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.eot differ diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.svg b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.svg new file mode 100644 index 00000000..226d5227 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.ttf b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.ttf new file mode 100644 index 00000000..5287edea Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.ttf differ diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.woff b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.woff new file mode 100644 index 00000000..d13c533a Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons-custom.woff differ diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.css b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.css new file mode 100644 index 00000000..da821488 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.css @@ -0,0 +1,645 @@ +/* + * 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; +} + +@font-face { + font-family: 'foundation-icons-ciconscustom'; + src: url('foundation-icons-custom.eot'); + src: url('foundation-icons-custom.eot?#iefix') format('embedded-opentype'), + url('foundation-icons-custom.woff') format('woff'), + url('foundation-icons-custom.ttf') format('truetype'), + url('foundation-icons-custom.svg#foundation-icons-ciconscustom') 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; + font-size: 16px; +} + +/* CUSTOM ICONS */ +.icon-materio-viewmode-cardsmall, +.icon-materio-viewmode-cardmedium, +.icon-materio-viewmode-cardbig, +.icon-materio-viewmode-cardfull, +.icon-materio-folder { + font-family: "foundation-icons-ciconscustom"; + 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; + font-size: 25px; + color: #313131; +} + +.icon-materio-folder{ + color: #007BC2; + font-size: 20px; + +} + +/*FOUNDATION ICONS*/ + +.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"; } + +/*CUSTOM ICONS*/ +.icon-materio-viewmode-cardsmall.active:before{ content: "\f21b"; } +.icon-materio-viewmode-cardmedium.active:before{ content: "\f21c"; } +.icon-materio-viewmode-cardbig.active:before{ content: "\f21d"; } +.icon-materio-viewmode-cardfull.active:before{ content: "\f21e"; } +.icon-materio-viewmode-cardsmall:before{ content: "\f21f"; } +.icon-materio-viewmode-cardmedium:before{ content: "\f220"; } +.icon-materio-viewmode-cardbig:before{ content: "\f221"; } +.icon-materio-viewmode-cardfull:before{ content: "\f222"; } +.icon-materio-folder:before{ content: "\f223"; } diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.eot b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.eot new file mode 100644 index 00000000..1746ad40 Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.eot differ diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.svg b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.svg new file mode 100644 index 00000000..4e014ff8 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/fonts/icon/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/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.ttf b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.ttf new file mode 100644 index 00000000..6cce217d Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.ttf differ diff --git a/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.woff b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.woff new file mode 100644 index 00000000..e2cfe25d Binary files /dev/null and b/sites/all/themes/gui/materiobasetheme/fonts/icon/foundation-icons.woff differ diff --git a/sites/all/themes/gui/materiobasetheme/inc/template.theme-overrides.inc b/sites/all/themes/gui/materiobasetheme/inc/template.theme-overrides.inc index deb2d30f..f915c0c9 100644 --- a/sites/all/themes/gui/materiobasetheme/inc/template.theme-overrides.inc +++ b/sites/all/themes/gui/materiobasetheme/inc/template.theme-overrides.inc @@ -134,8 +134,8 @@ function materiobasetheme_pager($variables) { function materiobasetheme_lt_loggedinblock($variables){ global $user; // return theme('username', array('account' => $variables['account'], 'link_path'=>'user/'.$user->uid.'/edit')) .' | ' . l(t('Log out'), 'user/logout'); - return l(' ', 'user/'.$user->uid.'/edit', array('html'=>true)) - . l('' . t('Log out') . '', 'user/logout', array('html' => true)); + return l(' ', 'user/'.$user->uid.'/edit', array('html'=>true)) + . l('' . t('Log out') . '', 'user/logout', array('html' => true)); } function materiobasetheme_links__locale_block(&$vars) { @@ -447,7 +447,7 @@ function materiobasetheme_block_view_alter(&$data, $block) { if ($block->module == 'materio_flag' && $block->delta == 'materio_flag_mylists_nav') { // dsm($block, 'block'); // dsm($data, 'data'); - $data['subject'] = '' . $data['subject'] . ''; + $data['subject'] = '' . $data['subject'] . ''; } } diff --git a/sites/all/themes/gui/materiobasetheme/components/gui/gui.js b/sites/all/themes/gui/materiobasetheme/js/gui.js similarity index 100% rename from sites/all/themes/gui/materiobasetheme/components/gui/gui.js rename to sites/all/themes/gui/materiobasetheme/js/gui.js diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/idangerous.swiper-1.9.1.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/idangerous.swiper-1.9.1.min.js deleted file mode 100644 index 0168c61b..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/idangerous.swiper-1.9.1.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Swiper 1.9.1 - Mobile Touch Slider - * http://www.idangero.us/sliders/swiper/ - * - * Copyright 2012-2013, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under GPL & MIT - * - * Updated on: April 7, 2013 -*/ -var Swiper=function(f,b){function g(){var c=y-l;b.loop&&(c-=l);b.scrollContainer&&(c=p-l,0>c&&(c=0));b.slidesPerSlide>a.slides.length&&(c=0);return c}function j(c){a.allowLinks||c.preventDefault()}function s(c){if(a.isTouched||b.onlyExternal)return!1;a.isTouched=!0;u="touchstart"==c.type;if(!u||1==c.targetTouches.length){a.callPlugins("onTouchStartBegin");b.loop&&a.fixLoop();u||(c.preventDefault?c.preventDefault():c.returnValue=!1);var d=u?c.targetTouches[0].pageX:c.pageX||c.clientX;c=u?c.targetTouches[0].pageY:c.pageY||c.clientY;a.touches.startX=a.touches.currentX=d;a.touches.startY=a.touches.currentY=c;a.touches.start=a.touches.current=h?a.touches.startX:a.touches.startY;a.setTransition(0);a.positions.start=a.positions.current=h?a.getTranslate("x"):a.getTranslate("y");h?a.setTransform(a.positions.start,0,0):a.setTransform(0,a.positions.start,0);a.times.start=(new Date).getTime();w=void 0;if(b.onSlideClick||b.onSlideTouch){var e=a.container,f=e.getBoundingClientRect(),g=document.body,d=d-f.left+(e.clientLeft||g.clientLeft||0)-(window.pageXOffset||e.scrollLeft);c=c-f.top-(e.clientTop||g.clientTop||0)-(window.pageYOffset||e.scrollTop);d=h?d:c;c=-Math.round(a.positions.current/p);c=d=Math.floor(d/p)+c;b.loop&&(c=d-b.slidesPerSlide,0>c&&(c=a.slides.length+c-2*b.slidesPerSlide));a.clickedSlideIndex=c;a.clickedSlide=a.getSlide(d);b.onSlideTouch&&(b.onSlideTouch(a),a.callPlugins("onSlideTouch"))}0Math.abs(d-a.touches.startX)));"undefined"===typeof w&&!h&&(w=!!(w||Math.abs(e-a.touches.startY)c?l/2:a.positions.current*c;if(a.positions.current<-g()&&(!b.freeMode||b.freeModeFluid))b.loop?(c=1,d=a.positions.current,e=-g()-l):(d=(a.touches.current-a.touches.start)*b.ratio+(g()+a.positions.start),c=(l+d)/l,d=a.positions.current-d*(1-c)/2,e=-g()-l/2),a.positions.current=d=c?e:d}if(b.followFinger){b.moveStartThreshold?Math.abs(a.touches.current-a.touches.start)>b.moveStartThreshold||D?(D=!0,h?a.setTransform(a.positions.current,0,0):a.setTransform(0,a.positions.current,0)):a.positions.current=a.positions.start:h?a.setTransform(a.positions.current,0,0):a.setTransform(0,a.positions.current,0);b.freeMode&&a.updateActiveSlide(a.positions.current);b.onSlideClick&&a.clickedSlide&&(a.clickedSlide=!1);b.grabCursor&&(a.container.style.cursor="move",a.container.style.cursor="grabbing",a.container.style.cursor="-moz-grabbin",a.container.style.cursor="-webkit-grabbing");a.callPlugins("onTouchMoveEnd");if(b.onTouchMove)b.onTouchMove(a);return!1}}}}function r(){if(!b.onlyExternal&&a.isTouched){a.isTouched=!1;b.preventLinks&&setTimeout(function(){a.allowLinks=!0},10);b.grabCursor&&(a.container.style.cursor="move",a.container.style.cursor="grab",a.container.style.cursor="-moz-grab",a.container.style.cursor="-webkit-grab");b.onSlideClick&&a.clickedSlide&&(b.onSlideClick(a),a.callPlugins("onSlideClick"));!a.positions.current&&0!==a.positions.current&&(a.positions.current=a.positions.start);b.followFinger&&(h?a.setTransform(a.positions.current,0,0):a.setTransform(0,a.positions.current,0));a.times.end=(new Date).getTime();a.touches.diff=a.touches.current-a.touches.start;a.touches.abs=Math.abs(a.touches.diff);a.positions.diff=a.positions.current-a.positions.start;a.positions.abs=Math.abs(a.positions.diff);var c=a.positions.diff,d=a.positions.abs;5>d&&a.swipeReset();var e=y-l;b.scrollContainer&&(e=p-l);0a.times.end-a.times.start&&b.freeModeFluid&&(d=a.positions.current+2*a.touches.diff,d<-1*e&&(d=-e),0c?"toNext":"toPrev","toNext"==x&&300>=a.times.end-a.times.start&&(30>d||!b.shortSwipes?a.swipeReset():a.swipeNext(!0)),"toPrev"==x&&300>=a.times.end-a.times.start&&(30>d||!b.shortSwipes?a.swipeReset():a.swipePrev(!0)),e=p*b.slidesPerGroup,"toNext"==x&&300=0.5*e?a.swipeNext(!0):a.swipeReset()),"toPrev"==x&&300=0.5*e?a.swipePrev(!0):a.swipeReset()));if(b.onTouchEnd)b.onTouchEnd(a);a.callPlugins("onTouchEnd")}}function E(){a.callPlugins("onSlideChangeStart");if(b.onSlideChangeStart)b.onSlideChangeStart(a);b.onSlideChangeEnd&&a.transitionEnd(b.onSlideChangeEnd)}window.addEventListener||(window.Element||(Element=function(){}),Element.prototype.addEventListener=HTMLDocument.prototype.addEventListener=addEventListener=function(a,b){this.attachEvent("on"+a,b)},Element.prototype.removeEventListener=HTMLDocument.prototype.removeEventListener=removeEventListener=function(a,b){this.detachEvent("on"+a,b)});if(document.body.__defineGetter__&&HTMLElement){var q=HTMLElement.prototype;q.__defineGetter__&&q.__defineGetter__("outerHTML",function(){return(new XMLSerializer).serializeToString(this)})}window.getComputedStyle||(window.getComputedStyle=function(a){this.el=a;this.getPropertyValue=function(b){var e=/(\-([a-z]){1})/g;"float"==b&&(b="styleFloat");e.test(b)&&(b=b.replace(e,function(a,c,b){return b.toUpperCase()}));return a.currentStyle[b]?a.currentStyle[b]:null};return this});if(f.nodeType||document.querySelectorAll&&0!=document.querySelectorAll(f).length){var a=this;a.touches={};a.positions={current:0};a.id=(new Date).getTime();a.container=f.nodeType?f:document.querySelectorAll(f)[0];a.times={};a.isTouched=!1;a.realIndex=0;a.activeSlide=0;a.previousSlide=null;a.langDirection=window.getComputedStyle(a.container,null).getPropertyValue("direction");a.support={touch:a.isSupportTouch(),threeD:a.isSupport3D()};a.use3D=a.support.threeD;q={mode:"horizontal",ratio:1,speed:300,freeMode:!1,freeModeFluid:!1,slidesPerSlide:1,slidesPerGroup:1,simulateTouch:!0,followFinger:!0,shortSwipes:!0,moveStartThreshold:!1,autoPlay:!1,onlyExternal:!1,createPagination:!0,pagination:!1,resistance:!0,scrollContainer:!1,preventLinks:!0,initialSlide:0,keyboardControl:!1,mousewheelControl:!1,resizeEvent:"auto",useCSS3Transforms:!0,slideElement:"div",slideClass:"swiper-slide",wrapperClass:"swiper-wrapper",paginationClass:"swiper-pagination-switch",paginationActiveClass:"swiper-active-switch"};b=b||{};for(var m in q)m in b||(b[m]=q[m]);a.params=b;b.scrollContainer&&(b.freeMode=!0,b.freeModeFluid=!0);var z=!1;"auto"==b.slidesPerSlide&&(z=!0,b.slidesPerSlide=1);var n,h,p,k,y,x,w,l;for(m=a.container.childNodes.length-1;0<=m;m--)if(a.container.childNodes[m].className)for(var q=a.container.childNodes[m].className.split(" "),F=0;Fa.slides.length)){var c=document.querySelectorAll(b.pagination+" ."+b.paginationActiveClass);if(c){for(var d=0;d=c&&(g-=c);0>g&&(g=c+g);g';document.querySelectorAll(b.pagination)[0].innerHTML=c;a.updatePagination();a.callPlugins("onCreatePagination")}};a.createPagination();a.resizeEvent="auto"===b.resizeEvent?"onorientationchange"in window?"orientationchange":"resize":b.resizeEvent;a.resizeFix=function(){a.callPlugins("beforeResizeFix");a.init();if(b.scrollContainer){if((h?a.getTranslate("x"):a.getTranslate("y"))<-g()){var c=h?-g():0,d=h?0:-g();a.setTransition(0);a.setTransform(c,d,0)}}else a.swipeTo(a.activeSlide,0,!1);a.callPlugins("afterResizeFix")};b.disableAutoResize||window.addEventListener(a.resizeEvent,a.resizeFix,!1);var C;a.startAutoPlay=function(){b.autoPlay&&!b.loop?C=setInterval(function(){var b=a.realIndex+1;b==k&&(b=0);a.swipeTo(b)},b.autoPlay):b.autoPlay&&b.loop&&(C=setInterval(function(){a.fixLoop();a.swipeNext(!0)},b.autoPlay));a.callPlugins("onAutoPlayStart")};a.stopAutoPlay=function(){C&&clearInterval(C);a.callPlugins("onAutoPlayStop")};b.autoPlay&&a.startAutoPlay();a.ie10?(n.addEventListener(a.touchEvents.touchStart,s,!1),document.addEventListener(a.touchEvents.touchMove,v,!1),document.addEventListener(a.touchEvents.touchEnd,r,!1)):(a.support.touch&&(n.addEventListener("touchstart",s,!1),n.addEventListener("touchmove",v,!1),n.addEventListener("touchend",r,!1)),b.simulateTouch&&(n.addEventListener("mousedown",s,!1),document.addEventListener("mousemove",v,!1),document.addEventListener("mouseup",r,!1)));a.destroy=function(c){(!1===c?c:1)&&window.removeEventListener(a.resizeEvent,a.resizeFix,!1);a.ie10?(n.removeEventListener(a.touchEvents.touchStart,s,!1),document.removeEventListener(a.touchEvents.touchMove,v,!1),document.removeEventListener(a.touchEvents.touchEnd,r,!1)):(a.support.touch&&(n.removeEventListener("touchstart",s,!1),n.removeEventListener("touchmove",v,!1),n.removeEventListener("touchend",r,!1)),n.removeEventListener("mousedown",s,!1),document.removeEventListener("mousemove",v,!1),document.removeEventListener("mouseup",r,!1));b.keyboardControl&&document.removeEventListener("keydown",G,!1);b.mousewheelControl&&a._wheelEvent&&a.container.removeEventListener(a._wheelEvent,H,!1);b.autoPlay&&a.stopAutoPlay();a.callPlugins("onDestroy")};a.allowLinks=!0;if(b.preventLinks){t=a.container.querySelectorAll("a");for(m=0;mMath.abs(c.deltaY)?-c.deltaX:-c.deltaY);b.freeMode?(h?a.getTranslate("x"):a.getTranslate("y"),h?(d=a.getTranslate("x")+e,e=a.getTranslate("y"),0e?a.swipeNext():a.swipePrev();c.preventDefault();return!1};a._wheelEvent&&a.container.addEventListener(a._wheelEvent,H,!1)}b.grabCursor&&(a.container.style.cursor="move",a.container.style.cursor="grab",a.container.style.cursor="-moz-grab",a.container.style.cursor="-webkit-grab");var u=!1,D;a.swipeNext=function(c){!c&&b.loop&&a.fixLoop();!c&&b.autoPlay&&a.stopAutoPlay();a.callPlugins("onSwipeNext");c=h?a.getTranslate("x"):a.getTranslate("y");var d=p*b.slidesPerGroup,d=Math.floor(Math.abs(c)/Math.floor(d))*d+d;c=Math.abs(c);if(d!=y&&(!(c>=g())||b.loop))return d>g()&&!b.loop&&(d=g()),b.loop&&d>=g()+l&&(d=g()+l),h?a.setTransform(-d,0,0):a.setTransform(0,-d,0),a.setTransition(b.speed),a.updateActiveSlide(-d),E(),!0};a.swipePrev=function(c){!c&&b.loop&&a.fixLoop();!c&&b.autoPlay&&a.stopAutoPlay();a.callPlugins("onSwipePrev");c=h?a.getTranslate("x"):a.getTranslate("y");var d=p*b.slidesPerGroup;c=(Math.ceil(-c/d)-1)*d;0>c&&(c=0);h?a.setTransform(-c,0,0):a.setTransform(0,-c,0);a.setTransition(b.speed);a.updateActiveSlide(-c);E();return!0};a.swipeReset=function(){a.callPlugins("onSwipeReset");var c=h?a.getTranslate("x"):a.getTranslate("y"),d=p*b.slidesPerGroup,d=0>c?Math.round(c/d)*d:0,e=-g();b.scrollContainer&&(d=0>c?c:0,e=l-p);d<=e&&(d=e);b.scrollContainer&&l>p&&(d=0);"horizontal"==b.mode?a.setTransform(d,0,0):a.setTransform(0,d,0);a.setTransition(b.speed);a.updateActiveSlide(d);if(b.onSlideReset)b.onSlideReset(a);return!0};var I=!0;a.swipeTo=function(c,d,e){c=parseInt(c,10);a.callPlugins("onSwipeTo",{index:c,speed:d});if(!(c>k-1)&&(!(0>c)||b.loop))return e=!1===e?!1:e||!0,d=0===d?d:d||b.speed,b.loop&&(c+=b.slidesPerSlide),c>k-b.slidesPerSlide&&(c=k-b.slidesPerSlide),c=-c*p,I&&(b.loop&&0=k-2*b.slidesPerSlide&&(a.activeSlide=k-2*b.slidesPerSlide-a.activeSlide),0>a.activeSlide&&(a.activeSlide=k-2*b.slidesPerSlide+a.activeSlide)):a.activeSlide=a.realIndex;a.realIndex==k&&(a.realIndex=k-1);0>a.realIndex&&(a.realIndex=0);b.pagination&&a.updatePagination()};a.fixLoop=function(){if(a.realIndexk-2*b.slidesPerSlide&&(c=-k+a.realIndex+b.slidesPerSlide,a.swipeTo(c,0,!1))};b.loop&&a.swipeTo(0,0,!1)}};Swiper.prototype={plugins:{},transitionEnd:function(f,b){var g=this,j=g.wrapper,s=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"];if(f)for(var v=function(){f(g);if(!b)for(var r=0;rf}(),ie10:window.navigator.msPointerEnabled};if(window.jQuery||window.Zepto)(function(f){f.fn.swiper=function(b){b=new Swiper(f(this)[0],b);f(this).data("swiper",b);return b}})(window.jQuery||window.Zepto); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/idangerous.swiper.css b/sites/all/themes/gui/materiobasetheme/js/libs/idangerous.swiper.css deleted file mode 100644 index 1813e064..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/idangerous.swiper.css +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Swiper - Mobile Touch Slider CSS - * http://www.idangero.us/sliders/swiper - * - * Vladimir Kharlampidi, The iDangero.us - * http://www.idangero.us/ - * - * Copyright 2012, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us - * - * Licensed under GPL & MIT - * -*/ - -/* Swiper Styles */ -.swiper-container { - margin:0 auto; - position:relative; - overflow:hidden; - -webkit-backface-visibility:hidden; - -moz-backface-visibility:hidden; - -ms-backface-visibility:hidden; - -o-backface-visibility:hidden; - backface-visibility:hidden; - /* Fix of Webkit flickering */ - z-index:1; -} -.swiper-wrapper { - position:relative; - width:100%; - -webkit-transition-property:-webkit-transform, left, top; - -webkit-transition-duration:0s; - -webkit-transform:translate3d(0px,0,0); - -webkit-transition-timing-function:ease; - - -moz-transition-property:-moz-transform, left, top; - -moz-transition-duration:0s; - -moz-transform:translate3d(0px,0,0); - -moz-transition-timing-function:ease; - - -o-transition-property:-o-transform, left, top; - -o-transition-duration:0s; - -o-transform:translate3d(0px,0,0); - -o-transition-timing-function:ease; - -o-transform:translate(0px,0px); - - -ms-transition-property:-ms-transform, left, top; - -ms-transition-duration:0s; - -ms-transform:translate3d(0px,0,0); - -ms-transition-timing-function:ease; - - transition-property:transform, left, top; - transition-duration:0s; - transform:translate3d(0px,0,0); - transition-timing-function:ease; - -} -.swiper-slide { - float: left; -} - -/* IE10 Windows Phone 8 Fixes */ -.swiper-wp8-horizontal { - -ms-touch-action: pan-y; -} -.swiper-wp8-vertical { - -ms-touch-action: pan-x; -} - -/* Specify Swiper's Size: */ -.swiper-container, .swiper-slide { - width: 500px; - height: 200px; -} - - diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.history.js b/sites/all/themes/gui/materiobasetheme/js/libs/jquery.history.js deleted file mode 100644 index 8d4edcd2..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.history.js +++ /dev/null @@ -1 +0,0 @@ -window.JSON||(window.JSON={}),function(){function f(a){return a<10?"0"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return typeof b=="string"?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g=gap,h,i=b[a];i&&typeof i=="object"&&typeof i.toJSON=="function"&&(i=i.toJSON(a)),typeof rep=="function"&&(i=rep.call(b,a,i));switch(typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";gap+=indent,h=[];if(Object.prototype.toString.apply(i)==="[object Array]"){f=i.length;for(c=0;c")&&c[0]);return a>4?a:!1}();return a},m.isInternetExplorer=function(){var a=m.isInternetExplorer.cached=typeof m.isInternetExplorer.cached!="undefined"?m.isInternetExplorer.cached:Boolean(m.getInternetExplorerMajorVersion());return a},m.emulated={pushState:!Boolean(a.history&&a.history.pushState&&a.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(e.userAgent)),hashChange:Boolean(!("onhashchange"in a||"onhashchange"in d)||m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8)},m.enabled=!m.emulated.pushState,m.bugs={setHash:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),safariPoll:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),ieDoubleCheck:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<7)},m.isEmptyObject=function(a){for(var b in a)return!1;return!0},m.cloneObject=function(a){var b,c;return a?(b=k.stringify(a),c=k.parse(b)):c={},c},m.getRootUrl=function(){var a=d.location.protocol+"//"+(d.location.hostname||d.location.host);if(d.location.port||!1)a+=":"+d.location.port;return a+="/",a},m.getBaseHref=function(){var a=d.getElementsByTagName("base"),b=null,c="";return a.length===1&&(b=a[0],c=b.href.replace(/[^\/]+$/,"")),c=c.replace(/\/+$/,""),c&&(c+="/"),c},m.getBaseUrl=function(){var a=m.getBaseHref()||m.getBasePageUrl()||m.getRootUrl();return a},m.getPageUrl=function(){var a=m.getState(!1,!1),b=(a||{}).url||d.location.href,c;return c=b.replace(/\/+$/,"").replace(/[^\/]+$/,function(a,b,c){return/\./.test(a)?a:a+"/"}),c},m.getBasePageUrl=function(){var a=d.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(a,b,c){return/[^\/]$/.test(a)?"":a}).replace(/\/+$/,"")+"/";return a},m.getFullUrl=function(a,b){var c=a,d=a.substring(0,1);return b=typeof b=="undefined"?!0:b,/[a-z]+\:\/\//.test(a)||(d==="/"?c=m.getRootUrl()+a.replace(/^\/+/,""):d==="#"?c=m.getPageUrl().replace(/#.*/,"")+a:d==="?"?c=m.getPageUrl().replace(/[\?#].*/,"")+a:b?c=m.getBaseUrl()+a.replace(/^(\.\/)+/,""):c=m.getBasePageUrl()+a.replace(/^(\.\/)+/,"")),c.replace(/\#$/,"")},m.getShortUrl=function(a){var b=a,c=m.getBaseUrl(),d=m.getRootUrl();return m.emulated.pushState&&(b=b.replace(c,"")),b=b.replace(d,"/"),m.isTraditionalAnchor(b)&&(b="./"+b),b=b.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),b},m.store={},m.idToState=m.idToState||{},m.stateToId=m.stateToId||{},m.urlToId=m.urlToId||{},m.storedStates=m.storedStates||[],m.savedStates=m.savedStates||[],m.normalizeStore=function(){m.store.idToState=m.store.idToState||{},m.store.urlToId=m.store.urlToId||{},m.store.stateToId=m.store.stateToId||{}},m.getState=function(a,b){typeof a=="undefined"&&(a=!0),typeof b=="undefined"&&(b=!0);var c=m.getLastSavedState();return!c&&b&&(c=m.createStateObject()),a&&(c=m.cloneObject(c),c.url=c.cleanUrl||c.url),c},m.getIdByState=function(a){var b=m.extractId(a.url),c;if(!b){c=m.getStateString(a);if(typeof m.stateToId[c]!="undefined")b=m.stateToId[c];else if(typeof m.store.stateToId[c]!="undefined")b=m.store.stateToId[c];else{for(;;){b=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof m.idToState[b]=="undefined"&&typeof m.store.idToState[b]=="undefined")break}m.stateToId[c]=b,m.idToState[b]=a}}return b},m.normalizeState=function(a){var b,c;if(!a||typeof a!="object")a={};if(typeof a.normalized!="undefined")return a;if(!a.data||typeof a.data!="object")a.data={};b={},b.normalized=!0,b.title=a.title||"",b.url=m.getFullUrl(m.unescapeString(a.url||d.location.href)),b.hash=m.getShortUrl(b.url),b.data=m.cloneObject(a.data),b.id=m.getIdByState(b),b.cleanUrl=b.url.replace(/\??\&_suid.*/,""),b.url=b.cleanUrl,c=!m.isEmptyObject(b.data);if(b.title||c)b.hash=m.getShortUrl(b.url).replace(/\??\&_suid.*/,""),/\?/.test(b.hash)||(b.hash+="?"),b.hash+="&_suid="+b.id;return b.hashedUrl=m.getFullUrl(b.hash),(m.emulated.pushState||m.bugs.safariPoll)&&m.hasUrlDuplicate(b)&&(b.url=b.hashedUrl),b},m.createStateObject=function(a,b,c){var d={data:a,title:b,url:c};return d=m.normalizeState(d),d},m.getStateById=function(a){a=String(a);var c=m.idToState[a]||m.store.idToState[a]||b;return c},m.getStateString=function(a){var b,c,d;return b=m.normalizeState(a),c={data:b.data,title:a.title,url:a.url},d=k.stringify(c),d},m.getStateId=function(a){var b,c;return b=m.normalizeState(a),c=b.id,c},m.getHashByState=function(a){var b,c;return b=m.normalizeState(a),c=b.hash,c},m.extractId=function(a){var b,c,d;return c=/(.*)\&_suid=([0-9]+)$/.exec(a),d=c?c[1]||a:a,b=c?String(c[2]||""):"",b||!1},m.isTraditionalAnchor=function(a){var b=!/[\/\?\.]/.test(a);return b},m.extractState=function(a,b){var c=null,d,e;return b=b||!1,d=m.extractId(a),d&&(c=m.getStateById(d)),c||(e=m.getFullUrl(a),d=m.getIdByUrl(e)||!1,d&&(c=m.getStateById(d)),!c&&b&&!m.isTraditionalAnchor(a)&&(c=m.createStateObject(null,null,e))),c},m.getIdByUrl=function(a){var c=m.urlToId[a]||m.store.urlToId[a]||b;return c},m.getLastSavedState=function(){return m.savedStates[m.savedStates.length-1]||b},m.getLastStoredState=function(){return m.storedStates[m.storedStates.length-1]||b},m.hasUrlDuplicate=function(a){var b=!1,c;return c=m.extractState(a.url),b=c&&c.id!==a.id,b},m.storeState=function(a){return m.urlToId[a.url]=a.id,m.storedStates.push(m.cloneObject(a)),a},m.isLastSavedState=function(a){var b=!1,c,d,e;return m.savedStates.length&&(c=a.id,d=m.getLastSavedState(),e=d.id,b=c===e),b},m.saveState=function(a){return m.isLastSavedState(a)?!1:(m.savedStates.push(m.cloneObject(a)),!0)},m.getStateByIndex=function(a){var b=null;return typeof a=="undefined"?b=m.savedStates[m.savedStates.length-1]:a<0?b=m.savedStates[m.savedStates.length+a]:b=m.savedStates[a],b},m.getHash=function(){var a=m.unescapeHash(d.location.hash);return a},m.unescapeString=function(b){var c=b,d;for(;;){d=a.unescape(c);if(d===c)break;c=d}return c},m.unescapeHash=function(a){var b=m.normalizeHash(a);return b=m.unescapeString(b),b},m.normalizeHash=function(a){var b=a.replace(/[^#]*#/,"").replace(/#.*/,"");return b},m.setHash=function(a,b){var c,e,f;return b!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.setHash,args:arguments,queue:b}),!1):(c=m.escapeHash(a),m.busy(!0),e=m.extractState(a,!0),e&&!m.emulated.pushState?m.pushState(e.data,e.title,e.url,!1):d.location.hash!==c&&(m.bugs.setHash?(f=m.getPageUrl(),m.pushState(null,null,f+"#"+c,!1)):d.location.hash=c),m)},m.escapeHash=function(b){var c=m.normalizeHash(b);return c=a.escape(c),m.bugs.hashEscape||(c=c.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),c},m.getHashByUrl=function(a){var b=String(a).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return b=m.unescapeHash(b),b},m.setTitle=function(a){var b=a.title,c;b||(c=m.getStateByIndex(0),c&&c.url===a.url&&(b=c.title||m.options.initialTitle));try{d.getElementsByTagName("title")[0].innerHTML=b.replace("<","<").replace(">",">").replace(" & "," & ")}catch(e){}return d.title=b,m},m.queues=[],m.busy=function(a){typeof a!="undefined"?m.busy.flag=a:typeof m.busy.flag=="undefined"&&(m.busy.flag=!1);if(!m.busy.flag){h(m.busy.timeout);var b=function(){var a,c,d;if(m.busy.flag)return;for(a=m.queues.length-1;a>=0;--a){c=m.queues[a];if(c.length===0)continue;d=c.shift(),m.fireQueueItem(d),m.busy.timeout=g(b,m.options.busyDelay)}};m.busy.timeout=g(b,m.options.busyDelay)}return m.busy.flag},m.busy.flag=!1,m.fireQueueItem=function(a){return a.callback.apply(a.scope||m,a.args||[])},m.pushQueue=function(a){return m.queues[a.queue||0]=m.queues[a.queue||0]||[],m.queues[a.queue||0].push(a),m},m.queue=function(a,b){return typeof a=="function"&&(a={callback:a}),typeof b!="undefined"&&(a.queue=b),m.busy()?m.pushQueue(a):m.fireQueueItem(a),m},m.clearQueue=function(){return m.busy.flag=!1,m.queues=[],m},m.stateChanged=!1,m.doubleChecker=!1,m.doubleCheckComplete=function(){return m.stateChanged=!0,m.doubleCheckClear(),m},m.doubleCheckClear=function(){return m.doubleChecker&&(h(m.doubleChecker),m.doubleChecker=!1),m},m.doubleCheck=function(a){return m.stateChanged=!1,m.doubleCheckClear(),m.bugs.ieDoubleCheck&&(m.doubleChecker=g(function(){return m.doubleCheckClear(),m.stateChanged||a(),!0},m.options.doubleCheckInterval)),m},m.safariStatePoll=function(){var b=m.extractState(d.location.href),c;if(!m.isLastSavedState(b))c=b;else return;return c||(c=m.createStateObject()),m.Adapter.trigger(a,"popstate"),m},m.back=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.back,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.back(!1)}),n.go(-1),!0)},m.forward=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.forward,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.forward(!1)}),n.go(1),!0)},m.go=function(a,b){var c;if(a>0)for(c=1;c<=a;++c)m.forward(b);else{if(!(a<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(c=-1;c>=a;--c)m.back(b)}return m};if(m.emulated.pushState){var o=function(){};m.pushState=m.pushState||o,m.replaceState=m.replaceState||o}else m.onPopState=function(b,c){var e=!1,f=!1,g,h;return m.doubleCheckComplete(),g=m.getHash(),g?(h=m.extractState(g||d.location.href,!0),h?m.replaceState(h.data,h.title,h.url,!1):(m.Adapter.trigger(a,"anchorchange"),m.busy(!1)),m.expectedStateId=!1,!1):(e=m.Adapter.extractEventData("state",b,c)||!1,e?f=m.getStateById(e):m.expectedStateId?f=m.getStateById(m.expectedStateId):f=m.extractState(d.location.href),f||(f=m.createStateObject(null,null,d.location.href)),m.expectedStateId=!1,m.isLastSavedState(f)?(m.busy(!1),!1):(m.storeState(f),m.saveState(f),m.setTitle(f),m.Adapter.trigger(a,"statechange"),m.busy(!1),!0))},m.Adapter.bind(a,"popstate",m.onPopState),m.pushState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.pushState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.pushState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0},m.replaceState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.replaceState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.replaceState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0};if(f){try{m.store=k.parse(f.getItem("History.store"))||{}}catch(p){m.store={}}m.normalizeStore()}else m.store={},m.normalizeStore();m.Adapter.bind(a,"beforeunload",m.clearAllIntervals),m.Adapter.bind(a,"unload",m.clearAllIntervals),m.saveState(m.storeState(m.extractState(d.location.href,!0))),f&&(m.onUnload=function(){var a,b;try{a=k.parse(f.getItem("History.store"))||{}}catch(c){a={}}a.idToState=a.idToState||{},a.urlToId=a.urlToId||{},a.stateToId=a.stateToId||{};for(b in m.idToState){if(!m.idToState.hasOwnProperty(b))continue;a.idToState[b]=m.idToState[b]}for(b in m.urlToId){if(!m.urlToId.hasOwnProperty(b))continue;a.urlToId[b]=m.urlToId[b]}for(b in m.stateToId){if(!m.stateToId.hasOwnProperty(b))continue;a.stateToId[b]=m.stateToId[b]}m.store=a,m.normalizeStore(),f.setItem("History.store",k.stringify(a))},m.intervalList.push(i(m.onUnload,m.options.storeInterval)),m.Adapter.bind(a,"beforeunload",m.onUnload),m.Adapter.bind(a,"unload",m.onUnload));if(!m.emulated.pushState){m.bugs.safariPoll&&m.intervalList.push(i(m.safariStatePoll,m.options.safariPollInterval));if(e.vendor==="Apple Computer, Inc."||(e.appCodeName||"")==="Mozilla")m.Adapter.bind(a,"hashchange",function(){m.Adapter.trigger(a,"popstate")}),m.getHash()&&m.Adapter.onDomLoad(function(){m.Adapter.trigger(a,"hashchange")})}},m.init()}(window) \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.hotkeys.js b/sites/all/themes/gui/materiobasetheme/js/libs/jquery.hotkeys.js deleted file mode 100644 index fbd71c71..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.hotkeys.js +++ /dev/null @@ -1,99 +0,0 @@ -/* - * jQuery Hotkeys Plugin - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * - * Based upon the plugin by Tzury Bar Yochay: - * http://github.com/tzuryby/hotkeys - * - * Original idea by: - * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ -*/ - -(function(jQuery){ - - jQuery.hotkeys = { - version: "0.8", - - specialKeys: { - 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause", - 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home", - 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", - 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", - 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/", - 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", - 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta" - }, - - shiftNums: { - "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", - "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", - ".": ">", "/": "?", "\\": "|" - } - }; - - function keyHandler( handleObj ) { - // Only care when a possible input has been specified - if ( typeof handleObj.data !== "string" ) { - return; - } - - var origHandler = handleObj.handler, - keys = handleObj.data.toLowerCase().split(" "); - - handleObj.handler = function( event ) { - // Don't fire in text-accepting inputs that we didn't directly bind to - if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || - event.target.type === "text") ) { - return; - } - - // Keypress represents characters, not special keys - var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ], - character = String.fromCharCode( event.which ).toLowerCase(), - key, modif = "", possible = {}; - - // check combinations (alt|ctrl|shift+anything) - if ( event.altKey && special !== "alt" ) { - modif += "alt+"; - } - - if ( event.ctrlKey && special !== "ctrl" ) { - modif += "ctrl+"; - } - - // TODO: Need to make sure this works consistently across platforms - if ( event.metaKey && !event.ctrlKey && special !== "meta" ) { - modif += "meta+"; - } - - if ( event.shiftKey && special !== "shift" ) { - modif += "shift+"; - } - - if ( special ) { - possible[ modif + special ] = true; - - } else { - possible[ modif + character ] = true; - possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true; - - // "$" can be triggered as "Shift+4" or "Shift+$" or just "$" - if ( modif === "shift+" ) { - possible[ jQuery.hotkeys.shiftNums[ character ] ] = true; - } - } - - for ( var i = 0, l = keys.length; i < l; i++ ) { - if ( possible[ keys[i] ] ) { - return origHandler.apply( this, arguments ); - } - } - }; - } - - jQuery.each([ "keydown", "keyup", "keypress" ], function() { - jQuery.event.special[ this ] = { add: keyHandler }; - }); - -})( jQuery ); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.lazyload.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/jquery.lazyload.min.js deleted file mode 100644 index 849dc618..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.lazyload.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Lazy Load - jQuery plugin for lazy loading images - * - * Copyright (c) 2007-2012 Mika Tuupola - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Project home: - * http://www.appelsiini.net/projects/lazyload - * - * Version: 1.8.2 - * - */ -(function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function j(){var b=0;g.each(function(){var c=a(this);if(i.skip_invisible&&!c.is(":visible"))return;if(!a.abovethetop(this,i)&&!a.leftofbegin(this,i))if(!a.belowthefold(this,i)&&!a.rightoffold(this,i))c.trigger("appear"),b=0;else if(++b>i.failure_limit)return!1})}var g=this,h,i={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(i,f)),h=i.container===d||i.container===b?e:a(i.container),0===i.event.indexOf("scroll")&&h.bind(i.event,function(a){return j()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,c.one("appear",function(){if(!this.loaded){if(i.appear){var d=g.length;i.appear.call(b,d,i)}a("").bind("load",function(){c.hide().attr("src",c.data(i.data_attribute))[i.effect](i.effect_speed),b.loaded=!0;var d=a.grep(g,function(a){return!a.loaded});g=a(d);if(i.load){var e=g.length;i.load.call(b,e,i)}}).attr("src",c.data(i.data_attribute))}}),0!==i.event.indexOf("scroll")&&c.bind(i.event,function(a){b.loaded||c.trigger("appear")})}),e.bind("resize",function(a){j()}),/iphone|ipod|ipad.*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent.persisted&&g.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){j()}),this},a.belowthefold=function(c,f){var g;return f.container===d||f.container===b?g=e.height()+e.scrollTop():g=a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return f.container===d||f.container===b?g=e.width()+e.scrollLeft():g=a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return f.container===d||f.container===b?g=e.scrollTop():g=a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return f.container===d||f.container===b?g=e.scrollLeft():g=a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!a.rightoffold(b,c)&&!a.leftofbegin(b,c)&&!a.belowthefold(b,c)&&!a.abovethetop(b,c)},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})})(jQuery,window,document) diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.transit.js b/sites/all/themes/gui/materiobasetheme/js/libs/jquery.transit.js deleted file mode 100644 index 3ebae618..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.transit.js +++ /dev/null @@ -1,658 +0,0 @@ -/*! - * jQuery Transit - CSS3 transitions and transformations - * Copyright(c) 2011 Rico Sta. Cruz - * MIT Licensed. - * - * http://ricostacruz.com/jquery.transit - * http://github.com/rstacruz/jquery.transit - */ - -(function($) { - "use strict"; - - $.transit = { - version: "0.1.3", - - // Map of $.css() keys to values for 'transitionProperty'. - // See https://developer.mozilla.org/en/CSS/CSS_transitions#Properties_that_can_be_animated - propertyMap: { - marginLeft : 'margin', - marginRight : 'margin', - marginBottom : 'margin', - marginTop : 'margin', - paddingLeft : 'padding', - paddingRight : 'padding', - paddingBottom : 'padding', - paddingTop : 'padding' - }, - - // Will simply transition "instantly" if false - enabled: true, - - // Set this to false if you don't want to use the transition end property. - useTransitionEnd: false - }; - - var div = document.createElement('div'); - var support = {}; - - // Helper function to get the proper vendor property name. - // (`transition` => `WebkitTransition`) - function getVendorPropertyName(prop) { - var prefixes = ['Moz', 'Webkit', 'O', 'ms']; - var prop_ = prop.charAt(0).toUpperCase() + prop.substr(1); - - if (prop in div.style) { return prop; } - - for (var i=0; i -1; - - // Check for the browser's transitions support. - // You can access this in jQuery's `$.support.transition`. - // As per [jQuery's cssHooks documentation](http://api.jquery.com/jQuery.cssHooks/), - // we set $.support.transition to a string of the actual property name used. - support.transition = getVendorPropertyName('transition'); - support.transitionDelay = getVendorPropertyName('transitionDelay'); - support.transform = getVendorPropertyName('transform'); - support.transformOrigin = getVendorPropertyName('transformOrigin'); - support.transform3d = checkTransform3dSupport(); - - $.extend($.support, support); - - var eventNames = { - 'MozTransition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'WebkitTransition': 'webkitTransitionEnd', - 'msTransition': 'MSTransitionEnd' - }; - - // Detect the 'transitionend' event needed. - var transitionEnd = support.transitionEnd = eventNames[support.transition] || null; - - // Avoid memory leak in IE. - div = null; - - // ## $.cssEase - // List of easing aliases that you can use with `$.fn.transition`. - $.cssEase = { - '_default': 'ease', - 'in': 'ease-in', - 'out': 'ease-out', - 'in-out': 'ease-in-out', - 'snap': 'cubic-bezier(0,1,.5,1)' - }; - - // ## 'transform' CSS hook - // Allows you to use the `transform` property in CSS. - // - // $("#hello").css({ transform: "rotate(90deg)" }); - // - // $("#hello").css('transform'); - // //=> { rotate: '90deg' } - // - $.cssHooks.transform = { - // The getter returns a `Transform` object. - get: function(elem) { - return $(elem).data('transform'); - }, - - // The setter accepts a `Transform` object or a string. - set: function(elem, v) { - var value = v; - - if (!(value instanceof Transform)) { - value = new Transform(value); - } - - // We've seen the 3D version of Scale() not work in Chrome when the - // element being scaled extends outside of the viewport. Thus, we're - // forcing Chrome to not use the 3d transforms as well. Not sure if - // translate is affectede, but not risking it. Detection code from - // http://davidwalsh.name/detecting-google-chrome-javascript - if (support.transform === 'WebkitTransform' && !isChrome) { - elem.style[support.transform] = value.toString(true); - } else { - elem.style[support.transform] = value.toString(); - } - - $(elem).data('transform', value); - } - }; - - // ## 'transformOrigin' CSS hook - // Allows the use for `transformOrigin` to define where scaling and rotation - // is pivoted. - // - // $("#hello").css({ transformOrigin: '0 0' }); - // - $.cssHooks.transformOrigin = { - get: function(elem) { - return elem.style[support.transformOrigin]; - }, - set: function(elem, value) { - elem.style[support.transformOrigin] = value; - } - }; - - // ## 'transition' CSS hook - // Allows you to use the `transition` property in CSS. - // - // $("#hello").css({ transition: 'all 0 ease 0' }); - // - $.cssHooks.transition = { - get: function(elem) { - return elem.style[support.transition]; - }, - set: function(elem, value) { - elem.style[support.transition] = value; - } - }; - - // ## Other CSS hooks - // Allows you to rotate, scale and translate. - registerCssHook('scale'); - registerCssHook('translate'); - registerCssHook('rotate'); - registerCssHook('rotateX'); - registerCssHook('rotateY'); - registerCssHook('rotate3d'); - registerCssHook('perspective'); - registerCssHook('skewX'); - registerCssHook('skewY'); - registerCssHook('x', true); - registerCssHook('y', true); - - // ## Transform class - // This is the main class of a transformation property that powers - // `$.fn.css({ transform: '...' })`. - // - // This is, in essence, a dictionary object with key/values as `-transform` - // properties. - // - // var t = new Transform("rotate(90) scale(4)"); - // - // t.rotate //=> "90deg" - // t.scale //=> "4,4" - // - // Setters are accounted for. - // - // t.set('rotate', 4) - // t.rotate //=> "4deg" - // - // Convert it to a CSS string using the `toString()` and `toString(true)` (for WebKit) - // functions. - // - // t.toString() //=> "rotate(90deg) scale(4,4)" - // t.toString(true) //=> "rotate(90deg) scale3d(4,4,0)" (WebKit version) - // - function Transform(str) { - if (typeof str === 'string') { this.parse(str); } - return this; - } - - Transform.prototype = { - // ### setFromString() - // Sets a property from a string. - // - // t.setFromString('scale', '2,4'); - // // Same as set('scale', '2', '4'); - // - setFromString: function(prop, val) { - var args = - (typeof val === 'string') ? val.split(',') : - (val.constructor === Array) ? val : - [ val ]; - - args.unshift(prop); - - Transform.prototype.set.apply(this, args); - }, - - // ### set() - // Sets a property. - // - // t.set('scale', 2, 4); - // - set: function(prop) { - var args = Array.prototype.slice.apply(arguments, [1]); - if (this.setter[prop]) { - this.setter[prop].apply(this, args); - } else { - this[prop] = args.join(','); - } - }, - - get: function(prop) { - if (this.getter[prop]) { - return this.getter[prop].apply(this); - } else { - return this[prop] || 0; - } - }, - - setter: { - // ### rotate - // - // .css({ rotate: 30 }) - // .css({ rotate: "30" }) - // .css({ rotate: "30deg" }) - // .css({ rotate: "30deg" }) - // - rotate: function(theta) { - this.rotate = unit(theta, 'deg'); - }, - - rotateX: function(theta) { - this.rotateX = unit(theta, 'deg'); - }, - - rotateY: function(theta) { - this.rotateY = unit(theta, 'deg'); - }, - - // ### scale - // - // .css({ scale: 9 }) //=> "scale(9,9)" - // .css({ scale: '3,2' }) //=> "scale(3,2)" - // - scale: function(x, y) { - if (y === undefined) { y = x; } - this.scale = x + "," + y; - }, - - // ### skewX + skewY - skewX: function(x) { - this.skewX = unit(x, 'deg'); - }, - - skewY: function(y) { - this.skewY = unit(y, 'deg'); - }, - - // ### perspectvie - perspective: function(dist) { - this.perspective = unit(dist, 'px'); - }, - - // ### x / y - // Translations. Notice how this keeps the other value. - // - // .css({ x: 4 }) //=> "translate(4px, 0)" - // .css({ y: 10 }) //=> "translate(4px, 10px)" - // - x: function(x) { - this.set('translate', x, null); - }, - - y: function(y) { - this.set('translate', null, y); - }, - - // ### translate - // Notice how this keeps the other value. - // - // .css({ translate: '2, 5' }) //=> "translate(2px, 5px)" - // - translate: function(x, y) { - if (this._translateX === undefined) { this._translateX = 0; } - if (this._translateY === undefined) { this._translateY = 0; } - - if (x !== null) { this._translateX = unit(x, 'px'); } - if (y !== null) { this._translateY = unit(y, 'px'); } - - this.translate = this._translateX + "," + this._translateY; - } - }, - - getter: { - x: function() { - return this._translateX || 0; - }, - - y: function() { - return this._translateY || 0; - }, - - scale: function() { - var s = (this.scale || "1,1").split(','); - if (s[0]) { s[0] = parseFloat(s[0]); } - if (s[1]) { s[1] = parseFloat(s[1]); } - - // "2.5,2.5" => 2.5 - // "2.5,1" => [2.5,1] - return (s[0] === s[1]) ? s[0] : s; - }, - - rotate3d: function() { - var s = (this.rotate3d || "0,0,0,0deg").split(','); - for (var i=0; i<=3; ++i) { - if (s[i]) { s[i] = parseFloat(s[i]); } - } - if (s[3]) { s[3] = unit(s[3], 'deg'); } - - return s; - } - }, - - // ### parse() - // Parses from a string. Called on constructor. - parse: function(str) { - var self = this; - str.replace(/([a-zA-Z0-9]+)\((.*?)\)/g, function(x, prop, val) { - self.setFromString(prop, val); - }); - }, - - // ### toString() - // Converts to a `transition` CSS property string. If `use3d` is given, - // it converts to a `-webkit-transition` CSS property string instead. - toString: function(use3d) { - var re = []; - - for (var i in this) { - if (this.hasOwnProperty(i)) { - // Don't use 3D transformations if the browser can't support it. - if ((!support.transform3d) && ( - (i === 'rotateX') || - (i === 'rotateY') || - (i === 'perspective') || - (i === 'transformOrigin'))) { continue; } - - if (i[0] !== '_') { - if (use3d && (i === 'scale')) { - re.push(i + "3d(" + this[i] + ",1)"); - } else if (use3d && (i === 'translate')) { - re.push(i + "3d(" + this[i] + ",0)"); - } else { - re.push(i + "(" + this[i] + ")"); - } - } - } - } - - return re.join(" "); - } - }; - - function callOrQueue(self, queue, fn) { - if (queue === true) { - self.queue(fn); - } else if (queue) { - self.queue(queue, fn); - } else { - fn(); - } - } - - // ### getProperties(dict) - // Returns properties (for `transition-property`) for dictionary `props`. The - // value of `props` is what you would expect in `$.css(...)`. - function getProperties(props) { - var re = []; - - $.each(props, function(key) { - key = $.camelCase(key); // Convert "text-align" => "textAlign" - key = $.transit.propertyMap[key] || key; - key = uncamel(key); // Convert back to dasherized - - if ($.inArray(key, re) === -1) { re.push(key); } - }); - - return re; - } - - // ### getTransition() - // Returns the transition string to be used for the `transition` CSS property. - // - // Example: - // - // getTransition({ opacity: 1, rotate: 30 }, 500, 'ease'); - // //=> 'opacity 500ms ease, -webkit-transform 500ms ease' - // - function getTransition(properties, duration, easing, delay) { - // Get the CSS properties needed. - var props = getProperties(properties); - - // Account for aliases (`in` => `ease-in`). - if ($.cssEase[easing]) { easing = $.cssEase[easing]; } - - // Build the duration/easing/delay attributes for it. - var attribs = '' + toMS(duration) + ' ' + easing; - if (parseInt(delay, 10) > 0) { attribs += ' ' + toMS(delay); } - - // For more properties, add them this way: - // "margin 200ms ease, padding 200ms ease, ..." - var transitions = []; - $.each(props, function(i, name) { - transitions.push(name + ' ' + attribs); - }); - - return transitions.join(', '); - } - - // ## $.fn.transition - // Works like $.fn.animate(), but uses CSS transitions. - // - // $("...").transition({ opacity: 0.1, scale: 0.3 }); - // - // // Specific duration - // $("...").transition({ opacity: 0.1, scale: 0.3 }, 500); - // - // // With duration and easing - // $("...").transition({ opacity: 0.1, scale: 0.3 }, 500, 'in'); - // - // // With callback - // $("...").transition({ opacity: 0.1, scale: 0.3 }, function() { ... }); - // - // // With everything - // $("...").transition({ opacity: 0.1, scale: 0.3 }, 500, 'in', function() { ... }); - // - // // Alternate syntax - // $("...").transition({ - // opacity: 0.1, - // duration: 200, - // delay: 40, - // easing: 'in', - // complete: function() { /* ... */ } - // }); - // - $.fn.transition = $.fn.transit = function(properties, duration, easing, callback) { - var self = this; - var delay = 0; - var queue = true; - - // Account for `.transition(properties, callback)`. - if (typeof duration === 'function') { - callback = duration; - duration = undefined; - } - - // Account for `.transition(properties, duration, callback)`. - if (typeof easing === 'function') { - callback = easing; - easing = undefined; - } - - // Alternate syntax. - if (typeof properties.easing !== 'undefined') { - easing = properties.easing; - delete properties.easing; - } - - if (typeof properties.duration !== 'undefined') { - duration = properties.duration; - delete properties.duration; - } - - if (typeof properties.complete !== 'undefined') { - callback = properties.complete; - delete properties.complete; - } - - if (typeof properties.queue !== 'undefined') { - queue = properties.queue; - delete properties.queue; - } - - if (typeof properties.delay !== 'undefined') { - delay = properties.delay; - delete properties.delay; - } - - // Set defaults. (`400` duration, `ease` easing) - if (typeof duration === 'undefined') { duration = $.fx.speeds._default; } - if (typeof easing === 'undefined') { easing = $.cssEase._default; } - - duration = toMS(duration); - - // Build the `transition` property. - var transitionValue = getTransition(properties, duration, easing, delay); - - // Compute delay until callback. - // If this becomes 0, don't bother setting the transition property. - var work = $.transit.enabled && support.transition; - var i = work ? (parseInt(duration, 10) + parseInt(delay, 10)) : 0; - - // If there's nothing to do... - if (i === 0) { - var fn = function(next) { - self.css(properties); - if (callback) { callback.apply(self); } - if (next) { next(); } - }; - - callOrQueue(self, queue, fn); - return self; - } - - // Save the old transitions of each element so we can restore it later. - var oldTransitions = {}; - - var run = function(nextCall) { - var bound = false; - - // Prepare the callback. - var cb = function() { - if (bound) { self.unbind(transitionEnd, cb); } - - if (i > 0) { - self.each(function() { - this.style[support.transition] = (oldTransitions[this] || null); - }); - } - - if (typeof callback === 'function') { callback.apply(self); } - if (typeof nextCall === 'function') { nextCall(); } - }; - - if ((i > 0) && (transitionEnd) && ($.transit.useTransitionEnd)) { - // Use the 'transitionend' event if it's available. - bound = true; - self.bind(transitionEnd, cb); - } else { - // Fallback to timers if the 'transitionend' event isn't supported. - window.setTimeout(cb, i); - } - - // Apply transitions. - self.each(function() { - if (i > 0) { - this.style[support.transition] = transitionValue; - } - $(this).css(properties); - }); - }; - - // Defer running. This allows the browser to paint any pending CSS it hasn't - // painted yet before doing the transitions. - var deferredRun = function(next) { - var i = 0; - - // Durations that are too slow will get transitions mixed up. - // (Tested on Mac/FF 7.0.1) - if ((support.transition === 'MozTransition') && (i < 25)) { i = 25; } - - window.setTimeout(function() { run(next); }, i); - }; - - // Use jQuery's fx queue. - callOrQueue(self, queue, deferredRun); - - // Chainability. - return this; - }; - - function registerCssHook(prop, isPixels) { - // For certain properties, the 'px' should not be implied. - if (!isPixels) { $.cssNumber[prop] = true; } - - $.transit.propertyMap[prop] = support.transform; - - $.cssHooks[prop] = { - get: function(elem) { - var t = $(elem).css('transform') || new Transform(); - return t.get(prop); - }, - - set: function(elem, value) { - var t = $(elem).css('transform') || new Transform(); - t.setFromString(prop, value); - - $(elem).css({ transform: t }); - } - }; - } - - // ### uncamel(str) - // Converts a camelcase string to a dasherized string. - // (`marginLeft` => `margin-left`) - function uncamel(str) { - return str.replace(/([A-Z])/g, function(letter) { return '-' + letter.toLowerCase(); }); - } - - // ### unit(number, unit) - // Ensures that number `number` has a unit. If no unit is found, assume the - // default is `unit`. - // - // unit(2, 'px') //=> "2px" - // unit("30deg", 'rad') //=> "30deg" - // - function unit(i, units) { - if ((typeof i === "string") && (!i.match(/^[\-0-9\.]+$/))) { - return i; - } else { - return "" + i + units; - } - } - - // ### toMS(duration) - // Converts given `duration` to a millisecond string. - // - // toMS('fast') //=> '400ms' - // toMS(10) //=> '10ms' - // - function toMS(duration) { - var i = duration; - - // Allow for string durations like 'fast'. - if ($.fx.speeds[i]) { i = $.fx.speeds[i]; } - - return unit(i, 'ms'); - } - - // Export some functions for testable-ness. - $.transit.getTransitionValue = getTransition; -})(jQuery); diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.transit.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/jquery.transit.min.js deleted file mode 100644 index d05da6d7..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/jquery.transit.min.js +++ /dev/null @@ -1,20 +0,0 @@ -/*! - * jQuery Transit - CSS3 transitions and transformations - * Copyright(c) 2011 Rico Sta. Cruz - * MIT Licensed. - * - * http://ricostacruz.com/jquery.transit - * http://github.com/rstacruz/jquery.transit - */ -(function(d){function k(a){var b=["Moz","Webkit","O","ms"],c=a.charAt(0).toUpperCase()+a.substr(1);if(a in i.style)return a;for(a=0;a=b;++b)a[b]&&(a[b]=parseFloat(a[b]));a[3]&&(a[3]=g(a[3],"deg"));return a}},parse:function(a){var b=this;a.replace(/([a-zA-Z0-9]+)\((.*?)\)/g,function(a,d, -e){b.setFromString(d,e)})},toString:function(a){var b=[],c;for(c in this)if(this.hasOwnProperty(c)&&(e.transform3d||!("rotateX"===c||"rotateY"===c||"perspective"===c||"transformOrigin"===c)))"_"!==c[0]&&(a&&"scale"===c?b.push(c+"3d("+this[c]+",1)"):a&&"translate"===c?b.push(c+"3d("+this[c]+",0)"):b.push(c+"("+this[c]+")"));return b.join(" ")}};d.fn.transition=d.fn.transit=function(a,b,c,f){var h=this,g=0,i=!0;"function"===typeof b&&(f=b,b=void 0);"function"===typeof c&&(f=c,c=void 0);"undefined"!== -typeof a.easing&&(c=a.easing,delete a.easing);"undefined"!==typeof a.duration&&(b=a.duration,delete a.duration);"undefined"!==typeof a.complete&&(f=a.complete,delete a.complete);"undefined"!==typeof a.queue&&(i=a.queue,delete a.queue);"undefined"!==typeof a.delay&&(g=a.delay,delete a.delay);"undefined"===typeof b&&(b=d.fx.speeds._default);"undefined"===typeof c&&(c=d.cssEase._default);var b=n(b),j=q(a,b,c,g),l=d.transit.enabled&&e.transition?parseInt(b,10)+parseInt(g,10):0;if(0===l)return p(h,i,function(b){h.css(a); -f&&f.apply(h);b&&b()}),h;var k={},m=function(b){var c=false,g=function(){c&&h.unbind(o,g);l>0&&h.each(function(){this.style[e.transition]=k[this]||null});typeof f==="function"&&f.apply(h);typeof b==="function"&&b()};if(l>0&&o&&d.transit.useTransitionEnd){c=true;h.bind(o,g)}else window.setTimeout(g,l);h.each(function(){l>0&&(this.style[e.transition]=j);d(this).css(a)})};p(h,i,function(a){var b=0;e.transition==="MozTransition"&&b<25&&(b=25);window.setTimeout(function(){m(a)},b)});return this};d.transit.getTransitionValue= -q})(jQuery); diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/modernizr-2.6.1.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/modernizr-2.6.1.min.js deleted file mode 100644 index 52b523fa..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/modernizr-2.6.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.6.1 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load - */ -;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),k.id=h,(l?k:m).innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(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=w.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(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(['#modernizr:after{content:"',l,'";visibility:hidden}'].join(""),function(b){a=b.offsetHeight>=1}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),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=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?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)){a!="img"&&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={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?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),a!="img"&&(r||y[c]===2?(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(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&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&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},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\"\'\`]/.test(text)) { - return text; - } - map = { - "<": "<", - ">": ">", - '"': """, - "'": "'", - "`": "`" - }; - unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; - return text.replace(unsafe_chars, function(chr) { - return map[chr] || "&"; - }); - }; - - return SelectParser; - - })(); - - SelectParser.select_to_array = function(select) { - var child, parser, _i, _len, _ref; - parser = new SelectParser(); - _ref = select.childNodes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - parser.add_node(child); - } - return parser.parsed; - }; - - AbstractChosen = (function() { - function AbstractChosen(form_field, options) { - this.form_field = form_field; - this.options = options != null ? options : {}; - if (!AbstractChosen.browser_is_supported()) { - return; - } - this.is_multiple = this.form_field.multiple; - this.set_default_text(); - this.set_default_values(); - this.setup(); - this.set_up_html(); - this.register_observers(); - } - - AbstractChosen.prototype.set_default_values = function() { - var _this = this; - this.click_test_action = function(evt) { - return _this.test_active_click(evt); - }; - this.activate_action = function(evt) { - return _this.activate_field(evt); - }; - this.active_field = false; - this.mouse_on_container = false; - this.results_showing = false; - this.result_highlighted = null; - this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; - this.disable_search_threshold = this.options.disable_search_threshold || 0; - this.disable_search = this.options.disable_search || false; - this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; - this.group_search = this.options.group_search != null ? this.options.group_search : true; - this.search_contains = this.options.search_contains || false; - this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; - this.max_selected_options = this.options.max_selected_options || Infinity; - this.inherit_select_classes = this.options.inherit_select_classes || false; - this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; - return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; - }; - - AbstractChosen.prototype.set_default_text = function() { - if (this.form_field.getAttribute("data-placeholder")) { - this.default_text = this.form_field.getAttribute("data-placeholder"); - } else if (this.is_multiple) { - this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; - } else { - this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; - } - return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; - }; - - AbstractChosen.prototype.mouse_enter = function() { - return this.mouse_on_container = true; - }; - - AbstractChosen.prototype.mouse_leave = function() { - return this.mouse_on_container = false; - }; - - AbstractChosen.prototype.input_focus = function(evt) { - var _this = this; - if (this.is_multiple) { - if (!this.active_field) { - return setTimeout((function() { - return _this.container_mousedown(); - }), 50); - } - } else { - if (!this.active_field) { - return this.activate_field(); - } - } - }; - - AbstractChosen.prototype.input_blur = function(evt) { - var _this = this; - if (!this.mouse_on_container) { - this.active_field = false; - return setTimeout((function() { - return _this.blur_test(); - }), 100); - } - }; - - AbstractChosen.prototype.results_option_build = function(options) { - var content, data, _i, _len, _ref; - content = ''; - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - data = _ref[_i]; - if (data.group) { - content += this.result_add_group(data); - } else { - content += this.result_add_option(data); - } - if (options != null ? options.first : void 0) { - if (data.selected && this.is_multiple) { - this.choice_build(data); - } else if (data.selected && !this.is_multiple) { - this.single_set_selected_text(data.text); - } - } - } - return content; - }; - - AbstractChosen.prototype.result_add_option = function(option) { - var classes, option_el; - if (!option.search_match) { - return ''; - } - if (!this.include_option_in_results(option)) { - return ''; - } - classes = []; - if (!option.disabled && !(option.selected && this.is_multiple)) { - classes.push("active-result"); - } - if (option.disabled && !(option.selected && this.is_multiple)) { - classes.push("disabled-result"); - } - if (option.selected) { - classes.push("result-selected"); - } - if (option.group_array_index != null) { - classes.push("group-option"); - } - if (option.classes !== "") { - classes.push(option.classes); - } - option_el = document.createElement("li"); - option_el.className = classes.join(" "); - option_el.style.cssText = option.style; - option_el.setAttribute("data-option-array-index", option.array_index); - option_el.innerHTML = option.search_text; - return this.outerHTML(option_el); - }; - - AbstractChosen.prototype.result_add_group = function(group) { - var group_el; - if (!(group.search_match || group.group_match)) { - return ''; - } - if (!(group.active_options > 0)) { - return ''; - } - group_el = document.createElement("li"); - group_el.className = "group-result"; - group_el.innerHTML = group.search_text; - return this.outerHTML(group_el); - }; - - AbstractChosen.prototype.results_update_field = function() { - this.set_default_text(); - if (!this.is_multiple) { - this.results_reset_cleanup(); - } - this.result_clear_highlight(); - this.results_build(); - if (this.results_showing) { - return this.winnow_results(); - } - }; - - AbstractChosen.prototype.reset_single_select_options = function() { - var result, _i, _len, _ref, _results; - _ref = this.results_data; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - result = _ref[_i]; - if (result.selected) { - _results.push(result.selected = false); - } else { - _results.push(void 0); - } - } - return _results; - }; - - AbstractChosen.prototype.results_toggle = function() { - if (this.results_showing) { - return this.results_hide(); - } else { - return this.results_show(); - } - }; - - AbstractChosen.prototype.results_search = function(evt) { - if (this.results_showing) { - return this.winnow_results(); - } else { - return this.results_show(); - } - }; - - AbstractChosen.prototype.winnow_results = function() { - var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; - this.no_results_clear(); - results = 0; - searchText = this.get_search_text(); - escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - regexAnchor = this.search_contains ? "" : "^"; - regex = new RegExp(regexAnchor + escapedSearchText, 'i'); - zregex = new RegExp(escapedSearchText, 'i'); - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - option.search_match = false; - results_group = null; - if (this.include_option_in_results(option)) { - if (option.group) { - option.group_match = false; - option.active_options = 0; - } - if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { - results_group = this.results_data[option.group_array_index]; - if (results_group.active_options === 0 && results_group.search_match) { - results += 1; - } - results_group.active_options += 1; - } - if (!(option.group && !this.group_search)) { - option.search_text = option.group ? option.label : option.html; - option.search_match = this.search_string_match(option.search_text, regex); - if (option.search_match && !option.group) { - results += 1; - } - if (option.search_match) { - if (searchText.length) { - startpos = option.search_text.search(zregex); - text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); - option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); - } - if (results_group != null) { - results_group.group_match = true; - } - } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { - option.search_match = true; - } - } - } - } - this.result_clear_highlight(); - if (results < 1 && searchText.length) { - this.update_results_content(""); - return this.no_results(searchText); - } else { - this.update_results_content(this.results_option_build()); - return this.winnow_results_set_highlight(); - } - }; - - AbstractChosen.prototype.search_string_match = function(search_string, regex) { - var part, parts, _i, _len; - if (regex.test(search_string)) { - return true; - } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { - parts = search_string.replace(/\[|\]/g, "").split(" "); - if (parts.length) { - for (_i = 0, _len = parts.length; _i < _len; _i++) { - part = parts[_i]; - if (regex.test(part)) { - return true; - } - } - } - } - }; - - AbstractChosen.prototype.choices_count = function() { - var option, _i, _len, _ref; - if (this.selected_option_count != null) { - return this.selected_option_count; - } - this.selected_option_count = 0; - _ref = this.form_field.options; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - if (option.selected) { - this.selected_option_count += 1; - } - } - return this.selected_option_count; - }; - - AbstractChosen.prototype.choices_click = function(evt) { - evt.preventDefault(); - if (!(this.results_showing || this.is_disabled)) { - return this.results_show(); - } - }; - - AbstractChosen.prototype.keyup_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - switch (stroke) { - case 8: - if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { - return this.keydown_backstroke(); - } else if (!this.pending_backstroke) { - this.result_clear_highlight(); - return this.results_search(); - } - break; - case 13: - evt.preventDefault(); - if (this.results_showing) { - return this.result_select(evt); - } - break; - case 27: - if (this.results_showing) { - this.results_hide(); - } - return true; - case 9: - case 38: - case 40: - case 16: - case 91: - case 17: - break; - default: - return this.results_search(); - } - }; - - AbstractChosen.prototype.clipboard_event_checker = function(evt) { - var _this = this; - return setTimeout((function() { - return _this.results_search(); - }), 50); - }; - - AbstractChosen.prototype.container_width = function() { - if (this.options.width != null) { - return this.options.width; - } else { - return "" + this.form_field.offsetWidth + "px"; - } - }; - - AbstractChosen.prototype.include_option_in_results = function(option) { - if (this.is_multiple && (!this.display_selected_options && option.selected)) { - return false; - } - if (!this.display_disabled_options && option.disabled) { - return false; - } - if (option.empty) { - return false; - } - return true; - }; - - AbstractChosen.prototype.search_results_touchstart = function(evt) { - this.touch_started = true; - return this.search_results_mouseover(evt); - }; - - AbstractChosen.prototype.search_results_touchmove = function(evt) { - this.touch_started = false; - return this.search_results_mouseout(evt); - }; - - AbstractChosen.prototype.search_results_touchend = function(evt) { - if (this.touch_started) { - return this.search_results_mouseup(evt); - } - }; - - AbstractChosen.prototype.outerHTML = function(element) { - var tmp; - if (element.outerHTML) { - return element.outerHTML; - } - tmp = document.createElement("div"); - tmp.appendChild(element); - return tmp.innerHTML; - }; - - AbstractChosen.browser_is_supported = function() { - if (window.navigator.appName === "Microsoft Internet Explorer") { - return document.documentMode >= 8; - } - if (/iP(od|hone)/i.test(window.navigator.userAgent)) { - return false; - } - if (/Android/i.test(window.navigator.userAgent)) { - if (/Mobile/i.test(window.navigator.userAgent)) { - return false; - } - } - return true; - }; - - AbstractChosen.default_multiple_text = "Select Some Options"; - - AbstractChosen.default_single_text = "Select an Option"; - - AbstractChosen.default_no_result_text = "No results match"; - - return AbstractChosen; - - })(); - - $ = jQuery; - - $.fn.extend({ - chosen: function(options) { - if (!AbstractChosen.browser_is_supported()) { - return this; - } - return this.each(function(input_field) { - var $this, chosen; - $this = $(this); - chosen = $this.data('chosen'); - if (options === 'destroy' && chosen) { - chosen.destroy(); - } else if (!chosen) { - $this.data('chosen', new Chosen(this, options)); - } - }); - } - }); - - Chosen = (function(_super) { - __extends(Chosen, _super); - - function Chosen() { - _ref = Chosen.__super__.constructor.apply(this, arguments); - return _ref; - } - - Chosen.prototype.setup = function() { - this.form_field_jq = $(this.form_field); - this.current_selectedIndex = this.form_field.selectedIndex; - return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl"); - }; - - Chosen.prototype.set_up_html = function() { - var container_classes, container_props; - container_classes = ["chosen-container"]; - container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); - if (this.inherit_select_classes && this.form_field.className) { - container_classes.push(this.form_field.className); - } - if (this.is_rtl) { - container_classes.push("chosen-rtl"); - } - container_props = { - 'class': container_classes.join(' '), - 'style': "width: " + (this.container_width()) + ";", - 'title': this.form_field.title - }; - if (this.form_field.id.length) { - container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; - } - this.container = $("
        ", container_props); - if (this.is_multiple) { - this.container.html('
          '); - } else { - this.container.html('' + this.default_text + '
            '); - } - this.form_field_jq.hide().after(this.container); - this.dropdown = this.container.find('div.chosen-drop').first(); - this.search_field = this.container.find('input').first(); - this.search_results = this.container.find('ul.chosen-results').first(); - this.search_field_scale(); - this.search_no_results = this.container.find('li.no-results').first(); - if (this.is_multiple) { - this.search_choices = this.container.find('ul.chosen-choices').first(); - this.search_container = this.container.find('li.search-field').first(); - } else { - this.search_container = this.container.find('div.chosen-search').first(); - this.selected_item = this.container.find('.chosen-single').first(); - } - this.results_build(); - this.set_tab_index(); - this.set_label_behavior(); - return this.form_field_jq.trigger("chosen:ready", { - chosen: this - }); - }; - - Chosen.prototype.register_observers = function() { - var _this = this; - this.container.bind('mousedown.chosen', function(evt) { - _this.container_mousedown(evt); - }); - this.container.bind('mouseup.chosen', function(evt) { - _this.container_mouseup(evt); - }); - this.container.bind('mouseenter.chosen', function(evt) { - _this.mouse_enter(evt); - }); - this.container.bind('mouseleave.chosen', function(evt) { - _this.mouse_leave(evt); - }); - this.search_results.bind('mouseup.chosen', function(evt) { - _this.search_results_mouseup(evt); - }); - this.search_results.bind('mouseover.chosen', function(evt) { - _this.search_results_mouseover(evt); - }); - this.search_results.bind('mouseout.chosen', function(evt) { - _this.search_results_mouseout(evt); - }); - this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) { - _this.search_results_mousewheel(evt); - }); - this.search_results.bind('touchstart.chosen', function(evt) { - _this.search_results_touchstart(evt); - }); - this.search_results.bind('touchmove.chosen', function(evt) { - _this.search_results_touchmove(evt); - }); - this.search_results.bind('touchend.chosen', function(evt) { - _this.search_results_touchend(evt); - }); - this.form_field_jq.bind("chosen:updated.chosen", function(evt) { - _this.results_update_field(evt); - }); - this.form_field_jq.bind("chosen:activate.chosen", function(evt) { - _this.activate_field(evt); - }); - this.form_field_jq.bind("chosen:open.chosen", function(evt) { - _this.container_mousedown(evt); - }); - this.form_field_jq.bind("chosen:close.chosen", function(evt) { - _this.input_blur(evt); - }); - this.search_field.bind('blur.chosen', function(evt) { - _this.input_blur(evt); - }); - this.search_field.bind('keyup.chosen', function(evt) { - _this.keyup_checker(evt); - }); - this.search_field.bind('keydown.chosen', function(evt) { - _this.keydown_checker(evt); - }); - this.search_field.bind('focus.chosen', function(evt) { - _this.input_focus(evt); - }); - this.search_field.bind('cut.chosen', function(evt) { - _this.clipboard_event_checker(evt); - }); - this.search_field.bind('paste.chosen', function(evt) { - _this.clipboard_event_checker(evt); - }); - if (this.is_multiple) { - return this.search_choices.bind('click.chosen', function(evt) { - _this.choices_click(evt); - }); - } else { - return this.container.bind('click.chosen', function(evt) { - evt.preventDefault(); - }); - } - }; - - Chosen.prototype.destroy = function() { - $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); - if (this.search_field[0].tabIndex) { - this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; - } - this.container.remove(); - this.form_field_jq.removeData('chosen'); - return this.form_field_jq.show(); - }; - - Chosen.prototype.search_field_disabled = function() { - this.is_disabled = this.form_field_jq[0].disabled; - if (this.is_disabled) { - this.container.addClass('chosen-disabled'); - this.search_field[0].disabled = true; - if (!this.is_multiple) { - this.selected_item.unbind("focus.chosen", this.activate_action); - } - return this.close_field(); - } else { - this.container.removeClass('chosen-disabled'); - this.search_field[0].disabled = false; - if (!this.is_multiple) { - return this.selected_item.bind("focus.chosen", this.activate_action); - } - } - }; - - Chosen.prototype.container_mousedown = function(evt) { - if (!this.is_disabled) { - if (evt && evt.type === "mousedown" && !this.results_showing) { - evt.preventDefault(); - } - if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { - if (!this.active_field) { - if (this.is_multiple) { - this.search_field.val(""); - } - $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action); - this.results_show(); - } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { - evt.preventDefault(); - this.results_toggle(); - } - return this.activate_field(); - } - } - }; - - Chosen.prototype.container_mouseup = function(evt) { - if (evt.target.nodeName === "ABBR" && !this.is_disabled) { - return this.results_reset(evt); - } - }; - - Chosen.prototype.search_results_mousewheel = function(evt) { - var delta; - if (evt.originalEvent) { - delta = -evt.originalEvent.wheelDelta || evt.originalEvent.detail; - } - if (delta != null) { - evt.preventDefault(); - if (evt.type === 'DOMMouseScroll') { - delta = delta * 40; - } - return this.search_results.scrollTop(delta + this.search_results.scrollTop()); - } - }; - - Chosen.prototype.blur_test = function(evt) { - if (!this.active_field && this.container.hasClass("chosen-container-active")) { - return this.close_field(); - } - }; - - Chosen.prototype.close_field = function() { - $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); - this.active_field = false; - this.results_hide(); - this.container.removeClass("chosen-container-active"); - this.clear_backstroke(); - this.show_search_field_default(); - return this.search_field_scale(); - }; - - Chosen.prototype.activate_field = function() { - this.container.addClass("chosen-container-active"); - this.active_field = true; - this.search_field.val(this.search_field.val()); - return this.search_field.focus(); - }; - - Chosen.prototype.test_active_click = function(evt) { - var active_container; - active_container = $(evt.target).closest('.chosen-container'); - if (active_container.length && this.container[0] === active_container[0]) { - return this.active_field = true; - } else { - return this.close_field(); - } - }; - - Chosen.prototype.results_build = function() { - this.parsing = true; - this.selected_option_count = null; - this.results_data = SelectParser.select_to_array(this.form_field); - if (this.is_multiple) { - this.search_choices.find("li.search-choice").remove(); - } else if (!this.is_multiple) { - this.single_set_selected_text(); - if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { - this.search_field[0].readOnly = true; - this.container.addClass("chosen-container-single-nosearch"); - } else { - this.search_field[0].readOnly = false; - this.container.removeClass("chosen-container-single-nosearch"); - } - } - this.update_results_content(this.results_option_build({ - first: true - })); - this.search_field_disabled(); - this.show_search_field_default(); - this.search_field_scale(); - return this.parsing = false; - }; - - Chosen.prototype.result_do_highlight = function(el) { - var high_bottom, high_top, maxHeight, visible_bottom, visible_top; - if (el.length) { - this.result_clear_highlight(); - this.result_highlight = el; - this.result_highlight.addClass("highlighted"); - maxHeight = parseInt(this.search_results.css("maxHeight"), 10); - visible_top = this.search_results.scrollTop(); - visible_bottom = maxHeight + visible_top; - high_top = this.result_highlight.position().top + this.search_results.scrollTop(); - high_bottom = high_top + this.result_highlight.outerHeight(); - if (high_bottom >= visible_bottom) { - return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); - } else if (high_top < visible_top) { - return this.search_results.scrollTop(high_top); - } - } - }; - - Chosen.prototype.result_clear_highlight = function() { - if (this.result_highlight) { - this.result_highlight.removeClass("highlighted"); - } - return this.result_highlight = null; - }; - - Chosen.prototype.results_show = function() { - if (this.is_multiple && this.max_selected_options <= this.choices_count()) { - this.form_field_jq.trigger("chosen:maxselected", { - chosen: this - }); - return false; - } - this.container.addClass("chosen-with-drop"); - this.results_showing = true; - this.search_field.focus(); - this.search_field.val(this.search_field.val()); - this.winnow_results(); - return this.form_field_jq.trigger("chosen:showing_dropdown", { - chosen: this - }); - }; - - Chosen.prototype.update_results_content = function(content) { - return this.search_results.html(content); - }; - - Chosen.prototype.results_hide = function() { - if (this.results_showing) { - this.result_clear_highlight(); - this.container.removeClass("chosen-with-drop"); - this.form_field_jq.trigger("chosen:hiding_dropdown", { - chosen: this - }); - } - return this.results_showing = false; - }; - - Chosen.prototype.set_tab_index = function(el) { - var ti; - if (this.form_field.tabIndex) { - ti = this.form_field.tabIndex; - this.form_field.tabIndex = -1; - return this.search_field[0].tabIndex = ti; - } - }; - - Chosen.prototype.set_label_behavior = function() { - var _this = this; - this.form_field_label = this.form_field_jq.parents("label"); - if (!this.form_field_label.length && this.form_field.id.length) { - this.form_field_label = $("label[for='" + this.form_field.id + "']"); - } - if (this.form_field_label.length > 0) { - return this.form_field_label.bind('click.chosen', function(evt) { - if (_this.is_multiple) { - return _this.container_mousedown(evt); - } else { - return _this.activate_field(); - } - }); - } - }; - - Chosen.prototype.show_search_field_default = function() { - if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { - this.search_field.val(this.default_text); - return this.search_field.addClass("default"); - } else { - this.search_field.val(""); - return this.search_field.removeClass("default"); - } - }; - - Chosen.prototype.search_results_mouseup = function(evt) { - var target; - target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); - if (target.length) { - this.result_highlight = target; - this.result_select(evt); - return this.search_field.focus(); - } - }; - - Chosen.prototype.search_results_mouseover = function(evt) { - var target; - target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); - if (target) { - return this.result_do_highlight(target); - } - }; - - Chosen.prototype.search_results_mouseout = function(evt) { - if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { - return this.result_clear_highlight(); - } - }; - - Chosen.prototype.choice_build = function(item) { - var choice, close_link, - _this = this; - choice = $('
          • ', { - "class": "search-choice" - }).html("" + item.html + ""); - if (item.disabled) { - choice.addClass('search-choice-disabled'); - } else { - close_link = $('', { - "class": 'search-choice-close', - 'data-option-array-index': item.array_index - }); - close_link.bind('click.chosen', function(evt) { - return _this.choice_destroy_link_click(evt); - }); - choice.append(close_link); - } - return this.search_container.before(choice); - }; - - Chosen.prototype.choice_destroy_link_click = function(evt) { - evt.preventDefault(); - evt.stopPropagation(); - if (!this.is_disabled) { - return this.choice_destroy($(evt.target)); - } - }; - - Chosen.prototype.choice_destroy = function(link) { - if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { - this.show_search_field_default(); - if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) { - this.results_hide(); - } - link.parents('li').first().remove(); - return this.search_field_scale(); - } - }; - - Chosen.prototype.results_reset = function() { - this.reset_single_select_options(); - this.form_field.options[0].selected = true; - this.single_set_selected_text(); - this.show_search_field_default(); - this.results_reset_cleanup(); - this.form_field_jq.trigger("change"); - if (this.active_field) { - return this.results_hide(); - } - }; - - Chosen.prototype.results_reset_cleanup = function() { - this.current_selectedIndex = this.form_field.selectedIndex; - return this.selected_item.find("abbr").remove(); - }; - - Chosen.prototype.result_select = function(evt) { - var high, item; - if (this.result_highlight) { - high = this.result_highlight; - this.result_clear_highlight(); - if (this.is_multiple && this.max_selected_options <= this.choices_count()) { - this.form_field_jq.trigger("chosen:maxselected", { - chosen: this - }); - return false; - } - if (this.is_multiple) { - high.removeClass("active-result"); - } else { - this.reset_single_select_options(); - } - item = this.results_data[high[0].getAttribute("data-option-array-index")]; - item.selected = true; - this.form_field.options[item.options_index].selected = true; - this.selected_option_count = null; - if (this.is_multiple) { - this.choice_build(item); - } else { - this.single_set_selected_text(item.text); - } - if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { - this.results_hide(); - } - this.search_field.val(""); - if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { - this.form_field_jq.trigger("change", { - 'selected': this.form_field.options[item.options_index].value - }); - } - this.current_selectedIndex = this.form_field.selectedIndex; - return this.search_field_scale(); - } - }; - - Chosen.prototype.single_set_selected_text = function(text) { - if (text == null) { - text = this.default_text; - } - if (text === this.default_text) { - this.selected_item.addClass("chosen-default"); - } else { - this.single_deselect_control_build(); - this.selected_item.removeClass("chosen-default"); - } - return this.selected_item.find("span").text(text); - }; - - Chosen.prototype.result_deselect = function(pos) { - var result_data; - result_data = this.results_data[pos]; - if (!this.form_field.options[result_data.options_index].disabled) { - result_data.selected = false; - this.form_field.options[result_data.options_index].selected = false; - this.selected_option_count = null; - this.result_clear_highlight(); - if (this.results_showing) { - this.winnow_results(); - } - this.form_field_jq.trigger("change", { - deselected: this.form_field.options[result_data.options_index].value - }); - this.search_field_scale(); - return true; - } else { - return false; - } - }; - - Chosen.prototype.single_deselect_control_build = function() { - if (!this.allow_single_deselect) { - return; - } - if (!this.selected_item.find("abbr").length) { - this.selected_item.find("span").first().after(""); - } - return this.selected_item.addClass("chosen-single-with-deselect"); - }; - - Chosen.prototype.get_search_text = function() { - if (this.search_field.val() === this.default_text) { - return ""; - } else { - return $('
            ').text($.trim(this.search_field.val())).html(); - } - }; - - Chosen.prototype.winnow_results_set_highlight = function() { - var do_high, selected_results; - selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; - do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); - if (do_high != null) { - return this.result_do_highlight(do_high); - } - }; - - Chosen.prototype.no_results = function(terms) { - var no_results_html; - no_results_html = $('
          • ' + this.results_none_found + ' ""
          • '); - no_results_html.find("span").first().html(terms); - this.search_results.append(no_results_html); - return this.form_field_jq.trigger("chosen:no_results", { - chosen: this - }); - }; - - Chosen.prototype.no_results_clear = function() { - return this.search_results.find(".no-results").remove(); - }; - - Chosen.prototype.keydown_arrow = function() { - var next_sib; - if (this.results_showing && this.result_highlight) { - next_sib = this.result_highlight.nextAll("li.active-result").first(); - if (next_sib) { - return this.result_do_highlight(next_sib); - } - } else { - return this.results_show(); - } - }; - - Chosen.prototype.keyup_arrow = function() { - var prev_sibs; - if (!this.results_showing && !this.is_multiple) { - return this.results_show(); - } else if (this.result_highlight) { - prev_sibs = this.result_highlight.prevAll("li.active-result"); - if (prev_sibs.length) { - return this.result_do_highlight(prev_sibs.first()); - } else { - if (this.choices_count() > 0) { - this.results_hide(); - } - return this.result_clear_highlight(); - } - } - }; - - Chosen.prototype.keydown_backstroke = function() { - var next_available_destroy; - if (this.pending_backstroke) { - this.choice_destroy(this.pending_backstroke.find("a").first()); - return this.clear_backstroke(); - } else { - next_available_destroy = this.search_container.siblings("li.search-choice").last(); - if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { - this.pending_backstroke = next_available_destroy; - if (this.single_backstroke_delete) { - return this.keydown_backstroke(); - } else { - return this.pending_backstroke.addClass("search-choice-focus"); - } - } - } - }; - - Chosen.prototype.clear_backstroke = function() { - if (this.pending_backstroke) { - this.pending_backstroke.removeClass("search-choice-focus"); - } - return this.pending_backstroke = null; - }; - - Chosen.prototype.keydown_checker = function(evt) { - var stroke, _ref1; - stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; - this.search_field_scale(); - if (stroke !== 8 && this.pending_backstroke) { - this.clear_backstroke(); - } - switch (stroke) { - case 8: - this.backstroke_length = this.search_field.val().length; - break; - case 9: - if (this.results_showing && !this.is_multiple) { - this.result_select(evt); - } - this.mouse_on_container = false; - break; - case 13: - evt.preventDefault(); - break; - case 38: - evt.preventDefault(); - this.keyup_arrow(); - break; - case 40: - evt.preventDefault(); - this.keydown_arrow(); - break; - } - }; - - Chosen.prototype.search_field_scale = function() { - var div, f_width, h, style, style_block, styles, w, _i, _len; - if (this.is_multiple) { - h = 0; - w = 0; - style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; - styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; - for (_i = 0, _len = styles.length; _i < _len; _i++) { - style = styles[_i]; - style_block += style + ":" + this.search_field.css(style) + ";"; - } - div = $('
            ', { - 'style': style_block - }); - div.text(this.search_field.val()); - $('body').append(div); - w = div.width() + 25; - div.remove(); - f_width = this.container.outerWidth(); - if (w > f_width - 10) { - w = f_width - 10; - } - return this.search_field.css({ - 'width': w + 'px' - }); - } - }; - - return Chosen; - - })(AbstractChosen); - -}).call(this); diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.jquery.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.jquery.min.js deleted file mode 100644 index cece231b..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Chosen v1.1.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ -!function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b;return a.search_match||a.group_match?a.active_options>0?(b=document.createElement("li"),b.className="group-result",b.innerHTML=a.search_text,this.outerHTML(b)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+""+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+""+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
            ",c),this.is_multiple?this.container.html('
              '):this.container.html('
              '+this.default_text+'
                '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
              • ",{"class":"search-choice"}).html(""+b.html+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("
                ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
              • '+this.results_none_found+' ""
              • '),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
                ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.min.css b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.min.css deleted file mode 100644 index 9a2baab3..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Chosen v1.1.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ - -.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:23px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:5px;height:15px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#666;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 0 3px 5px;padding:3px 20px 3px 5px;border:1px solid #aaa;border-radius:3px;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.proto.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.proto.js deleted file mode 100644 index 2054606b..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.proto.js +++ /dev/null @@ -1,1231 +0,0 @@ -/*! -Chosen, a Select Box Enhancer for jQuery and Prototype -by Patrick Filler for Harvest, http://getharvest.com - -Version 1.1.0 -Full source at https://github.com/harvesthq/chosen -Copyright (c) 2011 Harvest http://getharvest.com - -MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -This file is generated by `grunt build`, do not edit it by hand. -*/ - -(function() { - var AbstractChosen, SelectParser, _ref, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - SelectParser = (function() { - function SelectParser() { - this.options_index = 0; - this.parsed = []; - } - - SelectParser.prototype.add_node = function(child) { - if (child.nodeName.toUpperCase() === "OPTGROUP") { - return this.add_group(child); - } else { - return this.add_option(child); - } - }; - - SelectParser.prototype.add_group = function(group) { - var group_position, option, _i, _len, _ref, _results; - group_position = this.parsed.length; - this.parsed.push({ - array_index: group_position, - group: true, - label: this.escapeExpression(group.label), - children: 0, - disabled: group.disabled - }); - _ref = group.childNodes; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - _results.push(this.add_option(option, group_position, group.disabled)); - } - return _results; - }; - - SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName.toUpperCase() === "OPTION") { - if (option.text !== "") { - if (group_position != null) { - this.parsed[group_position].children += 1; - } - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - value: option.value, - text: option.text, - html: option.innerHTML, - selected: option.selected, - disabled: group_disabled === true ? group_disabled : option.disabled, - group_array_index: group_position, - classes: option.className, - style: option.style.cssText - }); - } else { - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - empty: true - }); - } - return this.options_index += 1; - } - }; - - SelectParser.prototype.escapeExpression = function(text) { - var map, unsafe_chars; - if ((text == null) || text === false) { - return ""; - } - if (!/[\&\<\>\"\'\`]/.test(text)) { - return text; - } - map = { - "<": "<", - ">": ">", - '"': """, - "'": "'", - "`": "`" - }; - unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; - return text.replace(unsafe_chars, function(chr) { - return map[chr] || "&"; - }); - }; - - return SelectParser; - - })(); - - SelectParser.select_to_array = function(select) { - var child, parser, _i, _len, _ref; - parser = new SelectParser(); - _ref = select.childNodes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - parser.add_node(child); - } - return parser.parsed; - }; - - AbstractChosen = (function() { - function AbstractChosen(form_field, options) { - this.form_field = form_field; - this.options = options != null ? options : {}; - if (!AbstractChosen.browser_is_supported()) { - return; - } - this.is_multiple = this.form_field.multiple; - this.set_default_text(); - this.set_default_values(); - this.setup(); - this.set_up_html(); - this.register_observers(); - } - - AbstractChosen.prototype.set_default_values = function() { - var _this = this; - this.click_test_action = function(evt) { - return _this.test_active_click(evt); - }; - this.activate_action = function(evt) { - return _this.activate_field(evt); - }; - this.active_field = false; - this.mouse_on_container = false; - this.results_showing = false; - this.result_highlighted = null; - this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; - this.disable_search_threshold = this.options.disable_search_threshold || 0; - this.disable_search = this.options.disable_search || false; - this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; - this.group_search = this.options.group_search != null ? this.options.group_search : true; - this.search_contains = this.options.search_contains || false; - this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; - this.max_selected_options = this.options.max_selected_options || Infinity; - this.inherit_select_classes = this.options.inherit_select_classes || false; - this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; - return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; - }; - - AbstractChosen.prototype.set_default_text = function() { - if (this.form_field.getAttribute("data-placeholder")) { - this.default_text = this.form_field.getAttribute("data-placeholder"); - } else if (this.is_multiple) { - this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; - } else { - this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; - } - return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; - }; - - AbstractChosen.prototype.mouse_enter = function() { - return this.mouse_on_container = true; - }; - - AbstractChosen.prototype.mouse_leave = function() { - return this.mouse_on_container = false; - }; - - AbstractChosen.prototype.input_focus = function(evt) { - var _this = this; - if (this.is_multiple) { - if (!this.active_field) { - return setTimeout((function() { - return _this.container_mousedown(); - }), 50); - } - } else { - if (!this.active_field) { - return this.activate_field(); - } - } - }; - - AbstractChosen.prototype.input_blur = function(evt) { - var _this = this; - if (!this.mouse_on_container) { - this.active_field = false; - return setTimeout((function() { - return _this.blur_test(); - }), 100); - } - }; - - AbstractChosen.prototype.results_option_build = function(options) { - var content, data, _i, _len, _ref; - content = ''; - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - data = _ref[_i]; - if (data.group) { - content += this.result_add_group(data); - } else { - content += this.result_add_option(data); - } - if (options != null ? options.first : void 0) { - if (data.selected && this.is_multiple) { - this.choice_build(data); - } else if (data.selected && !this.is_multiple) { - this.single_set_selected_text(data.text); - } - } - } - return content; - }; - - AbstractChosen.prototype.result_add_option = function(option) { - var classes, option_el; - if (!option.search_match) { - return ''; - } - if (!this.include_option_in_results(option)) { - return ''; - } - classes = []; - if (!option.disabled && !(option.selected && this.is_multiple)) { - classes.push("active-result"); - } - if (option.disabled && !(option.selected && this.is_multiple)) { - classes.push("disabled-result"); - } - if (option.selected) { - classes.push("result-selected"); - } - if (option.group_array_index != null) { - classes.push("group-option"); - } - if (option.classes !== "") { - classes.push(option.classes); - } - option_el = document.createElement("li"); - option_el.className = classes.join(" "); - option_el.style.cssText = option.style; - option_el.setAttribute("data-option-array-index", option.array_index); - option_el.innerHTML = option.search_text; - return this.outerHTML(option_el); - }; - - AbstractChosen.prototype.result_add_group = function(group) { - var group_el; - if (!(group.search_match || group.group_match)) { - return ''; - } - if (!(group.active_options > 0)) { - return ''; - } - group_el = document.createElement("li"); - group_el.className = "group-result"; - group_el.innerHTML = group.search_text; - return this.outerHTML(group_el); - }; - - AbstractChosen.prototype.results_update_field = function() { - this.set_default_text(); - if (!this.is_multiple) { - this.results_reset_cleanup(); - } - this.result_clear_highlight(); - this.results_build(); - if (this.results_showing) { - return this.winnow_results(); - } - }; - - AbstractChosen.prototype.reset_single_select_options = function() { - var result, _i, _len, _ref, _results; - _ref = this.results_data; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - result = _ref[_i]; - if (result.selected) { - _results.push(result.selected = false); - } else { - _results.push(void 0); - } - } - return _results; - }; - - AbstractChosen.prototype.results_toggle = function() { - if (this.results_showing) { - return this.results_hide(); - } else { - return this.results_show(); - } - }; - - AbstractChosen.prototype.results_search = function(evt) { - if (this.results_showing) { - return this.winnow_results(); - } else { - return this.results_show(); - } - }; - - AbstractChosen.prototype.winnow_results = function() { - var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; - this.no_results_clear(); - results = 0; - searchText = this.get_search_text(); - escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - regexAnchor = this.search_contains ? "" : "^"; - regex = new RegExp(regexAnchor + escapedSearchText, 'i'); - zregex = new RegExp(escapedSearchText, 'i'); - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - option.search_match = false; - results_group = null; - if (this.include_option_in_results(option)) { - if (option.group) { - option.group_match = false; - option.active_options = 0; - } - if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { - results_group = this.results_data[option.group_array_index]; - if (results_group.active_options === 0 && results_group.search_match) { - results += 1; - } - results_group.active_options += 1; - } - if (!(option.group && !this.group_search)) { - option.search_text = option.group ? option.label : option.html; - option.search_match = this.search_string_match(option.search_text, regex); - if (option.search_match && !option.group) { - results += 1; - } - if (option.search_match) { - if (searchText.length) { - startpos = option.search_text.search(zregex); - text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); - option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); - } - if (results_group != null) { - results_group.group_match = true; - } - } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { - option.search_match = true; - } - } - } - } - this.result_clear_highlight(); - if (results < 1 && searchText.length) { - this.update_results_content(""); - return this.no_results(searchText); - } else { - this.update_results_content(this.results_option_build()); - return this.winnow_results_set_highlight(); - } - }; - - AbstractChosen.prototype.search_string_match = function(search_string, regex) { - var part, parts, _i, _len; - if (regex.test(search_string)) { - return true; - } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { - parts = search_string.replace(/\[|\]/g, "").split(" "); - if (parts.length) { - for (_i = 0, _len = parts.length; _i < _len; _i++) { - part = parts[_i]; - if (regex.test(part)) { - return true; - } - } - } - } - }; - - AbstractChosen.prototype.choices_count = function() { - var option, _i, _len, _ref; - if (this.selected_option_count != null) { - return this.selected_option_count; - } - this.selected_option_count = 0; - _ref = this.form_field.options; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - if (option.selected) { - this.selected_option_count += 1; - } - } - return this.selected_option_count; - }; - - AbstractChosen.prototype.choices_click = function(evt) { - evt.preventDefault(); - if (!(this.results_showing || this.is_disabled)) { - return this.results_show(); - } - }; - - AbstractChosen.prototype.keyup_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - switch (stroke) { - case 8: - if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { - return this.keydown_backstroke(); - } else if (!this.pending_backstroke) { - this.result_clear_highlight(); - return this.results_search(); - } - break; - case 13: - evt.preventDefault(); - if (this.results_showing) { - return this.result_select(evt); - } - break; - case 27: - if (this.results_showing) { - this.results_hide(); - } - return true; - case 9: - case 38: - case 40: - case 16: - case 91: - case 17: - break; - default: - return this.results_search(); - } - }; - - AbstractChosen.prototype.clipboard_event_checker = function(evt) { - var _this = this; - return setTimeout((function() { - return _this.results_search(); - }), 50); - }; - - AbstractChosen.prototype.container_width = function() { - if (this.options.width != null) { - return this.options.width; - } else { - return "" + this.form_field.offsetWidth + "px"; - } - }; - - AbstractChosen.prototype.include_option_in_results = function(option) { - if (this.is_multiple && (!this.display_selected_options && option.selected)) { - return false; - } - if (!this.display_disabled_options && option.disabled) { - return false; - } - if (option.empty) { - return false; - } - return true; - }; - - AbstractChosen.prototype.search_results_touchstart = function(evt) { - this.touch_started = true; - return this.search_results_mouseover(evt); - }; - - AbstractChosen.prototype.search_results_touchmove = function(evt) { - this.touch_started = false; - return this.search_results_mouseout(evt); - }; - - AbstractChosen.prototype.search_results_touchend = function(evt) { - if (this.touch_started) { - return this.search_results_mouseup(evt); - } - }; - - AbstractChosen.prototype.outerHTML = function(element) { - var tmp; - if (element.outerHTML) { - return element.outerHTML; - } - tmp = document.createElement("div"); - tmp.appendChild(element); - return tmp.innerHTML; - }; - - AbstractChosen.browser_is_supported = function() { - if (window.navigator.appName === "Microsoft Internet Explorer") { - return document.documentMode >= 8; - } - if (/iP(od|hone)/i.test(window.navigator.userAgent)) { - return false; - } - if (/Android/i.test(window.navigator.userAgent)) { - if (/Mobile/i.test(window.navigator.userAgent)) { - return false; - } - } - return true; - }; - - AbstractChosen.default_multiple_text = "Select Some Options"; - - AbstractChosen.default_single_text = "Select an Option"; - - AbstractChosen.default_no_result_text = "No results match"; - - return AbstractChosen; - - })(); - - this.Chosen = (function(_super) { - __extends(Chosen, _super); - - function Chosen() { - _ref = Chosen.__super__.constructor.apply(this, arguments); - return _ref; - } - - Chosen.prototype.setup = function() { - this.current_selectedIndex = this.form_field.selectedIndex; - return this.is_rtl = this.form_field.hasClassName("chosen-rtl"); - }; - - Chosen.prototype.set_default_values = function() { - Chosen.__super__.set_default_values.call(this); - this.single_temp = new Template('#{default}
                  '); - this.multi_temp = new Template('
                    '); - return this.no_results_temp = new Template('
                  • ' + this.results_none_found + ' "#{terms}"
                  • '); - }; - - Chosen.prototype.set_up_html = function() { - var container_classes, container_props; - container_classes = ["chosen-container"]; - container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); - if (this.inherit_select_classes && this.form_field.className) { - container_classes.push(this.form_field.className); - } - if (this.is_rtl) { - container_classes.push("chosen-rtl"); - } - container_props = { - 'class': container_classes.join(' '), - 'style': "width: " + (this.container_width()) + ";", - 'title': this.form_field.title - }; - if (this.form_field.id.length) { - container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; - } - this.container = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({ - "default": this.default_text - })) : new Element('div', container_props).update(this.single_temp.evaluate({ - "default": this.default_text - })); - this.form_field.hide().insert({ - after: this.container - }); - this.dropdown = this.container.down('div.chosen-drop'); - this.search_field = this.container.down('input'); - this.search_results = this.container.down('ul.chosen-results'); - this.search_field_scale(); - this.search_no_results = this.container.down('li.no-results'); - if (this.is_multiple) { - this.search_choices = this.container.down('ul.chosen-choices'); - this.search_container = this.container.down('li.search-field'); - } else { - this.search_container = this.container.down('div.chosen-search'); - this.selected_item = this.container.down('.chosen-single'); - } - this.results_build(); - this.set_tab_index(); - this.set_label_behavior(); - return this.form_field.fire("chosen:ready", { - chosen: this - }); - }; - - Chosen.prototype.register_observers = function() { - var _this = this; - this.container.observe("mousedown", function(evt) { - return _this.container_mousedown(evt); - }); - this.container.observe("mouseup", function(evt) { - return _this.container_mouseup(evt); - }); - this.container.observe("mouseenter", function(evt) { - return _this.mouse_enter(evt); - }); - this.container.observe("mouseleave", function(evt) { - return _this.mouse_leave(evt); - }); - this.search_results.observe("mouseup", function(evt) { - return _this.search_results_mouseup(evt); - }); - this.search_results.observe("mouseover", function(evt) { - return _this.search_results_mouseover(evt); - }); - this.search_results.observe("mouseout", function(evt) { - return _this.search_results_mouseout(evt); - }); - this.search_results.observe("mousewheel", function(evt) { - return _this.search_results_mousewheel(evt); - }); - this.search_results.observe("DOMMouseScroll", function(evt) { - return _this.search_results_mousewheel(evt); - }); - this.search_results.observe("touchstart", function(evt) { - return _this.search_results_touchstart(evt); - }); - this.search_results.observe("touchmove", function(evt) { - return _this.search_results_touchmove(evt); - }); - this.search_results.observe("touchend", function(evt) { - return _this.search_results_touchend(evt); - }); - this.form_field.observe("chosen:updated", function(evt) { - return _this.results_update_field(evt); - }); - this.form_field.observe("chosen:activate", function(evt) { - return _this.activate_field(evt); - }); - this.form_field.observe("chosen:open", function(evt) { - return _this.container_mousedown(evt); - }); - this.form_field.observe("chosen:close", function(evt) { - return _this.input_blur(evt); - }); - this.search_field.observe("blur", function(evt) { - return _this.input_blur(evt); - }); - this.search_field.observe("keyup", function(evt) { - return _this.keyup_checker(evt); - }); - this.search_field.observe("keydown", function(evt) { - return _this.keydown_checker(evt); - }); - this.search_field.observe("focus", function(evt) { - return _this.input_focus(evt); - }); - this.search_field.observe("cut", function(evt) { - return _this.clipboard_event_checker(evt); - }); - this.search_field.observe("paste", function(evt) { - return _this.clipboard_event_checker(evt); - }); - if (this.is_multiple) { - return this.search_choices.observe("click", function(evt) { - return _this.choices_click(evt); - }); - } else { - return this.container.observe("click", function(evt) { - return evt.preventDefault(); - }); - } - }; - - Chosen.prototype.destroy = function() { - this.container.ownerDocument.stopObserving("click", this.click_test_action); - this.form_field.stopObserving(); - this.container.stopObserving(); - this.search_results.stopObserving(); - this.search_field.stopObserving(); - if (this.form_field_label != null) { - this.form_field_label.stopObserving(); - } - if (this.is_multiple) { - this.search_choices.stopObserving(); - this.container.select(".search-choice-close").each(function(choice) { - return choice.stopObserving(); - }); - } else { - this.selected_item.stopObserving(); - } - if (this.search_field.tabIndex) { - this.form_field.tabIndex = this.search_field.tabIndex; - } - this.container.remove(); - return this.form_field.show(); - }; - - Chosen.prototype.search_field_disabled = function() { - this.is_disabled = this.form_field.disabled; - if (this.is_disabled) { - this.container.addClassName('chosen-disabled'); - this.search_field.disabled = true; - if (!this.is_multiple) { - this.selected_item.stopObserving("focus", this.activate_action); - } - return this.close_field(); - } else { - this.container.removeClassName('chosen-disabled'); - this.search_field.disabled = false; - if (!this.is_multiple) { - return this.selected_item.observe("focus", this.activate_action); - } - } - }; - - Chosen.prototype.container_mousedown = function(evt) { - if (!this.is_disabled) { - if (evt && evt.type === "mousedown" && !this.results_showing) { - evt.stop(); - } - if (!((evt != null) && evt.target.hasClassName("search-choice-close"))) { - if (!this.active_field) { - if (this.is_multiple) { - this.search_field.clear(); - } - this.container.ownerDocument.observe("click", this.click_test_action); - this.results_show(); - } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chosen-single"))) { - this.results_toggle(); - } - return this.activate_field(); - } - } - }; - - Chosen.prototype.container_mouseup = function(evt) { - if (evt.target.nodeName === "ABBR" && !this.is_disabled) { - return this.results_reset(evt); - } - }; - - Chosen.prototype.search_results_mousewheel = function(evt) { - var delta; - delta = -evt.wheelDelta || evt.detail; - if (delta != null) { - evt.preventDefault(); - if (evt.type === 'DOMMouseScroll') { - delta = delta * 40; - } - return this.search_results.scrollTop = delta + this.search_results.scrollTop; - } - }; - - Chosen.prototype.blur_test = function(evt) { - if (!this.active_field && this.container.hasClassName("chosen-container-active")) { - return this.close_field(); - } - }; - - Chosen.prototype.close_field = function() { - this.container.ownerDocument.stopObserving("click", this.click_test_action); - this.active_field = false; - this.results_hide(); - this.container.removeClassName("chosen-container-active"); - this.clear_backstroke(); - this.show_search_field_default(); - return this.search_field_scale(); - }; - - Chosen.prototype.activate_field = function() { - this.container.addClassName("chosen-container-active"); - this.active_field = true; - this.search_field.value = this.search_field.value; - return this.search_field.focus(); - }; - - Chosen.prototype.test_active_click = function(evt) { - if (evt.target.up('.chosen-container') === this.container) { - return this.active_field = true; - } else { - return this.close_field(); - } - }; - - Chosen.prototype.results_build = function() { - this.parsing = true; - this.selected_option_count = null; - this.results_data = SelectParser.select_to_array(this.form_field); - if (this.is_multiple) { - this.search_choices.select("li.search-choice").invoke("remove"); - } else if (!this.is_multiple) { - this.single_set_selected_text(); - if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { - this.search_field.readOnly = true; - this.container.addClassName("chosen-container-single-nosearch"); - } else { - this.search_field.readOnly = false; - this.container.removeClassName("chosen-container-single-nosearch"); - } - } - this.update_results_content(this.results_option_build({ - first: true - })); - this.search_field_disabled(); - this.show_search_field_default(); - this.search_field_scale(); - return this.parsing = false; - }; - - Chosen.prototype.result_do_highlight = function(el) { - var high_bottom, high_top, maxHeight, visible_bottom, visible_top; - this.result_clear_highlight(); - this.result_highlight = el; - this.result_highlight.addClassName("highlighted"); - maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10); - visible_top = this.search_results.scrollTop; - visible_bottom = maxHeight + visible_top; - high_top = this.result_highlight.positionedOffset().top; - high_bottom = high_top + this.result_highlight.getHeight(); - if (high_bottom >= visible_bottom) { - return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0; - } else if (high_top < visible_top) { - return this.search_results.scrollTop = high_top; - } - }; - - Chosen.prototype.result_clear_highlight = function() { - if (this.result_highlight) { - this.result_highlight.removeClassName('highlighted'); - } - return this.result_highlight = null; - }; - - Chosen.prototype.results_show = function() { - if (this.is_multiple && this.max_selected_options <= this.choices_count()) { - this.form_field.fire("chosen:maxselected", { - chosen: this - }); - return false; - } - this.container.addClassName("chosen-with-drop"); - this.results_showing = true; - this.search_field.focus(); - this.search_field.value = this.search_field.value; - this.winnow_results(); - return this.form_field.fire("chosen:showing_dropdown", { - chosen: this - }); - }; - - Chosen.prototype.update_results_content = function(content) { - return this.search_results.update(content); - }; - - Chosen.prototype.results_hide = function() { - if (this.results_showing) { - this.result_clear_highlight(); - this.container.removeClassName("chosen-with-drop"); - this.form_field.fire("chosen:hiding_dropdown", { - chosen: this - }); - } - return this.results_showing = false; - }; - - Chosen.prototype.set_tab_index = function(el) { - var ti; - if (this.form_field.tabIndex) { - ti = this.form_field.tabIndex; - this.form_field.tabIndex = -1; - return this.search_field.tabIndex = ti; - } - }; - - Chosen.prototype.set_label_behavior = function() { - var _this = this; - this.form_field_label = this.form_field.up("label"); - if (this.form_field_label == null) { - this.form_field_label = $$("label[for='" + this.form_field.id + "']").first(); - } - if (this.form_field_label != null) { - return this.form_field_label.observe("click", function(evt) { - if (_this.is_multiple) { - return _this.container_mousedown(evt); - } else { - return _this.activate_field(); - } - }); - } - }; - - Chosen.prototype.show_search_field_default = function() { - if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { - this.search_field.value = this.default_text; - return this.search_field.addClassName("default"); - } else { - this.search_field.value = ""; - return this.search_field.removeClassName("default"); - } - }; - - Chosen.prototype.search_results_mouseup = function(evt) { - var target; - target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); - if (target) { - this.result_highlight = target; - this.result_select(evt); - return this.search_field.focus(); - } - }; - - Chosen.prototype.search_results_mouseover = function(evt) { - var target; - target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); - if (target) { - return this.result_do_highlight(target); - } - }; - - Chosen.prototype.search_results_mouseout = function(evt) { - if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) { - return this.result_clear_highlight(); - } - }; - - Chosen.prototype.choice_build = function(item) { - var choice, close_link, - _this = this; - choice = new Element('li', { - "class": "search-choice" - }).update("" + item.html + ""); - if (item.disabled) { - choice.addClassName('search-choice-disabled'); - } else { - close_link = new Element('a', { - href: '#', - "class": 'search-choice-close', - rel: item.array_index - }); - close_link.observe("click", function(evt) { - return _this.choice_destroy_link_click(evt); - }); - choice.insert(close_link); - } - return this.search_container.insert({ - before: choice - }); - }; - - Chosen.prototype.choice_destroy_link_click = function(evt) { - evt.preventDefault(); - evt.stopPropagation(); - if (!this.is_disabled) { - return this.choice_destroy(evt.target); - } - }; - - Chosen.prototype.choice_destroy = function(link) { - if (this.result_deselect(link.readAttribute("rel"))) { - this.show_search_field_default(); - if (this.is_multiple && this.choices_count() > 0 && this.search_field.value.length < 1) { - this.results_hide(); - } - link.up('li').remove(); - return this.search_field_scale(); - } - }; - - Chosen.prototype.results_reset = function() { - this.reset_single_select_options(); - this.form_field.options[0].selected = true; - this.single_set_selected_text(); - this.show_search_field_default(); - this.results_reset_cleanup(); - if (typeof Event.simulate === 'function') { - this.form_field.simulate("change"); - } - if (this.active_field) { - return this.results_hide(); - } - }; - - Chosen.prototype.results_reset_cleanup = function() { - var deselect_trigger; - this.current_selectedIndex = this.form_field.selectedIndex; - deselect_trigger = this.selected_item.down("abbr"); - if (deselect_trigger) { - return deselect_trigger.remove(); - } - }; - - Chosen.prototype.result_select = function(evt) { - var high, item; - if (this.result_highlight) { - high = this.result_highlight; - this.result_clear_highlight(); - if (this.is_multiple && this.max_selected_options <= this.choices_count()) { - this.form_field.fire("chosen:maxselected", { - chosen: this - }); - return false; - } - if (this.is_multiple) { - high.removeClassName("active-result"); - } else { - this.reset_single_select_options(); - } - high.addClassName("result-selected"); - item = this.results_data[high.getAttribute("data-option-array-index")]; - item.selected = true; - this.form_field.options[item.options_index].selected = true; - this.selected_option_count = null; - if (this.is_multiple) { - this.choice_build(item); - } else { - this.single_set_selected_text(item.text); - } - if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { - this.results_hide(); - } - this.search_field.value = ""; - if (typeof Event.simulate === 'function' && (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex)) { - this.form_field.simulate("change"); - } - this.current_selectedIndex = this.form_field.selectedIndex; - return this.search_field_scale(); - } - }; - - Chosen.prototype.single_set_selected_text = function(text) { - if (text == null) { - text = this.default_text; - } - if (text === this.default_text) { - this.selected_item.addClassName("chosen-default"); - } else { - this.single_deselect_control_build(); - this.selected_item.removeClassName("chosen-default"); - } - return this.selected_item.down("span").update(text); - }; - - Chosen.prototype.result_deselect = function(pos) { - var result_data; - result_data = this.results_data[pos]; - if (!this.form_field.options[result_data.options_index].disabled) { - result_data.selected = false; - this.form_field.options[result_data.options_index].selected = false; - this.selected_option_count = null; - this.result_clear_highlight(); - if (this.results_showing) { - this.winnow_results(); - } - if (typeof Event.simulate === 'function') { - this.form_field.simulate("change"); - } - this.search_field_scale(); - return true; - } else { - return false; - } - }; - - Chosen.prototype.single_deselect_control_build = function() { - if (!this.allow_single_deselect) { - return; - } - if (!this.selected_item.down("abbr")) { - this.selected_item.down("span").insert({ - after: "" - }); - } - return this.selected_item.addClassName("chosen-single-with-deselect"); - }; - - Chosen.prototype.get_search_text = function() { - if (this.search_field.value === this.default_text) { - return ""; - } else { - return this.search_field.value.strip().escapeHTML(); - } - }; - - Chosen.prototype.winnow_results_set_highlight = function() { - var do_high; - if (!this.is_multiple) { - do_high = this.search_results.down(".result-selected.active-result"); - } - if (do_high == null) { - do_high = this.search_results.down(".active-result"); - } - if (do_high != null) { - return this.result_do_highlight(do_high); - } - }; - - Chosen.prototype.no_results = function(terms) { - this.search_results.insert(this.no_results_temp.evaluate({ - terms: terms - })); - return this.form_field.fire("chosen:no_results", { - chosen: this - }); - }; - - Chosen.prototype.no_results_clear = function() { - var nr, _results; - nr = null; - _results = []; - while (nr = this.search_results.down(".no-results")) { - _results.push(nr.remove()); - } - return _results; - }; - - Chosen.prototype.keydown_arrow = function() { - var next_sib; - if (this.results_showing && this.result_highlight) { - next_sib = this.result_highlight.next('.active-result'); - if (next_sib) { - return this.result_do_highlight(next_sib); - } - } else { - return this.results_show(); - } - }; - - Chosen.prototype.keyup_arrow = function() { - var actives, prevs, sibs; - if (!this.results_showing && !this.is_multiple) { - return this.results_show(); - } else if (this.result_highlight) { - sibs = this.result_highlight.previousSiblings(); - actives = this.search_results.select("li.active-result"); - prevs = sibs.intersect(actives); - if (prevs.length) { - return this.result_do_highlight(prevs.first()); - } else { - if (this.choices_count() > 0) { - this.results_hide(); - } - return this.result_clear_highlight(); - } - } - }; - - Chosen.prototype.keydown_backstroke = function() { - var next_available_destroy; - if (this.pending_backstroke) { - this.choice_destroy(this.pending_backstroke.down("a")); - return this.clear_backstroke(); - } else { - next_available_destroy = this.search_container.siblings().last(); - if (next_available_destroy && next_available_destroy.hasClassName("search-choice") && !next_available_destroy.hasClassName("search-choice-disabled")) { - this.pending_backstroke = next_available_destroy; - if (this.pending_backstroke) { - this.pending_backstroke.addClassName("search-choice-focus"); - } - if (this.single_backstroke_delete) { - return this.keydown_backstroke(); - } else { - return this.pending_backstroke.addClassName("search-choice-focus"); - } - } - } - }; - - Chosen.prototype.clear_backstroke = function() { - if (this.pending_backstroke) { - this.pending_backstroke.removeClassName("search-choice-focus"); - } - return this.pending_backstroke = null; - }; - - Chosen.prototype.keydown_checker = function(evt) { - var stroke, _ref1; - stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; - this.search_field_scale(); - if (stroke !== 8 && this.pending_backstroke) { - this.clear_backstroke(); - } - switch (stroke) { - case 8: - this.backstroke_length = this.search_field.value.length; - break; - case 9: - if (this.results_showing && !this.is_multiple) { - this.result_select(evt); - } - this.mouse_on_container = false; - break; - case 13: - evt.preventDefault(); - break; - case 38: - evt.preventDefault(); - this.keyup_arrow(); - break; - case 40: - evt.preventDefault(); - this.keydown_arrow(); - break; - } - }; - - Chosen.prototype.search_field_scale = function() { - var div, f_width, h, style, style_block, styles, w, _i, _len; - if (this.is_multiple) { - h = 0; - w = 0; - style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; - styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; - for (_i = 0, _len = styles.length; _i < _len; _i++) { - style = styles[_i]; - style_block += style + ":" + this.search_field.getStyle(style) + ";"; - } - div = new Element('div', { - 'style': style_block - }).update(this.search_field.value.escapeHTML()); - document.body.appendChild(div); - w = Element.measure(div, 'width') + 25; - div.remove(); - f_width = this.container.getWidth(); - if (w > f_width - 10) { - w = f_width - 10; - } - return this.search_field.setStyle({ - 'width': w + 'px' - }); - } - }; - - return Chosen; - - })(AbstractChosen); - -}).call(this); diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.proto.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.proto.min.js deleted file mode 100644 index 8f9a1db3..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/chosen.proto.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Chosen v1.1.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ -!function(){var AbstractChosen,SelectParser,a,b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b;return a.search_match||a.group_match?a.active_options>0?(b=document.createElement("li"),b.className="group-result",b.innerHTML=a.search_text,this.outerHTML(b)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+"
                    "+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+""+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),this.Chosen=function(b){function Chosen(){return a=Chosen.__super__.constructor.apply(this,arguments)}return c(Chosen,b),Chosen.prototype.setup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field.hasClassName("chosen-rtl")},Chosen.prototype.set_default_values=function(){return Chosen.__super__.set_default_values.call(this),this.single_temp=new Template('#{default}
                      '),this.multi_temp=new Template('
                        '),this.no_results_temp=new Template('
                      • '+this.results_none_found+' "#{terms}"
                      • ')},Chosen.prototype.set_up_html=function(){var a,b;return a=["chosen-container"],a.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&a.push(this.form_field.className),this.is_rtl&&a.push("chosen-rtl"),b={"class":a.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(b.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=this.is_multiple?new Element("div",b).update(this.multi_temp.evaluate({"default":this.default_text})):new Element("div",b).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:this.container}),this.dropdown=this.container.down("div.chosen-drop"),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chosen-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chosen-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chosen-search"),this.selected_item=this.container.down(".chosen-single")),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field.fire("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.observe("mousedown",function(b){return a.container_mousedown(b)}),this.container.observe("mouseup",function(b){return a.container_mouseup(b)}),this.container.observe("mouseenter",function(b){return a.mouse_enter(b)}),this.container.observe("mouseleave",function(b){return a.mouse_leave(b)}),this.search_results.observe("mouseup",function(b){return a.search_results_mouseup(b)}),this.search_results.observe("mouseover",function(b){return a.search_results_mouseover(b)}),this.search_results.observe("mouseout",function(b){return a.search_results_mouseout(b)}),this.search_results.observe("mousewheel",function(b){return a.search_results_mousewheel(b)}),this.search_results.observe("DOMMouseScroll",function(b){return a.search_results_mousewheel(b)}),this.search_results.observe("touchstart",function(b){return a.search_results_touchstart(b)}),this.search_results.observe("touchmove",function(b){return a.search_results_touchmove(b)}),this.search_results.observe("touchend",function(b){return a.search_results_touchend(b)}),this.form_field.observe("chosen:updated",function(b){return a.results_update_field(b)}),this.form_field.observe("chosen:activate",function(b){return a.activate_field(b)}),this.form_field.observe("chosen:open",function(b){return a.container_mousedown(b)}),this.form_field.observe("chosen:close",function(b){return a.input_blur(b)}),this.search_field.observe("blur",function(b){return a.input_blur(b)}),this.search_field.observe("keyup",function(b){return a.keyup_checker(b)}),this.search_field.observe("keydown",function(b){return a.keydown_checker(b)}),this.search_field.observe("focus",function(b){return a.input_focus(b)}),this.search_field.observe("cut",function(b){return a.clipboard_event_checker(b)}),this.search_field.observe("paste",function(b){return a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.observe("click",function(b){return a.choices_click(b)}):this.container.observe("click",function(a){return a.preventDefault()})},Chosen.prototype.destroy=function(){return this.container.ownerDocument.stopObserving("click",this.click_test_action),this.form_field.stopObserving(),this.container.stopObserving(),this.search_results.stopObserving(),this.search_field.stopObserving(),null!=this.form_field_label&&this.form_field_label.stopObserving(),this.is_multiple?(this.search_choices.stopObserving(),this.container.select(".search-choice-close").each(function(a){return a.stopObserving()})):this.selected_item.stopObserving(),this.search_field.tabIndex&&(this.form_field.tabIndex=this.search_field.tabIndex),this.container.remove(),this.form_field.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled,this.is_disabled?(this.container.addClassName("chosen-disabled"),this.search_field.disabled=!0,this.is_multiple||this.selected_item.stopObserving("focus",this.activate_action),this.close_field()):(this.container.removeClassName("chosen-disabled"),this.search_field.disabled=!1,this.is_multiple?void 0:this.selected_item.observe("focus",this.activate_action))},Chosen.prototype.container_mousedown=function(a){return this.is_disabled||(a&&"mousedown"===a.type&&!this.results_showing&&a.stop(),null!=a&&a.target.hasClassName("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!a||a.target!==this.selected_item&&!a.target.up("a.chosen-single")||this.results_toggle():(this.is_multiple&&this.search_field.clear(),this.container.ownerDocument.observe("click",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return b=-a.wheelDelta||a.detail,null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop=b+this.search_results.scrollTop):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClassName("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return this.container.ownerDocument.stopObserving("click",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClassName("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClassName("chosen-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value,this.search_field.focus()},Chosen.prototype.test_active_click=function(a){return a.target.up(".chosen-container")===this.container?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.select("li.search-choice").invoke("remove"):this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field.readOnly=!0,this.container.addClassName("chosen-container-single-nosearch")):(this.search_field.readOnly=!1,this.container.removeClassName("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;return this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClassName("highlighted"),d=parseInt(this.search_results.getStyle("maxHeight"),10),f=this.search_results.scrollTop,e=d+f,c=this.result_highlight.positionedOffset().top,b=c+this.result_highlight.getHeight(),b>=e?this.search_results.scrollTop=b-d>0?b-d:0:f>c?this.search_results.scrollTop=c:void 0},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClassName("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.container.addClassName("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.value=this.search_field.value,this.winnow_results(),this.form_field.fire("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.update(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClassName("chosen-with-drop"),this.form_field.fire("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field.tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var a=this;return this.form_field_label=this.form_field.up("label"),null==this.form_field_label&&(this.form_field_label=$$("label[for='"+this.form_field.id+"']").first()),null!=this.form_field_label?this.form_field_label.observe("click",function(b){return a.is_multiple?a.container_mousedown(b):a.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.value=this.default_text,this.search_field.addClassName("default")):(this.search_field.value="",this.search_field.removeClassName("default"))},Chosen.prototype.search_results_mouseup=function(a){var b;return b=a.target.hasClassName("active-result")?a.target:a.target.up(".active-result"),b?(this.result_highlight=b,this.result_select(a),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(a){var b;return b=a.target.hasClassName("active-result")?a.target:a.target.up(".active-result"),b?this.result_do_highlight(b):void 0},Chosen.prototype.search_results_mouseout=function(a){return a.target.hasClassName("active-result")||a.target.up(".active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(a){var b,c,d=this;return b=new Element("li",{"class":"search-choice"}).update(""+a.html+""),a.disabled?b.addClassName("search-choice-disabled"):(c=new Element("a",{href:"#","class":"search-choice-close",rel:a.array_index}),c.observe("click",function(a){return d.choice_destroy_link_click(a)}),b.insert(c)),this.search_container.insert({before:b})},Chosen.prototype.choice_destroy_link_click=function(a){return a.preventDefault(),a.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a.target)},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a.readAttribute("rel"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.value.length<1&&this.results_hide(),a.up("li").remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),"function"==typeof Event.simulate&&this.form_field.simulate("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){var a;return this.current_selectedIndex=this.form_field.selectedIndex,a=this.selected_item.down("abbr"),a?a.remove():void 0},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClassName("active-result"):this.reset_single_select_options(),b.addClassName("result-selected"),c=this.results_data[b.getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.value="","function"!=typeof Event.simulate||!this.is_multiple&&this.form_field.selectedIndex===this.current_selectedIndex||this.form_field.simulate("change"),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClassName("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClassName("chosen-default")),this.selected_item.down("span").update(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),"function"==typeof Event.simulate&&this.form_field.simulate("change"),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.down("abbr")||this.selected_item.down("span").insert({after:''}),this.selected_item.addClassName("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML()},Chosen.prototype.winnow_results_set_highlight=function(){var a;return this.is_multiple||(a=this.search_results.down(".result-selected.active-result")),null==a&&(a=this.search_results.down(".active-result")),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(a){return this.search_results.insert(this.no_results_temp.evaluate({terms:a})),this.form_field.fire("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){var a,b;for(a=null,b=[];a=this.search_results.down(".no-results");)b.push(a.remove());return b},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.next(".active-result"))?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a,b,c;return this.results_showing||this.is_multiple?this.result_highlight?(c=this.result_highlight.previousSiblings(),a=this.search_results.select("li.active-result"),b=c.intersect(a),b.length?this.result_do_highlight(b.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke()):(a=this.search_container.siblings().last(),a&&a.hasClassName("search-choice")&&!a.hasClassName("search-choice-disabled")?(this.pending_backstroke=a,this.pending_backstroke&&this.pending_backstroke.addClassName("search-choice-focus"),this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClassName("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.value.length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var a,b,c,d,e,f,g,h,i;if(this.is_multiple){for(c=0,g=0,e="position:absolute; left: -1000px; top: -1000px; display:none;",f=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],h=0,i=f.length;i>h;h++)d=f[h],e+=d+":"+this.search_field.getStyle(d)+";";return a=new Element("div",{style:e}).update(this.search_field.value.escapeHTML()),document.body.appendChild(a),g=Element.measure(a,"width")+25,a.remove(),b=this.container.getWidth(),g>b-10&&(g=b-10),this.search_field.setStyle({width:g+"px"})}},Chosen}(AbstractChosen)}.call(this); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/chosen.png b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/chosen.png deleted file mode 100644 index b81474b3..00000000 Binary files a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/chosen.png and /dev/null differ diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/oss-credit.png b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/oss-credit.png deleted file mode 100644 index aeed5eec..00000000 Binary files a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/oss-credit.png and /dev/null differ diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/prism.css b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/prism.css deleted file mode 100644 index b5ba1797..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/prism.css +++ /dev/null @@ -1,108 +0,0 @@ -/** - * okaidia theme for JavaScript, CSS and HTML - * Loosely based on Monokai textmate theme by http://www.monokai.nl/ - * @author ocodia - */ - -code[class*="language-"], -pre[class*="language-"] { - color: #f8f8f2; - text-shadow: 0 1px rgba(0,0,0,0.3); - font-family: Consolas, Monaco, 'Andale Mono', monospace; - direction: ltr; - text-align: left; - white-space: pre; - word-spacing: normal; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; - border-radius: 0.3em; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: #272822; -} - -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #f8f8f2; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag { - color: #f92672; -} - -.token.boolean, -.token.number{ - color: #ae81ff; -} - -.token.selector, -.token.attr-name, -.token.string { - color: #a6e22e; -} - - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #f8f8f2; -} - -.token.atrule, -.token.attr-value -{ - color: #e6db74; -} - - -.token.keyword{ -color: #66d9ef; -} - -.token.regex, -.token.important { - color: #fd971f; -} - -.token.important { - font-weight: bold; -} - -.token.entity { - cursor: help; -} diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/prism.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/prism.js deleted file mode 100644 index 7ed4fa73..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/prism.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * MIT license http://www.opensource.org/licenses/mit-license.php/ - * @author Lea Verou http://lea.verou.me - */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; -Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; -Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; -Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; -Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/style.css b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/style.css deleted file mode 100644 index 9962974a..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/docsupport/style.css +++ /dev/null @@ -1,203 +0,0 @@ -/* Reset */ -html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } - -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } - -blockquote, q { quotes: none; } -blockquote:before, blockquote:after, q:before, q:after { content: ""; content: none; } -ins { background-color: #ff9; color: #000; text-decoration: none; } -mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; } -del { text-decoration: line-through; } -abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; } -table { border-collapse: collapse; border-spacing: 0; } -hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; } -input, select { vertical-align: middle; } - -body { font:13px/1.231 sans-serif; *font-size:small; } /* Hack retained to preserve specificity */ -select, input, textarea, button { font:99% sans-serif; } -pre, code, kbd, samp { font-family: monospace, sans-serif; } - - -body { background: #EEE; color: #444; line-height: 1.4em; } - -header h1 { color: black; font-size: 2em; line-height: 1.1em; display: inline-block; height: 27px; margin: 20px 0 25px; } -header h1 small { font-size: 0.6em; } - -div#content { background: white; border: 1px solid #ccc; border-width: 0 1px 1px; margin: 0 auto; padding: 40px 50px 40px; width: 738px; } - -footer { color: #999; padding-top: 40px; font-size: 0.8em; text-align: center; } - -body { font-family: sans-serif; font-size: 1em; } - -p { margin: 0 0 .7em; max-width: 700px; } - -h2 { border-bottom: 1px solid #ccc; font-size: 1.2em; margin: 3em 0 1em 0; font-weight: bold;} -h3 { font-weight: bold; } - -h2.intro { border-bottom: none; font-size: 1em; font-weight: normal; margin-top:0; } - -ul li { list-style: disc; margin-left: 1em; margin-bottom: 1.25em; } -ol li { margin-left: 1.25em; } -ol ul, ul ul { margin: .25em 0 0; } -ol ul li, ul ul li { list-style-type: circle; margin: 0 0 .25em 1em; } - -li > p { margin-top: .25em; } - -div.side-by-side { width: 100%; margin-bottom: 1em; } -div.side-by-side > div { float: left; width: 49%; } -div.side-by-side > div > em { margin-bottom: 10px; display: block; } - -.faqs em { display: block; } - -.clearfix:after { - content: "\0020"; - display: block; - height: 0; - clear: both; - overflow: hidden; - visibility: hidden; -} - -a { color: #F36C00; outline: none; text-decoration: none; } -a:hover { text-decoration: underline; } - -ul.credits li { margin-bottom: .25em; } - -strong { font-weight: bold; } -i { font-style: italic; } - -.button { - background: #fafafa; - background: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background: -moz-linear-gradient(top, #ffffff, #eeeeee); - background: -o-linear-gradient(top, #ffffff, #eeeeee); - background: linear-gradient(to bottom, #ffffff, #eeeeee); - border: 1px solid #bbbbbb; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.2); - color: #555555; - cursor: pointer; - display: inline-block; - font-family: "Helvetica Neue", Arial, Verdana, "Nimbus Sans L", sans-serif; - font-size: 13px; - font-weight: 500; - height: 31px; - line-height: 28px; - outline: none; - padding: 0 13px; - text-shadow: 0 1px 0 white; - text-decoration: none; - vertical-align: middle; - white-space: nowrap; - -webkit-font-smoothing: antialiased; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.button-blue { - background: #1385e5; - background: -webkit-linear-gradient(top, #53b2fc, #1385e5); - background: -moz-linear-gradient(top, #53b2fc, #1385e5); - background: -o-linear-gradient(top, #53b2fc, #1385e5); - background: linear-gradient(to bottom, #53b2fc, #1385e5); - border-color: #075fa9; - color: white; - font-weight: bold; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); -} - - -/* Tweak navbar brand link to be super sleek --------------------------------------------------- */ -.oss-bar { - top: 0; - right: 20px; - position: fixed; - z-index: 1030; -} -.oss-bar ul { - float: right; - margin: 0; - list-style: none; -} -.oss-bar ul li { - list-style: none; - float: left; - line-height: 0; - margin: 0; -} -.oss-bar ul li a { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - border: 0; - margin-top: -10px; - display: block; - height: 58px; - background: #F36C00 url(oss-credit.png) no-repeat 20px 22px; - padding: 22px 20px 12px 20px; - text-indent: 120%; /* stupid padding */ - white-space: nowrap; - overflow: hidden; - -webkit-transition: all 0.10s ease-in-out; - -moz-transition: all 0.10s ease-in-out; - transition: all 0.15s ease-in-out; -} -.oss-bar ul li a:hover { - margin-top: 0px; -} -.oss-bar a.harvest { - width: 196px; - background-color: #F36C00; - background-position: -142px 22px; - padding-right: 22px; /* optical illusion */ -} -.oss-bar a.fork { - width: 162px; - background-color: #333333; -} - -.docs-table th, .docs-table td { - border: 1px solid #000; - padding: 4px 6px; - white-space: nowrap; -} - -.docs-table td:last-child { - white-space: normal; -} - -.docs-table th { - font-weight: bold; - text-align: left; -} - -#content pre[class*=language-] { - font-size: 14px; - margin-bottom: 20px; -} - -#content pre[class*=language-] code { - font-size: 14px; - padding: 0; -} - -#content code[class*=language-] { - font-size: 12px; - padding: 2px 4px; -} - -.anchor { - color: inherit; - position: relative; -} - -.anchor:hover { - background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSI3Ij48ZyBmaWxsPSIjNDE0MDQyIj48cGF0aCBkPSJNOS44IDdoLS45bC0uOS0uMWMtLjctLjMtMS40LS43LTEuOC0xLjMtLjItLjEtLjMtLjMtLjMtLjVsLS4zLS40Yy0uMS0uNC0uMi0uOC0uMi0xLjIgMC0uNC4xLS44LjItMS4yaDEuN2MtLjMuNC0uNC44LS40IDEuMiAwIC40LjEuOC4zIDEuMS4xLjIuMi4zLjQuNC4xLjEuMi4yLjQuMy4zLjIuNy4zIDEgLjNoMy40YzEuMiAwIDIuMi0uOSAyLjItMi4xcy0xLTIuMS0yLjItMi4xaC0xLjRjLS4zLS42LS43LTEtMS4yLTEuNGgyLjZjMiAwIDMuNiAxLjYgMy42IDMuNXMtMS42IDMuNS0zLjYgMy41aC0yLjZ6TTguNCAyYy0uMS0uMS0uMi0uMy0uNC0uMy0uMy0uMi0uNy0uMy0xLS4zaC0zLjRjLTEuMiAwLTIuMi45LTIuMiAyLjEgMCAxLjIgMSAyLjEgMi4yIDIuMWgxLjRjLjMuNS43IDEgMS4yIDEuNGgtMi42Yy0yIDAtMy42LTEuNi0zLjYtMy41czEuNi0zLjUgMy42LTMuNWgzLjUwMDAwMDAwMDAwMDAwMDRsLjkuMWMuNy4yIDEuNC43IDEuOCAxLjMuMS4xLjIuMy4zLjUuMS4xLjIuMy4yLjUuMS40LjIuOC4yIDEuMiAwIC40LS4xLjgtLjIgMS4yaC0xLjZjLjMtLjUuNC0uOS40LTEuM3MtLjEtLjgtLjMtMS4xYy0uMS0uMi0uMi0uMy0uNC0uNHoiLz48L2c+PC9zdmc+) 0 50% no-repeat; - background-size: 21px 9px; - margin-left: -27px; - padding-left: 27px; - text-decoration: none; -} diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/index.html b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/index.html deleted file mode 100644 index a2def719..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/index.html +++ /dev/null @@ -1,1479 +0,0 @@ - - - - - Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes - - - - - - -
                        -
                        -
                        -
                        -

                        Chosen (v1.1.0)

                        -
                        -

                        Chosen is a jQuery plugin that makes long, unwieldy select boxes much more user-friendly.

                        - -

                        - Downloads - Project Source - Contribute -

                        - -

                        Standard Select

                        -
                        -
                        - Turns This - -
                        -
                        - Into This - -
                        -
                        - -

                        Multiple Select

                        -
                        -
                        - Turns This - -
                        -
                        - Into This - -
                        -
                        - -

                        <optgroup> Support

                        -
                        -
                        - Single Select with Groups - -
                        -
                        - Multiple Select with Groups - -
                        -
                        - -

                        Selected and Disabled Support

                        -
                        -

                        Chosen automatically highlights selected options and removes disabled options.

                        -
                        - Single Select - -
                        -
                        - Multiple Select - -
                        -
                        - -

                        Hide Search on Single Select

                        -
                        -

                        The disable_search_threshold option can be specified to hide the search input on single selects if there are fewer than (n) options.

                        -
                        $(".chosen-select").chosen({disable_search_threshold: 10});
                        -

                        -
                        - -
                        -
                        - -

                        Default Text Support

                        -
                        -

                        Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select an Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                        -
                        <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chosen-select">
                        -

                        Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                        -
                        - -

                        No Results Text Support

                        -
                        -

                        Setting the "No results" search text is as easy as passing an option when you create Chosen:

                        -
                         $(".chosen-select").chosen({no_results_text: "Oops, nothing found!"}); 
                        -

                        -
                        - Single Select - -
                        -
                        - Multiple Select - -
                        -
                        - -

                        Limit Selected Options in Multiselect

                        -
                        -

                        You can easily limit how many options the user can select:

                        -
                        $(".chosen-select").chosen({max_selected_options: 5});
                        -

                        If you try to select another option with limit reached chosen:maxselected event is triggered:

                        -
                         $(".chosen-select").bind("chosen:maxselected", function () { ... }); 
                        -
                        - -

                        Allow Deselect on Single Selects

                        -
                        -

                        When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                        -
                        - -
                        -
                        - -

                        Right to Left Support

                        -
                        -

                        Chosen supports right to left select boxes too. just add "chosen-rtl" in addition to "chosen-select" to your select tags and you are good to go.

                        -
                        <select class="chosen-select chosen-rtl">
                        -
                        - Single right to left select - -
                        -
                        - Multiple right to left select - -
                        -
                        - -

                        Change / Update Events

                        -
                        -
                          -
                        • -

                          Form Field Change

                          -

                          When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                          -
                          $("#form_field").chosen().change( … );
                          -
                        • -
                        • -

                          Updating Chosen Dynamically

                          -

                          If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "chosen:updated" event on the field. Chosen will re-build itself based on the updated content.

                          -
                          $("#form_field").trigger("chosen:updated");
                          -
                        • -
                        -
                        - -

                        Custom Width Support

                        -
                        -

                        Using a custom width with Chosen is as easy as passing an option when you create Chosen:

                        -
                         $(".chosen-select").chosen({width: "95%"}); 
                        -
                        - Single Select - -
                        -
                        - Multiple Select - -
                        -
                        - -

                        Labels work, too

                        -
                        -

                        Use labels just like you would a standard select

                        -

                        -
                        - - -
                        -
                        - - -
                        -
                        - -

                        Setup

                        -

                        Using Chosen is easy as can be.

                        -
                          -
                        1. Download the plugin and copy the chosen files to your app.
                        2. -
                        3. Activate the plugin on the select boxes of your choice: $(".chosen-select").chosen()
                        4. -
                        5. Disco.
                        6. -
                        - -

                        FAQs

                        -
                          -
                        • -

                          Do you have all the available options documented somewhere?

                          -

                          Yes! You can find them on the options page.

                          -
                        • -
                        • -

                          Something doesn't work. Can you fix it?

                          -

                          Yes! Please report all issues using the GitHub issue tracking tool. Please include the plugin version (jQuery or Prototype), browser and OS. The more information provided, the easier it is to fix a problem.

                          -
                        • -
                        • -

                          What browsers are supported?

                          -

                          All modern desktop browsers are supported (Firefox, Chrome, Safari and IE9). Legacy support for IE8 is also enabled. Chosen is disabled on iPhone, iPod Touch, and Android mobile devices (more information).

                          -
                        • -
                        • -

                          Didn't there used to be a Prototype version of Chosen?

                          -

                          There still is!

                          -
                        • -
                        - -

                        Credits

                        - - - - - -
                        -
                        - - - - -
                        - - - diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/index.proto.html b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/index.proto.html deleted file mode 100644 index f32d6312..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/index.proto.html +++ /dev/null @@ -1,1483 +0,0 @@ - - - - - Chosen: A Prototype Plugin by Harvest to Tame Unwieldy Select Boxes - - - - - - -
                        -
                        -
                        -

                        Chosen - Prototype Version (v1.1.0)

                        -
                        -

                        Chosen is a Prototype plugin that makes long, unwieldy select boxes much more user-friendly.

                        - -

                        - Downloads - Project Source - Contribute -

                        - -

                        Looking for the jQuery version?

                        - -

                        Standard Select

                        -
                        -
                        - Turns This - -
                        -
                        - Into This - -
                        -
                        - -

                        Multiple Select

                        -
                        -
                        - Turns This - -
                        -
                        - Into This - -
                        -
                        - -

                        <optgroup> Support

                        -
                        -
                        - Single Select with Groups - -
                        -
                        - Multiple Select with Groups - -
                        -
                        - -

                        Selected and Disabled Support

                        -
                        -

                        Chosen automatically highlights selected options and removes disabled options.

                        -
                        - Single Select - -
                        -
                        - Multiple Select - -
                        -
                        - -

                        Hide Search on Single Select

                        -
                        -

                        The disable_search_threshold option can be specified to hide the search input on single selects if there are fewer than (n) options.

                        -
                         new Chosen($("chosen_select_field"),{disable_search_threshold: 10}); 
                        -

                        -
                        - -
                        -
                        - -

                        Default Text Support

                        -
                        -

                        Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select an Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                        -
                        <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chosen-select">
                        -

                        Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                        -
                        - -

                        No Results Text Support

                        -
                        -

                        Setting the "No results" search text is as easy as passing an option when you create Chosen:

                        -
                        new Chosen($("chosen_select_field"),{no_results_text: "Oops, nothing found!"}); 
                        - -
                        - Single Select - -
                        -
                        - Multiple Select - -
                        -
                        - -

                        Limit Selected Options in Multiselect

                        -
                        -

                        You can easily limit how many options the user can select:

                        -
                        new Chosen($("chosen_select_field"),{max_selected_options: 5}); 
                        -

                        If you try to select another option with limit reached chosen:maxselected event is triggered:

                        -
                        $("chosen_select_field").observe("chosen:maxselected", function(evt) { ... }); 
                        -
                        - -

                        Allow Deselect on Single Selects

                        -
                        -

                        When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                        -
                        - -
                        -
                        - -

                        Right to Left Support

                        -
                        -

                        Chosen supports right to left select boxes too. just add "chosen-rtl" in addition to "chosen-select" to your select tags and you are good to go.

                        -
                        <select class="chosen-select chosen-rtl">
                        -
                        - Single right to left select - -
                        -
                        - Multiple right to left select - -
                        -
                        - -

                        Change / Update Events

                        -
                        -
                          -
                        • -

                          Form Field Change

                          -

                          When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                          -
                          $("#form_field").chosen().change( … );
                          -

                          Note: Prototype doesn't offer support for triggering standard browser events. Event.simulate is required to trigger the change event when using the Prototype version.

                          -
                        • -
                        • -

                          Updating Chosen Dynamically

                          -

                          If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "chosen:updated" event on the field. Chosen will re-build itself based on the updated content.

                          -
                          Event.fire($("form_field"), "chosen:updated");
                          -
                        • -
                        -
                        - -

                        Custom Width Support

                        -
                        -

                        Using a custom width with Chosen is as easy as passing an option when you create Chosen:

                        -
                        new Chosen($("chosen_select_field"),{width: "95%"}); 
                        -
                        - Single Select - -
                        -
                        - Multiple Select - -
                        -
                        - -

                        Labels work, too

                        -
                        -

                        Use labels just like you would a standard select

                        -

                        -
                        - - -
                        -
                        - - -
                        -
                        - -

                        Setup

                        -

                        Using Chosen is easy as can be.

                        -
                          -
                        1. Download the plugin and copy the chosen files to your app.
                        2. -
                        3. Activate the plugin by creating a new instance of Chosen: New Chosen(some_form_field,some_options);
                        4. -
                        5. Disco.
                        6. -
                        - -

                        FAQs

                        -
                          -
                        • -

                          Do you have all the available options documented somewhere?

                          -

                          Yes! You can find them on the options page.

                          -
                        • -
                        • -

                          Something doesn't work. Can you fix it?

                          -

                          Yes! Please report all issues using the GitHub issue tracking tool. Please include the plugin version (jQuery or Prototype), browser and OS. The more information provided, the easier it is to fix a problem.

                          -
                        • -
                        • -

                          What browsers are supported?

                          -

                          All modern desktop browsers are supported (Firefox, Chrome, Safari and IE9). Legacy support for IE8 is also enabled. Chosen is disabled on iPhone, iPod Touch, and Android mobile devices (more information).

                          -
                        • -
                        - -

                        Credits

                        - - - - - -
                        -
                        - - - - - - - diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/options.html b/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/options.html deleted file mode 100644 index 4cedc53b..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/chosen_v1.1.0/options.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes - - - - - - -
                        -
                        -
                        -

                        Chosen (v1.1.0)

                        -
                        -

                        Chosen has a number of options and attributes that allow you to have full control of your select boxes.

                        - -

                        Options

                        -

                        The following options are available to pass into Chosen on instantiation.

                        - -

                        Example:

                        -
                        -  $(".my_select_box").chosen({
                        -    disable_search_threshold: 10,
                        -    no_results_text: "Oops, nothing found!",
                        -    width: "95%"
                        -  });
                        -
                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        OptionDefaultDescription
                        allow_single_deselectfalseWhen set to true on a single select, Chosen adds a UI element which selects the first elment (if it is blank).
                        disable_searchfalseWhen set to true, Chosen will not display the search field (single selects only).
                        disable_search_threshold0Hide the search input on single selects if there are fewer than (n) options.
                        enable_split_word_searchtrueBy default, searching will match on any word within an option tag. Set this option to false if you want to only match on the entire text of an option tag.
                        inherit_select_classesfalseWhen set to true, Chosen will grab any classes on the original select field and add them to Chosen’s container div.
                        max_selected_optionsInfinityLimits how many options the user can select. When the limit is reached, the chosen:maxselected event is triggered.
                        no_results_text"No results match"The text to be displayed when no matching results are found. The current search is shown at the end of the text (e.g., - No results match "Bad Search").
                        placeholder_text_multiple"Select Some Options"The text to be displayed as a placeholder when no options are selected for a multiple select.
                        placeholder_text_single"Select an Option"The text to be displayed as a placeholder when no options are selected for a single select.
                        search_containsfalseBy default, Chosen’s search matches starting at the beginning of a word. Setting this option to true allows matches starting from anywhere within a word. This is especially useful for options that include a lot of special characters or phrases in ()s and []s.
                        single_backstroke_deletetrueBy default, pressing delete/backspace on multiple selects will remove a selected choice. When false, pressing delete/backspace will highlight the last choice, and a second press deselects it.
                        widthOriginal select width.The width of the Chosen select box. By default, Chosen attempts to match the width of the select box you are replacing. If your select is hidden when Chosen is instantiated, you must specify a width or the select will show up with a width of 0.
                        display_disabled_optionstrueBy default, Chosen includes disabled options in search results with a special styling. Setting this option to false will hide disabled results and exclude them from searches.
                        display_selected_optionstrue -

                        By default, Chosen includes selected options in search results with a special styling. Setting this option to false will hide selected results and exclude them from searches.

                        -

                        Note: this is for multiple selects only. In single selects, the selected result will always be displayed.

                        -
                        - -

                        Attributes

                        -

                        Certain attributes placed on the select tag or its options can be used to configure Chosen.

                        - -

                        Example:

                        - -
                        -  <select class="my_select_box" data-placeholder="Select Your Options">
                        -    <option value="1">Option 1</option>
                        -    <option value="2" selected>Option 2</option>
                        -    <option value="3" disabled>Option 3</option>
                        -  </select>
                        -
                        - - - - - - - - - - - - - - - - - -
                        AttributeDescription
                        data-placeholder -

                        The text to be displayed as a placeholder when no options are selected for a select. Defaults to "Select an Option" for single selects or "Select Some Options" for multiple selects.

                        -

                        Note:This attribute overrides anything set in the placeholder_text_multiple or placeholder_text_single options.

                        -
                        multipleThe attribute multiple on your select box dictates whether Chosen will render a multiple or single select.
                        selected, disabledChosen automatically highlights selected options and disables disabled options.
                        - -

                        Classes

                        -

                        Classes placed on the select tag can be used to configure Chosen.

                        - -

                        Example:

                        - -
                        -  <select class="my_select_box chosen-rtl">
                        -    <option value="1">Option 1</option>
                        -    <option value="2">Option 2</option>
                        -    <option value="3">Option 3</option>
                        -  </select>
                        -
                        - - - - - - - - - - -
                        ClassnameDescription
                        chosen-rtl -

                        Chosen supports right-to-left text in select boxes. Add the class chosen-rtl to your select tag to support right-to-left text options.

                        -

                        Note: The chosen-rtl class will pass through to the Chosen select even when the inherit_select_classes option is set to false.

                        -
                        - -

                        Triggered Events

                        -

                        Chosen triggers a number of standard and custom events on the original select field.

                        - -

                        Example:

                        - -
                        -  $('.my_select_box').on('change', function(evt, params) {
                        -    do_something(evt, params);
                        -  });
                        -
                        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                        EventDescription
                        change -

                        Chosen triggers the standard DOM event whenever a selection is made (it also sends a selected or deselected parameter that tells you which option was changed).

                        -

                        Note: in order to use change in the Prototype version, you have to include the Event.simulate class. The selected and deselected parameters are not available for Prototype.

                        -
                        chosen:readyTriggered after Chosen has been fully instantiated.
                        chosen:maxselectedTriggered if max_selected_options is set and that total is broken.
                        chosen:showing_dropdownTriggered when Chosen’s dropdown is opened.
                        chosen:hiding_dropdownTriggered when Chosen’s dropdown is closed.
                        chosen:no_resultsTriggered when a search returns no matching results.
                        - -

                        - Note: all custom Chosen events (those that being with chosen:) also include the chosen object as a parameter. -

                        - -

                        Triggerable Events

                        -

                        You can trigger several events on the original select field to invoke a behavior in Chosen.

                        - -

                        Example:

                        - -
                        -  // tell Chosen that a select has changed
                        -    $('.my_select_box').trigger('chosen:updated');
                        -
                        - - - - - - - - - - - - - - - - - - - - - -
                        EventDescription
                        chosen:updatedThis event should be triggered whenever Chosen’s underlying select element changes (such as a change in selected options).
                        chosen:activateThis is the equivalant of focusing a standard HTML select field. When activated, Chosen will capure keypress events as if you had clicked the field directly.
                        chosen:openThis event activates Chosen and also displays the search results.
                        chosen:closeThis event deactivates Chosen and hides the search results.
                        - - - -
                        -
                        - - - - diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/Gruntfile.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/Gruntfile.js deleted file mode 100644 index cfe737a6..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/Gruntfile.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - minimalect - http://github.com/groenroos/minimalect - - Copyright (c) 2013-2014 Oskari Groenroos and contributors - Licensed under the MIT license. -*/ - -// jshint globalstrict:true, node:true - -"use strict"; - -module.exports = function (grunt) { - - grunt.initConfig({ - - pkg: grunt.file.readJSON("package.json"), - - banner:'/*********************************** \n'+ - '<%= pkg.name %> \n'+ - '<%= pkg.description %> \n\n' + - 'jQuery 1.7+ required. \n' + - 'Developed by @groenroos \n' + - 'http://www.groenroos.fi \n\n' + - 'Github: <%= pkg.repository.url %> w \n\n' + - 'Licensed under the <%= pkg.license %> license.\n\n' + - '************************************/\n', - - clean: { - options: { - force: true - }, - "default": [ - "*.min.*", - '*.css' - ] - }, - uglify: { - options: { - banner:'<%= banner %>', - mangle: true, - compress: true, - preserveComments: "some" - }, - "default": { - files: { - "jquery.minimalect.min.js": ["jquery.minimalect.js"] - } - } - }, - sass: { // Task - dist: { - options:{ - style:"compressed" - }, - files: { // Dictionary of files - 'jquery.minimalect.min.css': 'jquery.minimalect.scss' // 'destination': 'source' - } - }, - dev:{ - files: { // Dictionary of files - 'jquery.minimalect.css': 'jquery.minimalect.scss' // 'destination': 'source' - } - } - }, - usebanner: { - taskName: { - options: { - position: 'top', - banner:'<%= banner %>' - }, - files: { - src: [ '*.css' ] - } - } - } - }); - - grunt.loadNpmTasks("grunt-contrib-clean"); - grunt.loadNpmTasks("grunt-contrib-uglify"); - grunt.loadNpmTasks("grunt-contrib-jasmine"); - grunt.loadNpmTasks('grunt-contrib-sass'); - grunt.loadNpmTasks('grunt-banner'); - - grunt.registerTask("default", ["clean", "uglify", "sass", 'usebanner' ]); -}; diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/README.md b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/README.md deleted file mode 100644 index 97593fa2..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/README.md +++ /dev/null @@ -1,117 +0,0 @@ -minimalect ----------- - -Minimal select replacement for jQuery by [@groenroos](http://twitter.com/groenroos). For usage examples, visit [groenroos.github.io/minimalect](http://groenroos.github.io/minimalect/) - -* Replace select elements with a nicer styled control -* Support for optgroups -* Filtering choices by typing -* Keyboard navigation -* Support for themes - -**New in 0.9.0 (28th May 2014)** - -* AJAX search support -* Multiselect support -* Detects dynamic changes to original element automatically -* Disabled element support -* Public methods -* Optional reset functionality -* Combobox functionality now optional -* Less conflict with existing form styles -* Various bugfixes - -### Usage - -Include `jquery.minimalect.min.js` after you load jQuery (1.7 or newer). Then simply do; - - $("select").minimalect(); - -Remember to also include the stylesheet (SCSS and minified CSS available); - - - -The default style is very understated, so it's easy to modify to better suit your needs. By default, no graphics are used; the arrow symbols are Unicode characters. Please be advised that not all typefaces on all devices support this, and depending on your target device, you may want to replace it with pre-rendered graphics. - - -#### AJAX functionality - -You can also use Minimalect as a way to display search results from an AJAX call. For this, pass the `ajax` setting with the URL to the backend. Minimalect will send a POST request with the key `q` containing the value of the user's search. Minimalect will expect a JSON response with an array of objects, each having two keys: `name` and `value`. - -Note, that the response received from the AJAX service will also modify choices available in the original `select` element, so that the selected choice may be appropriately sent with the rest of the form. The original contents of the `select` element are not restored if the user doesn't pick anything. - - -#### Programmatically changing the selected choice - -If you wish to change the current value of the select, you can simply make your changes to the original element like you would normally with `.val()`. Minimalect will take it from there, providing that the `live` setting is set to `true`, like it is by default. - - -#### Programmatically changing the available choices - -Since version 0.9.0, Minimalect will automatically recognize if the original options are changed dynamically, and the changes are reflected in the user-facing element. For this, Minimalect uses the MutationObserver, which has [spotty cross-browser support](http://caniuse.com/#feat=mutationobserver). For support in IE10 and earlier, Firefox 13 and earlier, Chrome 26 and earlier and Safari 5.1 and earlier, either use a [polyfill](https://github.com/Polymer/MutationObservers), or call the `update` method manually. - - -#### Available methods - -You can call various Minimalect methods to control it programmatically. You can call methods by passing the method name as a string in a second call, e.g. `.minimalect("method")` - -* `destroy` — remove all the features of Minimalect and restore the original select. *Warning:* this will unhook any `change`, `focus` or `blur` events you may have connected to the `select` via `.on()` -* `update` — refresh Minimalect's displayed choices from the original `select`. Minimalect will do this automatically in modern browsers. See above for details. - - -#### Available options - -You can pass an object as a parameter for the `.minimalect()` call, to override the default settings. - -You may edit all the CSS classnames that Minimalect uses so that they don't collide with ones you already use, as well as the user-facing messages for customization or internationalization. - -##### Settings - -* `theme` — the currently used theme. Applied as a class to the main div element. Default: *(empty)* -* `transition` — which effect should be used for showing and hiding the dropdown. Default: *fade* -* `transition_time` — how long the effect for showing and hiding the dropdown should take, in milliseconds. Default: *150* -* `remove_empty_option` — whether options with empty values should be removed. Default: `true` -* `show_reset` — whether to show a reset button to deselect a selected choice. Default: `false` -* `searchable` — whether the combobox functionality is enabled or not. Default: `true` -* `ajax` — URL of an AJAX resource for external search results. See above for details. Will not have an effect if `searchable` is `false`. Default: `null` -* `live` — whether Minimalect should automatically detect value changes to the original `select`. Creates an interval that runs indefinitely every 100 ms; may interfere with the DOM inspector. Default: `true` -* `debug` — whether Minimalect should explain in the console what it's doing. Useful for debugging. Default: `false` - -##### Messages - -* `placeholder` — the default text displayed whenever no choice has been selected. Set to `null` to inherit the placeholder from the value of the first option. Default: *Select a choice* -* `empty` — message displayed to the user when no choice matched his filter search term. Default: *No results matched your keyword.* -* `error` — message displayed to the user when an AJAX request fails for any reason. Default: *There was a problem with the request.* - -##### Classes - -* `class_container` — classname for the main div element. Default: *minict_wrapper* -* `class_group` — classname for a list item that represents an optgroup label. Default: *minict_group* -* `class_empty` — classname for the "No results" message when filtering produces no results. Default: *minict_empty* -* `class_active` — classname that is applied to the main div element whenever the dropdown is visible. Default: *active* -* `class_disabled` — classname that is applied to list items or the whole select, if they are disabled. Default: *disabled* -* `class_selected` — classname applied to the list item in the dropdown that is currently selected. Default: *selected* -* `class_hidden` — classname applied to list items in the dropdown that do not match the filter. Default: *hidden* -* `class_highlighted` — classname applied to the list item that is currently highlighted when the user uses keyboard navigation. Default: *highlighted* -* `class_first` — classname that corresponds to the first visible list item in the dropdown, including optgroup labels and the "No results" message. Helpful when rounding corners in CSS. Default: *minict_first* -* `class_last` — classname that corresponds to the last visible list item in the dropdown, including optgroup labels and the "No results" message. Helpful when rounding corners in CSS. Default: *minict_last* -* `class_reset` — classname applied to the optional reset element. Default: *minict_reset* - -##### Callbacks - -* `beforeinit` — Called immediately when the plugin is called, before any initialization work begins. -* `afterinit` — Called after Minimalect has been fully initialized. -* `onchange` — Called whenever the user selects an option in the list. - * `value`; the value of the choice selected. - * `text`; the user-facing text of the choice selected. -* `onopen` — Called when the dropdown list is displayed. -* `onclose` — Called when the dropdown list is closed (either by clicking away, or by selecting an option). -* `onfilter` — Called every time the list is filtered (basically every time the user types a letter into the filter box). - * `match`; a boolean parameter, `true` if there was matches, `false` if no matches are found. - - -### Bugs & Support - -Developed by [@groenroos](http://twitter.com/groenroos). Please list all bugs and feature requests in the [Github issue tracker](https://github.com/groenroos/minimalect/issues). - -Licensed under the MIT license. diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/bower.json b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/bower.json deleted file mode 100644 index 21017d7d..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "minimalect", - "version": "0.9.0", - "main": "jquery.minimalect.js", - "ignore": [ - "Gruntfile.js", - "*.md" - ] -} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.css b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.css deleted file mode 100644 index 8ab7543b..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.css +++ /dev/null @@ -1,222 +0,0 @@ -/************************************ - MINIMALECT 0.9 - A minimalistic select replacement - - jQuery 1.7+ required. - Developed by @groenroos - http://www.groenroos.fi - - Github: http://git.io/Xedg9w - - Licensed under the MIT license. - -************************************/ -.minict_wrapper { - font-family: "Segoe UI", Segoe, "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; - color: #333; - background: #fff; - position: relative; - width: 300px; - height: 35px; - height: 2.2rem; - border: 1px solid #e5e5e5; - border-radius: 3px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .minict_wrapper * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .minict_wrapper.disabled { - background: #f5f5f5; - text-shadow: 0 1px 0 #fff; } - .minict_wrapper.disabled span { - color: #bbb !important; } - .minict_wrapper:after { - content: "\25BC"; - display: block; - position: absolute; - height: 33px; - width: 33px; - height: 2.1rem; - width: 2.1rem; - top: 0; - right: 0; - font-size: 10px; - font-size: 0.6rem; - line-height: 32px; - line-height: 1.9rem; - text-align: center; - color: #555; } - .minict_wrapper.active:after { - content: "\25B2"; } - .minict_wrapper.disabled:after { - color: #bbb; } - .minict_wrapper span { - display: block; - border: 0; - outline: none; - background: none; - font-family: "Segoe UI", Segoe, "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; - color: #333; - font-size: 16px; - font-size: 1rem; - height: 32px; - height: 2.0rem; - line-height: 23px; - line-height: 1.5rem; - padding: 4px 53px 0 6px; - padding: 4px 3.4rem 0 0.4rem; - cursor: default; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } - .minict_wrapper span:empty:before { - content: attr(data-placeholder); - color: #ccc; - line-height: 23px; - line-height: 1.5rem; } - .minict_wrapper ul { - display: none; - list-style: none; - padding: 0; - margin: 0 -1px; - position: absolute; - width: 100%; - width: -webkit-calc(100% + 2px); - width: -moz-calc(100% + 2px); - width: calc(100% + 2px); - border: 1px solid #e5e5e5; - border-top: 1px solid #f9f9f9; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - top: 33px; - top: 2.0rem; - left: 0; - max-height: 350px; - max-height: 22rem; - overflow-y: auto; - z-index: 999999; } - .minict_wrapper ul li { - list-style: none; - font-size: 1rem; - padding: 0 10px; - padding: 0 0.7rem; - cursor: pointer; - background: #fff; - height: 35px; - height: 2.2rem; - line-height: 32px; - line-height: 2rem; } - .minict_wrapper ul li:hover { - background: #fcfcfc; - color: #111; } - .minict_wrapper ul li.minict_group { - color: #444; - background: #f6f6f6; - font-weight: bold; - cursor: default; } - .minict_wrapper ul li.minict_empty { - display: none; - background: #fff !important; - color: #bbb; - text-align: center; - font-size: 14px; - font-size: 0.9rem; - height: 55px; - height: 3.5rem; - line-height: 50px; - line-height: 3.3rem; } - .minict_wrapper ul li.disabled { - cursor: default; - background: #fff !important; - color: #bbb; } - .minict_wrapper ul li.selected { - color: #819a9a; - background: #f8f9f9; } - .minict_wrapper ul li.highlighted { - color: #fff; - background: #819a9a; } - .minict_wrapper ul li.hidden { - display: none; } - .minict_wrapper .minict_reset { - color: #A9A9A9; - bottom: 0; - display: none; - font-size: 18px; - font-size: 1.1rem; - line-height: 30px; - line-height: 1.9rem; - position: absolute; - right: 35px; - right: 2.2rem; - text-align: center; - top: 0; - text-decoration: none; - width: 20px; - width: 1.2rem; - -webkit-transition: all 0.35s ease-in-out; - transition: all 0.35s ease-in-out; } - .minict_wrapper .minict_reset:hover { - color: #e0e0e0; - -webkit-transition: all 0.15s ease-in-out; - transition: all 0.15s ease-in-out; } - .minict_wrapper .minict_reset:active { - color: #636363; } - .minict_wrapper.disabled .minict_reset { - display: none; } - -.minict_wrapper.bubble { - -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.05); - box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.05); - background: -moz-linear-gradient(top, white 0%, #f9f9f9 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #f9f9f9)); - background: -webkit-linear-gradient(top, white 0%, #f9f9f9 100%); - background: -o-linear-gradient(top, white 0%, #f9f9f9 100%); - background: -ms-linear-gradient(top, white 0%, #f9f9f9 100%); - background: linear-gradient(to bottom, white 0%, #f9f9f9 100%); } - .minict_wrapper.bubble:hover { - border-color: #dcdcdc; } - .minict_wrapper.bubble:after { - border-left: 1px solid #e5e5e5; - -webkit-box-shadow: inset 1px 0px 0px 0px #fff; - box-shadow: inset 1px 0px 0px 0px #fff; - height: 2.05rem; } - .minict_wrapper.bubble ul { - top: 2.7rem; - -webkit-box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.25); - box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.25); - border-radius: 6px; - overflow: visible; } - .minict_wrapper.bubble ul:before { - position: absolute; - top: -11px; - left: 19px; - content: "."; - color: transparent; - width: 0px; - height: 0px; - border-style: solid; - border-width: 0 11px 11px 11px; - border-color: transparent transparent #e5e5e5 transparent; } - .minict_wrapper.bubble ul:after { - position: absolute; - top: -10px; - left: 20px; - content: "."; - color: transparent; - width: 0px; - height: 0px; - border-style: solid; - border-width: 0 10px 10px 10px; - border-color: transparent transparent #ffffff transparent; } - .minict_wrapper.bubble ul li.minict_first { - border-top-left-radius: 6px; - border-top-right-radius: 6px; } - .minict_wrapper.bubble ul li.minict_last { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; } - .minict_wrapper.bubble .minict_reset { - width: 30px; } diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.js deleted file mode 100644 index c2a83b12..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.js +++ /dev/null @@ -1,647 +0,0 @@ -/************************************ - MINIMALECT 0.9 - A minimalistic select replacement - - jQuery 1.7+ required. - Developed by @groenroos - http://www.groenroos.fi - - Github: http://git.io/Xedg9w - - Licensed under the MIT license. - -************************************/ - -;(function ( $, window, document, undefined ) { - - var pluginName = "minimalect", - defaults = { - // settings - theme: "", // name of the theme used - reset: false, - transition: "fade", - transition_time: 150, - remove_empty_option: true, - searchable: true, // whether or not the combobox functionality is enabled - ajax: null, // URL to an external resource - debug: false, // whether to be verbose in the console - live: true, // whether to automatically detect changes - - // messages - placeholder: "Select a choice", // default placeholder when nothing is selected - empty: "No results match your keyword.", // error message when nothing matches the filter search term - error_message: "There was a problem with the request.", // error message when the AJAX call fails - - // classes - class_container: "minict_wrapper", // wrapper div for the element - class_group: "minict_group", // list item for an optgroup - class_empty: "minict_empty", // "No results" message - class_active: "active", // applied to wrapper when the dropdown is displayed - class_disabled: "disabled", // applied to list elements that are disabled - class_selected: "selected", // the currently selected item in the dropdown - class_hidden: "hidden", // an item that doesn't match the filter search term - class_highlighted: "highlighted", // item highlighted by keyboard navigation - class_first: "minict_first", // first visible element - class_last: "minict_last", // last visible element - class_reset: "minict_reset", // reset link - - // callbacks - beforeinit: function(){}, // called before Minimalect is initialized - afterinit: function(){}, // called right after Minimalect is initialized - onchange: function(){}, // called whenever the user changes the selected value - onopen: function(){}, // called when the dropdown is displayed - onclose: function(){}, // called when the dropdown is hidden - onfilter: function(){} // called every time the filter has been activated - }; - - // The actual plugin constructor - function Plugin( element, options ) { - this.element = $(element); - this.options = $.extend( {}, defaults, options ); - this._defaults = defaults; - this._name = pluginName; - this.label = $('[for="'+this.element.attr('id')+'"]').attr('for', 'minict_'+this.element.attr('id')); - - this._init(); - } - - Plugin.prototype = { - - // INITIALIZATION - - _init: function() { - - // before init callback - this.options.beforeinit(); - - // PREPWORK - - var op = this.options, - m = this; - - // create the wrapper - this.wrapper = $('
                        '); - // hide the original select and add the wrapper - this.element.hide().after(this.wrapper); - // apply the current theme to the wrapper - if(op.theme) this.wrapper.addClass(op.theme); - // reflect disabled status - if(this.element.prop("disabled")) - this.wrapper.addClass(op.class_disabled); - - // create and add the input - this.input = $( - ''+ - (this.element.find("option[selected]").html() || "")+ - '' - ).appendTo(this.wrapper); - - // add the reset link, if it's wanted - if(op.reset) - this.reset = $('×').appendTo(this.wrapper); - - // parse the select itself, and create the dropdown markup - this.ul = $('
                          '+this._parseSelect()+'
                        • '+op.empty+'
                        ').appendTo(this.wrapper); - this.items = this.wrapper.find('li'); - // if it's preselected, select the option itself as well - if(this.element.find("option[selected]").length) { - this._showResetLink(); - this.items.filter('[data-value="'+this.element.find("option[selected]").val()+'"]').addClass(op.class_selected); - } - - // BIND EVENTS - // hide dropdown when you click elsewhere - $(document).on("click", function(){ m._hideChoices(m.wrapper) }); - // hide dropdown when moving focus outside it - $("*").not(this.wrapper).not(this.wrapper.find('*')).on("focus", function(){ m._hideChoices(m.wrapper) }); - // toggle dropdown when you click on the dropdown itself - this.wrapper.on("click", function(e){ - e.stopPropagation(); - // only close the dropdown when it's not disabled and not multiselect - if(!m.element.prop("multiple") && !m.element.prop("disabled")) - m._toggleChoices() - }); - // toggle dropdown when you click on the associated label, if present - this.label.on("click", function(e){ e.stopPropagation(); m.input.trigger('focus') }); - // select choice when you click on it - this.wrapper.on("click", "li:not(."+op.class_group+", ."+op.class_empty+", ."+op.class_disabled+")", function(){ m._selectChoice($(this)) }); - // stop the dropdown from closing when you click on a group or empty placeholder - this.wrapper.on("click", "li."+op.class_group+", li."+op.class_empty+", li."+op.class_disabled, function(e){ - e.stopPropagation(); - m.input.focus(); - }); - // if the original is focused or blurred manually, mimic it - // also handle the custom update event - this.element.on("focus", function(){ - m.element.blur(); - m._showChoices(); - }) - .on("blur", m._hideChoices) - .on("update", m.update); - - // bind reset only if it's there - if(op.reset){ - this.wrapper.on("click", "a."+op.class_reset, function(e){ - e.stopPropagation(); - m._resetChoice(); - return false; - }); - } - - // key bindings for the input element - this.input.on("focus click", function(e){ - e.stopPropagation(); - if(!m.element.prop("disabled")) m._showChoices(); else m.input.blur(); - }).on("keydown", function(e){ - // keyboard navigation - switch(e.keyCode) { - // up - case 38: - e.preventDefault(); - m._navigateChoices('up'); - break; - // down - case 40: - e.preventDefault(); - m._navigateChoices('down'); - break; - // enter - case 13: - // tab - case 9: - // select the highlighted choice - if(m.items.filter("."+op.class_highlighted).length) - m._selectChoice(m.items.filter("."+op.class_highlighted)); - // or if there is none, select the first choice after filtering - else if(m.input.text()) - m._selectChoice(m.items.not("."+op.class_group+", ."+op.class_empty).filter(':visible').first()); - if(e.keyCode===13){ - e.preventDefault(); - m._hideChoices(m.wrapper); - } - break; - // escape - case 27: - e.preventDefault(); - // close the select and don't change the value - m._hideChoices(m.wrapper); - break; - } - }).on("keyup", function(e){ - // if we're not navigating, filter - if($.inArray(e.keyCode, [38, 40, 13, 9, 27]) === -1){ - m._filterChoices(); - } - }); - - // if mutation observing is supported - if(window.MutationObserver){ - // observe the original for DOM changes so they can be reflected - this.observer = new MutationObserver(function( mutations ) { - // if there were changes... - if(mutations.length > 0){ - // ...reparse the select - m.ul.html(m._parseSelect()+'
                      • '+op.empty+'
                      • '); - if(m.options.debug) console.log("Minimalect detected a DOM change for ", m.element); - } - }); - this.observer.observe(m.element[0], {childList: true}); - } - - // poll the original for changes - if(op.live){ - // set cache to the original value - var prevval = this.element.val(); - // set a tight interval to check for the original - setInterval(function(){ - // if we're out of date - if(prevval != m.element.val() && m.element.val() != null && m.element.val() != "") { - // update cache - prevval = m.element.val(); - // update selection - if(typeof prevval == "array") { - prevval.each(function(k,v){ - m._selectChoice(m.wrapper.find("li[data-value='"+v+"']")); - }); - } else { - m._selectChoice(m.wrapper.find("li[data-value='"+prevval+"']")); - } - } else if (m.element.val() == null || m.element.val() == "") { - // update cache - prevval = m.element.val(); - // if it was empty, let's clear it - m.items.removeClass(m.options.class_selected); - m.input.text('').attr('data-placeholder', m.options.placeholder); - } - - // let's also check for disabled - if(m.element.prop("disabled")) - m.wrapper.addClass(op.class_disabled); - else - m.wrapper.removeClass(op.class_disabled); - }, 100); - } - - - // after init callback - op.afterinit(); - }, - - - // PRIVATE METHODS - - // navigate with a keyboard - // dr - direction we're going, either "up" or "down" - _navigateChoices: function(dr) { - var m = this, - wr = this.wrapper, // jQuery reference for the wrapper - op = this.options, // options object - items = this.items; - // list all the elements that aren't navigatable - var ignored = "."+op.class_hidden+", ."+op.class_empty+", ."+op.class_group; - - if(!items.filter("."+op.class_highlighted).length) { // if nothing is selected, select the first or last - if(dr === 'up') { - items.not(ignored).last().addClass(op.class_highlighted); - } else if (dr === 'down') { - items.not(ignored).first().addClass(op.class_highlighted); - } - return false; - } else { // if something is selected... - // ...remove current selection... - cur = items.filter("."+op.class_highlighted); - cur.removeClass(op.class_highlighted); - // ...and figure out the next one - if(dr === 'up') { - if(items.not(ignored).first()[0] != cur[0]) { // if we're not at the first - cur.prevAll("li").not(ignored).first().addClass(op.class_highlighted); // highlight the prev - // make sure it's visible in a scrollable list - var offset = items.filter("."+op.class_highlighted).offset().top - this.ul.offset().top + this.ul.scrollTop(); - if (this.ul.scrollTop() > offset) - this.ul.scrollTop(offset); - } else { // if we are at the first - items.not(ignored).last().addClass(op.class_highlighted); // highlight the last - // make sure it's visible in a scrollable list - this.ul.scrollTop(this.ul.height()); - } - } else if (dr === 'down') { - if(items.not(ignored).last()[0] != cur[0]) { // if we're not at the last - cur.nextAll("li").not(ignored).first().addClass(op.class_highlighted); // highlight the next - // make sure it's visible in a scrollable list - var ddbottom = this.ul.height(), - libottom = items.filter("."+op.class_highlighted).offset().top - this.ul.offset().top + items.filter("."+op.class_highlighted).outerHeight(); - if (ddbottom < libottom) - this.ul.scrollTop(this.ul.scrollTop() + libottom - ddbottom); - } else { // if we are at the last - items.not(ignored).first().addClass(op.class_highlighted); // highlight the first - // make sure it's visible in a scrollable list - this.ul.scrollTop(0); - } - } - } - }, - - // parse the entire select based on whether it has optgroups or not, and return the new markup - _parseSelect: function() { - var m = this, ulcontent = ""; - if( !this.element.find("optgroup").length ) { // if we don't have groups - // just parse the elements regularly - ulcontent = this._parseElements( this.element.html() ); - } else { // if we have groups - // parse each group separately - this.element.find("optgroup").each(function(){ - // create a group element - ulcontent += '
                      • '+$(this).attr("label")+'
                      • '; - // and add its children - ulcontent += this._parseElements( $(this).html() ); - }); - } - return ulcontent; - }, - - // turn option elements into li elements - // elhtml - HTML containing the options - _parseElements: function(elhtml) { - var m = this, readyhtml = ""; - // go through each option - $( $.trim(elhtml) ).filter("option").each(function(){ - var $el = $(this); - if ($el.attr('value') === '' && m.options.remove_empty_option) return; - // create an li with a data attribute containing its value - readyhtml += '
                      • '+$el.text()+'
                      • '; - }); - // spit it out - return readyhtml; - }, - - // toggle the visibility of the dropdown - _toggleChoices: function(){ - (!this.wrapper.hasClass(this.options.class_active)) ? this._showChoices() : this._hideChoices(this.wrapper); - }, - - // show the dropdown - // cb - callback before the animation plays - _showChoices: function(cb){ - var m = this, - wr = this.wrapper, // jQuery reference for the wrapper - op = this.options; // options object - if (!wr.hasClass(op.class_active)){ - // keep the first and last classes up to date - this._updateFirstLast(false); - // close all other open minimalects - $("."+op.class_container).each(function(){ //todo this doesn't work if the container classes are different - if($(this)[0] !== wr[0]) - m._hideChoices($(this)); - }); - // internal callback - if(typeof cb === 'function') cb.call(); - // add the active class - wr.addClass(op.class_active); - switch(op.transition) { - case "fade": - this.ul.fadeIn(op.transition_time); - break; - default: - this.ul.show(); - break; - } - // make the input editable - this.input.text("").focus(); - // hide the reset link - this._hideResetLink(); - // callback - this.options.onopen(); - } else { - // internal callback - if(typeof cb === 'function') cb.call(); - } - }, - - _resetDropdown: function(cb){ - var op = this.options; // options object - // reset the filtered elements - this.items.removeClass(op.class_hidden); - // hide the empty error message - this.wrapper.find("."+op.class_empty).hide(); - // reset keyboard navigation - this.items.filter("."+op.class_highlighted).removeClass(op.class_highlighted); - // internal callback - if(typeof cb === 'function') cb.call(); - }, - - // hide the dropdown - // wr - jQuery reference for the wrapper - // cb - callback for after the animation has played - _hideChoices: function(wr, cb){ - var op = this.options, // options object - to = op.transition_time, // timeout for the transition to finish - m = this; - - if (wr.hasClass(op.class_active)){ - // remove the active class and fade out - wr.removeClass(op.class_active); - - switch(op.transition) { - case "fade": - wr.children("ul").fadeOut(op.transition_time); - break; - default: - wr.children("ul").hide(); - to = 0; - break; - } - - // set a timeout for clearing the field, so there's no flickering - setTimeout(function(){ - // reset filters - m._resetDropdown(cb); - - // blur the input - m.input.blur(); - - // reset it - if(m.input.attr("data-placeholder") != op.placeholder) { - // if we have a previously selected value, restore that - m.input.text(m.input.attr("data-placeholder")); - } else if(!m.items.filter("."+op.class_selected).length) { - // if we have no selection, empty it to show placeholder - m.input.text(""); - } - }, to); - - // show the reset link - m._showResetLink(); - - // callback - op.onclose(); - } else { - // internal callback - if(typeof cb === 'function') cb.call(); - } - }, - - // filter choices based on user input - _filterChoices: function(){ - var wr = this.wrapper, // jQuery reference for the wrapper - op = this.options, // options object - m = this; - - if(op.ajax) { - // if we're searching from ajax - - $.post(op.ajax, {"q": this.input.text()}) - .success(function(data){ - // we got a response - - if(op.debug) console.log("Minimalect received ", data, " for query '"+m.input.text()+"' in ", m.element); - - if(data.length) { - // if we have results - var new_html = ""; - $.each(data, function(k, choice){ - // parse each data point to an option in the original - new_html += ''; - }); - // populate original element - m.element.html(new_html); - // parse and display it - m.ul.html(m._parseSelect()+'
                      • '+op.empty+'
                      • '); - wr.find("."+op.class_empty).hide(); - - // refresh internal cache - m.items = wr.find('li'); - - // callback, results found - m.options.onfilter(true); - } else { - // show a "no results" placeholder if there's nothing to show - m.ul.html('
                      • '+op.empty+'
                      • '); - wr.find("."+op.class_empty).show(); - // tell the console if debug mode is on - if(op.debug) console.log("Minimalect didn't find any results for '"+m.input.text()+"' from ", m.element); - // callback, no results found - m.options.onfilter(false); - } - }) - .error(function(data){ - // show feedback for the user - wr.find("."+op.class_empty).text(op.error_message); - wr.find("li").not("."+op.class_empty).addClass(op.class_hidden); - wr.find("."+op.class_empty).show(); - // tell the console if debug mode is on - if(op.debug) console.error("Minimalect's AJAX query failed for ", m.element, " - came back with ", data); - }); - } else { - // traditional filtering - - // get the filter value, escape regex chars (thanks Andrew Clover!) - var filter = this.input.text().replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - // reset keyboard navigation - this.items.filter("."+op.class_highlighted).removeClass(op.class_highlighted); - - // filter through each option - this.items.not(op.class_group).each(function(){ - // if there's no match (or if it's disabled), hide it. otherwise, unhide it - if ($(this).text().search(new RegExp(filter, "i")) < 0 || $(this).hasClass(op.class_disabled)) - $(this).addClass(op.class_hidden); - else - $(this).removeClass(op.class_hidden); - }); - - // make sure optgroups with no choices are hidden - // sort of a kludge since we have no hierarchy - this.items.filter("."+op.class_group).removeClass(op.class_hidden).each(function(){ - nextlis = $(this).nextAll("li").not("."+op.class_hidden+", ."+op.class_empty); - if(nextlis.first().hasClass(op.class_group) || !nextlis.length) $(this).addClass(op.class_hidden); - }); - - // show a "no results" placeholder if there's nothing to show - wr.find("."+op.class_empty).hide(); - if(!this.items.not("."+op.class_hidden+", ."+op.class_empty).length) { - wr.find("."+op.class_empty).show(); - // tell the console if debug mode is on - if(op.debug) console.log("Minimalect didn't find any results for '"+this.input.text()+"' from ", this.element); - // callback, no results found - this.options.onfilter(false); - } else { - // callback, results found - this.options.onfilter(true); - } - - // keep the first and last classes up to date - this._updateFirstLast(true); - } - }, - - // select the choice defined - // ch - jQuery reference for the li element the user has chosen - _selectChoice: function(ch){ - var el = this.element, // jQuery reference for the original select element - op = this.options, // options object - vals = [], - names = []; - - // if it's disabled, au revoir - if(ch.hasClass(this.options.class_disabled)) return false; - - // apply the selected class - if(!this.element.prop("multiple")) - this.items.removeClass(op.class_selected); - ch.addClass(op.class_selected); - - this.items.filter("."+op.class_selected).each(function(){ - vals.push($(this).data("value")); - names.push($(this).text()); - }); - - // show it up in the input - this.input.text(names.join(", ")).attr("data-placeholder", names.join(", ")); - - // if the selected choice is different - if(el.val() != ch.data("value") || el.val() != vals){ - // update the original select element - el.val(vals); - // call original select change event - el.trigger("change"); - } - - this._showResetLink(); - - // callback - this.options.onchange(ch.data("value"), ch.text()); - }, - - // clear the select - _resetChoice: function() { - this.element.val('').trigger("change"); - this._hideResetLink(); - }, - - // show the reset link if options.reset is true - _showResetLink: function() { - if(this.input.text().length > 0 || this.ul.find("li."+this.options.class_selected).length > 0) - this.options.reset && this.reset.show(); - }, - - // hide the reset link if options.reset is true - _hideResetLink: function() { - this.options.reset && this.reset.hide(); - }, - - // keep the first and last classes up-to-date - // vi - whether we want to count visibility or not - _updateFirstLast: function(vi){ - var wr = this.wrapper, // jQuery reference for the wrapper - op = this.options; // options object - wr.find("."+op.class_first+", ."+op.class_last).removeClass(op.class_first+" "+op.class_last); - if(vi) { - this.items.filter(":visible").first().addClass(op.class_first); - this.items.filter(":visible").last().addClass(op.class_last); - } else { - this.items.first().addClass(op.class_first); - this.items.not("."+op.class_empty).last().addClass(op.class_last); - } - }, - - - // PUBLIC METHODS - - // uninit Minimalect - destroy: function(){ - // remove (and automatically unbind) all Minimalect stuff - this.wrapper.remove(); - // display and unhook the original - this.element.off("change focus blur").show(); - // stop listening for changes - if (window.MutationObserver) - this.observer.disconnect(); - - // if debug mode is on, let them know upstairs - if(this.options.debug) console.log("Minimalect destroyed for ", this.element); - }, - - // update Minimalect's choice from the original select - update: function(){ - // reparse the select - this.ul.html(this._parseSelect()+'
                      • '+this.options.empty+'
                      • '); - } - - }; - - $.fn[pluginName] = function ( options, argument ) { - return this.each(function () { - if ($.isFunction(Plugin.prototype[options]) && options.charAt(0) != "_") { - if(arguments.length == 1) - $.data(this, 'plugin_' + pluginName)[options](); - else - $.data(this, 'plugin_' + pluginName)[options](argument); - } else if (!$.data(this, "plugin_" + pluginName)) { - $.data(this, "plugin_" + pluginName, new Plugin( this, options )); - } - }); - }; - -})( jQuery, window, document ); diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.min.css b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.min.css deleted file mode 100644 index 122244b2..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.min.css +++ /dev/null @@ -1 +0,0 @@ -.minict_wrapper{font-family:"Segoe UI",Segoe,"Lucida Grande","Lucida Sans Unicode",Arial,Helvetica,sans-serif;color:#333;background:#fff;position:relative;width:300px;height:35px;height:2.2rem;border:1px solid #e5e5e5;border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.minict_wrapper *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.minict_wrapper.disabled{background:#f5f5f5;text-shadow:0 1px 0 #fff}.minict_wrapper.disabled span{color:#bbb !important}.minict_wrapper:after{content:"\25BC";display:block;position:absolute;height:33px;width:33px;height:2.1rem;width:2.1rem;top:0;right:0;font-size:10px;font-size:0.6rem;line-height:32px;line-height:1.9rem;text-align:center;color:#555}.minict_wrapper.active:after{content:"\25B2"}.minict_wrapper.disabled:after{color:#bbb}.minict_wrapper span{display:block;border:0;outline:none;background:none;font-family:"Segoe UI",Segoe,"Lucida Grande","Lucida Sans Unicode",Arial,Helvetica,sans-serif;color:#333;font-size:16px;font-size:1rem;height:32px;height:2.0rem;line-height:23px;line-height:1.5rem;padding:4px 53px 0 6px;padding:4px 3.4rem 0 0.4rem;cursor:default;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.minict_wrapper span:empty:before{content:attr(data-placeholder);color:#ccc;line-height:23px;line-height:1.5rem}.minict_wrapper ul{display:none;list-style:none;padding:0;margin:0 -1px;position:absolute;width:100%;width:-webkit-calc(100% + 2px);width:-moz-calc(100% + 2px);width:calc(100% + 2px);border:1px solid #e5e5e5;border-top:1px solid #f9f9f9;border-bottom-left-radius:3px;border-bottom-right-radius:3px;top:33px;top:2.0rem;left:0;max-height:350px;max-height:22rem;overflow-y:auto;z-index:999999}.minict_wrapper ul li{list-style:none;font-size:1rem;padding:0 10px;padding:0 0.7rem;cursor:pointer;background:#fff;height:35px;height:2.2rem;line-height:32px;line-height:2rem}.minict_wrapper ul li:hover{background:#fcfcfc;color:#111}.minict_wrapper ul li.minict_group{color:#444;background:#f6f6f6;font-weight:bold;cursor:default}.minict_wrapper ul li.minict_empty{display:none;background:#fff !important;color:#bbb;text-align:center;font-size:14px;font-size:0.9rem;height:55px;height:3.5rem;line-height:50px;line-height:3.3rem}.minict_wrapper ul li.disabled{cursor:default;background:#fff !important;color:#bbb}.minict_wrapper ul li.selected{color:#819a9a;background:#f8f9f9}.minict_wrapper ul li.highlighted{color:#fff;background:#819a9a}.minict_wrapper ul li.hidden{display:none}.minict_wrapper .minict_reset{color:#A9A9A9;bottom:0;display:none;font-size:18px;font-size:1.1rem;line-height:30px;line-height:1.9rem;position:absolute;right:35px;right:2.2rem;text-align:center;top:0;text-decoration:none;width:20px;width:1.2rem;-webkit-transition:all 0.35s ease-in-out;transition:all 0.35s ease-in-out}.minict_wrapper .minict_reset:hover{color:#e0e0e0;-webkit-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.minict_wrapper .minict_reset:active{color:#636363}.minict_wrapper.disabled .minict_reset{display:none}.minict_wrapper.bubble{-webkit-box-shadow:0px 1px 3px 0px rgba(0,0,0,0.05);box-shadow:0px 1px 3px 0px rgba(0,0,0,0.05);background:-moz-linear-gradient(top, #fff 0%, #f9f9f9 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #f9f9f9));background:-webkit-linear-gradient(top, #fff 0%, #f9f9f9 100%);background:-o-linear-gradient(top, #fff 0%, #f9f9f9 100%);background:-ms-linear-gradient(top, #fff 0%, #f9f9f9 100%);background:linear-gradient(to bottom, #fff 0%, #f9f9f9 100%)}.minict_wrapper.bubble:hover{border-color:#dcdcdc}.minict_wrapper.bubble:after{border-left:1px solid #e5e5e5;-webkit-box-shadow:inset 1px 0px 0px 0px #fff;box-shadow:inset 1px 0px 0px 0px #fff;height:2.05rem}.minict_wrapper.bubble ul{top:2.7rem;-webkit-box-shadow:0px 5px 25px 0px rgba(0,0,0,0.25);box-shadow:0px 5px 25px 0px rgba(0,0,0,0.25);border-radius:6px;overflow:visible}.minict_wrapper.bubble ul:before{position:absolute;top:-11px;left:19px;content:".";color:transparent;width:0px;height:0px;border-style:solid;border-width:0 11px 11px 11px;border-color:transparent transparent #e5e5e5 transparent}.minict_wrapper.bubble ul:after{position:absolute;top:-10px;left:20px;content:".";color:transparent;width:0px;height:0px;border-style:solid;border-width:0 10px 10px 10px;border-color:transparent transparent #ffffff transparent}.minict_wrapper.bubble ul li.minict_first{border-top-left-radius:6px;border-top-right-radius:6px}.minict_wrapper.bubble ul li.minict_last{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.minict_wrapper.bubble .minict_reset{width:30px} diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.min.js b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.min.js deleted file mode 100644 index c159af0f..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/************************************ - MINIMALECT 0.8b - A minimalistic select replacement - http://git.io/Xedg9w -************************************/ -!function(e,t,s){function i(t,s){this.element=e(t),this.options=e.extend({},a,s),this._defaults=a,this._name=l,this.label=e('[for="'+this.element.attr("id")+'"]').attr("for","minict_"+this.element.attr("id")),this._init()}var l="minimalect",a={theme:"",reset:!1,transition:"fade",transition_time:150,remove_empty_option:!0,searchable:!0,ajax:null,debug:!1,live:!0,placeholder:"Select a choice",empty:"No results match your keyword.",error_message:"There was a problem with the request.",class_container:"minict_wrapper",class_group:"minict_group",class_empty:"minict_empty",class_active:"active",class_disabled:"disabled",class_selected:"selected",class_hidden:"hidden",class_highlighted:"highlighted",class_first:"minict_first",class_last:"minict_last",class_reset:"minict_reset",beforeinit:function(){},afterinit:function(){},onchange:function(){},onopen:function(){},onclose:function(){},onfilter:function(){}};i.prototype={_init:function(){this.options.beforeinit();var i=this.options,l=this;if(this.wrapper=e('
                        '),this.element.hide().after(this.wrapper),i.theme&&this.wrapper.addClass(i.theme),this.element.prop("disabled")&&this.wrapper.addClass(i.class_disabled),this.input=e(""+(this.element.find("option[selected]").html()||"")+"").appendTo(this.wrapper),i.reset&&(this.reset=e('×').appendTo(this.wrapper)),this.ul=e("
                          "+this._parseSelect()+'
                        • '+i.empty+"
                        ").appendTo(this.wrapper),this.items=this.wrapper.find("li"),this.element.find("option[selected]").length&&(this._showResetLink(),this.items.filter('[data-value="'+this.element.find("option[selected]").val()+'"]').addClass(i.class_selected)),e(s).on("click",function(){l._hideChoices(l.wrapper)}),e("*").not(this.wrapper).not(this.wrapper.find("*")).on("focus",function(){l._hideChoices(l.wrapper)}),this.wrapper.on("click",function(e){e.stopPropagation(),l.element.prop("multiple")||l.element.prop("disabled")||l._toggleChoices()}),this.label.on("click",function(e){e.stopPropagation(),l.input.trigger("focus")}),this.wrapper.on("click","li:not(."+i.class_group+", ."+i.class_empty+", ."+i.class_disabled+")",function(){l._selectChoice(e(this))}),this.wrapper.on("click","li."+i.class_group+", li."+i.class_empty+", li."+i.class_disabled,function(e){e.stopPropagation(),l.input.focus()}),this.element.on("focus",function(){l.element.blur(),l._showChoices()}).on("blur",l._hideChoices).on("update",l.update),i.reset&&this.wrapper.on("click","a."+i.class_reset,function(e){return e.stopPropagation(),l._resetChoice(),!1}),this.input.on("focus click",function(e){e.stopPropagation(),l.element.prop("disabled")?l.input.blur():l._showChoices()}).on("keydown",function(e){switch(e.keyCode){case 38:e.preventDefault(),l._navigateChoices("up");break;case 40:e.preventDefault(),l._navigateChoices("down");break;case 13:case 9:l.items.filter("."+i.class_highlighted).length?l._selectChoice(l.items.filter("."+i.class_highlighted)):l.input.text()&&l._selectChoice(l.items.not("."+i.class_group+", ."+i.class_empty).filter(":visible").first()),13===e.keyCode&&(e.preventDefault(),l._hideChoices(l.wrapper));break;case 27:e.preventDefault(),l._hideChoices(l.wrapper)}}).on("keyup",function(t){-1===e.inArray(t.keyCode,[38,40,13,9,27])&&l._filterChoices()}),t.MutationObserver&&(this.observer=new MutationObserver(function(e){e.length>0&&(l.ul.html(l._parseSelect()+'
                      • '+i.empty+"
                      • "),l.options.debug&&console.log("Minimalect detected a DOM change for ",l.element))}),this.observer.observe(l.element[0],{childList:!0})),i.live){var a=this.element.val();setInterval(function(){a!=l.element.val()&&null!=l.element.val()&&""!=l.element.val()?(a=l.element.val(),"array"==typeof a?a.each(function(e,t){l._selectChoice(l.wrapper.find("li[data-value='"+t+"']"))}):l._selectChoice(l.wrapper.find("li[data-value='"+a+"']"))):(null==l.element.val()||""==l.element.val())&&(a=l.element.val(),l.items.removeClass(l.options.class_selected),l.input.text("").attr("data-placeholder",l.options.placeholder)),l.element.prop("disabled")?l.wrapper.addClass(i.class_disabled):l.wrapper.removeClass(i.class_disabled)},100)}i.afterinit()},_navigateChoices:function(e){var t=(this.wrapper,this.options),s=this.items,i="."+t.class_hidden+", ."+t.class_empty+", ."+t.class_group;if(!s.filter("."+t.class_highlighted).length)return"up"===e?s.not(i).last().addClass(t.class_highlighted):"down"===e&&s.not(i).first().addClass(t.class_highlighted),!1;if(cur=s.filter("."+t.class_highlighted),cur.removeClass(t.class_highlighted),"up"===e)if(s.not(i).first()[0]!=cur[0]){cur.prevAll("li").not(i).first().addClass(t.class_highlighted);var l=s.filter("."+t.class_highlighted).offset().top-this.ul.offset().top+this.ul.scrollTop();this.ul.scrollTop()>l&&this.ul.scrollTop(l)}else s.not(i).last().addClass(t.class_highlighted),this.ul.scrollTop(this.ul.height());else if("down"===e)if(s.not(i).last()[0]!=cur[0]){cur.nextAll("li").not(i).first().addClass(t.class_highlighted);var a=this.ul.height(),n=s.filter("."+t.class_highlighted).offset().top-this.ul.offset().top+s.filter("."+t.class_highlighted).outerHeight();n>a&&this.ul.scrollTop(this.ul.scrollTop()+n-a)}else s.not(i).first().addClass(t.class_highlighted),this.ul.scrollTop(0)},_parseSelect:function(){var t="";return this.element.find("optgroup").length?this.element.find("optgroup").each(function(){t+='
                      • '+e(this).attr("label")+"
                      • ",t+=this._parseElements(e(this).html())}):t=this._parseElements(this.element.html()),t},_parseElements:function(t){var s=this,i="";return e(e.trim(t)).filter("option").each(function(){var t=e(this);""===t.attr("value")&&s.options.remove_empty_option||(i+='
                      • '+t.text()+"
                      • ")}),i},_toggleChoices:function(){this.wrapper.hasClass(this.options.class_active)?this._hideChoices(this.wrapper):this._showChoices()},_showChoices:function(t){var s=this,i=this.wrapper,l=this.options;if(i.hasClass(l.class_active))"function"==typeof t&&t.call();else{switch(this._updateFirstLast(!1),e("."+l.class_container).each(function(){e(this)[0]!==i[0]&&s._hideChoices(e(this))}),"function"==typeof t&&t.call(),i.addClass(l.class_active),l.transition){case"fade":this.ul.fadeIn(l.transition_time);break;default:this.ul.show()}this.input.text("").focus(),this._hideResetLink(),this.options.onopen()}},_resetDropdown:function(e){var t=this.options;this.items.removeClass(t.class_hidden),this.wrapper.find("."+t.class_empty).hide(),this.items.filter("."+t.class_highlighted).removeClass(t.class_highlighted),"function"==typeof e&&e.call()},_hideChoices:function(e,t){var s=this.options,i=s.transition_time,l=this;if(e.hasClass(s.class_active)){switch(e.removeClass(s.class_active),s.transition){case"fade":e.children("ul").fadeOut(s.transition_time);break;default:e.children("ul").hide(),i=0}setTimeout(function(){l._resetDropdown(t),l.input.blur(),l.input.attr("data-placeholder")!=s.placeholder?l.input.text(l.input.attr("data-placeholder")):l.items.filter("."+s.class_selected).length||l.input.text("")},i),l._showResetLink(),s.onclose()}else"function"==typeof t&&t.call()},_filterChoices:function(){var t=this.wrapper,s=this.options,i=this;if(s.ajax)e.post(s.ajax,{q:this.input.text()}).success(function(l){if(s.debug&&console.log("Minimalect received ",l," for query '"+i.input.text()+"' in ",i.element),l.length){var a="";e.each(l,function(e,t){a+='"}),i.element.html(a),i.ul.html(i._parseSelect()+'
                      • '+s.empty+"
                      • "),t.find("."+s.class_empty).hide(),i.items=t.find("li"),i.options.onfilter(!0)}else i.ul.html('
                      • '+s.empty+"
                      • "),t.find("."+s.class_empty).show(),s.debug&&console.log("Minimalect didn't find any results for '"+i.input.text()+"' from ",i.element),i.options.onfilter(!1)}).error(function(e){t.find("."+s.class_empty).text(s.error_message),t.find("li").not("."+s.class_empty).addClass(s.class_hidden),t.find("."+s.class_empty).show(),s.debug&&console.error("Minimalect's AJAX query failed for ",i.element," - came back with ",e)});else{var l=this.input.text().replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");this.items.filter("."+s.class_highlighted).removeClass(s.class_highlighted),this.items.not(s.class_group).each(function(){e(this).text().search(new RegExp(l,"i"))<0||e(this).hasClass(s.class_disabled)?e(this).addClass(s.class_hidden):e(this).removeClass(s.class_hidden)}),this.items.filter("."+s.class_group).removeClass(s.class_hidden).each(function(){nextlis=e(this).nextAll("li").not("."+s.class_hidden+", ."+s.class_empty),(nextlis.first().hasClass(s.class_group)||!nextlis.length)&&e(this).addClass(s.class_hidden)}),t.find("."+s.class_empty).hide(),this.items.not("."+s.class_hidden+", ."+s.class_empty).length?this.options.onfilter(!0):(t.find("."+s.class_empty).show(),s.debug&&console.log("Minimalect didn't find any results for '"+this.input.text()+"' from ",this.element),this.options.onfilter(!1)),this._updateFirstLast(!0)}},_selectChoice:function(t){var s=this.element,i=this.options,l=[],a=[];return t.hasClass(this.options.class_disabled)?!1:(this.element.prop("multiple")||this.items.removeClass(i.class_selected),t.addClass(i.class_selected),this.items.filter("."+i.class_selected).each(function(){l.push(e(this).data("value")),a.push(e(this).text())}),this.input.text(a.join(", ")).attr("data-placeholder",a.join(", ")),(s.val()!=t.data("value")||s.val()!=l)&&(s.val(l),s.trigger("change")),this._showResetLink(),void this.options.onchange(t.data("value"),t.text()))},_resetChoice:function(){this.element.val("").trigger("change"),this._hideResetLink()},_showResetLink:function(){(this.input.text().length>0||this.ul.find("li."+this.options.class_selected).length>0)&&this.options.reset&&this.reset.show()},_hideResetLink:function(){this.options.reset&&this.reset.hide()},_updateFirstLast:function(e){var t=this.wrapper,s=this.options;t.find("."+s.class_first+", ."+s.class_last).removeClass(s.class_first+" "+s.class_last),e?(this.items.filter(":visible").first().addClass(s.class_first),this.items.filter(":visible").last().addClass(s.class_last)):(this.items.first().addClass(s.class_first),this.items.not("."+s.class_empty).last().addClass(s.class_last))},destroy:function(){this.wrapper.remove(),this.element.off("change focus blur").show(),t.MutationObserver&&this.observer.disconnect(),this.options.debug&&console.log("Minimalect destroyed for ",this.element)},update:function(){this.ul.html(this._parseSelect()+'
                      • '+this.options.empty+"
                      • ")}},e.fn[l]=function(t,s){return this.each(function(){e.isFunction(i.prototype[t])&&"_"!=t.charAt(0)?1==arguments.length?e.data(this,"plugin_"+l)[t]():e.data(this,"plugin_"+l)[t](s):e.data(this,"plugin_"+l)||e.data(this,"plugin_"+l,new i(this,t))})}}(jQuery,window,document); \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.scss b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.scss deleted file mode 100644 index da207e8b..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/jquery.minimalect.scss +++ /dev/null @@ -1,292 +0,0 @@ -/************************************ - MINIMALECT 0.9 - A minimalistic select replacement - - jQuery 1.7+ required. - Developed by @groenroos - http://www.groenroos.fi - - Github: http://git.io/Xedg9w - - Licensed under the MIT license. - -************************************/ - -$font: "Segoe UI", Segoe, "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; -$color: #819a9a; - - - -.minict_wrapper { - font-family: $font; - color: #333; - background: #fff; - - position: relative; - width: 300px; - height: 35px; - height: 2.2rem; - - border: 1px solid #e5e5e5; - border-radius: 3px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - - * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - - &.disabled { - background: #f5f5f5; - text-shadow: 0 1px 0 #fff; - - span { - color: #bbb !important; - } - } - - &:after { - content: "\25BC"; - display: block; - position: absolute; - height: 33px; - width: 33px; - height: 2.1rem; - width: 2.1rem; - top: 0; - right: 0; - font-size: 10px; - font-size: 0.6rem; - line-height: 32px; - line-height: 1.9rem; - text-align: center; - color: #555; - } - - &.active:after { - content: "\25B2"; - } - - &.disabled:after { - color: #bbb; - } - - span { - display: block; - border: 0; - outline: none; - background: none; - font-family: $font; - color: #333; - font-size: 16px; - font-size: 1rem; - height: 32px; - height: 2.0rem; - line-height: 23px; - line-height: 1.5rem; - padding: 4px 53px 0 6px; - padding: 4px 3.4rem 0 0.4rem; - cursor: default; - width: 100%; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - - &:empty:before { - content: attr(data-placeholder); - color: #ccc; - line-height: 23px; - line-height: 1.5rem; - } - } - - ul { - display: none; - list-style: none; - padding: 0; - margin: 0 -1px; - position: absolute; - width: 100%; - width: -webkit-calc(100% + 2px); - width: -moz-calc(100% + 2px); - width: calc(100% + 2px); - border: 1px solid #e5e5e5; - border-top: 1px solid #f9f9f9; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - top: 33px; - top: 2.0rem; - left: 0; - max-height: 350px; - max-height: 22rem; - overflow-y: auto; - z-index: 999999; - - li { - list-style: none; - font-size: 1rem; - padding: 0 10px; - padding: 0 0.7rem; - cursor: pointer; - background: #fff; - height: 35px; - height: 2.2rem; - line-height: 32px; - line-height: 2rem; - - &:hover { - background: #fcfcfc; - color: #111; - } - - &.minict_group { - color: #444; - background: #f6f6f6; - font-weight: bold; - cursor: default; - } - - &.minict_empty { - display: none; - background: #fff !important; - color: #bbb; - text-align: center; - font-size: 14px; - font-size: 0.9rem; - height: 55px; - height: 3.5rem; - line-height: 50px; - line-height: 3.3rem; - } - - &.disabled { - cursor: default; - background: #fff !important; - color: #bbb; - } - - &.selected { - color: $color; - background: lighten($color, 42%); - } - - &.highlighted { - color: #fff; - background: $color; - } - - &.hidden { - display: none; - } - } - } - - .minict_reset { - color: #A9A9A9; - bottom: 0; - display: none; - font-size: 18px; - font-size: 1.1rem; - line-height: 30px; - line-height: 1.9rem; - position: absolute; - right: 35px; - right: 2.2rem; - text-align: center; - top: 0; - text-decoration: none; - width: 20px; - width: 1.2rem; - -webkit-transition: all 0.35s ease-in-out; - transition: all 0.35s ease-in-out; - - &:hover { - color: #A9A9A9 + 55; - -webkit-transition: all 0.15s ease-in-out; - transition: all 0.15s ease-in-out; - } - - &:active { - color: #A9A9A9 - 70; - } - } - - &.disabled .minict_reset { - display: none; - } -} - - - -.minict_wrapper.bubble { - -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, .05); - box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, .05); - background: -moz-linear-gradient(top, #ffffff 0%, #f9f9f9 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#f9f9f9)); - background: -webkit-linear-gradient(top, #ffffff 0%,#f9f9f9 100%); - background: -o-linear-gradient(top, #ffffff 0%,#f9f9f9 100%); - background: -ms-linear-gradient(top, #ffffff 0%,#f9f9f9 100%); - background: linear-gradient(to bottom, #ffffff 0%,#f9f9f9 100%); - - &:hover { - border-color: #dcdcdc; - } - - &:after { - border-left: 1px solid #e5e5e5; - -webkit-box-shadow: inset 1px 0px 0px 0px #fff; - box-shadow: inset 1px 0px 0px 0px #fff; - height: 2.05rem; - } - - ul { - top: 2.7rem; - -webkit-box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, .25); - box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, .25); - border-radius: 6px; - overflow: visible; - - &:before { - position: absolute; - top: -11px; - left: 19px; - content: "."; - color: transparent; - width: 0px; - height: 0px; - border-style: solid; - border-width: 0 11px 11px 11px; - border-color: transparent transparent #e5e5e5 transparent; - } - - &:after { - position: absolute; - top: -10px; - left: 20px; - content: "."; - color: transparent; - width: 0px; - height: 0px; - border-style: solid; - border-width: 0 10px 10px 10px; - border-color: transparent transparent #ffffff transparent; - } - - li.minict_first { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - } - li.minict_last { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - } - } - - .minict_reset { - width: 30px; - } -} diff --git a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/package.json b/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/package.json deleted file mode 100644 index 9bdf0611..00000000 --- a/sites/all/themes/gui/materiobasetheme/js/libs/src/minimalect-master/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "minimalect", - "version": "0.8.0", - "description": "Minimal select replacement for jQuery", - "main": "jquery.minimalect.js", - "repository": { - "type": "git", - "url": "git://github.com/groenroos/minimalect.git" - }, - "keywords": [ - "jquery", - "minimalect" - ], - "author": "Oskari Groenroos", - "license": "MIT", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/groenroos/minimalect/issues" - }, - "devDependencies": { - "grunt-contrib-clean": "~0.4.1", - "grunt-contrib-concat": "~0.3.0", - "grunt-contrib-uglify": "~0.2.2", - "grunt-cli": "~0.1.9", - "grunt": "~0.4.1", - "grunt-contrib-jasmine": "~0.5.1", - "grunt-contrib-sass": "~0.3.0", - "grunt-banner": "~0.1.4" - } -} diff --git a/sites/all/themes/gui/materiobasetheme/js/script.js b/sites/all/themes/gui/materiobasetheme/js/script.js index 78f8fd92..006f1056 100644 --- a/sites/all/themes/gui/materiobasetheme/js/script.js +++ b/sites/all/themes/gui/materiobasetheme/js/script.js @@ -73,10 +73,11 @@ var v1, v2, v3, v4, v5; // generic variable used in many cases to avoid to create new memory block with new vars function init(){ - // trace('init MaterioBaseTheme'); + trace('init MaterioBaseTheme'); checkIE(); initHistoryNav(); + if(_isFrontNotLogged) initHome(); @@ -118,6 +119,7 @@ * history navigation */ function initHistoryNav(){ + trace("initHistoryNav _History", _History); var state = _History.getState(); // _History.log('initial:', state.data, state.title, state.url); _History.Adapter.bind(window,'statechange',onHistoryStateChange); @@ -125,7 +127,7 @@ }; function onNewHistoryPage(event){ - //trace('theme :: onNewHistoryPage', event); + trace('theme :: onNewHistoryPage', event); var title = event.title.replace(/<(?:.|\n)*?>/gm, '') + ' | ' + _strings.site_name; // trace('MaterioBaseTheme :: onNewHistoryPage : title', title); @@ -136,9 +138,9 @@ }; function onHistoryStateChange(event){ - // trace('theme :: onHistoryStateChange', event); + trace('theme :: onHistoryStateChange', event); var state = _History.getState(); - // _History.log('statechange:', state.data, state.title, state.url); + _History.log('statechange:', state.data, state.title, state.url); // google analytics $.event.trigger({ @@ -749,7 +751,7 @@ * initPreview */ function initPreview(node){ - $('nav.nav', node).append($('
                        ').bind('click', onClickPreviewCardBtn)); + $('nav.nav', node).append($('
                        ').bind('click', onClickPreviewCardBtn)); }; function onClickPreviewCardBtn(event){ diff --git a/sites/all/themes/gui/materiobasetheme/js/script.js.orig b/sites/all/themes/gui/materiobasetheme/js/script.js.orig index 170d26ad..dd218d72 100644 --- a/sites/all/themes/gui/materiobasetheme/js/script.js.orig +++ b/sites/all/themes/gui/materiobasetheme/js/script.js.orig @@ -735,7 +735,7 @@ * initPreview */ function initPreview(node){ - $('nav.nav', node).append($('
                        ').bind('click', onClickPreviewCardBtn)); + $('nav.nav', node).append($('
                        ').bind('click', onClickPreviewCardBtn)); }; function onClickPreviewCardBtn(event){ diff --git a/sites/all/themes/gui/materiobasetheme/js/script.min.js b/sites/all/themes/gui/materiobasetheme/js/script.min.js index 558ef11c..f6ff82f0 100644 --- a/sites/all/themes/gui/materiobasetheme/js/script.min.js +++ b/sites/all/themes/gui/materiobasetheme/js/script.min.js @@ -366,8 +366,8 @@ function getElementAngle(x1, y1, x2, y2) { - - + + // * date 2011/10/19 * /** @@ -736,1574 +736,1574 @@ function getElementAngle(x1, y1, x2, y2) { - - -// @koala-prepend "gui_ck_fw/gui.js" -// @codekit-prepend "gui.js" - -(function($) { - - - Drupal.behaviors.init_theme = {}; - Drupal.behaviors.init_theme.attach = function (context) { - // Growl-style system messages - $('#messages-and-help > div.messages:not(.processed)') - .addClass('processed') - .each(function() { - // If a message meets these criteria, we don't autoclose - // - contains a link - // - is an error or warning - // - contains a lenghthy amount of text - if ($('a', this).size() || $(this).is('.error') || $(this).is('.warning') || $(this).text().length > 100) { - $(this).prepend("X"); - $('span.close', this).click(function() { - $(this).parent().slideUp('fast'); - }); - } - else { - // This essentially adds a 3 second pause before hiding the message. - $(this).animate({opacity:1}, 5000, 'linear', function() { - $(this).slideUp('fast'); - }); - } - }); - }; - - Drupal.behaviors.materio = {}; - Drupal.behaviors.materio.attach = function(context) {}; - - MaterioBaseTheme = function(){ - var _settings = Drupal.settings, - _themeSettings = _settings.materiobasetheme, - _strings = _themeSettings.strings, - _History = window.History, - _this = this, - _$content = $('#content'), - _jsp, - _$tooltip = $('
                        ').appendTo('body'), - _$homeUtilities, _$homeBlockDidactique, _hoverHomeDidactique = false, _homeTimeInterval, - _touch = $('html').is('.touch'), - _statePushed = false, - // touch scroll - position = {x:null,y:null}, - translate3d_content = 0, - _isLoggedIn = !$('body').is('.not-logged-in'), - _isFrontNotLogged = $('body').is('.front.not-logged-in'), - _isMembershipForm = $('body').is('.page-node-11186'), //$('body').is('.page-node-11187') || , - // _isBreveMateriauNodePage = $('body').is('.node-type-breve') || $('body').is('.node-type-materiau'); - _isBreveMateriauNodePage = _themeSettings.page_callback == 'node_page_view' && (_themeSettings.node_type == 'materiau' || _themeSettings.node_type == 'breve'), - _resizeTimer, - _max_480 = function(){ return (viewport().width < 479); }, - _480_768 = function(){ return ( !_max_480() && _max_768() ); }, - _max_768 = function(){ return (viewport().width < 767); }, - _768_980 = function(){ return ( !_max_768() && _max_980() ); }, - _max_980 = function(){ return (viewport().width < 979); }, - _980_1200 = function(){ return ( !_max_980() && _max_1200() ); }, - _max_1200 = function(){ return (viewport().width < 1199); }, - _previewIsOpen = false, - _viewmodes = { - bookmark : 50, - cardsmall : 100, - cardmedium : 210, - cardbig : 425, - cardfull : 850 - }; - - // DEV - var v1, v2, v3, v4, v5; // generic variable used in many cases to avoid to create new memory block with new vars - - function init(){ - // trace('init MaterioBaseTheme'); - - checkIE(); - initHistoryNav(); - if(_isFrontNotLogged) - initHome(); - - if(_isMembershipForm) - initMembershipForm(); - - initForms(); - - initLayout(); - initInfinitScroller(); - initEvents(); - initKeyboardShortcuts(); - - initViewmodes(); - - if(_isBreveMateriauNodePage) - $.event.trigger({ type : 'resultschanged', container : '#content>.inner-content'}); - - setTimeout(function(){ - $.event.trigger({ type : 'theme-ready' }); - },100); - }; - - /** - * checkIE - * - */ - function checkIE(){ - // alert('check ie'); - if($('.oldie body').size() && !readCookie('oldie_checked')){ - setTimeout(function(){ - createCookie('oldie_checked', 1); - alert('Afin de profiter pleinement des fonctionalités de materio.com, nous vous invitons a mettre a jour votre navigateur dans ça denière version. Celui ci n\'étant pas compatible avec les technologie employer par materio.com, vous risquer de rencontrer des difficulter de navigation.'); - }, 4000); - } - }; - - /** - * history navigation - */ - function initHistoryNav(){ - var state = _History.getState(); - // _History.log('initial:', state.data, state.title, state.url); - _History.Adapter.bind(window,'statechange',onHistoryStateChange); - $(document).bind('new-history-page', onNewHistoryPage); - }; - - function onNewHistoryPage(event){ - //trace('theme :: onNewHistoryPage', event); - - var title = event.title.replace(/<(?:.|\n)*?>/gm, '') + ' | ' + _strings.site_name; - // trace('MaterioBaseTheme :: onNewHistoryPage : title', title); - - _statePushed = true; - - _History.pushState({content:event.content, pagetitle:event.title}, title, event.path); - }; - - function onHistoryStateChange(event){ - // trace('theme :: onHistoryStateChange', event); - var state = _History.getState(); - // _History.log('statechange:', state.data, state.title, state.url); - - // google analytics - $.event.trigger({ - type : 'record-stat', - path : state.url - }); - - // TODO: History : empty content if we go back to the homepage - - // change the current url for feedbacks - $('input[name=location]','#feedback-form').attr('value', state.url); - - $.event.trigger({ - type:'materio-page-title-refresh-block', - title : state.data.pagetitle - }); - - // this condition is to avoid retriggering probleme when a module pushState and then is retriggered by state-changed - if(!_statePushed){ - _statePushed = false; - - $('.inner-content',_$content).html(state.data.content); - - $.event.trigger('history-state-change'); - } - }; - - /** - * home - */ - function initHome(){ - $('img.lazy', '#block-materio-didactique-materio-didactique-home').each(function(){ - var $img = $(this); - $img.attr('src', $img.attr('data-original')); - }); - - if(_max_768()){ - initHomeDidactiqueMobile(); - }else{ - initHomeDidactiqueDesktop(); - } - }; - - function initHomeDidactiqueMobile(){ - // trace('initHomeDidactiqueMobile'); - _$homeBlockDidactique = $('#block-materio-didactique-materio-didactique-home'); - $('.node-didactique', _$homeBlockDidactique) - .find('.field-name-title-field') - .bind('click', clickOnHomeDidactiqueTitle); - }; - - function clickOnHomeDidactiqueTitle(e){ - // trace('clickOnHomeDidactiqueTitle'); - var $node = $(this).parent('.node-didactique'); - if($node.is('.opened')){ - $node.removeClass('opened');//.slideUp(); - }else{ - $('.node-didactique', _$homeBlockDidactique).removeClass('opened');//.slideUp(); - $node.addClass('opened');//.slideDown(); - - $('html,body').animate({scrollTop: $node.offset().top - $('#header').h()}); - } - }; - - function initHomeDidactiqueDesktop(){ - // trace("initHomeDidactiqueDesktop"); - _$homeUtilities = $('#utilities'); - _$homeBlockDidactique = $('#block-materio-didactique-materio-didactique-home') - .append('
                        ') - .append('
                        ') - // .append('') - .bind('mouseenter', function(event) { _hoverHomeDidactique = true; }) - .bind('mouseleave', function(event) { _hoverHomeDidactique = false; }); - - - $('.node-didactique',_$homeBlockDidactique).each(function(index) { - if(index){ - $(this).addClass('op-hidden'); - }else{ - $(this).addClass('op-visible'); - } - $('.field-name-title-field', this) - .clone() - .addClass(index ? '' : 'active') - .click(function(event){ - $(this).addClass('active').siblings().removeClass('active'); - _$homeBlockDidactique.find('.node-didactique').removeClass('op-visible').addClass('op-hidden').eq(index).removeClass('op-hidden').addClass('op-visible'); - }) - .appendTo($('.tabs', _$homeBlockDidactique)); - }).appendTo($('.slides', _$homeBlockDidactique)); - - if(!_touch){ - $(document).bind('scroll', function(event){ - if($(window).scrollTop() == 0) { - if(_$homeUtilities.is('.closed')){ - _$homeUtilities.removeClass('closed');//.removeClass('scroll-closed'); - launchHomeDidactiqueInterval(); - initLayout(); - } - }else{ - if(!_$homeUtilities.is('.closed')){ - _$homeUtilities.addClass('closed');//.addClass('scroll-closed'); - clearInterval(_homeTimeInterval); - initLayout(); - } - } - }); - } - // launchHomeDidactiqueInterval(); - - $(document) - .bind('cbox_complete', function(){ clearInterval(_homeTimeInterval); }) - .bind('cbox_closed', function(){ launchHomeDidactiqueInterval(); }); - - $('.side.oops a').click(function(event) { - event.preventDefault(); - // $(document).scrollTop(0); - // $('#edit-mail', "#block-materio-user-user-register").focus(); - window.location.href = $(this).attr('href'); - return false; - }); - }; - - function launchHomeDidactiqueInterval(){ - _homeTimeInterval = setInterval(function(){ - if(!_hoverHomeDidactique){ - var $next = $('.tabs .active', _$homeBlockDidactique).next(); - if(!$next.length) - $next = $('.tabs .active', _$homeBlockDidactique).siblings().eq(0); - - $next.trigger('click'); - } - }, 15000); - }; - - /** - * layout - */ - function initLayout(){ - if(!_max_768()){ - var height = $('#header').h() + $('#tasks').h(); - - if(!_max_480() && !_touch ){ - height += $('#utilities').h()+15; - } - - //$('#main').css('margin-top', height+15); - // $('#container').css('padding-top', height+15); - - if(!$('html').is(".ie8")){ - $('#container').animate({'padding-top':height}, 300); - } - } - }; - - /** - * infinit scroll - */ - function initInfinitScroller(){ - // trace("initInfinitScroller"); - $.event.trigger({ - type : 'init-scroller-pager', - pager : $('ul.pager', '#content') - }); - - $(document).bind('scroll', function(event){ - // trace('scroll event binded'); - checkInfinitScroller(); - }); - }; - - function checkInfinitScroller(){ - // trace('checkInfinitScroller'); - // if(!_touch){ - // }else{ - if($(window).scrollTop() + $(window).height() > getDocHeight() - 200) { - infinitScrollPager(); - } - // } - }; - - function infinitScrollPager(){ - // trace('MaterioBaseTheme :: infinitScrollPager'); - if($('ul.pager', '#content').length){ - var $nextpage = $('ul.pager .pager-current', '#content').next(), - href = $('a', $nextpage).attr('href'); - - if(href){ - $.event.trigger({ type : 'record-stat', path : href }); // google analytics - $.event.trigger({ type : 'load-scroller-pager', href : href }); - } - } - }; - - /** - * events - */ - function initEvents(){ - //trace('MaterioBaseTheme :: initEvents'); - - $(document) - .bind('init-layout', initLayout) - .bind('loading-content', onLoadingContent) - .bind('loaded-content', onLoadedContent) - .bind('resultschanged', onResultsChanged) - .bind('resultscompleted', onResultsCompleted) - .bind('mybookmarks-block-updated', onMybookmarksBlockUpdate) - .bind('mylists-block-builded', onMyListsBlockBuilded) - .bind('mylists-block-updated', onMyListsBlockUpdate) - .bind('flagGlobalAfterLinkUpdate', onAfterFlaging) - .bind('record-stat', onRecordStat) - .bind('view-mode-changed', onViewModeChanged) - .bind('ajax-register-block-loaded', onAjaxRegisterBlockLoaded); - - $(window) - .bind('resize', onResizeWindow); - - initFlagsEvent(); - - $('#block-user-login h2, #block-menu-menu-top-menu h2').bind('click', function(event) { - event.preventDefault(); - $(this).parent('.block').toggleClass('hovered'); - $('.hovered').not($(this).parent('.block')).removeClass('hovered'); - return false; - }); - - $('#block-materio-search-api-materio-search-api-viewmode .viewmode-link').bind('vm-clicked-active', function(event) { - $(this).parents('.block').toggleClass('hovered'); - $('.hovered').not($(this).parents('.block')).removeClass('hovered'); - }); - - $('#block-materio-search-api-materio-search-api-viewmode .viewmode-link').bind('vm-clicked', function(event) { - $(this).parents('.block').removeClass('hovered'); - $('.hovered').not($(this).parents('.block')).removeClass('hovered'); - }); - }; - - function onLoadingContent(event){ - _$content.addClass('faded'); - $('#materio-search-api-search-form').addClass('loading'); - }; - - function onLoadedContent(event){ - // trace('MaterioBaseTheme :: onLoadedContent',event); - _$content.removeClass('faded'); - $('#materio-search-api-search-form').removeClass('loading'); - }; - - function onResultsChanged(event){ - // trace('MaterioBaseTheme :: onResultsChanged',event); - $(document).scrollTop(0); - - focusCard($('#content .search-results, #content .actuality-items').children('.node:first-child')); - - onResultsCompleted(event); - }; - - function onResultsCompleted(event){ - // trace('theme :: onResultsCompleted', event); - checkInfinitScroller(); - if(event.container != undefined){ - // trace('theme :: container is ok : '+event.container) - setTimeout(function(){ // why this time out ? - initCards(event.container); - setUpGrid(event.container); - }, 100); - } - }; - - function initCards(container){ - //TODO : refactore this function, to much features in there - - //trace('theme :: initCards', container); - var $container = $(container); - $container.children('.node:not(.listened)') - .bind('mouseenter focused mousemove click mouseleave', onCardEventDispatcher) - .each(function(i){ - protectFigures(this); - if(_isLoggedIn){ - if(!$container.is('.modal-content')){ - // do not add preview btn if we are already on a preview - initPreview(this); - }else{ - // if we are on preview mode add a close btn (only for associated materials) - if(!$(this).is(":first-child")){ - var $closebtn = $('
                        '); - $closebtn.bind('click', function(){ - $(this).parents('.node-materiau').remove(); - }); - $('nav.nav', this).append($closebtn); - } - } - } - }) - .addClass('listened'); - }; - - function setUpGrid(container){ - var $card, top, old_top, col = 0, line = 0; - $(container).children('.node') - .each(function(i){ - $card = $(this); - - top = $card.offset().top; - if(old_top != top){ - line ++; - old_top = top; - col = 0; - } - - col ++; - - $card.attr('column', col).attr('line', line); - - }); - }; - - function onViewModeChanged(event){ - if(_isBreveMateriauNodePage){ - // if(!_isloadingresults){ - $.event.trigger('loading-content'); - var url = _settings.basePath+_settings.pathPrefix+'materio_search_api_ajax/node/'+_themeSettings.node_nid; - $.getJSON(url, - function(json){ - //trace('json', json); - $.event.trigger('loaded-content'); - $('#content>.inner-content').html(json.node); - $.event.trigger({ type : 'resultschanged', container : '#content>.inner-content'}); - }); - // } - } - }; - - /** - * CARDS - */ - function onCardEventDispatcher(event){ - // trace('onCardEvent', event); - var vmode = event.currentTarget.className.match(/vm-([a-z|A-Z]+)/); - var cf = 'on_'+event.type+'_card'; - var f = 'on_'+event.type+'_'+vmode[1]; - - if(typeof _this[cf] == 'function') - _this[cf].call(this, event); - - if(typeof _this[f] == 'function') - _this[f].call(this, event); - }; - - // function initLayoutCardDispatcher($card){ - // // trace('$card', $card); - // var vmode = $card.attr('class').match(/vm-([a-z|A-Z]+)/); - // var f = 'init_layout_'+vmode[1]; - - // if(typeof _this[f] == 'function') - // _this[f].call(this, $card); - // }; - - /** - * commons Cards - */ - - // MaterioBaseTheme.prototype.init_layout_card = function($card){ - // trace('initLayoutCardBig'); - // }; - - // MaterioBaseTheme.prototype.on_mouseenter_card = function(event){ - // //trace('MaterioBaseTheme :: on_mouseenter_card', event); - // }; - - MaterioBaseTheme.prototype.on_mousemove_card = function(event){ - //trace('on_mousemove_Card', event); - focusCard($(this)); - }; - - // MaterioBaseTheme.prototype.on_click_card = function(event){ - // trace('on_click_card', event); - // }; - - // MaterioBaseTheme.prototype.on_mouseleave_card = function(event){ - // // trace('on_mouseleave_Card', event); - // }; - - - /** - * cards small - */ - // MaterioBaseTheme.prototype.init_layout_cardsmall = function($card){ - // trace('initLayoutCardBig'); - // }; - - MaterioBaseTheme.prototype.on_mouseenter_cardsmall = function(event){ - //trace('MaterioBaseTheme :: on_mouseenter_cardsmall', event); - showLazyLoadedImages(event.currentTarget); - }; - - MaterioBaseTheme.prototype.on_focused_cardsmall = function(event){ - // trace('theme :: on_focused_cardsmall',event); - v1 = $(this); - v2 = v1.offset(); - _$tooltip - .html($('.group-header', this).clone().addClass('smallcard')) - .css({ - top:v2.top,//- event.layerY, - left:v2.left + 5 + ($(this).w())// - event.layerX - }) - .removeClass('op-hidden').addClass('op-visible'); - }; - - MaterioBaseTheme.prototype.on_mousemove_cardsmall = function(event){ - // trace('on_mousemove_Card', event); - horiHoverImagesSwitcher(event); - - _$tooltip - .css({ - top:event.pageY - _$tooltip.h() -5,// - event.layerY, - left:event.pageX + 5 + ($(this).w() - event.layerX) - }); - }; - - // MaterioBaseTheme.prototype.on_click_cardsmall = function(event){ - // trace('on_click_cardsmall', event); - // }; - - MaterioBaseTheme.prototype.on_mouseleave_cardsmall = function(event){ - // trace('on_mouseleave_Card', event); - $('.images img.op-visible', this) - .removeClass('op-visible').addClass('op-hidden') - .eq(0) - .removeClass('op-hidden').addClass('op-visible'); - - if($(this).is('.focused')) - _$tooltip.removeClass('op-visible').addClass('op-hidden'); - }; - - /** - * cards medium - */ - // MaterioBaseTheme.prototype.init_layout_cardmedium = function($card){ - // trace('initLayoutCardMedium'); - // var ch = $card.h() - $('.group-header', $card).h() -30; - // columnsPage($('.field-name-field-description, .field-name-body', $card), 210, ch); - // }; - - MaterioBaseTheme.prototype.on_mouseenter_cardmedium = function(event){ - // trace('on_mouseenter_cardmedium'); - - // show lazy images - showLazyLoadedImages(event.currentTarget); - - // columnize texts - $card = $(event.currentTarget); - if(!$('.columnized', $card).size() && !$('body').is('.role-7', 'role-2') ){ - var ch = $card.h() - $('.group-header', $card).h() -30; - columnsPage($('.field-name-field-description, .field-name-body', $card), 210, ch); - $('.group-side-4', $card).wrapInner('
                        ').find('.field-item').addClass('dontsplit'); - columnsPage($('.group-side-4 .column-wrapper', $card), 210, ch); - } - - // add associated materials links - prepareAssociatedMaterials(event.currentTarget); - }; - - MaterioBaseTheme.prototype.on_mousemove_cardmedium = function(event){ - //trace('on_mousemove_cardmedium'); - horiHoverImagesSwitcher(event); - }; - - MaterioBaseTheme.prototype.on_click_cardmedium = function(event){ - // trace('on_click_cardmedium', event); - if(!$(event.target).is('.flag') && !$(event.target).parent().is('.flag')) - sideSwitcher(event); - }; - - MaterioBaseTheme.prototype.on_mouseleave_cardmedium = function(event){ - v1 = $('.side.op-visible'); - if(v1.is('.oops','.upgrade') || $('.upgrade', v1).size()){ - sideSwitcher(event, 0); - } - }; - - /** - * cards Big - */ - // MaterioBaseTheme.prototype.init_layout_cardbig = function($card){ - //trace('initLayoutCardBig'); - // columnsPage($('.field-name-field-description, .field-name-body', $card), 425, 270); - // }; - - MaterioBaseTheme.prototype.on_mouseenter_cardbig = function(event){ - // trace('on_mouseenter_cardbig'); - showLazyLoadedImages(event.currentTarget); - - if(!$('.columnized', event.currentTarget).size()){ - columnsPage($('.field-name-field-description, .field-name-body', event.currentTarget), 425, 270); - $('.group-4', event.currentTarget).wrapInner('
                        ').find('.field-item').addClass('dontsplit'); - columnsPage($('.group-4 .column-wrapper', event.currentTarget), 425, 270); - } - - // add associated materials links - prepareAssociatedMaterials(event.currentTarget); - }; - - MaterioBaseTheme.prototype.on_mousemove_cardbig = function(event){ - // trace('on_mousemove_cardbig'); - horiHoverImagesSwitcher(event); - }; - - MaterioBaseTheme.prototype.on_click_cardbig = function(event){ - //trace('on_click_cardbig'); - sideSwitcher(event); - }; - - MaterioBaseTheme.prototype.on_mouseleave_cardbig = function(event){ - if($('.side.op-visible').is('.oops') || $('.side.op-visible').is('.upgrade')){ - sideSwitcher(event, 0); - } - }; - - /** - * cards Full - */ - // MaterioBaseTheme.prototype.init_layout_cardfull = function($card){ - // trace('initLayoutCardFull'); - - // }; - - MaterioBaseTheme.prototype.on_mouseenter_cardfull = function(event){ - // trace('on_mouseenter_cardfull'); - showLazyLoadedImages(event.currentTarget); - - // add associated materials links - prepareAssociatedMaterials(event.currentTarget); - }; - - MaterioBaseTheme.prototype.on_mousemove_cardfull = function(event){ - // trace('on_mousemove_cardfull'); - horiHoverImagesSwitcher(event); - }; - - // MaterioBaseTheme.prototype.on_click_cardfull = function(event){ - // trace('on_click_cardfull'); - // }; - - // MaterioBaseTheme.prototype.on_mouseleave_cardfull = function(event){ - // trace('on_mouseleave_cardfull'); - // }; - - /** - * horiHoverImagesSwitcher - */ - function horiHoverImagesSwitcher(event){ - // trace('horiHoverImagesSwitcher', event); - var $curtar = $(event.currentTarget); - // TODO : event.layerX doesn't exists in IE8 so we have to calculate the mouse position from offsetX, pageY, etc - // var layerX = event.layerX ? event.layerX : event.clientX - event.currentTarget.offsetLeft; - var layerX = event.clientX - event.currentTarget.offsetLeft; - // trace("layerX", layerX); - if(layerX && $curtar.is('.image-ready') ){ // && !$curtar.is('.image-buged') - var $imgs = $('.group-images figure', event.currentTarget); - if($(event.target).parents('.group-images').length){ - var imgw = $imgs.eq(0).w(), - rapport = imgw/$imgs.length, - mx = layerX > imgw ? imgw-1 : layerX, - rapport_pos = Math.floor(mx / rapport); - // trace('rapport_pos = '+rapport_pos+' | event.layerX = '+event.layerX); - rapport_pos = rapport_pos < 0 ? 0 : ( rapport_pos > ($imgs.length - 1) ? $imgs.length - 1 : rapport_pos); - - if(!$imgs.eq(rapport_pos).is('.op-visible')){ - // google analytics - $.event.trigger({ - type : 'record-stat', - categorie : 'Card event', - action : 'image slide switch', - label : rapport_pos - }); - - $imgs - .removeClass('op-visible').addClass('op-hidden') - .eq(rapport_pos) - .removeClass('op-hidden').addClass('op-visible'); - } - }else{ - // $curtar.addClass('image-buged'); - $imgs.removeClass('op-visible').addClass('op-hidden'); - $imgs.eq(0).removeClass('op-hidden').addClass('op-visible'); - } - - } - }; - - /** - * protectImages - */ - function protectFigures(context){ - // trace('protectFigures'); - context = context == null ? 'body' : context; - $('figure:not(.protected)', context) - .append('') - .addClass('protected') - .bind("contextmenu", function(e){ - alert("Cette image est soumise au droit d'auteur."); - return false; - }); - }; - - /** - * initPreview - */ - function initPreview(node){ - $('nav.nav', node).append($('
                        ').bind('click', onClickPreviewCardBtn)); - }; - - function onClickPreviewCardBtn(event){ - // trace('theme :: onClickPreviewCardBtn', event); - event.preventDefault(); - //trace('Theme :: previewCard', event); - previewCard($(this).parents('.node')); - return false; - }; - - function previewCard($card){ - // trace('theme :: previewCard',$card); - - // get the nid from card class - var matches = $card.attr('class').match(/\bnode-(\d+)\b/); - - // select viewmode regarding the window size - var viewmode = false; - var cur_vm = getCurrentViewmode(); - for(var vm in _viewmodes) - if(vm != cur_vm && _viewmodes[vm] > _viewmodes[cur_vm] && _viewmodes[vm] < $(window).width()) - viewmode = vm; - - // ajax load card's node - if(typeof matches[1] !== undefined && viewmode){ - $.event.trigger('loading-content'); - - $.getJSON(_settings.basePath+_settings.pathPrefix+'materio_search_api_ajax/node/'+matches[1], - {viewmode:viewmode}, - function(json){ - //trace('json', json); - $.event.trigger('loaded-content'); - previewLoaded(json); - }); - } - }; - - function previewLoaded(json){ - var $modal = $('
                        ').addClass('modal-content').append(json.node); - var $modal_wrapper = $('.modal-wrapper'); - - if(!$modal_wrapper.size()) - $modal_wrapper = $('
                        ').addClass('modal-wrapper').append($('
                        ').addClass('modal-bg')).appendTo('body'); - - $modal_wrapper - .append($modal) - .bind('click', function(event) { - _previewIsOpen = false; - $(this).remove(); - }); - - $modal.bind('click', function(event) { - event.stopPropagation(); - }); - - _previewIsOpen = true; - - initCards('.modal-content'); - $.event.trigger({ type : 'previewloaded', container : '.modal-content'}); - }; - - /** - * GRID - */ - function moveGridFocus(event, side){ - var $old_focused = $('#content .search-results, #content .actuality-items') - .children('.node.focused').first(); - var $new_focused; - switch(side){ - case 'r': - $new_focused = $old_focused.next(); - break; - case 'l': - $new_focused = $old_focused.prev(); - break; - case 'u': - case 'd': - var dir = side == "d" ? 1 : -1; - var column = $old_focused.attr('column'); - while( ($new_focused == undefined || !$new_focused.size()) && column > 0){ - $new_focused = $('.node[column='+column+'][line='+(parseInt($old_focused.attr('line'))+dir)+']'); - column --; - } - break; - } - - focusCard($new_focused); - docScrollTo($new_focused); - }; - - function focusCard($card){ - // trace('theme :: focusCard', $card); - if(!$card.size() || $card.is('.focused') || $card.parents('.modal-content').size()) - return; - - $('#content .search-results, #content .actuality-items') - .children('.node.focused') - .removeClass('focused'); - - $card.addClass('focused'); - - if(_previewIsOpen){ - previewCard($card); - } - - $card.trigger('focused'); - }; - - /** - * lazyloadimages - */ - - // function initLazyLoad(context){ - // $('figure:first-child img.lazy', context).lazyload();//{ - // container:'#content' - // }); - - // TODO: propage this event to the card near it to anticipate the mouseenter - // $(context).bind('mousemove', showLazyLoadedImages); - // }; - - function showLazyLoadedImages(context){ - //trace('MaterioBaseTheme :: initLazyLoad : mouseenter', this); - var $this = $(context); - - if( !$this.is('.lazy-processed') ){ - $this - .addClass('lazy-processed') - // .find('figure img.lazy') - .find('img.lazy') - .each(function(index){ - var $img = $(this); - $img.attr('src', $img.attr('data-original')).removeAttr('data-original'); - }); - - setTimeout(function(){ - $this.addClass('image-ready'); - }, 300); - } - }; - - /** - * prepareAssociatedMaterials - */ - function prepareAssociatedMaterials(card){ - // trace('prepareAssociatedMaterials', card); - - $('.field-name-field-materiau-ref a:not(.prepared)', card).addClass("prepared").bind('click', onClickAssociatedMaterial); - }; - - /** - * onClickAssociatedMaterial - */ - function onClickAssociatedMaterial(event){ - // trace("onClickAssociatedMaterial"); - event.preventDefault(); - - var $this = $(this); - - // trace('href', $(this).attr('href')); - var nid = $this.attr('href').match(/^\/(fr|en)\/node\/(\d+)$/)[2]; - // trace("nid", nid); - - var $prt = $this.parents('.node-materiau'); - if($prt.parent().is('.modal-content')){ - // if we are on preview mode - // remove already loaded associated - $prt.parent().find('.node-'+nid+'.associated').remove(); - loadAssociatedNode($prt, nid); - }else{ - // if we are on normal grid mode - var $n = $prt.nextUntil('.node-materiau:not(.associated)').filter('.node-'+nid); - // trace('n', $n); - if($n.size()){ - // trace('focus', nid); - // focus on already loaded node - focusCard($n); - // docScrollTo($isnodeexisting); - }else{ - // trace('load associated', nid); - loadAssociatedNode($prt, nid); - } - } - - return false; - }; - - function loadAssociatedNode($prt, nid){ - // console.log('loadAssociatedNode | nid = '+nid); - var viewmode = $prt.attr('class').match(/vm-([^\s]+)/); - // trace('viewmode match', viewmode); - - // if(!_isloadingresults){ - $.event.trigger('loading-content'); - var url = _settings.basePath+_settings.pathPrefix+'materio_search_api_ajax/node/'+nid; - $.getJSON(url, - {viewmode:viewmode[1]}, - function(json){ - //trace('json', json); - $.event.trigger('loaded-content'); - - displayAssociated($prt, $(json.node)); - - $.event.trigger({ - type : 'resultscompleted', - container : '#content .actuality-items, #content .search-results' - }); - }); - // } - }; - - function displayAssociated($prt, $n){ - - $n.addClass('associated').addClass('just-added'); - $prt.after($n); - initCards($prt.parent()); - - (function($n){ - setTimeout(function(){ - $n.removeClass('just-added'); - focusCard($n); - }, 100); - }($n)); - }; - - /** - * sideSwitcher - */ - function sideSwitcher(event, delta){ - var $sides = $('.side', event.currentTarget); - if($sides.length > 1){ - if( typeof delta == 'undefined'){ - var delta = 0; - $sides.each(function(i) { - if($(this).is('.op-visible')){ - delta = i+1; - return false; - } - }); - - delta = delta == 0 ? 1 : (delta == $sides.length ? 0 : delta); - } - - // google analytics - $.event.trigger({ - type : 'record-stat', - categorie : 'Card event', - action : 'side switch', - label : delta - }); - - $sides.addClass('op-hidden').removeClass('op-visible') - .eq(delta).removeClass('op-hidden').addClass('op-visible'); - } - }; - - /** - * columnsPage - */ - function columnsPage($elmt, cw, ch){ - // trace('columnsPage'); - var cls = Math.ceil($elmt.h()/ch); - $elmt - .addClass('columnized') - .width(cw*cls) - .columnize({ - width:cw, - height:ch, - lastNeverTallest:true - }); - - if(cls > 1){ - - $elmt.find('.column').each(function(index) { - var $this = $(this); - if(!$this.find('*').length){ - $this.prev().addClass('last'); - $this.remove(); - return true; - } - }); - - $elmt.find('.column').each(function(index) { - var $this = $(this); - - if(!$this.is('.first')) - $this.children('*:first-child').prepend(' ...'); - - if(!$this.is('.last')) - $this.children('*:last-child').append('... '); - }); - - $('.column-switcher', $elmt).bind('click', onColumnSwitcherClick); - - - } - }; - - function onColumnSwitcherClick(event){ - event.preventDefault(); - //trace('onColumnSwitcherClick', event); - - var $this = $(event.currentTarget), - $columnized = $this.parents('.columnized'); - - // google analytics - $.event.trigger({ - type : 'record-stat', - categorie : 'Card event', - action : 'column switch', - label : $this.attr('col') - }); - - $columnized.css({ - marginLeft : -1 * $this.attr('cw') * $this.attr('col') +'px' - }); - - return false; - } - - /** - * initViewmodes - */ - function initViewmodes(){ - checkViewmodesResponsive(); - }; - - function checkViewmodesResponsive(){ - if(_480_768()){ - if($('.viewmode-link.active').is('.viewmode-cardfull')){ - $('.viewmode-cardbig').trigger('click'); - } - }else if(_max_480()){ - if($('.viewmode-link.active').is('.viewmode-cardbig, .viewmode-cardfull')){ - $('.viewmode-cardmedium').trigger('click'); - } - } - }; - - function getCurrentViewmode(){ - for(var vm in _viewmodes) - if($('.viewmode-link.active.viewmode-'+vm).size()) - return vm; - }; - - /** - * FLAGS - */ - function initFlagsEvent(){ - $('.bookmarks, .mylists .flaged').children('.node:not(.listened)') - .bind('mouseenter mousemove click mouseleave', onCardEventDispatcher) - // .each(function(event){ initLayoutCardDispatcher($(this)); }) - .addClass('listened'); - }; - - function onAfterFlaging(event){ - //trace('MaterioBaseTheme :: onAfterFlaging', event); - // WARNING to use event variables i had to hack flag.js from flag module (change the event declaration) - var $target = $(event.link).parents('article.node'); - if(event.flagStatus == 'flag'){ - $target.addClass('flaged'); - }else if(event.flagStatus == 'unflag'){ - - if($('.flag-lists-entity-links a.unflag-action', $target).length == 0) - $target.removeClass('flaged'); - - } - }; - - function onMybookmarksBlockUpdate(event){ - initFlagsEvent(); - initLayout(); - }; - - function onClickList(event){ - //trace('onClickList', event); - var $link = $(event.currentTarget).addClass('active'), - name = $link.attr('name'), - $block = $link.parents('.block'), - $flaged = $('.flaged.'+name, $block).addClass('active'); - - $link.siblings().removeClass('active'); - $flaged.siblings().removeClass('active'); - - createCookie('materiomyflaglistsopened', name, 1); - - $flaged.parents('.mylists').height($flaged.h()); - initLayout(); - }; - - function onMyListsBlockUpdate(event){ - //trace('MaterioBaseTheme :: onMyListsBlockUpdate', event); - initFlagsEvent(); - // initLazyLoad(this); - // TODO: refresh contents (search results) to see new flaglist links. - initLayout(); - }; - - function onMyListsBlockBuilded(event){ - //trace('MaterioBaseTheme :: onMyListsBlockBuilded', event); - // initLazyLoad(event.block); - showLazyLoadedImages(event.block); - }; - /** - * cards bookmark - */ - // MaterioBaseTheme.prototype.init_layout_bookmark = function($card){ - // trace('initLayoutCardBig'); - - // }; - - MaterioBaseTheme.prototype.on_mouseenter_bookmark = function(event){ - //trace('on_mouseenter_bookmark', event); - _$tooltip - .html($('.group-header', this).clone()) - .css({ - top:event.pageY - _$tooltip.h() -5,//- event.layerY, - left:event.pageX + 5 + ($(this).w() - event.layerX) - }) - .removeClass('op-hidden').addClass('op-visible'); - }; - - MaterioBaseTheme.prototype.on_mousemove_bookmark = function(event){ - // trace('on_mousemove_Card', event); - // if(event.layerX) - // horiHoverImagesSwitcher(event); - - _$tooltip - .css({ - top:event.pageY - _$tooltip.h() -5,// - event.layerY, - left:event.pageX + 5 + ($(this).w() - event.layerX) - }); - }; - - // MaterioBaseTheme.prototype.on_click_bookmark = function(event){ - // trace('on_click_bookmark', event); - // }; - - MaterioBaseTheme.prototype.on_mouseleave_bookmark = function(event){ - // trace('on_mouseleave_Card', event); - $('.images img.op-visible', this) - .removeClass('op-visible').addClass('op-hidden') - .eq(0) - .removeClass('op-hidden').addClass('op-visible'); - - _$tooltip.removeClass('op-visible').addClass('op-hidden'); - }; - - /** - * keyboradshortcuts - */ - function initKeyboardShortcuts(){ - - $(document) - .bind('keydown', 'Shift+:',shortcut_focusSearchField) - .bind('keydown', '/',shortcut_focusSearchField) - .bind('keydown', 'Alt+1',shortcut_viewmodeSmall) - .bind('keydown', 'Alt+2',shortcut_viewmodeMedium) - .bind('keydown', 'Alt+3',shortcut_viewmodeBig) - .bind('keydown', 'Alt+4',shortcut_viewmodeFull) - .bind('keydown', 'space',shortcut_togglePreview) - .bind('keydown', 'esc',shortcut_closeModaleContent) - .bind('keydown', 'up',shortcut_onUpArrow) - .bind('keydown', 'right',shortcut_onRightArrow) - .bind('keydown', 'down',shortcut_onDownArrow) - .bind('keydown', 'left',shortcut_onLeftArrow); - }; - - function shortcut_focusSearchField(e){ - // trace("focusSearchField"); - if($('#edit-searchfield').size()){ - var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; - stat_event.action = 'slash'; - stat_event.label = 'Focus on search text field'; - $.event.trigger(stat_event); - - $('#edit-searchfield').focus(); - - e.stopPropagation(); - e.preventDefault(); - return false; - } - }; - - function shortcut_viewmodeSmall(e){ - if($('a.viewmode-link.viewmode-cardsmall').size()){ - var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; - stat_event.action = 'Alt+1'; - stat_event.label = 'Change view mode : card small'; - $.event.trigger(stat_event); - - $('a.viewmode-link.viewmode-cardsmall').click(); - - return false; - } - }; - - function shortcut_viewmodeMedium(e){ - if($('a.viewmode-link.viewmode-cardmedium').size()){ - var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; - stat_event.action = 'Alt+2'; - stat_event.label = 'Change view mode : card medium'; - $.event.trigger(stat_event); - - $('a.viewmode-link.viewmode-cardmedium').click(); - - return false; - } - }; - - function shortcut_viewmodeBig(e){ - if($('a.viewmode-link.viewmode-cardbig').size()){ - var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; - stat_event.action = 'Alt+3'; - stat_event.label = 'Change view mode : card big'; - $.event.trigger(stat_event); - - $('a.viewmode-link.viewmode-cardbig').click(); - - return false; - } - }; - - function shortcut_viewmodeFull(e){ - if($('a.viewmode-link.viewmode-cardfull').size()){ - var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; - stat_event.action = 'Alt+4'; - stat_event.label = 'Change view mode : card full'; - $.event.trigger(stat_event); - - $('a.viewmode-link.viewmode-cardfull').click(); - - return false; - } - }; - - function shortcut_togglePreview(e){ - // trace('theme :: shortcut_togglePreview', e); - $.event.trigger({ - type : 'record-stat', - categorie : 'Shortcuts', - action : 'Space', - label : 'Space toggle preview' - }); - - if(_previewIsOpen){ - if($('body>.modal-wrapper').size()){ - $('body>.modal-wrapper').click(); - _previewIsOpen = false; - return false; - } - }else{ - previewCard($('#content .search-results, #content .actuality-items').children('.node.focused:first')); - } - }; - - function shortcut_closeModaleContent(e){ - if($('body>.modal-wrapper').size()){ - $.event.trigger({ - type : 'record-stat', - categorie : 'Shortcuts', - action : 'Esc', - label : 'Esc from modal content' - }); - - $('body>.modal-wrapper').click(); - _previewIsOpen = false; - return false; - } - }; - - function shortcut_onUpArrow(e){ - // trace('theme :: shortcut_onTopArrow', e); - moveGridFocus(e, 'u'); - }; - - function shortcut_onRightArrow(e){ - // trace('theme :: shortcut_onRightArrow', e); - moveGridFocus(e, 'r'); - }; - - function shortcut_onDownArrow(e){ - // trace('theme :: shortcut_onDownArrow', e); - moveGridFocus(e, 'd'); - }; - - function shortcut_onLeftArrow(e){ - // trace('theme :: shortcut_onLeftArrow', e); - moveGridFocus(e, "l"); - }; - - /** - * Misc - */ - function onResizeWindow(e){ - clearInterval(_resizeTimer); - _resizeTimer = setTimeout(function(){ - initLayout(); - checkViewmodesResponsive(); - setUpGrid("#content .actuality-items, #content .search-results"); - }, 200); - }; - - /** - * Statics - */ - function initMembershipForm() { - - switch(window.location.hash){ - case '#flocon': - $('#edit-submitted-column-left-membership-options-1').attr('checked', 'checked'); - // $options.trigger('change'); - break; - case '#etoile': - $('#edit-submitted-column-left-membership-options-2').attr('checked', 'checked'); - break; - case '#4etoiles': - $('#edit-submitted-column-left-membership-options-3').attr('checked', 'checked'); - break; - // default: - // switchMembershipShipFormFields($options); - // break - } - - $('#webform-component-column-left--membership-options') - .change(function(event){ - //trace('changed'); - if( $('input[type="radio"]:checked', this).is('#edit-submitted-column-left-membership-options-3') ){ - $('#webform-component-column-right--collaborators').show(); - }else{ - $('#webform-component-column-right--collaborators').hide(); - } - $('div.form-item.selected', this).removeClass('selected'); - $('input[type="radio"]:checked', this).parents('div.form-item').addClass('selected'); - }) - .trigger('change'); - - - // $('#webform-component-column-left--membership-options input[checked="checked"]').parents('div.form-item').addClass('selected'); - }; - - /** helpers */ - - $.fn.h = function(){ - if(this.css('height') == undefined) - return 0; - - return parseInt(this.css('height')) + parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom')); - }; - - $.fn.w = function(){ - if(this.css('width') == undefined) - return 0; - - return parseInt(this.css('width')) + parseInt(this.css('padding-left')) + parseInt(this.css('padding-right')); - }; - - function getDocHeight() { - var D = document; - return Math.max( - Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), - Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), - Math.max(D.body.clientHeight, D.documentElement.clientHeight) - ); - }; - - // http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/ - function viewport() { - var e = window, a = 'inner'; - if (!('innerWidth' in window )) { - a = 'client'; - e = document.documentElement || document.body; - } - return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }; - }; - - /** - * Forms - */ - function initForms(){ - - $('#edit-searchfield:not(.processed)') - .bind('focus', function(event) { - var $this = $(this); - //$this.attr('value', 'test'); - // trace('value', $this.val()); - // trace('default', $this.attr('default')); - if($this.val() == $this.attr('default')) - $this.val(''); - }) - .bind('focusout', function(event) { - var $this = $(this); - if($this.val() == "") - $this.val($this.attr('default')); - }) - .addClass('processed'); - - hideLabelsFromRegisterForm(); - }; - - function hideLabelsFromRegisterForm () { - var $this, id,label, description; - $('input.form-text', '#block-user-login, #block-materio-user-user-register, , #block-materio-user-user-createaccount').each(function(i) { - $this = $(this); - id = $this.attr('id'); - label = $('label[for='+id+']').hide().text(); - description = $this.parent().find('.description').hide().text(); - if($this.attr('placeholder') == '') - $this.attr('placeholder',label); - - $this.attr('title',description); - }); - }; - - function onAjaxRegisterBlockLoaded (event) { - // console.log('onAjaxRegisterBlockLoaded'); - hideLabelsFromRegisterForm(); - }; - - /** - * cookies - */ - function createCookie(name,value,days) { - if (days) { - var date = new Date(); - date.setTime(date.getTime()+(days*24*60*60*1000)); - var expires = "; expires="+date.toGMTString(); - } - else var expires = ""; - document.cookie = name+"="+value+expires+"; path=/"; - }; - - function readCookie(name) { - var nameEQ = name + "="; - var ca = document.cookie.split(';'); - for(var i=0;i < ca.length;i++) { - var c = ca[i]; - while (c.charAt(0)==' ') c = c.substring(1,c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); - } - return null; - }; - - function eraseCookie(name) { - createCookie(name,"",-1); - }; - - /** - * google analytics - */ - function onRecordStat(event){ - //trace('onRecordStat', event); - // path, category, action, opt_label, opt_value - if(typeof _gaq !== 'undefined'){ - if(event.path){ - _gaq.push(['_trackPageview', event.path]); - }else{ - _gaq.push(['_trackEvent', event.categorie, event.action, event.label, event.value]); - } - } - }; - - /** - * docScrollTo - */ - function docScrollTo($e){ - // $(document).scrollTop($e.offset().top); - if($e.size()) - $('html,body').animate({ - scrollTop: $e.offset().top - $(window).height()*0.5 + $e.height()*0.5 - }, 500); - }; - - init(); - }; - - $(document).ready(function() { - var materiobasetheme = new MaterioBaseTheme(); - }); - - /** - * Attach collapse behavior to the feedback form block. - */ - Drupal.behaviors.feedbackForm = { - attach: function (context) { - $('#block-feedback-form', context).once('feedback', function () { - var $block = $(this); - $block.find('span.feedback-link') - .prepend('feedback ') - .css('cursor', 'pointer') - .toggle(function () { - Drupal.feedbackFormToggle($block, false); - }, - function() { - Drupal.feedbackFormToggle($block, true); - } - ); - $block.find('form').hide(); - $block.show(); - }); - } - }; - - /** - * Collapse or uncollapse the feedback form block. - */ - Drupal.feedbackFormToggle = function ($block, enable) { - $block.find('form').slideToggle('medium'); - if (enable) { - $('#feedback-form-toggle', $block).html('feedback'); - } - else { - $('#feedback-form-toggle', $block).html('feedback (close)'); - } - }; - -})(jQuery); + + +// @koala-prepend "gui_ck_fw/gui.js" +// @codekit-prepend "gui.js" + +(function($) { + + + Drupal.behaviors.init_theme = {}; + Drupal.behaviors.init_theme.attach = function (context) { + // Growl-style system messages + $('#messages-and-help > div.messages:not(.processed)') + .addClass('processed') + .each(function() { + // If a message meets these criteria, we don't autoclose + // - contains a link + // - is an error or warning + // - contains a lenghthy amount of text + if ($('a', this).size() || $(this).is('.error') || $(this).is('.warning') || $(this).text().length > 100) { + $(this).prepend("X"); + $('span.close', this).click(function() { + $(this).parent().slideUp('fast'); + }); + } + else { + // This essentially adds a 3 second pause before hiding the message. + $(this).animate({opacity:1}, 5000, 'linear', function() { + $(this).slideUp('fast'); + }); + } + }); + }; + + Drupal.behaviors.materio = {}; + Drupal.behaviors.materio.attach = function(context) {}; + + MaterioBaseTheme = function(){ + var _settings = Drupal.settings, + _themeSettings = _settings.materiobasetheme, + _strings = _themeSettings.strings, + _History = window.History, + _this = this, + _$content = $('#content'), + _jsp, + _$tooltip = $('
                        ').appendTo('body'), + _$homeUtilities, _$homeBlockDidactique, _hoverHomeDidactique = false, _homeTimeInterval, + _touch = $('html').is('.touch'), + _statePushed = false, + // touch scroll + position = {x:null,y:null}, + translate3d_content = 0, + _isLoggedIn = !$('body').is('.not-logged-in'), + _isFrontNotLogged = $('body').is('.front.not-logged-in'), + _isMembershipForm = $('body').is('.page-node-11186'), //$('body').is('.page-node-11187') || , + // _isBreveMateriauNodePage = $('body').is('.node-type-breve') || $('body').is('.node-type-materiau'); + _isBreveMateriauNodePage = _themeSettings.page_callback == 'node_page_view' && (_themeSettings.node_type == 'materiau' || _themeSettings.node_type == 'breve'), + _resizeTimer, + _max_480 = function(){ return (viewport().width < 479); }, + _480_768 = function(){ return ( !_max_480() && _max_768() ); }, + _max_768 = function(){ return (viewport().width < 767); }, + _768_980 = function(){ return ( !_max_768() && _max_980() ); }, + _max_980 = function(){ return (viewport().width < 979); }, + _980_1200 = function(){ return ( !_max_980() && _max_1200() ); }, + _max_1200 = function(){ return (viewport().width < 1199); }, + _previewIsOpen = false, + _viewmodes = { + bookmark : 50, + cardsmall : 100, + cardmedium : 210, + cardbig : 425, + cardfull : 850 + }; + + // DEV + var v1, v2, v3, v4, v5; // generic variable used in many cases to avoid to create new memory block with new vars + + function init(){ + // trace('init MaterioBaseTheme'); + + checkIE(); + initHistoryNav(); + if(_isFrontNotLogged) + initHome(); + + if(_isMembershipForm) + initMembershipForm(); + + initForms(); + + initLayout(); + initInfinitScroller(); + initEvents(); + initKeyboardShortcuts(); + + initViewmodes(); + + if(_isBreveMateriauNodePage) + $.event.trigger({ type : 'resultschanged', container : '#content>.inner-content'}); + + setTimeout(function(){ + $.event.trigger({ type : 'theme-ready' }); + },100); + }; + + /** + * checkIE + * + */ + function checkIE(){ + // alert('check ie'); + if($('.oldie body').size() && !readCookie('oldie_checked')){ + setTimeout(function(){ + createCookie('oldie_checked', 1); + alert('Afin de profiter pleinement des fonctionalités de materio.com, nous vous invitons a mettre a jour votre navigateur dans ça denière version. Celui ci n\'étant pas compatible avec les technologie employer par materio.com, vous risquer de rencontrer des difficulter de navigation.'); + }, 4000); + } + }; + + /** + * history navigation + */ + function initHistoryNav(){ + var state = _History.getState(); + // _History.log('initial:', state.data, state.title, state.url); + _History.Adapter.bind(window,'statechange',onHistoryStateChange); + $(document).bind('new-history-page', onNewHistoryPage); + }; + + function onNewHistoryPage(event){ + //trace('theme :: onNewHistoryPage', event); + + var title = event.title.replace(/<(?:.|\n)*?>/gm, '') + ' | ' + _strings.site_name; + // trace('MaterioBaseTheme :: onNewHistoryPage : title', title); + + _statePushed = true; + + _History.pushState({content:event.content, pagetitle:event.title}, title, event.path); + }; + + function onHistoryStateChange(event){ + // trace('theme :: onHistoryStateChange', event); + var state = _History.getState(); + // _History.log('statechange:', state.data, state.title, state.url); + + // google analytics + $.event.trigger({ + type : 'record-stat', + path : state.url + }); + + // TODO: History : empty content if we go back to the homepage + + // change the current url for feedbacks + $('input[name=location]','#feedback-form').attr('value', state.url); + + $.event.trigger({ + type:'materio-page-title-refresh-block', + title : state.data.pagetitle + }); + + // this condition is to avoid retriggering probleme when a module pushState and then is retriggered by state-changed + if(!_statePushed){ + _statePushed = false; + + $('.inner-content',_$content).html(state.data.content); + + $.event.trigger('history-state-change'); + } + }; + + /** + * home + */ + function initHome(){ + $('img.lazy', '#block-materio-didactique-materio-didactique-home').each(function(){ + var $img = $(this); + $img.attr('src', $img.attr('data-original')); + }); + + if(_max_768()){ + initHomeDidactiqueMobile(); + }else{ + initHomeDidactiqueDesktop(); + } + }; + + function initHomeDidactiqueMobile(){ + // trace('initHomeDidactiqueMobile'); + _$homeBlockDidactique = $('#block-materio-didactique-materio-didactique-home'); + $('.node-didactique', _$homeBlockDidactique) + .find('.field-name-title-field') + .bind('click', clickOnHomeDidactiqueTitle); + }; + + function clickOnHomeDidactiqueTitle(e){ + // trace('clickOnHomeDidactiqueTitle'); + var $node = $(this).parent('.node-didactique'); + if($node.is('.opened')){ + $node.removeClass('opened');//.slideUp(); + }else{ + $('.node-didactique', _$homeBlockDidactique).removeClass('opened');//.slideUp(); + $node.addClass('opened');//.slideDown(); + + $('html,body').animate({scrollTop: $node.offset().top - $('#header').h()}); + } + }; + + function initHomeDidactiqueDesktop(){ + // trace("initHomeDidactiqueDesktop"); + _$homeUtilities = $('#utilities'); + _$homeBlockDidactique = $('#block-materio-didactique-materio-didactique-home') + .append('
                        ') + .append('
                        ') + // .append('') + .bind('mouseenter', function(event) { _hoverHomeDidactique = true; }) + .bind('mouseleave', function(event) { _hoverHomeDidactique = false; }); + + + $('.node-didactique',_$homeBlockDidactique).each(function(index) { + if(index){ + $(this).addClass('op-hidden'); + }else{ + $(this).addClass('op-visible'); + } + $('.field-name-title-field', this) + .clone() + .addClass(index ? '' : 'active') + .click(function(event){ + $(this).addClass('active').siblings().removeClass('active'); + _$homeBlockDidactique.find('.node-didactique').removeClass('op-visible').addClass('op-hidden').eq(index).removeClass('op-hidden').addClass('op-visible'); + }) + .appendTo($('.tabs', _$homeBlockDidactique)); + }).appendTo($('.slides', _$homeBlockDidactique)); + + if(!_touch){ + $(document).bind('scroll', function(event){ + if($(window).scrollTop() == 0) { + if(_$homeUtilities.is('.closed')){ + _$homeUtilities.removeClass('closed');//.removeClass('scroll-closed'); + launchHomeDidactiqueInterval(); + initLayout(); + } + }else{ + if(!_$homeUtilities.is('.closed')){ + _$homeUtilities.addClass('closed');//.addClass('scroll-closed'); + clearInterval(_homeTimeInterval); + initLayout(); + } + } + }); + } + // launchHomeDidactiqueInterval(); + + $(document) + .bind('cbox_complete', function(){ clearInterval(_homeTimeInterval); }) + .bind('cbox_closed', function(){ launchHomeDidactiqueInterval(); }); + + $('.side.oops a').click(function(event) { + event.preventDefault(); + // $(document).scrollTop(0); + // $('#edit-mail', "#block-materio-user-user-register").focus(); + window.location.href = $(this).attr('href'); + return false; + }); + }; + + function launchHomeDidactiqueInterval(){ + _homeTimeInterval = setInterval(function(){ + if(!_hoverHomeDidactique){ + var $next = $('.tabs .active', _$homeBlockDidactique).next(); + if(!$next.length) + $next = $('.tabs .active', _$homeBlockDidactique).siblings().eq(0); + + $next.trigger('click'); + } + }, 15000); + }; + + /** + * layout + */ + function initLayout(){ + if(!_max_768()){ + var height = $('#header').h() + $('#tasks').h(); + + if(!_max_480() && !_touch ){ + height += $('#utilities').h()+15; + } + + //$('#main').css('margin-top', height+15); + // $('#container').css('padding-top', height+15); + + if(!$('html').is(".ie8")){ + $('#container').animate({'padding-top':height}, 300); + } + } + }; + + /** + * infinit scroll + */ + function initInfinitScroller(){ + // trace("initInfinitScroller"); + $.event.trigger({ + type : 'init-scroller-pager', + pager : $('ul.pager', '#content') + }); + + $(document).bind('scroll', function(event){ + // trace('scroll event binded'); + checkInfinitScroller(); + }); + }; + + function checkInfinitScroller(){ + // trace('checkInfinitScroller'); + // if(!_touch){ + // }else{ + if($(window).scrollTop() + $(window).height() > getDocHeight() - 200) { + infinitScrollPager(); + } + // } + }; + + function infinitScrollPager(){ + // trace('MaterioBaseTheme :: infinitScrollPager'); + if($('ul.pager', '#content').length){ + var $nextpage = $('ul.pager .pager-current', '#content').next(), + href = $('a', $nextpage).attr('href'); + + if(href){ + $.event.trigger({ type : 'record-stat', path : href }); // google analytics + $.event.trigger({ type : 'load-scroller-pager', href : href }); + } + } + }; + + /** + * events + */ + function initEvents(){ + //trace('MaterioBaseTheme :: initEvents'); + + $(document) + .bind('init-layout', initLayout) + .bind('loading-content', onLoadingContent) + .bind('loaded-content', onLoadedContent) + .bind('resultschanged', onResultsChanged) + .bind('resultscompleted', onResultsCompleted) + .bind('mybookmarks-block-updated', onMybookmarksBlockUpdate) + .bind('mylists-block-builded', onMyListsBlockBuilded) + .bind('mylists-block-updated', onMyListsBlockUpdate) + .bind('flagGlobalAfterLinkUpdate', onAfterFlaging) + .bind('record-stat', onRecordStat) + .bind('view-mode-changed', onViewModeChanged) + .bind('ajax-register-block-loaded', onAjaxRegisterBlockLoaded); + + $(window) + .bind('resize', onResizeWindow); + + initFlagsEvent(); + + $('#block-user-login h2, #block-menu-menu-top-menu h2').bind('click', function(event) { + event.preventDefault(); + $(this).parent('.block').toggleClass('hovered'); + $('.hovered').not($(this).parent('.block')).removeClass('hovered'); + return false; + }); + + $('#block-materio-search-api-materio-search-api-viewmode .viewmode-link').bind('vm-clicked-active', function(event) { + $(this).parents('.block').toggleClass('hovered'); + $('.hovered').not($(this).parents('.block')).removeClass('hovered'); + }); + + $('#block-materio-search-api-materio-search-api-viewmode .viewmode-link').bind('vm-clicked', function(event) { + $(this).parents('.block').removeClass('hovered'); + $('.hovered').not($(this).parents('.block')).removeClass('hovered'); + }); + }; + + function onLoadingContent(event){ + _$content.addClass('faded'); + $('#materio-search-api-search-form').addClass('loading'); + }; + + function onLoadedContent(event){ + // trace('MaterioBaseTheme :: onLoadedContent',event); + _$content.removeClass('faded'); + $('#materio-search-api-search-form').removeClass('loading'); + }; + + function onResultsChanged(event){ + // trace('MaterioBaseTheme :: onResultsChanged',event); + $(document).scrollTop(0); + + focusCard($('#content .search-results, #content .actuality-items').children('.node:first-child')); + + onResultsCompleted(event); + }; + + function onResultsCompleted(event){ + // trace('theme :: onResultsCompleted', event); + checkInfinitScroller(); + if(event.container != undefined){ + // trace('theme :: container is ok : '+event.container) + setTimeout(function(){ // why this time out ? + initCards(event.container); + setUpGrid(event.container); + }, 100); + } + }; + + function initCards(container){ + //TODO : refactore this function, to much features in there + + //trace('theme :: initCards', container); + var $container = $(container); + $container.children('.node:not(.listened)') + .bind('mouseenter focused mousemove click mouseleave', onCardEventDispatcher) + .each(function(i){ + protectFigures(this); + if(_isLoggedIn){ + if(!$container.is('.modal-content')){ + // do not add preview btn if we are already on a preview + initPreview(this); + }else{ + // if we are on preview mode add a close btn (only for associated materials) + if(!$(this).is(":first-child")){ + var $closebtn = $('
                        '); + $closebtn.bind('click', function(){ + $(this).parents('.node-materiau').remove(); + }); + $('nav.nav', this).append($closebtn); + } + } + } + }) + .addClass('listened'); + }; + + function setUpGrid(container){ + var $card, top, old_top, col = 0, line = 0; + $(container).children('.node') + .each(function(i){ + $card = $(this); + + top = $card.offset().top; + if(old_top != top){ + line ++; + old_top = top; + col = 0; + } + + col ++; + + $card.attr('column', col).attr('line', line); + + }); + }; + + function onViewModeChanged(event){ + if(_isBreveMateriauNodePage){ + // if(!_isloadingresults){ + $.event.trigger('loading-content'); + var url = _settings.basePath+_settings.pathPrefix+'materio_search_api_ajax/node/'+_themeSettings.node_nid; + $.getJSON(url, + function(json){ + //trace('json', json); + $.event.trigger('loaded-content'); + $('#content>.inner-content').html(json.node); + $.event.trigger({ type : 'resultschanged', container : '#content>.inner-content'}); + }); + // } + } + }; + + /** + * CARDS + */ + function onCardEventDispatcher(event){ + // trace('onCardEvent', event); + var vmode = event.currentTarget.className.match(/vm-([a-z|A-Z]+)/); + var cf = 'on_'+event.type+'_card'; + var f = 'on_'+event.type+'_'+vmode[1]; + + if(typeof _this[cf] == 'function') + _this[cf].call(this, event); + + if(typeof _this[f] == 'function') + _this[f].call(this, event); + }; + + // function initLayoutCardDispatcher($card){ + // // trace('$card', $card); + // var vmode = $card.attr('class').match(/vm-([a-z|A-Z]+)/); + // var f = 'init_layout_'+vmode[1]; + + // if(typeof _this[f] == 'function') + // _this[f].call(this, $card); + // }; + + /** + * commons Cards + */ + + // MaterioBaseTheme.prototype.init_layout_card = function($card){ + // trace('initLayoutCardBig'); + // }; + + // MaterioBaseTheme.prototype.on_mouseenter_card = function(event){ + // //trace('MaterioBaseTheme :: on_mouseenter_card', event); + // }; + + MaterioBaseTheme.prototype.on_mousemove_card = function(event){ + //trace('on_mousemove_Card', event); + focusCard($(this)); + }; + + // MaterioBaseTheme.prototype.on_click_card = function(event){ + // trace('on_click_card', event); + // }; + + // MaterioBaseTheme.prototype.on_mouseleave_card = function(event){ + // // trace('on_mouseleave_Card', event); + // }; + + + /** + * cards small + */ + // MaterioBaseTheme.prototype.init_layout_cardsmall = function($card){ + // trace('initLayoutCardBig'); + // }; + + MaterioBaseTheme.prototype.on_mouseenter_cardsmall = function(event){ + //trace('MaterioBaseTheme :: on_mouseenter_cardsmall', event); + showLazyLoadedImages(event.currentTarget); + }; + + MaterioBaseTheme.prototype.on_focused_cardsmall = function(event){ + // trace('theme :: on_focused_cardsmall',event); + v1 = $(this); + v2 = v1.offset(); + _$tooltip + .html($('.group-header', this).clone().addClass('smallcard')) + .css({ + top:v2.top,//- event.layerY, + left:v2.left + 5 + ($(this).w())// - event.layerX + }) + .removeClass('op-hidden').addClass('op-visible'); + }; + + MaterioBaseTheme.prototype.on_mousemove_cardsmall = function(event){ + // trace('on_mousemove_Card', event); + horiHoverImagesSwitcher(event); + + _$tooltip + .css({ + top:event.pageY - _$tooltip.h() -5,// - event.layerY, + left:event.pageX + 5 + ($(this).w() - event.layerX) + }); + }; + + // MaterioBaseTheme.prototype.on_click_cardsmall = function(event){ + // trace('on_click_cardsmall', event); + // }; + + MaterioBaseTheme.prototype.on_mouseleave_cardsmall = function(event){ + // trace('on_mouseleave_Card', event); + $('.images img.op-visible', this) + .removeClass('op-visible').addClass('op-hidden') + .eq(0) + .removeClass('op-hidden').addClass('op-visible'); + + if($(this).is('.focused')) + _$tooltip.removeClass('op-visible').addClass('op-hidden'); + }; + + /** + * cards medium + */ + // MaterioBaseTheme.prototype.init_layout_cardmedium = function($card){ + // trace('initLayoutCardMedium'); + // var ch = $card.h() - $('.group-header', $card).h() -30; + // columnsPage($('.field-name-field-description, .field-name-body', $card), 210, ch); + // }; + + MaterioBaseTheme.prototype.on_mouseenter_cardmedium = function(event){ + // trace('on_mouseenter_cardmedium'); + + // show lazy images + showLazyLoadedImages(event.currentTarget); + + // columnize texts + $card = $(event.currentTarget); + if(!$('.columnized', $card).size() && !$('body').is('.role-7', 'role-2') ){ + var ch = $card.h() - $('.group-header', $card).h() -30; + columnsPage($('.field-name-field-description, .field-name-body', $card), 210, ch); + $('.group-side-4', $card).wrapInner('
                        ').find('.field-item').addClass('dontsplit'); + columnsPage($('.group-side-4 .column-wrapper', $card), 210, ch); + } + + // add associated materials links + prepareAssociatedMaterials(event.currentTarget); + }; + + MaterioBaseTheme.prototype.on_mousemove_cardmedium = function(event){ + //trace('on_mousemove_cardmedium'); + horiHoverImagesSwitcher(event); + }; + + MaterioBaseTheme.prototype.on_click_cardmedium = function(event){ + // trace('on_click_cardmedium', event); + if(!$(event.target).is('.flag') && !$(event.target).parent().is('.flag')) + sideSwitcher(event); + }; + + MaterioBaseTheme.prototype.on_mouseleave_cardmedium = function(event){ + v1 = $('.side.op-visible'); + if(v1.is('.oops','.upgrade') || $('.upgrade', v1).size()){ + sideSwitcher(event, 0); + } + }; + + /** + * cards Big + */ + // MaterioBaseTheme.prototype.init_layout_cardbig = function($card){ + //trace('initLayoutCardBig'); + // columnsPage($('.field-name-field-description, .field-name-body', $card), 425, 270); + // }; + + MaterioBaseTheme.prototype.on_mouseenter_cardbig = function(event){ + // trace('on_mouseenter_cardbig'); + showLazyLoadedImages(event.currentTarget); + + if(!$('.columnized', event.currentTarget).size()){ + columnsPage($('.field-name-field-description, .field-name-body', event.currentTarget), 425, 270); + $('.group-4', event.currentTarget).wrapInner('
                        ').find('.field-item').addClass('dontsplit'); + columnsPage($('.group-4 .column-wrapper', event.currentTarget), 425, 270); + } + + // add associated materials links + prepareAssociatedMaterials(event.currentTarget); + }; + + MaterioBaseTheme.prototype.on_mousemove_cardbig = function(event){ + // trace('on_mousemove_cardbig'); + horiHoverImagesSwitcher(event); + }; + + MaterioBaseTheme.prototype.on_click_cardbig = function(event){ + //trace('on_click_cardbig'); + sideSwitcher(event); + }; + + MaterioBaseTheme.prototype.on_mouseleave_cardbig = function(event){ + if($('.side.op-visible').is('.oops') || $('.side.op-visible').is('.upgrade')){ + sideSwitcher(event, 0); + } + }; + + /** + * cards Full + */ + // MaterioBaseTheme.prototype.init_layout_cardfull = function($card){ + // trace('initLayoutCardFull'); + + // }; + + MaterioBaseTheme.prototype.on_mouseenter_cardfull = function(event){ + // trace('on_mouseenter_cardfull'); + showLazyLoadedImages(event.currentTarget); + + // add associated materials links + prepareAssociatedMaterials(event.currentTarget); + }; + + MaterioBaseTheme.prototype.on_mousemove_cardfull = function(event){ + // trace('on_mousemove_cardfull'); + horiHoverImagesSwitcher(event); + }; + + // MaterioBaseTheme.prototype.on_click_cardfull = function(event){ + // trace('on_click_cardfull'); + // }; + + // MaterioBaseTheme.prototype.on_mouseleave_cardfull = function(event){ + // trace('on_mouseleave_cardfull'); + // }; + + /** + * horiHoverImagesSwitcher + */ + function horiHoverImagesSwitcher(event){ + // trace('horiHoverImagesSwitcher', event); + var $curtar = $(event.currentTarget); + // TODO : event.layerX doesn't exists in IE8 so we have to calculate the mouse position from offsetX, pageY, etc + // var layerX = event.layerX ? event.layerX : event.clientX - event.currentTarget.offsetLeft; + var layerX = event.clientX - event.currentTarget.offsetLeft; + // trace("layerX", layerX); + if(layerX && $curtar.is('.image-ready') ){ // && !$curtar.is('.image-buged') + var $imgs = $('.group-images figure', event.currentTarget); + if($(event.target).parents('.group-images').length){ + var imgw = $imgs.eq(0).w(), + rapport = imgw/$imgs.length, + mx = layerX > imgw ? imgw-1 : layerX, + rapport_pos = Math.floor(mx / rapport); + // trace('rapport_pos = '+rapport_pos+' | event.layerX = '+event.layerX); + rapport_pos = rapport_pos < 0 ? 0 : ( rapport_pos > ($imgs.length - 1) ? $imgs.length - 1 : rapport_pos); + + if(!$imgs.eq(rapport_pos).is('.op-visible')){ + // google analytics + $.event.trigger({ + type : 'record-stat', + categorie : 'Card event', + action : 'image slide switch', + label : rapport_pos + }); + + $imgs + .removeClass('op-visible').addClass('op-hidden') + .eq(rapport_pos) + .removeClass('op-hidden').addClass('op-visible'); + } + }else{ + // $curtar.addClass('image-buged'); + $imgs.removeClass('op-visible').addClass('op-hidden'); + $imgs.eq(0).removeClass('op-hidden').addClass('op-visible'); + } + + } + }; + + /** + * protectImages + */ + function protectFigures(context){ + // trace('protectFigures'); + context = context == null ? 'body' : context; + $('figure:not(.protected)', context) + .append('') + .addClass('protected') + .bind("contextmenu", function(e){ + alert("Cette image est soumise au droit d'auteur."); + return false; + }); + }; + + /** + * initPreview + */ + function initPreview(node){ + $('nav.nav', node).append($('
                        ').bind('click', onClickPreviewCardBtn)); + }; + + function onClickPreviewCardBtn(event){ + // trace('theme :: onClickPreviewCardBtn', event); + event.preventDefault(); + //trace('Theme :: previewCard', event); + previewCard($(this).parents('.node')); + return false; + }; + + function previewCard($card){ + // trace('theme :: previewCard',$card); + + // get the nid from card class + var matches = $card.attr('class').match(/\bnode-(\d+)\b/); + + // select viewmode regarding the window size + var viewmode = false; + var cur_vm = getCurrentViewmode(); + for(var vm in _viewmodes) + if(vm != cur_vm && _viewmodes[vm] > _viewmodes[cur_vm] && _viewmodes[vm] < $(window).width()) + viewmode = vm; + + // ajax load card's node + if(typeof matches[1] !== undefined && viewmode){ + $.event.trigger('loading-content'); + + $.getJSON(_settings.basePath+_settings.pathPrefix+'materio_search_api_ajax/node/'+matches[1], + {viewmode:viewmode}, + function(json){ + //trace('json', json); + $.event.trigger('loaded-content'); + previewLoaded(json); + }); + } + }; + + function previewLoaded(json){ + var $modal = $('
                        ').addClass('modal-content').append(json.node); + var $modal_wrapper = $('.modal-wrapper'); + + if(!$modal_wrapper.size()) + $modal_wrapper = $('
                        ').addClass('modal-wrapper').append($('
                        ').addClass('modal-bg')).appendTo('body'); + + $modal_wrapper + .append($modal) + .bind('click', function(event) { + _previewIsOpen = false; + $(this).remove(); + }); + + $modal.bind('click', function(event) { + event.stopPropagation(); + }); + + _previewIsOpen = true; + + initCards('.modal-content'); + $.event.trigger({ type : 'previewloaded', container : '.modal-content'}); + }; + + /** + * GRID + */ + function moveGridFocus(event, side){ + var $old_focused = $('#content .search-results, #content .actuality-items') + .children('.node.focused').first(); + var $new_focused; + switch(side){ + case 'r': + $new_focused = $old_focused.next(); + break; + case 'l': + $new_focused = $old_focused.prev(); + break; + case 'u': + case 'd': + var dir = side == "d" ? 1 : -1; + var column = $old_focused.attr('column'); + while( ($new_focused == undefined || !$new_focused.size()) && column > 0){ + $new_focused = $('.node[column='+column+'][line='+(parseInt($old_focused.attr('line'))+dir)+']'); + column --; + } + break; + } + + focusCard($new_focused); + docScrollTo($new_focused); + }; + + function focusCard($card){ + // trace('theme :: focusCard', $card); + if(!$card.size() || $card.is('.focused') || $card.parents('.modal-content').size()) + return; + + $('#content .search-results, #content .actuality-items') + .children('.node.focused') + .removeClass('focused'); + + $card.addClass('focused'); + + if(_previewIsOpen){ + previewCard($card); + } + + $card.trigger('focused'); + }; + + /** + * lazyloadimages + */ + + // function initLazyLoad(context){ + // $('figure:first-child img.lazy', context).lazyload();//{ + // container:'#content' + // }); + + // TODO: propage this event to the card near it to anticipate the mouseenter + // $(context).bind('mousemove', showLazyLoadedImages); + // }; + + function showLazyLoadedImages(context){ + //trace('MaterioBaseTheme :: initLazyLoad : mouseenter', this); + var $this = $(context); + + if( !$this.is('.lazy-processed') ){ + $this + .addClass('lazy-processed') + // .find('figure img.lazy') + .find('img.lazy') + .each(function(index){ + var $img = $(this); + $img.attr('src', $img.attr('data-original')).removeAttr('data-original'); + }); + + setTimeout(function(){ + $this.addClass('image-ready'); + }, 300); + } + }; + + /** + * prepareAssociatedMaterials + */ + function prepareAssociatedMaterials(card){ + // trace('prepareAssociatedMaterials', card); + + $('.field-name-field-materiau-ref a:not(.prepared)', card).addClass("prepared").bind('click', onClickAssociatedMaterial); + }; + + /** + * onClickAssociatedMaterial + */ + function onClickAssociatedMaterial(event){ + // trace("onClickAssociatedMaterial"); + event.preventDefault(); + + var $this = $(this); + + // trace('href', $(this).attr('href')); + var nid = $this.attr('href').match(/^\/(fr|en)\/node\/(\d+)$/)[2]; + // trace("nid", nid); + + var $prt = $this.parents('.node-materiau'); + if($prt.parent().is('.modal-content')){ + // if we are on preview mode + // remove already loaded associated + $prt.parent().find('.node-'+nid+'.associated').remove(); + loadAssociatedNode($prt, nid); + }else{ + // if we are on normal grid mode + var $n = $prt.nextUntil('.node-materiau:not(.associated)').filter('.node-'+nid); + // trace('n', $n); + if($n.size()){ + // trace('focus', nid); + // focus on already loaded node + focusCard($n); + // docScrollTo($isnodeexisting); + }else{ + // trace('load associated', nid); + loadAssociatedNode($prt, nid); + } + } + + return false; + }; + + function loadAssociatedNode($prt, nid){ + // console.log('loadAssociatedNode | nid = '+nid); + var viewmode = $prt.attr('class').match(/vm-([^\s]+)/); + // trace('viewmode match', viewmode); + + // if(!_isloadingresults){ + $.event.trigger('loading-content'); + var url = _settings.basePath+_settings.pathPrefix+'materio_search_api_ajax/node/'+nid; + $.getJSON(url, + {viewmode:viewmode[1]}, + function(json){ + //trace('json', json); + $.event.trigger('loaded-content'); + + displayAssociated($prt, $(json.node)); + + $.event.trigger({ + type : 'resultscompleted', + container : '#content .actuality-items, #content .search-results' + }); + }); + // } + }; + + function displayAssociated($prt, $n){ + + $n.addClass('associated').addClass('just-added'); + $prt.after($n); + initCards($prt.parent()); + + (function($n){ + setTimeout(function(){ + $n.removeClass('just-added'); + focusCard($n); + }, 100); + }($n)); + }; + + /** + * sideSwitcher + */ + function sideSwitcher(event, delta){ + var $sides = $('.side', event.currentTarget); + if($sides.length > 1){ + if( typeof delta == 'undefined'){ + var delta = 0; + $sides.each(function(i) { + if($(this).is('.op-visible')){ + delta = i+1; + return false; + } + }); + + delta = delta == 0 ? 1 : (delta == $sides.length ? 0 : delta); + } + + // google analytics + $.event.trigger({ + type : 'record-stat', + categorie : 'Card event', + action : 'side switch', + label : delta + }); + + $sides.addClass('op-hidden').removeClass('op-visible') + .eq(delta).removeClass('op-hidden').addClass('op-visible'); + } + }; + + /** + * columnsPage + */ + function columnsPage($elmt, cw, ch){ + // trace('columnsPage'); + var cls = Math.ceil($elmt.h()/ch); + $elmt + .addClass('columnized') + .width(cw*cls) + .columnize({ + width:cw, + height:ch, + lastNeverTallest:true + }); + + if(cls > 1){ + + $elmt.find('.column').each(function(index) { + var $this = $(this); + if(!$this.find('*').length){ + $this.prev().addClass('last'); + $this.remove(); + return true; + } + }); + + $elmt.find('.column').each(function(index) { + var $this = $(this); + + if(!$this.is('.first')) + $this.children('*:first-child').prepend(' ...'); + + if(!$this.is('.last')) + $this.children('*:last-child').append('... '); + }); + + $('.column-switcher', $elmt).bind('click', onColumnSwitcherClick); + + + } + }; + + function onColumnSwitcherClick(event){ + event.preventDefault(); + //trace('onColumnSwitcherClick', event); + + var $this = $(event.currentTarget), + $columnized = $this.parents('.columnized'); + + // google analytics + $.event.trigger({ + type : 'record-stat', + categorie : 'Card event', + action : 'column switch', + label : $this.attr('col') + }); + + $columnized.css({ + marginLeft : -1 * $this.attr('cw') * $this.attr('col') +'px' + }); + + return false; + } + + /** + * initViewmodes + */ + function initViewmodes(){ + checkViewmodesResponsive(); + }; + + function checkViewmodesResponsive(){ + if(_480_768()){ + if($('.viewmode-link.active').is('.viewmode-cardfull')){ + $('.viewmode-cardbig').trigger('click'); + } + }else if(_max_480()){ + if($('.viewmode-link.active').is('.viewmode-cardbig, .viewmode-cardfull')){ + $('.viewmode-cardmedium').trigger('click'); + } + } + }; + + function getCurrentViewmode(){ + for(var vm in _viewmodes) + if($('.viewmode-link.active.viewmode-'+vm).size()) + return vm; + }; + + /** + * FLAGS + */ + function initFlagsEvent(){ + $('.bookmarks, .mylists .flaged').children('.node:not(.listened)') + .bind('mouseenter mousemove click mouseleave', onCardEventDispatcher) + // .each(function(event){ initLayoutCardDispatcher($(this)); }) + .addClass('listened'); + }; + + function onAfterFlaging(event){ + //trace('MaterioBaseTheme :: onAfterFlaging', event); + // WARNING to use event variables i had to hack flag.js from flag module (change the event declaration) + var $target = $(event.link).parents('article.node'); + if(event.flagStatus == 'flag'){ + $target.addClass('flaged'); + }else if(event.flagStatus == 'unflag'){ + + if($('.flag-lists-entity-links a.unflag-action', $target).length == 0) + $target.removeClass('flaged'); + + } + }; + + function onMybookmarksBlockUpdate(event){ + initFlagsEvent(); + initLayout(); + }; + + function onClickList(event){ + //trace('onClickList', event); + var $link = $(event.currentTarget).addClass('active'), + name = $link.attr('name'), + $block = $link.parents('.block'), + $flaged = $('.flaged.'+name, $block).addClass('active'); + + $link.siblings().removeClass('active'); + $flaged.siblings().removeClass('active'); + + createCookie('materiomyflaglistsopened', name, 1); + + $flaged.parents('.mylists').height($flaged.h()); + initLayout(); + }; + + function onMyListsBlockUpdate(event){ + //trace('MaterioBaseTheme :: onMyListsBlockUpdate', event); + initFlagsEvent(); + // initLazyLoad(this); + // TODO: refresh contents (search results) to see new flaglist links. + initLayout(); + }; + + function onMyListsBlockBuilded(event){ + //trace('MaterioBaseTheme :: onMyListsBlockBuilded', event); + // initLazyLoad(event.block); + showLazyLoadedImages(event.block); + }; + /** + * cards bookmark + */ + // MaterioBaseTheme.prototype.init_layout_bookmark = function($card){ + // trace('initLayoutCardBig'); + + // }; + + MaterioBaseTheme.prototype.on_mouseenter_bookmark = function(event){ + //trace('on_mouseenter_bookmark', event); + _$tooltip + .html($('.group-header', this).clone()) + .css({ + top:event.pageY - _$tooltip.h() -5,//- event.layerY, + left:event.pageX + 5 + ($(this).w() - event.layerX) + }) + .removeClass('op-hidden').addClass('op-visible'); + }; + + MaterioBaseTheme.prototype.on_mousemove_bookmark = function(event){ + // trace('on_mousemove_Card', event); + // if(event.layerX) + // horiHoverImagesSwitcher(event); + + _$tooltip + .css({ + top:event.pageY - _$tooltip.h() -5,// - event.layerY, + left:event.pageX + 5 + ($(this).w() - event.layerX) + }); + }; + + // MaterioBaseTheme.prototype.on_click_bookmark = function(event){ + // trace('on_click_bookmark', event); + // }; + + MaterioBaseTheme.prototype.on_mouseleave_bookmark = function(event){ + // trace('on_mouseleave_Card', event); + $('.images img.op-visible', this) + .removeClass('op-visible').addClass('op-hidden') + .eq(0) + .removeClass('op-hidden').addClass('op-visible'); + + _$tooltip.removeClass('op-visible').addClass('op-hidden'); + }; + + /** + * keyboradshortcuts + */ + function initKeyboardShortcuts(){ + + $(document) + .bind('keydown', 'Shift+:',shortcut_focusSearchField) + .bind('keydown', '/',shortcut_focusSearchField) + .bind('keydown', 'Alt+1',shortcut_viewmodeSmall) + .bind('keydown', 'Alt+2',shortcut_viewmodeMedium) + .bind('keydown', 'Alt+3',shortcut_viewmodeBig) + .bind('keydown', 'Alt+4',shortcut_viewmodeFull) + .bind('keydown', 'space',shortcut_togglePreview) + .bind('keydown', 'esc',shortcut_closeModaleContent) + .bind('keydown', 'up',shortcut_onUpArrow) + .bind('keydown', 'right',shortcut_onRightArrow) + .bind('keydown', 'down',shortcut_onDownArrow) + .bind('keydown', 'left',shortcut_onLeftArrow); + }; + + function shortcut_focusSearchField(e){ + // trace("focusSearchField"); + if($('#edit-searchfield').size()){ + var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; + stat_event.action = 'slash'; + stat_event.label = 'Focus on search text field'; + $.event.trigger(stat_event); + + $('#edit-searchfield').focus(); + + e.stopPropagation(); + e.preventDefault(); + return false; + } + }; + + function shortcut_viewmodeSmall(e){ + if($('a.viewmode-link.viewmode-cardsmall').size()){ + var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; + stat_event.action = 'Alt+1'; + stat_event.label = 'Change view mode : card small'; + $.event.trigger(stat_event); + + $('a.viewmode-link.viewmode-cardsmall').click(); + + return false; + } + }; + + function shortcut_viewmodeMedium(e){ + if($('a.viewmode-link.viewmode-cardmedium').size()){ + var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; + stat_event.action = 'Alt+2'; + stat_event.label = 'Change view mode : card medium'; + $.event.trigger(stat_event); + + $('a.viewmode-link.viewmode-cardmedium').click(); + + return false; + } + }; + + function shortcut_viewmodeBig(e){ + if($('a.viewmode-link.viewmode-cardbig').size()){ + var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; + stat_event.action = 'Alt+3'; + stat_event.label = 'Change view mode : card big'; + $.event.trigger(stat_event); + + $('a.viewmode-link.viewmode-cardbig').click(); + + return false; + } + }; + + function shortcut_viewmodeFull(e){ + if($('a.viewmode-link.viewmode-cardfull').size()){ + var stat_event = { type : 'record-stat', categorie : 'Shortcuts'}; + stat_event.action = 'Alt+4'; + stat_event.label = 'Change view mode : card full'; + $.event.trigger(stat_event); + + $('a.viewmode-link.viewmode-cardfull').click(); + + return false; + } + }; + + function shortcut_togglePreview(e){ + // trace('theme :: shortcut_togglePreview', e); + $.event.trigger({ + type : 'record-stat', + categorie : 'Shortcuts', + action : 'Space', + label : 'Space toggle preview' + }); + + if(_previewIsOpen){ + if($('body>.modal-wrapper').size()){ + $('body>.modal-wrapper').click(); + _previewIsOpen = false; + return false; + } + }else{ + previewCard($('#content .search-results, #content .actuality-items').children('.node.focused:first')); + } + }; + + function shortcut_closeModaleContent(e){ + if($('body>.modal-wrapper').size()){ + $.event.trigger({ + type : 'record-stat', + categorie : 'Shortcuts', + action : 'Esc', + label : 'Esc from modal content' + }); + + $('body>.modal-wrapper').click(); + _previewIsOpen = false; + return false; + } + }; + + function shortcut_onUpArrow(e){ + // trace('theme :: shortcut_onTopArrow', e); + moveGridFocus(e, 'u'); + }; + + function shortcut_onRightArrow(e){ + // trace('theme :: shortcut_onRightArrow', e); + moveGridFocus(e, 'r'); + }; + + function shortcut_onDownArrow(e){ + // trace('theme :: shortcut_onDownArrow', e); + moveGridFocus(e, 'd'); + }; + + function shortcut_onLeftArrow(e){ + // trace('theme :: shortcut_onLeftArrow', e); + moveGridFocus(e, "l"); + }; + + /** + * Misc + */ + function onResizeWindow(e){ + clearInterval(_resizeTimer); + _resizeTimer = setTimeout(function(){ + initLayout(); + checkViewmodesResponsive(); + setUpGrid("#content .actuality-items, #content .search-results"); + }, 200); + }; + + /** + * Statics + */ + function initMembershipForm() { + + switch(window.location.hash){ + case '#flocon': + $('#edit-submitted-column-left-membership-options-1').attr('checked', 'checked'); + // $options.trigger('change'); + break; + case '#etoile': + $('#edit-submitted-column-left-membership-options-2').attr('checked', 'checked'); + break; + case '#4etoiles': + $('#edit-submitted-column-left-membership-options-3').attr('checked', 'checked'); + break; + // default: + // switchMembershipShipFormFields($options); + // break + } + + $('#webform-component-column-left--membership-options') + .change(function(event){ + //trace('changed'); + if( $('input[type="radio"]:checked', this).is('#edit-submitted-column-left-membership-options-3') ){ + $('#webform-component-column-right--collaborators').show(); + }else{ + $('#webform-component-column-right--collaborators').hide(); + } + $('div.form-item.selected', this).removeClass('selected'); + $('input[type="radio"]:checked', this).parents('div.form-item').addClass('selected'); + }) + .trigger('change'); + + + // $('#webform-component-column-left--membership-options input[checked="checked"]').parents('div.form-item').addClass('selected'); + }; + + /** helpers */ + + $.fn.h = function(){ + if(this.css('height') == undefined) + return 0; + + return parseInt(this.css('height')) + parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom')); + }; + + $.fn.w = function(){ + if(this.css('width') == undefined) + return 0; + + return parseInt(this.css('width')) + parseInt(this.css('padding-left')) + parseInt(this.css('padding-right')); + }; + + function getDocHeight() { + var D = document; + return Math.max( + Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), + Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), + Math.max(D.body.clientHeight, D.documentElement.clientHeight) + ); + }; + + // http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/ + function viewport() { + var e = window, a = 'inner'; + if (!('innerWidth' in window )) { + a = 'client'; + e = document.documentElement || document.body; + } + return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }; + }; + + /** + * Forms + */ + function initForms(){ + + $('#edit-searchfield:not(.processed)') + .bind('focus', function(event) { + var $this = $(this); + //$this.attr('value', 'test'); + // trace('value', $this.val()); + // trace('default', $this.attr('default')); + if($this.val() == $this.attr('default')) + $this.val(''); + }) + .bind('focusout', function(event) { + var $this = $(this); + if($this.val() == "") + $this.val($this.attr('default')); + }) + .addClass('processed'); + + hideLabelsFromRegisterForm(); + }; + + function hideLabelsFromRegisterForm () { + var $this, id,label, description; + $('input.form-text', '#block-user-login, #block-materio-user-user-register, , #block-materio-user-user-createaccount').each(function(i) { + $this = $(this); + id = $this.attr('id'); + label = $('label[for='+id+']').hide().text(); + description = $this.parent().find('.description').hide().text(); + if($this.attr('placeholder') == '') + $this.attr('placeholder',label); + + $this.attr('title',description); + }); + }; + + function onAjaxRegisterBlockLoaded (event) { + // console.log('onAjaxRegisterBlockLoaded'); + hideLabelsFromRegisterForm(); + }; + + /** + * cookies + */ + function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; + }; + + function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; + }; + + function eraseCookie(name) { + createCookie(name,"",-1); + }; + + /** + * google analytics + */ + function onRecordStat(event){ + //trace('onRecordStat', event); + // path, category, action, opt_label, opt_value + if(typeof _gaq !== 'undefined'){ + if(event.path){ + _gaq.push(['_trackPageview', event.path]); + }else{ + _gaq.push(['_trackEvent', event.categorie, event.action, event.label, event.value]); + } + } + }; + + /** + * docScrollTo + */ + function docScrollTo($e){ + // $(document).scrollTop($e.offset().top); + if($e.size()) + $('html,body').animate({ + scrollTop: $e.offset().top - $(window).height()*0.5 + $e.height()*0.5 + }, 500); + }; + + init(); + }; + + $(document).ready(function() { + var materiobasetheme = new MaterioBaseTheme(); + }); + + /** + * Attach collapse behavior to the feedback form block. + */ + Drupal.behaviors.feedbackForm = { + attach: function (context) { + $('#block-feedback-form', context).once('feedback', function () { + var $block = $(this); + $block.find('span.feedback-link') + .prepend('feedback ') + .css('cursor', 'pointer') + .toggle(function () { + Drupal.feedbackFormToggle($block, false); + }, + function() { + Drupal.feedbackFormToggle($block, true); + } + ); + $block.find('form').hide(); + $block.show(); + }); + } + }; + + /** + * Collapse or uncollapse the feedback form block. + */ + Drupal.feedbackFormToggle = function ($block, enable) { + $block.find('form').slideToggle('medium'); + if (enable) { + $('#feedback-form-toggle', $block).html('feedback'); + } + else { + $('#feedback-form-toggle', $block).html('feedback (close)'); + } + }; + +})(jQuery); diff --git a/sites/all/themes/gui/materiobasetheme/koala-config.json b/sites/all/themes/gui/materiobasetheme/koala-config.json deleted file mode 100644 index 6f0c64b9..00000000 --- a/sites/all/themes/gui/materiobasetheme/koala-config.json +++ /dev/null @@ -1,34 +0,0 @@ -// Less project settings, you can edit it and set custom settings. -{ - "language": "less", - - // Set this to the root of your project. Defaults to "/". - "http_path": "/", - - // The directory where the less stylesheets are kept. It is relative to the http_path. - "less_dir":"less", - - // The directory where the css stylesheets are kept. It is relative to the http_path. - "css_dir": "css", - - // Compile options of LESS. - "options": { - - // Output style. Can be normal (default), compress, yuicompress. - "output_style": "normal", - - // Outputs filename and line numbers, which will output the debug info within comments. - "line_comments": false, - - // Outputs filename and line numbers, which will output the information within a fake media query which is compatible with the SASS format. - "debug_info": false - }, - - // Other compile options. - // e.g, ["--strict-imports", ... ,"--rootpath=URL"]. - // Run the command 'lessc -h' to see more options. - "custom_options": [], - - // An array of filesystem paths or importers which should be searched for LESS templates imported with the @import directive. - // "include_paths": ["components/gui_ck_fw", "components/bootstrap/less"] -} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/materiobasetheme.info b/sites/all/themes/gui/materiobasetheme/materiobasetheme.info index f962d2e8..2d32c9ae 100644 --- a/sites/all/themes/gui/materiobasetheme/materiobasetheme.info +++ b/sites/all/themes/gui/materiobasetheme/materiobasetheme.info @@ -21,11 +21,11 @@ stylesheets[all][] = "css/nonsemantic.css" ;----------// Scripts -scripts[] = "js/libs/jquery.history.js" -scripts[] = "js/libs/jquery.hotkeys.js" -scripts[] = "js/libs/jquery.columnizer.js" -scripts[] = "js/libs/jquery.lazyload.min.js" -scripts[] = "js/script.min.js" +scripts[] = "bower_components/history.js/scripts/bundled/html4+html5/jquery.history.js" +scripts[] = "bower_components/jquery.hotkeys/jquery.hotkeys.js" +scripts[] = "bower_components/jquery.columnizer/src/jquery.columnizer.min.js" +scripts[] = "bower_components/jquery.lazyload/jquery.lazyload.js" +scripts[] = "js/script.js" diff --git a/sites/all/themes/gui/materiobasetheme/package.json b/sites/all/themes/gui/materiobasetheme/package.json new file mode 100644 index 00000000..d1d6a334 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/package.json @@ -0,0 +1,17 @@ +{ + "name": "materiobasetheme", + "version": "1.0.0", + "author": "Bachir Soussi Chiadmi", + "homepage": "http://materio.com", + "engines": { + "node": ">= 0.8.0" + }, + "devDependencies": { + "autoprefixer-core": "^5.1.5", + "grunt-contrib-compass": "^0.9.0", + "grunt-contrib-sass": "v0.7.3", + "grunt-contrib-watch": "v0.6.1", + "grunt-postcss": "^0.3.0", + "grunt-svg2png": "^0.2.7" + } +} diff --git a/sites/all/themes/gui/materiobasetheme/scss/fonts.scss b/sites/all/themes/gui/materiobasetheme/scss/fonts.scss new file mode 100644 index 00000000..f708de94 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/fonts.scss @@ -0,0 +1,24 @@ +@mixin ubuntu(){font-family: "Ubuntu", Arial, "MS Trebuchet", sans-serif; @include fs500(); @include normal;} + +body{font-size:16px; @include ubuntu; line-height:1.3;} + +a{color: #007BC2; text-decoration: none;} + +h1{font-size:1.6em;} +h2{font-size:1.5em;} +h3{font-size:1.4em;} +h4{font-size:1.3em;} +h5{font-size:1.2em;} +h6{font-size:1.1em;} + +input, button, select, textarea{@include ubuntu();} + +@mixin fs22(){ + font-size:22px; +} + +#footer{ + #footer-bottom{ text-align: center;} + #footer-bottom .block{ @include fs8;} + +} diff --git a/sites/all/themes/gui/materiobasetheme/scss/gui.scss b/sites/all/themes/gui/materiobasetheme/scss/gui.scss new file mode 100644 index 00000000..13347262 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/gui.scss @@ -0,0 +1,598 @@ +/* + * www.g-u-i.net + */ + +// = +// = +// = +// = +// = +// ===== TYPOGRAHIE ====================================================================================================== + +@mixin fs8(){font-size:8px;} +@mixin fs9(){font-size:9px;} +@mixin fs10(){font-size:10px;} +@mixin fs11(){font-size:10px;} +@mixin fs12(){font-size:12px;} +@mixin fs14(){font-size:14px;} +@mixin fs16(){font-size:16px;} +@mixin fs18(){font-size:18px;} +@mixin fs20(){font-size:20px;} +@mixin fs24(){font-size:24px;} +@mixin fs28(){font-size:24px;} +@mixin fs30(){font-size:30px;} +@mixin fs36(){font-size:36px;} +@mixin fs48(){font-size:48px;} +@mixin fs60(){font-size:60px;} +@mixin fs72(){font-size:72px;} + +@mixin regular(){font-weight:normal;} +@mixin bold(){font-weight:bold;} +@mixin fs100(){font-weight:100;} +@mixin fs200(){font-weight:200;} +@mixin fs300(){font-weight:300;} +@mixin fs400(){font-weight:400;} +@mixin fs500(){font-weight:500;} +@mixin fs600(){font-weight:600;} +@mixin fs700(){font-weight:700;} +@mixin fs800(){font-weight:800;} +@mixin fs900(){font-weight:900;} + +@mixin upper(){text-transform: uppercase;} +@mixin italic(){font-style:italic;} +@mixin normal(){font-style: normal;} + +@mixin hyphens($value: auto) +{ + // -webkit-hyphens:$value; + // -moz-hyphens:$value; + // -ms-hyphens:$value; + // -o-hyphens:$value; + hyphens:$value; +} +@mixin font-size($value: 1em,$lineheight:1.3em) +{ + font-size:$value; + line-height:$lineheight; +} + +$green:#17942A; +$red:#E60000; + +// = +// = +// = +// = +// = +// ===== SHORTCUTS ======================================================================================================= + +// padding +// @mixin p($p){ padding:$arguments; } +// @mixin p($v, $h){ padding:$arguments; } +// @mixin p($t, $l, $b, $l){ padding:$arguments; } + +@mixin pt($p){ padding-top:$p; } +@mixin pr($p){ padding-right:$p; } +@mixin pb($p){ padding-bottom:$p; } +@mixin pl($p){ padding-left:$p; } + +// margin +// @mixin m($p){ margin:$arguments; } +// @mixin m($v, $h){ margin:$arguments; } +// @mixin m($t, $l, $b, $l){ margin:$arguments; } + +@mixin mt($m){ margin-top:$m; } +@mixin mr($m){ margin-right:$m; } +@mixin mb($m){ margin-bottom:$m; } +@mixin ml($m){ margin-left:$m; } + +@mixin no-margin(){ margin:0; padding:0; } + +// border +// @mixin b($b){ border: $b; } +// @mixin b($size, $color){ border: $size solid $color; } + +@mixin bt($b){ border-top: $b;} +//@mixin bt($size, $color){border-top: $size solid $color;} + +@mixin br($b){ border-right: $b;} +@mixin br($size, $color){border-right: $size solid $color;} + +@mixin bb($b){ border-bottom: $b;} +@mixin bb($size, $color){border-bottom: $size solid $color;} + +@mixin bl($b){ border-left: $b;} +@mixin bl($size, $color){border-left: $size solid $color;} + +@mixin bordered($top-color: #EEE, $right-color: #EEE, $bottom-color: #EEE, $left-color: #EEE) +{ + border-top : solid 1px $top-color; + border-right : solid 1px $right-color; + border-bottom: solid 1px $bottom-color; + border-left : solid 1px $left-color; +} + +// Background +@mixin bg($color, $url, $repeat, $scrollfixed, $pos){background: $color, $url, $repeat, $scrollfixed, $pos;} +@mixin bgc($color){background-color: $color;} +@mixin bkgd($params){background: $params;} +@mixin bkgdc($color){@include bgc($color);} + +@mixin bgca($r, $g, $b, $a){ + background-color: rgb($r, $g, $b); // ie8 + background-color: rgba($r, $g, $b, $a); + *background-color: rgb($r, $g, $b); // ie7 +}; + +// Selection +@mixin selection($bgcolor,$color) +{ + &::selection { + background:$bgcolor; + color:$color; + } + &::-moz-selection { + background:$bgcolor; + color:$color; + } + &::-webkit-selection { + background:$bgcolor; + color:$color; + } +} + +// Colors +@mixin color($value) +{ + &, + & *{color:$value;} +} + +// Opacity +@mixin opacity($opacity: 0.5) +{ + // -webkit-opacity: $opacity; + // -khtml-opacity: $opacity; + // -moz-opacity: $opacity; + opacity: $opacity; +} + +// size +@mixin size($height, $width) { + width: $width; + height: $height; +} +@mixin square($size) { + @include size($size, $size); +} + +// center +@mixin center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} + +// = +// = +// = +// = +// = +// ===== DISPLAY UTILS =================================================================================================== +// Inline blocks +@mixin inlineblock() +{ + display:moz-inline-stack; + display:inline-block; + vertical-align:top; + zoom:1; + *display:inline; + // .ie7 &, .ie8 &{display:block;float:left;} +} + +@mixin db(){display:block;} +@mixin dbn(){display:none;} +@mixin dib(){@include inlineblock;} +@mixin dib($align){@include inlineblock($align);} + +@mixin float($left){ + @include db; + float:$align; +} + +@mixin abs($value) { position:absolute; top:$value; left:$value; bottom:$value; right:$value; } +@mixin abs($top, $left) { position:absolute; top:$top; left:$left; } +@mixin abs($top, $right, $bottom, $left) { position:absolute; top:$top; left:$left; bottom:$bottom; right:$right; }; + +@mixin fix($value) { position:fixed; top:$value; left:$value; bottom:$value; right:$value; } +@mixin fix($top, $left) { position:fixed; top:$top; left:$left; } +@mixin fix($top, $right, $bottom, $left) { position:fixed; top:$top; left:$left; bottom:$bottom; right:$right; }; + +// Columns system +$g:0; +@mixin g() { width:$g; } +@mixin col($col,$coltotal:$n,$gutter:$g) { + width: $col * ( 100% - (($coltotal - 1) * $gutter) ) / $coltotal + (($col - 1) * $gutter); +} +@mixin inside-left($col,$coltotal:$n,$gutter:$g) { + padding-left: $col * ( 100% - (($coltotal - 1) * $gutter) ) / $coltotal + ($col * $gutter); +} +@mixin inside-right($col,$coltotal:$n,$gutter:$g) { + padding-right: $col * ( 100% - (($coltotal - 1) * $gutter) ) / $coltotal + ($col * $gutter); +} + + +// Vertical alignement +// +// ___ @mixin align-child() +// | +// | Permet l’alignement vertical d’un objet par rapport à son premier parent (dans son conteneur direct)@mixin +// | +// | 1 param : $vertical-align +// +@mixin align-child($align:middle){ + &:before { content: ""; @include dib(middle); overflow: hidden; visibility: hidden; width: 0; height: 100%; } + & > * { @include dib($align); } +} + +@mixin clear-after(){ + &:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;} +} + +// For clearing floats like a boss h5bp@mixin com/q +@mixin clearix() { + *zoom: 1; + &:before, + &:after { + display: table; + content: ""; + // Fixes Opera/contenteditable bug: + // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 + line-height: 0; + } + &:after { + clear: both; + } +} + +// = +// = +// = +// = +// = +// ===== CSS3 ============================================================================================================ + +// Gradients +@mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) +{ + background: $color; + background: -webkit-gradient(linear, + left bottom, + left top, + color-stop(0, $start), + color-stop(1, $stop)); + background: -ms-linear-gradient(bottom, + $start, + $stop); + background: -moz-linear-gradient(center bottom, + $start 0%, + $stop 100%); +} +@mixin bw-gradient($color: #F5F5F5, $start: 0, $stop: 255) +{ + background: $color; + background: -webkit-gradient(linear, + left bottom, + left top, + color-stop(0, rgb($start,$start,$start)), + color-stop(1, rgb($stop,$stop,$stop))); + background: -ms-linear-gradient(bottom, + rgb($start,$start,$start) 0%, + rgb($start,$start,$start) 100%); + background: -moz-linear-gradient(center bottom, + rgb($start,$start,$start) 0%, + rgb($stop,$stop,$stop) 100%); +} + +// Shadows +// +// ___ .box-shadow() +// | +// | Ombré extérieur. +// | +// | 1 param : $blur +// | 2+ params : $horizontal / $vertical / $blur / $color: #000 / $spread: 0px +// +// ___ .inset-shadow() +// | +// | Ombré intérieur. +// | +// | 1 param : $blur +// | 2+ params : $horizontal / $vertical / $blur / $color: #000 / $spread: 0px +// +@mixin box-shadow($blur: 9px) +{ + // filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); + // -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; + // -webkit-box-shadow: 0 0 $blur #000; + // -moz-box-shadow: 0 0 $blur #000; + // -ms-box-shadow: 0 0 $blur #000; + box-shadow: 0 0 $blur #000; +} +@mixin box-shadow($x, $y, $blur: 9px, $color: #000, $spread: 0px) +{ + // filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=$x, OffY=$y, Color=~'${color}'); + // -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=${x}, OffY=${y}, Color='${color}')"; + // -webkit-box-shadow: $x $y $blur $spread $color; + // -moz-box-shadow: $x $y $blur $spread $color; + // -ms-box-shadow: $x $y $blur $spread $color; + box-shadow: $x $y $blur $spread $color; +} +@mixin inset-shadow($blur: 9px) +{ + // filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000'); + // -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')"; + // -webkit-box-shadow: 0 0 $blur #000 inset; + // -moz-box-shadow: 0 0 $blur #000 inset; + // -ms-box-shadow: 0 0 $blur #000 inset; + box-shadow: 0 0 $blur #000 inset; +} +@mixin inset-shadow($x, $y, $blur: 9px, $color: #000, $spread: 0px) +{ + // filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=$x, OffY=$y, Color=~'${color}'); + // -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='${color}')"; + // -webkit-box-shadow: $x $y $blur $spread $color inset; + // -moz-box-shadow: $x $y $blur $spread $color inset; + // -ms-box-shadow: $x $y $blur $spread $color inset; + box-shadow: $x $y $blur $spread $color inset; +} + +@mixin drop-shadow($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: 0.1) +{ + // -webkit-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); + // -moz-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); + box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); +} + +// Border radius +@mixin rounded($radius: 2px) +{ + // -webkit-border-radius: $radius; + // -moz-border-radius: $radius; + border-radius: $radius; + // -webkit-background-clip: padding-box; + // -moz-background-clip: padding; + background-clip: padding-box; +} +@mixin border-radius($topleft: 0, $topright: 0, $bottomright: 0, $bottomleft: 0) +{ + // -webkit-border-radius:$topleft $topright $bottomright $bottomleft; + // -moz-border-radius:$topleft $topright $bottomright $bottomleft; + border-radius:$topleft $topright $bottomright $bottomleft; + // -webkit-background-clip: padding-box; + // -moz-background-clip: padding; + background-clip: padding-box; +} + +// transitions +@mixin transition-simply-prefix($string) { + // -webkit-transition: $string; + // -moz-transition: $string; + // -o-transition: $string; + transition: $string; +} + +// +// ___ .transition() +// | +// | 1 param : $property +// | 2 params : $property / $duration +// | 3+ params : $property / $duration / $transitiondelay:0s , $timingfunction:ease-out +// +// ___ .transitions() +// | +// | Permet de fixer des paramètres spécifique par propriétés, exemple: +// | +// | .transitions( +// | 'height , padding , margin , box-shadow', +// | '.5s , .2s , .2s , .2s', +// | '0s , 0s , 0s , .3s', +// | 'linear , ease-out , linear , ease-out' +// | ); +// +// $property: all; +// $duration: 1s; +// $transitiondelay:0s; +// $timingfunction: "ease-out"; +@mixin transition($property:all) +{ + // -webkit-transition: $property; + // -moz-transition: $property; + // -o-transition: $property; + transition: $property; +} + +@mixin transition($property:all, $speed:1s) +{ + // -webkit-transition: $property, $speed; + // -moz-transition: $property, $speed; + // -o-transition: $property, $speed; + transition: $property, $speed; +} + +@mixin transition($property:all, $speed:1s, $ease:ease-out) +{ + // -webkit-transition: $property, $speed, $ease; + // -moz-transition: $property, $speed, $ease; + // -o-transition: $property, $speed, $ease; + transition: $property, $speed, $ease; +} +@mixin transitions($property: all, $duration:0s, $transitiondelay:0s, $timingfunction:ease-out) +{ + // -webkit-transition-property :property; + // -webkit-transition-duration :duration; + // -webkit-transition-delay :transitiondelay; + // -webkit-transition-timing-function:timingfunction; + // -moz-transition-property :property; + // -moz-transition-duration :duration; + // -moz-transition-delay :transitiondelay; + // -moz-transition-timing-function:timingfunction; + // -o-transition-property :property; + // -o-transition-duration :duration; + // -o-transition-delay :transitiondelay; + // -o-transition-timing-function:timingfunction; + transition-property :property; + transition-duration :duration; + transition-delay :transitiondelay; + transition-timing-function:timingfunction; +} + +@mixin transitions-duration($duration: 0s) +{ + // -webkit-transition-duration: $duration; + // -moz-transition-duration: $duration; + // -o-transition-duration: $duration; + transition-duration: $duration; +} + +@mixin transition-duration($duration: 0.2s) +{ + // -webkit-transition-duration: $duration; + // -moz-transition-duration: $duration; + // -o-transition-duration: $duration; + transition-duration: $duration; +} + +@mixin transitions-delay($delay: 0s) +{ + // -webkit-transition-delay: delay; + // -moz-transition-delay: delay; + // -o-transition-delay: delay; + transition-delay: delay; +} + +// Rotate +// +// ___ .rotation() +// | +// | 1 param : $degree +// +// ___ .rotate() +// | +// | Tentative de compatibilté étendue (fonctionne uniquement pour 0, 90, 180 ou 270 degrés). +// | +// | 1 param : $degree +// | 3 params : $degree / $originX / $originY +// +@mixin rotation($deg:5deg) +{ + // -webkit-transform: rotate($deg); + // -moz-transform: rotate($deg); + transform: rotate($deg); +} +@mixin rotate($value, $originX:0%, $originY:0%, $unit:'deg') +{ + // filter: progid:DXImageTransform.Microsoft.BasicImage(rotation = (360 / $value) + 1); //0, 1, 2, or 3 rotate 0, 90, 180 or 270 + // -webkit-transform: rotate($value $unit); // $value $unit rather than $value$unit remove the spaces between value and unit. + // -moz-transform: rotate($value $unit); + // -ms-transform: rotate($value $unit); + // -o-transform: rotate($value $unit); + transform: rotate($value $unit); + // -webkit-transform-origin:$originX $originY; + // -moz-transform-origin:$originX $originY; + // -ms-transform-origin:$originX $originY; + // -o-transform-origin:$originX $originY; + transform-origin:$originX $originY; +} + +// Scale +@mixin scale($ratio:1.5) +{ + // -webkit-transform:scale($ratio); + // -moz-transform:scale($ratio); + transform:scale($ratio); +} + +// Translate +@mixin translate($x:0, $y:0) +{ + // -webkit-transform: translate($x, $y); + // -moz-transform: translate($x, $y); + // -ms-transform: translate($x, $y); + // -o-transform: translate($x, $y); + transform: translate($x, $y); +} + +// Columns +@mixin columns($colwidth: 250px, $colcount: 0, $colgap: 50px, $columnRuleColor: #EEE, $columnRuleStyle: solid, $columnRuleWidth: 1px) +{ + // -webkit-column-width : $colwidth; + // -webkit-column-count : $colcount; + // -webkit-column-gap : $colgap; + // -webkit-column-rule-color: $columnRuleColor; + // -webkit-column-rule-style: $columnRuleStyle; + // -webkit-column-rule-width: $columnRuleWidth; + // -moz-column-width : $colwidth; + // -moz-column-count : $colcount; + // -moz-column-gap : $colgap; + // -moz-column-rule-color: $columnRuleColor; + // -moz-column-rule-style: $columnRuleStyle; + // -moz-column-rule-width: $columnRuleWidth; + column-width : $colwidth; + column-count : $colcount; + column-gap : $colgap; + column-rule-color: $columnRuleColor; + column-rule-style: $columnRuleStyle; + column-rule-width: $columnRuleWidth; +} + +@mixin edit-link($bc:#CCFF2F,$c:#333) +{ + @include dib; + background-color:$bc; + border:1px solid; + border-color:darken(desaturate($bc, 35%),15%) darken(desaturate($bc, 35%),15%) darken(desaturate($bc, 35%),20%); + @include rounded; + color: $c; + cursor: pointer; + @include font-size(.8em,1em); + font-weight: normal; + padding: 0.25em 0.75em; + margin-top:.5em; + + &:hover{background-color:darken($bc, 20%);} + &:active{ + text-shadow: 0 1px 0 lighten($bc,5%); + background-color:darken($bc, 20%); + //.inset-shadow(0,0,2px,darken($bc,60)); + } +} + +@mixin loader($fc:#000,$bc:#ccc,$h:8px,$radius:0px) +{ + // Safari/chrome + &::-webkit-progress-bar{background-color:$bc;@include rounded($radius);} + &::-webkit-progress-value{background-color:$fc;@include rounded($radius);} + // Firefox + &{background-color:$bc;@include rounded($radius);height:$h;} + &::-moz-progress-bar{background-color:$fc;@include rounded($radius);} +} + +// = +// = +// = +// = +// = +// ===== RETINA ========================================================================================================== + +// retina.less +// A helper mixin for applying high-resolution background images (http://www.retinajs.com) +// @mixin at2x($path, $w: auto, $h: auto) { +// background-image: url($path); +// $at2x_path: $path.split('.').slice(0, $path.split('.').length - 1).join(".") + "$2x" + "." + $path.split('.')[$path.split('.').length - 1]`; + +// $media all and (-webkit-min-device-pixel-ratio : 1.5) { +// background-image: url($at2x_path); +// background-size: $w $h; +// } +// } change this diff --git a/sites/all/themes/gui/materiobasetheme/scss/layout.scss b/sites/all/themes/gui/materiobasetheme/scss/layout.scss new file mode 100644 index 00000000..f298bd23 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/layout.scss @@ -0,0 +1,186 @@ + +/** RESPONSIVE break points */ + +// @max-480 : ~"screen and (max-width: 479px)"; +// @min-480 : ~"screen and (min-width: 480px)"; + +// @480-768 : ~"screen and (min-width: 480px) and (max-width: 767px)"; + +// @max-768 : ~"screen and (max-width: 767px)"; +// @min-768 : ~"screen and (min-width: 768px)"; + +// @768-980 : ~"screen and (min-width: 768px) and (max-width: 979px)"; + +// @max-980 : ~"screen and (max-width: 979px)"; +// @min-980 : ~"screen and (min-width: 980px)"; + +// @980-1200 : ~"screen and (min-width: 980px) and (max-width: 1199px)"; + +// @max-1200 : ~"screen and (max-width: 1199px)"; +// @min-1200 : ~"screen and (min-width: 1200px)"; +// change this + +// Here we define the breakpoints which will become the upper border for each media size. +// The function em-calc() calculates the em-value from a px-value. +$small-breakpoint: em-calc(480) !default; +$medium-breakpoint: em-calc(768) !default; +$large-breakpoint: em-calc(980) !default; +$xlarge-breakpoint: em-calc(1200) !default; + +$small-range: (0, $small-breakpoint) !default; /* 0, 480px */ +$medium-range: ($small-breakpoint + em-calc(1), $medium-breakpoint) !default; /* 481px, 768px */ +$large-range: ($medium-breakpoint + em-calc(1), $large-breakpoint) !default; /* 769px, 980px */ +$xlarge-range: ($large-breakpoint + em-calc(1), $xlarge-breakpoint) !default; /* 981px, 1200px */ +$xxlarge-range: ($xlarge-breakpoint + em-calc(1), em-calc(99999999)) !default; /* 1201px, ... */ + +// Media Queries +$screen: "only screen" !default; + +$landscape: "#{$screen} and (orientation: landscape)" !default; +$portrait: "#{$screen} and (orientation: portrait)" !default; + +$small-up: $screen !default; +$small-only: "#{$screen} and (max-width: #{upper-bound($small-range)})" !default; + +$medium-up: "#{$screen} and (min-width:#{lower-bound($medium-range)})" !default; +$medium-only: "#{$screen} and (min-width:#{lower-bound($medium-range)}) and (max-width:#{upper-bound($medium-range)})" !default; + +$large-up: "#{$screen} and (min-width:#{lower-bound($large-range)})" !default; +$large-only: "#{$screen} and (min-width:#{lower-bound($large-range)}) and (max-width:#{upper-bound($large-range)})" !default; + +$xlarge-up: "#{$screen} and (min-width:#{lower-bound($xlarge-range)})" !default; +$xlarge-only: "#{$screen} and (min-width:#{lower-bound($xlarge-range)}) and (max-width:#{upper-bound($xlarge-range)})" !default; + +$xxlarge-up: "#{$screen} and (min-width:#{lower-bound($xxlarge-range)})" !default; +$xxlarge-only: "#{$screen} and (min-width:#{lower-bound($xxlarge-range)}) and (max-width:#{upper-bound($xxlarge-range)})" !default; + +$retina: ( + "#{$screen} and (-webkit-min-device-pixel-ratio: 2)", + "#{$screen} and (min--moz-device-pixel-ratio: 2)", + "#{$screen} and (-o-min-device-pixel-ratio: 2/1)", + "#{$screen} and (min-device-pixel-ratio: 2)", + "#{$screen} and (min-resolution: 192dpi)", + "#{$screen} and (min-resolution: 2dppx)" +); + +*{ + box-sizing: content-box; + &:before, &:after{ + box-sizing: content-box; + } +} + +html, body{ + // position:relative; + // overflow:hidden; + // width:100%; + // height:100%; +} +body{ + overflow-y:scroll; top:0; +} + +h1, h2, h3, h4, h5, h6{ + font-family: inherit; +} + +h1{ + font-weight: bold; +} + +figure { + margin: 0; +} + +input[type="checkbox"] + label{ + margin:0; +} + +p{ + font-family: inherit; + font-weight: inherit; + font-size: inherit; + line-height: inherit; + margin-bottom: inherit; +} + +a{ + font-size: inherit; +} + +.column, .columns { + padding: inherit; + float: inherit; +} + +$rootminwidth : 320px; + +/** NIVEAU 0 */ +#root{ + min-width:$rootminwidth; + + .ie8 &{min-width:1024px;} +} + +/** NIVEAU 1 */ +#container{ + margin:0 auto; position:relative; + @include transition(padding-top 0.5s ease-out); // change this +} + +/** NIVEAU 2 */ +@mixin padded(){ $p:2%; width:100%-2*$p; padding-left:$p; padding-right:$p; } + +$header-z-index:1000; +#header{ + @media #{$medium-up}{ + position:fixed; top:0; margin:0 auto; @include bgc(#fff); min-width:$rootminwidth*0.97; + } //change this + z-index:$header-z-index; + @include padded; + .editmenu-enabled &{ @include mt(30px); } + .admin-menu &{ @include mt(35px); } +} + +#utilities{ + @media #{$medium-up}{ + html.no-touch &{ + position:fixed; top:0; margin:0 auto; min-width:$rootminwidth*0.97; + @include mt(60px); + } + html.no-touch .editmenu-enabled &{ @include mt(80px); } + html.no-touch .admin-menu &{ @include mt(85px); } + } + @media #{$small-only}{ + >.region{@include pt(5px); @include pb(5px);} + } //change this + z-index:999; + @include bgc(#fff); + @include padded; + +} + +#main{@include padded; overflow-x:hidden;} + +#footer{@include padded;} + +/** NIVEAU 3 */ + +.js #content-top{} + +// .js #content{ overflow-y:hidden; } + + +// #container, #header-blocks, #center{.transition(width, 0.5s, ease-out); } + +// .footer-block .region, .header-block{ @include inlineblock();} change this + +/** NIVEAU 4 */ +#center{ padding:5px; } + +/** Z-INDEX */ +#block-feedback-form{z-index:1001;} +#admin-menu{z-index:1002;} +#admin-toolbar{z-index:1003;} + + diff --git a/sites/all/themes/gui/materiobasetheme/scss/misc.scss b/sites/all/themes/gui/materiobasetheme/scss/misc.scss new file mode 100644 index 00000000..456db9e0 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/misc.scss @@ -0,0 +1,240 @@ + +//** Messages. */ +@mixin messages(){ + padding: 9px; + margin: 0.5em 0 0; + color: #3a87ad;//#360; + background: #d9edf7;//#cf8; + border: 1px solid #bce8f1;//#be7; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + @include fs12; + + &.warning { + color: #c09853;//#840; + background-color: #fcf8e3;//#fe6; + border-color: #fbeed5;//#ed5; + } + + &.error { + color: #b94a48;//#fff; + background-color: #f2dede;//#e63; + border-color: #eed3d7;//#d52; + } + + + &.status { + color: #468847;//#036; + background-color: #dff0d8;//#bdf; + border-color:#d6e9c6;//#ace; + @include fs14; + } + +} + +div.messages { @include messages();} + +.messages-label{display:none;} + +#better-messages-wrapper{ + background-color: rgba(255,255,255,0.7); padding :10px; @include rounded(5px); @include drop-shadow(0, 0, 6px, 0.4); + #better-messages-default{ + + div.messages{ + @include messages(); margin:0 0 10px 0; + } + .footer{ + border:none; padding:0; margin:0; + a.message-close{ + background: #fff url('../img/close.png') no-repeat center center; + width:15px; height:15px; @include rounded(3px); display:block; + + } + } + } +} + +/** Tab navigation */ + +// .primary(){ +// font:13px/1.231 sans-serif; *font-size:small; +// border-collapse: collapse; +// padding: 0 0 0 1em; /* LTR */ +// white-space: nowrap; +// list-style: none; +// margin: 0; +// height: auto; +// line-height: normal; +// border-bottom: 0 solid #bbb; + +// li{ +// display: inline; + +// a { +// background-color: #ddd; +// border-color: #bbb; +// border-width: 1px; +// border-style: solid solid none solid; +// height: auto; +// margin-right: 0.5em; /* LTR */ +// padding: 0 1em; +// text-decoration: none; +// -moz-border-radius: 5px; +// -webkit-border-radius: 5px; +// border-radius: 5px; + +// &:hover{ +// background-color: #eee; +// border-color: #ccc; +// border-bottom-color: #eee; +// } + +// } + +// &.active a { +// background-color: #fff; +// border: 1px solid #bbb; +// border-bottom: #fff 1px solid; +// } +// } +// } + +// ul.primary, .views-admin-links ul { .primary(); } + +// .secondary(){ +// border-bottom: 1px solid #bbb; +// padding: 0.5em 1em; +// margin: 5px; +// li { +// display: inline; +// padding: 0 1em; +// border-right: 1px solid #ccc; /* LTR */ + +// a { +// padding: 0; +// text-decoration: none; + +// &.active { +// border-bottom: 4px solid #999; +// } +// } +// } +// } + +// ul.secondary { .secondary(); } + + +/** +* icons +*/ +@mixin icon($w, $x, $y, $color : #fff){ + background-image: url('../img/sprite.png'); + width:$w; height:$w; line-height:$w; + background-position: $x $y ; + background-color: $color; +} +// [class^="icon-materio-viewmode-"], [class*=" icon-materio-viewmode-"]{ +// .icon(20px); +// } + +// i.icon-materio-viewmode-cardsmall{ +// @include icon(20px, -42px, 0); +// &.active{@include icon(21px, 0, 0); } +// &:hover:not(.active){@include icon(21px, -21px, 0); } +// } +// i.icon-materio-viewmode-cardmedium{ +// @include icon(21px, -42px, -21px); +// &.active{@include icon(21px, 0, -21px); } +// &:hover:not(.active){@include icon(21px, -21px, -21px); } +// } +// i.icon-materio-viewmode-cardbig{ +// @include icon(21px, -42px, -42px); +// &.active{@include icon(21px, 0, -42px); } +// &:hover:not(.active){@include icon(21px, -21px, -42px); } +// } +// i.icon-materio-viewmode-cardfull{ +// @include icon(21px, -42px, -63px); +// &.active{@include icon(21px, 0, -63px); } +// &:hover:not(.active){@include icon(21px, -21px, -63px); } +// } + +// i.icon-materio-search{ +// @include icon(21px, -63px, -63px); +// } + +// i.icon-materio-folder{ +// @include icon(21px, -84px, -63px); +// } + + +/** +* figures +*/ + +figure{ + figcaption{ + display:none; + } + .blank{ position:absolute; top:0; left:0; width:100%; height:100%;} +} + + + +/* ==|== print styles ======================================================= + Print styles. + Inlined to avoid required HTTP connection: h5bp.com/r + ========================================================================== */ + +// @media print { +// * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */ +// 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: ""; } /* Don't show links for images, or javascript/internal links */ +// 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; } +// } + + + +a:focus { + outline: 0; +} + +/* + * Improves readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + + +/** COLORBOX */ +#colorbox{ + @include rounded; @include drop-shadow(0, 0, 5px, 0.4); + #cboxLoadedContent{ background-color: #fff; } +} + + +/** embed player */ +.embedded-video{ + .player iframe{ + @media #{$medium-only}{ + max-width:100%; + height:auto; + }// change this + } +} + +/** devel */ +.not-logged-in{ + #tasks ul.tabs.primary{display:none;} +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/less/fonts.less b/sites/all/themes/gui/materiobasetheme/scss/old-less/fonts.less similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/fonts.less rename to sites/all/themes/gui/materiobasetheme/scss/old-less/fonts.less diff --git a/sites/all/themes/gui/materiobasetheme/components/gui/gui.less b/sites/all/themes/gui/materiobasetheme/scss/old-less/gui.less similarity index 100% rename from sites/all/themes/gui/materiobasetheme/components/gui/gui.less rename to sites/all/themes/gui/materiobasetheme/scss/old-less/gui.less diff --git a/sites/all/themes/gui/materiobasetheme/less/layout.less b/sites/all/themes/gui/materiobasetheme/scss/old-less/layout.less similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/layout.less rename to sites/all/themes/gui/materiobasetheme/scss/old-less/layout.less diff --git a/sites/all/themes/gui/materiobasetheme/less/misc.less b/sites/all/themes/gui/materiobasetheme/scss/old-less/misc.less similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/misc.less rename to sites/all/themes/gui/materiobasetheme/scss/old-less/misc.less diff --git a/sites/all/themes/gui/materiobasetheme/less/misc.less.orig b/sites/all/themes/gui/materiobasetheme/scss/old-less/misc.less.orig similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/misc.less.orig rename to sites/all/themes/gui/materiobasetheme/scss/old-less/misc.less.orig diff --git a/sites/all/themes/gui/materiobasetheme/scss/old-less/styles.css b/sites/all/themes/gui/materiobasetheme/scss/old-less/styles.css new file mode 100644 index 00000000..0652daa7 --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/old-less/styles.css @@ -0,0 +1,37 @@ +/* +Error: Inconsistent indentation: 5 spaces were used for indentation, but the rest of the document was indented using 2 spaces. + on line 180 of /home/sarahgarcin/Sites/materio/base_d7/sites/all/themes/gui/materiobasetheme/less/styles.sass + +175: .14; +176: margin-top:-3px; +177: margin-left:-0.5em; +178: .900; +179: @media @max-980{display:none;} +180: .ie8 &{position: absolute; margin-top:22px;} +181: } +182: } +183: +184: #header-blocks{ +185: //position:absolute; right:0; bottom:0; + +Backtrace: +/home/sarahgarcin/Sites/materio/base_d7/sites/all/themes/gui/materiobasetheme/less/styles.sass:180 +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:473:in `block in tabulate' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:431:in `each' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:431:in `each_with_index' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:431:in `tabulate' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:396:in `_to_tree' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:368:in `_render_with_sourcemap' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/engine.rb:285:in `render_with_sourcemap' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/exec/sass_scss.rb:396:in `run' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/exec/sass_scss.rb:62:in `process_result' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/exec/base.rb:52:in `parse' +/opt/koala/rubygems/gems/sass-3.4.9/lib/sass/exec/base.rb:19:in `parse!' +/opt/koala/rubygems/gems/sass-3.4.9/bin/sass:13:in `' +/opt/koala/bin/sass:18:in `load' +/opt/koala/bin/sass:18:in `
                        ' +*/ +body:before { + white-space: pre; + font-family: monospace; + content: "Error: Inconsistent indentation: 5 spaces were used for indentation, but the rest of the document was indented using 2 spaces.\A on line 180 of /home/sarahgarcin/Sites/materio/base_d7/sites/all/themes/gui/materiobasetheme/less/styles.sass\A \A 175: .14;\A 176: margin-top:-3px;\A 177: margin-left:-0.5em;\A 178: .900;\A 179: @media @max-980{display:none;}\A 180: .ie8 &{position: absolute; margin-top:22px;}\A 181: }\A 182: }\A 183: \A 184: #header-blocks{\A 185: //position:absolute; right:0; bottom:0;"; } diff --git a/sites/all/themes/gui/materiobasetheme/less/styles.less b/sites/all/themes/gui/materiobasetheme/scss/old-less/styles.less similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/styles.less rename to sites/all/themes/gui/materiobasetheme/scss/old-less/styles.less diff --git a/sites/all/themes/gui/materiobasetheme/less/styles.less.orig b/sites/all/themes/gui/materiobasetheme/scss/old-less/styles.less.orig similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/styles.less.orig rename to sites/all/themes/gui/materiobasetheme/scss/old-less/styles.less.orig diff --git a/sites/all/themes/gui/materiobasetheme/less/wysiwyg.less b/sites/all/themes/gui/materiobasetheme/scss/old-less/wysiwyg.less similarity index 100% rename from sites/all/themes/gui/materiobasetheme/less/wysiwyg.less rename to sites/all/themes/gui/materiobasetheme/scss/old-less/wysiwyg.less diff --git a/sites/all/themes/gui/materiobasetheme/scss/styles.scss b/sites/all/themes/gui/materiobasetheme/scss/styles.scss new file mode 100644 index 00000000..e0ca321b --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/styles.scss @@ -0,0 +1,2682 @@ +/** + * Primary Drupal Styles + * Author: g-u-i.net + */ +@charset "UTF-8"; + +@import "../bower_components/foundation/scss/normalize.scss"; + +@import "../bower_components/foundation/scss/foundation/functions"; + +// $row-width: rem-calc(1250); +// $total-columns: 12; +// $column-gutter: rem-calc(20); + +//@import "../bower_components/foundation/scss/foundation/settings"; // this is not working, causing an error on compilation +@import "../bower_components/foundation/scss/foundation/components/global"; +@import "../bower_components/foundation/scss/foundation/components/type"; +@import "../bower_components/foundation/scss/foundation/components/clearing"; +@import "../bower_components/foundation/scss/foundation/components/inline-lists"; +@import "../bower_components/foundation/scss/foundation/components/buttons"; +@import "../bower_components/foundation/scss/foundation/components/button-groups"; +// @import "../bower_components/foundation/scss/foundation/components/grid"; +// @import "../bower_components/foundation/scss/foundation/components/top-bar"; +// @import "../bower_components/foundation/scss/foundation/components/block-grid"; + + +@import "gui.scss"; + +@import "fonts.scss"; +@import "layout.scss"; +@import "../fonts/icon/foundation-icons.css"; + +#root{ + // background: #fff url('../img/beta-2.png') no-repeat 0px 0px; +} + +@mixin shadowBtn(){ + @include drop-shadow(0, 0, 5px, 0.4); + @include transition-simply-prefix(box-shadow 0.3s ease-out); + &:hover, &:focus{ + @include drop-shadow(0, 0, 5px, 0.7); + } + &:active{ + @include transition-simply-prefix(box-shadow 0s ease-out); + @include drop-shadow(0, 0, 5px, 0.4); + } +} + +@mixin shadowTextBtnWhite(){ + cursor:pointer; + text-shadow:0 0 2px rgba(255, 255, 255, 0.2); + @include transition-simply-prefix(text-shadow 0.3s ease-out); + &:hover, &:focus{ + text-shadow:0 0 3px rgba(255, 255, 255, 1); + } + &:active{ + @include transition-simply-prefix(text-shadow 0s ease-out); + text-shadow:0 0 2px rgba(255, 255, 255, 0.2); + } +} + +@mixin shadowTextBtnBlack(){ + cursor:pointer; + text-shadow:0 0 2px rgba(0, 0, 0, 0.2); + @include transition-simply-prefix(text-shadow 0.2s ease-out); + &:hover, &:focus{ + text-shadow:0 0 2px rgba(0, 0, 0, 0.8); + } + &:active{ + @include transition-simply-prefix(text-shadow 0s ease-out); + text-shadow:0 0 2px rgba(0, 0, 0, 0.2); + } +} + +@mixin horihoverswitch(){ + position:relative; z-index:1; background-color:#fff; + figure{ + position: absolute; top:0; left:0; + &:first-child{ position:relative; z-index:1; } + } +} + +@mixin layer(){ + position:absolute; width:100%; height:100%; top:0; left:0; +} + +.op-visible{ + visibility:visible; + .csstransitions &{ + opacity:1; + @include transition-simply-prefix(opacity 0.3s ease-out); + } +} +.op-hidden{ + visibility:hidden; + >*{ + margin-top:-100000px; + } + .csstransition &{ + opacity:0; + @include transition-simply-prefix(visibility 0s 0.3s); // opacity 0.3s ease-out); change this + >*{ + @include transition-simply-prefix(margin-top 0s 0.3s); + } + } +} + +@mixin op-visible(){ + visibility:visible; + .csstransitions &{ + opacity:1; + @include transition-simply-prefix(opacity 0.3s ease-out); + } +} // change this + +@mixin op-hidden(){ + visibility:hidden; + >*{ + margin-top:-100000px; + } + .csstransition &{ + opacity:0; + @include transition-simply-prefix(visibility 0s 0.3s); // opacity 0.3s ease-out); change this + >*{ + @include transition-simply-prefix(margin-top 0s 0.3s); + } + } +} // change this + +@mixin bouton(){ + @include fs16(); + font-weight:bold; + padding: 0.1em 0.3em 0.2em; @include rounded(0.3em); + border: 2px solid #ccc; background-color:#ccc; color:#4D4D4D; // blanc/bleu + @include shadowTextBtnWhite(); + text-align: center; text-decoration: none; + +} + +@mixin bouton-bleu(){ + @include bouton(); + @include shadowTextBtnBlack(); + border-color:#69CDCF; background-color:#69CDCF; color:#fff; +} + +@mixin bouton-vert(){ + @include bouton(); + @include shadowTextBtnBlack(); + border-color:#E6DE1C; background-color:#E6DE1C; color:#fff; +} + +/** colomnized() */ +@mixin columnized($padding){ + padding : $padding; + &.columnized{ + padding: 0; + .column>*{padding:$padding;} + @include transition-simply-prefix(margin-left 0.3s ease-out); + .column-switcher{ + display:inline-block; @include rounded(3px); color:#fff; background-color: #3e3e3e; vertical-align:middle; + @include fs700(); @include fs22; + padding: 0.05em 0.15em 0.2em 0.2em; line-height:0.5; + @include regular; + &.prev-column{cursor: w-resize;} + &.next-column{cursor: e-resize;} + } + } +} +@mixin bgcWhite(){ + background-color: rgba(255, 255, 255, 0.8); + text-shadow:0 0 4px rgba(255, 255, 255, 0.4); + @include transition-simply-prefix(background-color 0.2s ease-out); // text-shadow 0.2s ease-out); //change this +} +@mixin bgcBlack(){ + background-color: rgba(0, 0, 0, 0.7); + text-shadow:0 0 4px rgba(0, 0, 0, 0.4); + @include transition-simply-prefix(background-color 0.2s ease-out); // text-shadow 0.2s ease-out); //change this +} + +// .bgcWhiteParentHover(){ +// background-color: rgba(255, 255, 255, 0.2); +// text-shadow:0 0 4px rgba(255, 255, 255, 0.9); +// &:hover{ +// @include bgcWhite(); +// } +// } + +$headerheight:45px; +$headerpaddingtop:5px; +$headerpaddingbottom:10px; +$headerouterheight:$headerheight+$headerpaddingtop+$headerpaddingbottom; + +/* + __ ___________ ____ __________ + / / / / ____/ | / __ \/ ____/ __ \ + / /_/ / __/ / /| | / / / / __/ / /_/ / + / __ / /___/ ___ |/ /_/ / /___/ _, _/ +/_/ /_/_____/_/ |_/_____/_____/_/ |_| + +*/ +#header{ + padding-top:$headerpaddingtop; + padding-bottom:$headerpaddingbottom; + height:$headerheight; + // position:relative; + // @include drop-shadow(0, 3px, 2px, 0.4); margin-bottom:5px; + + a{&, &:active, &:visited{color:#000;}} + + // .logo, #header-blocks{@include inlineblock(); vertical-align:middle;} + + .logo{ + //width:210px; //padding-left:5px; //margin-left:50px; + @include inlineblock(); + h1{ + margin:0; + @include fs36; + @include inlineblock(); vertical-align: baseline; position:relative; line-height:1.25; + a:hover{text-decoration: none ;} + } + span.beta{ + line-height:1; letter-spacing: 0.1em; + color:rgb(0,0,122); + @include fs12; + position:absolute; left:0; padding-left:0; margin-left:0; + } + span.slogan{ + @include fs14; + margin-top:-3px; + margin-left:-0.5em; + @include fs900; + @media #{$small-only} {display:none;} + .ie8 &{position: absolute; margin-top:22px;} + } + } + + #header-blocks{ + //position:absolute; right:0; bottom:0; + padding-top:17px; + float:right; + text-align:right; + text-transform: capitalize; + + >.region{ + @include inlineblock();vertical-align:middle; + padding-right:1em; margin-right:1em; + @media #{$small-only}{ padding-right:0.3em; margin-right:0.3em; }//change this + border-right: 1px solid #707070; + &:last-child{border:none; padding: 0; margin: 0;} + } + + .block{ + @include inlineblock(); vertical-align:middle; + h2{ + @include fs12; + margin: 0; line-height: 1.2; font-weight: normal; } + &:not(:last-child){ + padding-right:0.8em; + @media #{$xlarge-only}{ padding-right:0.3em; } //change this + } + } + + #block-user-login{ + @include fs12; + text-align:left; position:relative; + h2{ + padding-right:5px; + // .icon-user; + i{ vertical-align: text-bottom; margin: 0 2px 2px 0;} + } + form#user-login-form{ + position:absolute; overflow:hidden; right:0; margin: 0; + height:0; + @include transition-simply-prefix(height 0.3s ease-out); + &>div{ + padding: 5px; margin: 5px; + background-color: #e6e6e6; @include rounded(5px); @include drop-shadow(0, 0, 5px, 0.2); + } + .form-item{margin: 0; padding-bottom:5px;} + label,input{ + margin: 0; + @include fs10; + } + // label{width:30%;} + input.form-text{width:150px;} + + #edit-actions{ + margin: 5px 0; padding: 0; background-color:transparent; text-align: right; + input.form-submit{ + @include fs12; + padding: 10px; + } + } + div.newpass a{ + @include fs12; + color:#686868; + } + + // div.register a{ + // display:block; padding: 10px 5px; background-color: #ccf718; font-weight:bold; text-align: center; .14; + // } + } + + html.no-touch &:hover, &.hovered{ + form#user-login-form{ + height:300px; + &>div{ + } + z-index:$header-z-index; + } + } + + @media #{$small-only}{ + span.login{display:none;} + } //change this + } + + #block-materio-flag-materio-flag-mylists-nav{ + position:relative; + h2{ + margin: 0; + @include fs12; + line-height:1.1;}// @include fs700; + // h2, section.mylists{@include inlineblock();} + section.mylists{ + position:absolute; z-index:20; background-color: rgba(255, 255, 255, 0.9); min-width:100%; margin: 0 0 0 -5px; + @include rounded(3px); @include drop-shadow(-2px, 2px, 5px, 0.2); + .ie8 &{background:#FFF;} + ul{margin: 0;} + li{ + list-style: none; + @include fs12; @include fs700; + padding: 0 10px; text-align: left; width:200px; + height:0; overflow:hidden; @include transition-simply-prefix(height 0.3s ease-out); + // height:15px; padding: 3px 10px; + + a, span.preview{white-space:nowrap; cursor:pointer;} + a.open-list{max-width:150px;} + span.count{ + @include fs300; + padding: 0 5px;} + span.preview, a.edit-list{padding-right:5px;} + + .no-touch &:not(:hover) { + span.preview, a.edit-list{@include op-hidden;} + } + + } + } + + &:hover{ + section.mylists{ + padding-bottom:5px; + li{height:15px; padding: 3px 10px; } + } + } + + h2{ + i{ vertical-align: text-bottom; margin: 0 2px 2px 0;} + // @media #{$xlarge-up}{ i{display: none;} } + @media #{$small-only}{ span.menu-title{display:none;} } + } + } + + #block-ajax-register-ajax-register-block{ + @include fs12; + text-transform: lowercase; + } + + #block-logintoboggan-logintoboggan-logged-in{ + @include fs12; + i{ + vertical-align: text-bottom; + margin: 0 5px 1px 0; + } + a span.account{text-transform: lowercase;} + a span.logout{display:none; margin-left:5px; } + .fi-power{margin: 0 0.5em 0 0.5em;} + @media #{$large-only}{ .fi-power{display: none;} } + @media #{$medium-up}{ a span.logout{display:none;} } + + @media #{$small-only}{a span.account{display:none;}} //change this + } + + #headerblock-right{ + .block{ + @include inlineblock; vertical-align: middle; padding:0; + &:first-child{padding: 0;} + } + } + + #block-locale-language{ + margin-left:1em; + // border-left: 1px solid #707070; + ul,li{ + margin:0;padding:0;list-style-type: none; + @include fs12; + line-height: 1; + &.active{display:none;} + } + .ie8 &{padding-top:5px;} + } + + // #block-menu-menu-about{ + // position:relative; + // ul.menu{ + // position:absolute; padding: 0 5px 5px 5px; margin: 0; width:100px; display:none; right:0; text-align: right; + // background-color: #e6e6e6; @include rounded(5px); + // li{ + // height:0; + // overflow:hidden; list-style-type: none; + // .transition-simply-prefix(height 0.3s ease-out"); + // a{ + // display:block; width:100%; padding:2px 5px; .12; + // } + // } + // } + + // &:hover{ + // ul.menu{ + // display:block; + // li{height:25px;} + // } + // } + // } + + #block-menu-menu-top-menu{ + h2{ + .ie8 &{display:none;} + i{ vertical-align: text-bottom; margin: 0 0 2px 0;} + } + + ul.menu, li{ + @include fs12; + list-style: none; + .ie8 &{display: inline;} + } + // menu en ligne + @media #{$medium-up}{ + h2{display:none;} + ul.menu, li{ + @include inlineblock; vertical-align: middle; + padding: 0; margin: 0; + } + a{padding: 0 0.5em 0 0;} + } //change this + + //menu deroulant + @media #{$small-only}{ + position:relative; + h2 .menu-title{display: none;} + .menu-wrapper{ + position:absolute; width:150px; display:none; right:0; padding-top:5px; + ul.menu{ + background-color: #e6e6e6; + @include rounded(5px); padding: 0 5px 5px 5px; margin: 0; text-align: right; + li{ + height:0; + overflow:hidden; + @include transition-simply-prefix(height 0.3s ease-out); + a{ + display:block; width:100%; padding:2px 5px; @include fs12; + } + } + } + } + html.no-touch &:hover, &.hovered{ + z-index:$header-z-index; + .menu-wrapper{ + display:block; + ul.menu{li{height:25px;}} + } + } + } //change this + } + + #block-materio-user-old-database-link{ + a{ + @include fs12; + ;} + } + + #block-materio-user-front-link{ + a{ + @include fs12; + } + i{ vertical-align: text-bottom; margin: 0 2px 2px 0;} + span.text{ display:none; } + } + } +} + +#utilities{ + margin-top:$headerouterheight; + .not-logged-in &{ overflow:hidden; } + + &.closed{ + .tabs, .node-didactique{display:none;} height:0; + } + @media #{$small-only}{ + margin-top:0; + } +} +/* + __ _ __ ___ __ __ __ + / /_ (_)___ _/ /_ / (_)___ _/ /_ / /____ ____/ / + / __ \/ / __ `/ __ \/ / / __ `/ __ \/ __/ _ \/ __ / + / / / / / /_/ / / / / / / /_/ / / / / /_/ __/ /_/ / +/_/ /_/_/\__, /_/ /_/_/_/\__, /_/ /_/\__/\___/\__,_/ + /____/ /____/ +*/ +#highlighted{ + + @include rounded(5px); + @include drop-shadow(0, 0, 6px, 0.6); + padding: 0.5em; + position:relative; + + @media #{$medium-up}{ + margin: 20px 0 6px; + + .block{ @include inlineblock; vertical-align: top; } + .block-materio-didactique{ + width:65%; + .side{ + @include inlineblock(); vertical-align: top; + position:relative; //height:100%; + } + .group-sideleft{ width:65%; } + .group-sideright{ width:30%; } + + .field-name-title-field{@include fs24;} + // .field-name-field-visuel{} + + .node.emvideo{ + .group-sideleft, .group-sideright{ width:47%; } + .group-sideleft{margin-right:2%;} + // .field-name-field-visuel{display:none;} + } + + } + #block-materio-user-user-register{ + width:30%; padding:5px; height:290px; + } + } + + @media #{$small-up}{ + .block-materio-didactique{ + .side{@include inlineblock(); vertical-align: top;} + } + } + + @media #{$small-only}{ + margin:10px 0 6px; + .block-materio-didactique{ + .group-sideleft, .group-sideright{ width:100%; } + + .node-didactique{ + .field-name-title-field{ + @include fs20; + font-weight:normal!important; + // &:before{content:"- ";} + &:after{ + content:"\a0\f10b"; + 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; + font-size: 16px; + } + } + } + + html.js & .node-didactique{ + height:auto; + height:30px; overflow: hidden; + &.opened{height:auto;} + } + } + } + + // @media #{$small-only}{ + // .block-materio-didactique{ + // // .pt(150px); + // .group-sideleft{ width:50%; } + // .group-sideright{ width:50%; } + // } + // } //change this + + .oldie &{ + .block{@include inlineblock;} + } + + .block-materio-didactique{ + // .ie8 &{max-width:850px; border: 1px solid #C6C6C6;} + .node-didactique{ + @include fs14; + background-color:#fff; //padding: 5px; + margin: 0 auto; + // .ie8 &{max-width:750px; margin-left:15px; margin-top:10px;} + + .side{position:relative;} + + .field-name-title-field{ + @include fs900; + @include italic; + padding:5px 0; + } + .field-name-field-visuel{ + text-align: center; + figure, img{display:inline;} + } + &.emvideo{ + .field-name-field-visuel{display:none;} + } + // .field-name-field-emvideo{ + // a{ + // display:block; width:100%; height:100%; + // background: transparent url(../img/vimeo-play-btn.png) no-repeat center center; + // &:hover{background-image: url(../img/vimeo-play-btn-hover.png);} + // img{max-width:100%;} + .ie8 &{.player{display:none;}} + // } + // } + + } + + html.js &{ + position:relative; + overflow: hidden; + .slides{ + height:270px; margin: 0; position:relative; width:100%; overflow:hidden; + .node-didactique{ @include layer(); } + .field-name-title-field{ height:30px;} + .group-column-wrapper{ + height:240px; + .side{ height:100%; } + .field-name-field-emvideo{ + $r:0.5625; + @media #{$small-only} { $w:290px; width:$w; height:$w*$r; } + @media #{$medium-only} { $w:216px; width:$w; height:$w*$r; } + @media #{$large-only} { $w:216px; width:$w; height:$w*$r; } + @media #{$xlarge-only} { $w:280px; width:$w; height:$w*$r; } + @media #{$xxlarge-only} { $w:340px; width:$w; height:$w*$r; }//change this + *{height:100%; width:100%;} + } + } + } + .tabs{ + height:30px; margin: 0; text-align:left; + >*{ + @include inlineblock(); vertical-align: top ; padding:5px 10px; @include fs12; cursor:pointer; color:#bfbfbf; + &:hover, &:focus, &.active{color:#3f3f3f;} + } + } + } + } +} + +/* + __ __ __ _ __ + / /_ / /___ _____/ /__ ________ ____ _(_)____/ /____ _____ + / __ \/ / __ \/ ___/ //_/ / ___/ _ \/ __ `/ / ___/ __/ _ \/ ___/ + / /_/ / / /_/ / /__/ ,< / / / __/ /_/ / (__ ) /_/ __/ / +/_.___/_/\____/\___/_/|_| /_/ \___/\__, /_/____/\__/\___/_/ + /____/ +*/ +#block-materio-user-user-register, #block-materio-user-user-createaccount{ + min-height:120px; padding: 5px; + background: transparent url('../img/register-block.png') no-repeat 100% 90%; + .ie8 &{max-width:250px; float:right; background-image:none;} + + + h2, h3{@include fs900; @include italic; padding:5px 0; margin: 0; line-height: 1; background-color:#fff; @include inlineblock(); min-width:50%;} + h2{@include fs24;} h3{@include fs16;} + + form{margin: 0; background-color: rgba(255, 255, 255, 0.7); padding-bottom:5px; @include inlineblock(); } + + .form-item, .form-wrapper{ + margin: 0; @include inlineblock; vertical-align: middle; position:relative; + } + + #edit-account{margin-right:5px;} + + input.form-text{ @include fs12; @include rounded(5px); margin-bottom:4px;.ie8 &{margin-right:5px;}} + .form-item-mail input.form-text, .form-item-name input.form-text{ width:11em;} + .form-item-pass input.form-text{ width:7em;} + + #edit-mail-check{ + position:absolute; bottom:100%; z-index:9999; background-image: none; + height:auto; //width:90%; + padding: 5px; @include rounded(5px); margin-bottom:10px; + @include fs11; background-color: #fff; + @include drop-shadow(0, 0, 5px, 0.6); + @include transition-simply-prefix(bottom 0.1s ease-out); + + &.error{ + background-color: #f3968d; + // border: 2px solid #f30002; + color:#fff; + } + + &.ok{ display:none; } + } + + .form-submit{ + //border: 2px solid #69CDCF; background-color:#69CDCF; color:#FF7400; // orange/bleu + @include fs16; padding: 0.1em 0.6em 0.2em; @include rounded(0.3em); + font-weight:bold; + margin-bottom:4px; + } + + .form-item-termsofservices, #edit-field-newsletter{ + margin-bottom:0; display:block; line-height: 1; + &>*{ @include inlineblock; vertical-align: middle; margin: 0; } + label{ @include fs10; background-color: #fff; @include rounded(3px); } + } + + #user-register-form{ + .form-submit{ + border: 2px solid #69CDCF; background-color:#69CDCF; color:#fff; // blanc/bleu + @include shadowTextBtnBlack(); + &[disabled]{ + background-color:#ddd; border: 2px solid #ddd; + } + } + + } + #user-login{ + .form-submit{ + border: 2px solid #E6DE1C; background-color:#E6DE1C; color:#fff; // noire/jaune + @include shadowTextBtnBlack(); + } + } + + #edit-simplenews{ + padding-top:0.5em; + .fieldset-description{ + @include fs12; + } + .form-checkboxes{ + .form-item{ + display:block; + label{@include fs12;} + } + } + } + + a.join{ + // @include inlineblock(); + display:block; + // margin: 10px 0; + width:5em; + @include fs16; padding: 0.1em 0.3em 0.2em; @include rounded(0.3em); + font-weight:bold; + border: 2px solid #69CDCF; background-color:#69CDCF; color:#fff; // blanc/bleu + @include shadowTextBtnBlack(); + text-align: center; text-decoration: none; + } + + @media #{$small-only}{ + background-position: 160% 50%; + .form-item-mail input.form-text, .form-item-name input.form-text{ width:7em;} + min-height:60px; padding: 15px 0; + // #user-login, >h3:first-child, >h3 span{ display:none; } + } + + .message-error{ + color:#b94a48; @include fs12; + } + + .modal-content &{ + padding: 0.5em 0.5em 5em 0.5em; + + width:400px; + background-color: #fff; + padding:5px; + @include rounded(5px); + + #user-register-form{ + // hide honeypot field, because drupal.attachbehavior() doesn't work + div.homepage-textfield{display:none;} + + .description{ + @include fs12; + } + } + + } +} + +/* + __ __ __ + _________ ____ / /____ ____ / /_ / /_____ ____ + / ___/ __ \/ __ \/ __/ _ \/ __ \/ __/_____/ __/ __ \/ __ \ +/ /__/ /_/ / / / / /_/ __/ / / / /_/_____/ /_/ /_/ / /_/ / +\___/\____/_/ /_/\__/\___/_/ /_/\__/ \__/\____/ .___/ + /_/ +*/ +#content-top{ + // padding-left:50px; + + /* + + ___ _ _ _ _ + | _| |___ ___ ___| |_|___| |_ + | _| | .'| . |___| | |_ -| _| + |_| |_|__,|_ | |_|_|___|_| + |___| + */ + #block-materio-flag-materio-flag-mybookmarks, #block-materio-flag-materio-flag-mylists{ + // padding:5px 0; + @include fs10; color:#666666; @include fs300; + .ie8 &{margin-top:40px;} + + h2{ + @include fs12; @include fs700; margin: 0; line-height:1.2; color:#000; + a.open-list, i.fi-xicon-remove{ + @include inlineblock(); cursor:pointer; color:#000; + opacity:0; @include transition-simply-prefix(opacity 0.1s ease-out); + } + } + + &:hover{ + a.open-list, i.fi-x{ + opacity:1; + } + } + + span.listname[name=bookmarks]{ + cursor:pointer; + } + + section.bookmarks{ + height:0; overflow:hidden; + &.active{ + height:auto; + } + article.node.vm-bookmark{ + overflow:hidden; + } + } + + .mylists{ + // .transition-simply-prefix(height 0.3s ease-out); + section{ + h2, .flaged{ + height:0; overflow: hidden; + } + &.active{ + h2, .flaged{ + height:auto; + } + } + } + } + + // .js & .mybookmarks{display:none;} + + } +} + +#tool-bar{ + // margin-left:50px; + position:relative; + .inner-content{ + padding-top:10px; padding-bottom:10px; + &>*{ + @include inlineblock(); + vertical-align: middle ; + // height:35px; + // margin: 5px; + } + @media #{$small-only}{ + padding:0; h1{line-height:0.5;} + } + } + // text-align:right; + // >*{ text-align: left ;} + + // .block{ + // .inlineblock(); + // margin:0 0 0 20px; + // } + + .oldie &{background-color:#B1ADAD; padding:0 10px;} + + .btn-group{ + padding: 0; @include rounded(3px); @include bgc(#fff); margin:4px; + @include shadowBtn(); + } + + #block-materio-page-title-materio-page-title{ + // .ie8 &{margin-top:40px;} + margin: 0 10px 0 0; + h1{ margin: 0; + @include fs24; text-transform: capitalize; @include fs300; line-height:1;} + i{ vertical-align: middle ; margin-right:5px;} + i.icon-materio-folder{margin-bottom:2px;} + a.edit-list{ + @include op-hidden; + i{ margin: 0 0 0 5px;} + } + &:hover{ + a.edit-list{ @include op-visible; } + } + + @media #{$medium-only}{ + display:block; + } + } + + #block-materio-search-api-materio-search-api-viewmode{ + .viewmode-link{ + @include inlineblock(); margin:0 2px; + &.active{cursor:normal;} + .inner{display:none;@include fs10; } + } + @media #{$small-only}{ + .viewmode-link{ display:block; &:not(.active){display:none;} } + } + @media #{$small-only}{ + html.no-touch &:hover, &.hovered{ .viewmode-link.viewmode-cardsmall, .viewmode-link.viewmode-cardmedium{display:block;} } + + } + @media #{$small-only}{ + html.no-touch &:hover, &.hovered{ .viewmode-link.viewmode-cardsmall, .viewmode-link.viewmode-cardmedium, .viewmode-link.viewmode-cardbig{display:block;} } + } + } + + #block-materio-search-api-materio-search-api-search{ + // @include inlineblock(); vertical-align: middle ; + // position:absolute; top:10px; right:0; + float:right; + >.inner{ + @include inlineblock(); margin:0 0 0 10px; + padding: 3px 10px; background-color:#fff; @include rounded(3px); + @include shadowBtn(); text-align: right; + } + } + + #materio-search-api-search-form{ + text-align: right; + @include inlineblock(); margin: 0; + + .form-item, input, .form-checkboxes{@include inlineblock(); margin:0; vertical-align:middle; padding:0;} + + .form-checkboxes{ + padding: 3px; @include fs12; + .form-item{ + margin:0 5px; + label{@include fs10;} + } + } + + input#edit-searchfield{ + border: 1px solid #ccc; @include rounded(20px); + padding: 4px 5px; height:25px; + @include fs12; line-height:1; + background-position: 100% 5px; + width:105%; + &.throbbing { background-position: 100% -15px; } + } + + #edit-searchfield-autocomplete-aria-live{ + .oldie &{ + background-color:#1a1a1a; + } + }; + + input#edit-create{ padding: 3px; } + + &.loading{ + background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; + input#edit-create{ visibility: hidden; } + } + + @media #{$small-only}{ + input#edit-searchfield{width:16em;} + #edit-bundles-filter{display:none;} + } + } + +} + +#center{ + background-color: #e6e6e6; @include rounded(10px); + .node-type-page &{ background-color:#fff; } + .ie8 &{height:100%; margin-top:20px;} + +} + +#content{ + // background-color: #f3f3f3; + // @include rounded(5px); + @include transition-simply-prefix(height 0.3s ease-out); + &.faded{ + opacity:0.5; + @include transition-simply-prefix(opacity 0.3s ease-out); + } + + .materiobase-results, .materiobase-actuality, .materio-flags-list{ + padding:0 0 30px 0; margin:0 0 20px 0; + + &.loading{ + background-image: url('../img/ajax-loader.gif'); + background-position: center bottom; + background-repeat: no-repeat; + } + + p.search-performance, p.flaglist-infos, p.actualities-infos{ + @include fs12; @include fs500; margin: 0; + padding:10px 0 5px 15px; + } + // p.search-performance{.role-7 & {@include fs12;}} + + .search-results, .actuality-items, .flaglist-items{ + font-size:0; + >*{font-size:16px;} + text-align:center; + >*{text-align:left;} + + } + + } + + ul.pager{ + padding: 1em 0; text-align: left; + .ie8 &{position:absolute; left:37px; bottom: 35px;} + + li{margin:0; @include inlineblock(); vertical-align: middle;} + + .pager-current, a{color:#000;@include fs12; } + .pager-current{@include fs900; @include fs14;.ie8 &{background:#fff; padding:0.3em 1em 0.3em 1em; margin-top:0.05em; border: 1px solid #333333;}} + .pager-first, .pager-previous, .pager-next, .pager-last{ a{ @include fs24; @include fs300; } } + + // html.js & {display:none;} + } + + .node-type-page &{ + // padding-left:15px; + } +} + +/** #content-bottom */ +#content-bottom{ + padding-top:10px; +} + +/* + _________ ____ ____ _____ + / ____/ | / __ \/ __ \/ ___/ + / / / /| | / /_/ / / / /\__ \ +/ /___/ ___ |/ _, _/ /_/ /___/ / +\____/_/ |_/_/ |_/_____//____/ + +*/ + +$cardbookmark_w:50px; +$cardbookmark_h:70px; + +$cardsmall_w:100px; +$cardsmall_h:140px; + +$cardmedium_w:210px; +$cardmedium_h:295px; + +$cardbig_w:425px; +$cardbig_h:610px; + +$cardfull_w:850px; +$cardfull_h:610px; + +@mixin card-box($w, $h){ + width:$w; height:$h; + @include inlineblock(); position:relative; margin:7px; + + //z-index:10; // pourquoi ce z-index ? + @include rounded(5px); background-color: #FFF; + @include drop-shadow(0, 0, 5px, 0.2); + @include transition-simply-prefix(box-shadow 0.3s ease-out); // opacity 0.3s ease-out); //change this commas +} + +@mixin card($w, $h){ + @include card-box($w, $h); + + >div.side{ + @include rounded(5px); overflow: hidden; + } + + // .no-touch &:hover{ @include drop-shadow(0, 0, 5px, 0.7); } + &.focused{ @include drop-shadow(0, 0, 7px, 0.9); } + + &.just-added{ opacity:0; } + + &.associated{ + @include transition-simply-prefix(margin 0.3s ease-out); + &.just-added{margin-left:-$w;margin-right:$w;} + + .modal-content &{ + position:absolute; + top:0; left:0; + z-index:999; + } + + } + + &.removed{ + @include transition-simply-prefix(width 0.3s ease-out); + width:0; padding-left:0; padding-right:0; margin-right:0; margin-left:0; overflow:hidden; + } + // TODO: how to show that a card was flaged ? + // .search-results &.flaged, .actuality-items &.flaged{ + // border: 2px solid rgba(0,0,0, 0.3); margin: 3px; + // @include drop-shadow(0, 0, 3px, 0.6); + // } + + nav.nav{ + position:absolute; top:0; right:0; z-index:11; + padding: 5px 0; + @include border-radius(0, 5px, 0, 3px); + @include fs11; + + // colors + // background-color: rgba(10, 10, 10, 0.9); color:#fff; + // a{color:#fff;} + //ul{background-color: rgba(10, 10, 10, 0.9);} + background-color: rgba(255, 255, 255, 0.9); color:#000; + + a{color:#000;} + ul{background-color: rgba(255, 255, 255, 0.9);} + span.op{@include fs900; @include fs14;} + + ul{padding: 0; margin: 0;} + + section{ + position:relative; + + &>i{margin: 0 5px; &:hover{cursor:pointer;}} + } + + ul{ + position:absolute; right:0; top:0; margin-right:22px; min-width:80px; padding: 0; display:block; + @include rounded(3px); @include drop-shadow(-2px, 2px, 5px, 0.2); + // padding: 5px 10px; + li{ + padding: 0; margin: 0; line-height:1; display:block; + height:0; overflow:hidden; @include transition-simply-prefix(height 0.2s ease-out); + // height:15px; overflow:hidden; + a{ display:block;} + } + + &.flag-lists-entity-links{ + width:160px; + font-size:0; + >*{font-size:11px;} + // &.loading{ + // a{visibility: hidden;} + // background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; + // } + li{ + @include inlineblock(); min-width:48%; max-width:98%; padding-left:2px; + a{ + color:#a6a6a6; @include transition-simply-prefix(color 0.2s ease-out); + &:hover, &.unflag-action{ + color:#000; text-decoration: none; + } + } + &.flag-lists-create{ + display:block; width:100%; + >*{ margin-top:1px; padding-top:1px; border-top:1px solid #e6e6e6;} + a{color:#000;} + } + &.loading{ + a{visibility: hidden;} + background: transparent url('../img/ajax-loader.gif') no-repeat 98% center; + } + } + } + .ie8 &{background:#FFF;} + } + + + section:hover{ + ul{ + padding: 5px 5px; + li{height:17px;} + + &.flag-lists-entity-links{ + // width:160px; + } + } + + } + + // display:none; + } + // &:hover{nav.nav{display:block;}} + + div.workflow{ + position:absolute; top:0; left:0; z-index:11; + padding: 5px; + @include border-radius(5px, 0, 3px, 0); + @include fs11; vertical-align: top; + background-color: rgba(255, 255, 255, 0.9); color:#000; + span{padding: 3px 0 0 4px; @include inlineblock();} + } + + .field-name-field-description .upgrade{ + @include fs12; + padding-top:4em;margin-top:-4.5em; + // .bgc(rgba(255,255,255,0.6)); + background : linear-gradient(to bottom, rgba(255,255,255,0) 0%, #fff 4em); + position:relative; + } + + .side.oops p, .side .upgrade p{ + padding: 10px; @include fs12; + a{ + display:block; margin: 10px 0; + @include fs18; padding: 0.1em 0.6em 0.2em; @include rounded(0.3em); + font-weight:bold; + border: 2px solid #69CDCF; background-color:#69CDCF; color:#fff; // blanc/bleu + @include shadowTextBtnBlack(); + text-align: center; text-decoration: none; + } + } +}// .card() + +/* + _ _ ___ + ___ ___ ___ _| | ___ ___ ___ ___ ___| |_ ___ ___ ___| _|___ ___ _____ ___ ___ ___ ___ +| _| .'| _| . | |_ -| -_| .'| _| _| | | . | -_| _| _| . | _| | .'| | _| -_| +|___|__,|_| |___| |___|___|__,|_| |___|_|_| | _|___|_| |_| |___|_| |_|_|_|__,|_|_|___|___| + |_| +*/ +article.search-performance{ + .inner{ + padding: 1em; + } + + p{@include fs14;} + + a.button{ + display:block; margin: 10px auto; max-width:10em; + @include fs18; padding: 0.1em 0.6em 0.2em; @include rounded(0.3em); + font-weight:bold; + border: 2px solid #69CDCF; background-color:#69CDCF; color:#fff; // blanc/bleu + @include shadowTextBtnBlack(); + text-align: center; text-decoration: none; + } + &.view-mode-cardsmall{ + @include card-box(327px, 140px); + } + &.view-mode-cardmedium{ + @include card-box(210px, 295px); + .inner{ + padding: 4em 1em 0; + } + } + &.view-mode-cardbig{ + @include card-box(425px, 115px); + display:block; margin:0 auto; + } + &.view-mode-cardfull{ + @include card-box(850px, 115px); + .inner{ + padding: 1em 212px; + } + display:block; margin:0 auto; + } +} + +/* + + _____ _____ _____ ____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| | _ | __ | \ | __ | | | | | | _ | __ | | | __| +| --| | -| | | | __ -| | | | | -| | | | | -| -|__ | +|_____|__|__|__|__|____/ |_____|_____|_____|__|__|_|_|_|__|__|__|__|__|__|_____| + +*/ +article.node-materiau.vm-bookmark, article.node-breve.vm-bookmark{ + @include card($cardbookmark_w, $cardbookmark_h); + margin:3px; + .group-header{ + display:none; + } + + .group-images{ @include horihoverswitch(); } + // nav.nav{top:0;} + div.workflow{display:none;} +} + +/* + + _____ _____ _____ ____ _____ _____ _____ __ __ +| | _ | __ | \ | __| | _ | | | | +| --| | -| | | |__ | | | | | |__| |__ +|_____|__|__|__|__|____/ |_____|_|_|_|__|__|_____|_____| + +*/ +article.node-materiau.vm-cardsmall, article.node-breve.vm-cardsmall{ + @include card($cardsmall_w, $cardsmall_h); //width:100px; height:140px; + .group-header{ + display:none; position:absolute; + @include fs14; @include fs500; + .field-name-title-field{@include fs700;} + .field-name-field-reference-materio, .field-name-field-localisation{ @include inlineblock(); @include fs12; } + .field-name-field-localisation{ float:right; } + } + .group-images{ @include horihoverswitch(); @include rounded(5px); overflow:hidden; } + + nav.nav{ + ul.flag-lists-entity-links{ + width:75px; min-width:75px; + li{width:98%;} + } + .ie8 &{background: #FFF} + } + .no-touch &:not(.focused) nav.nav{@include op-hidden;} + + .no-touch &:not(.focused) div.workflow{@include op-hidden;} +} + +/* + + _____ _____ _____ __ _____ _____ _____ _____ _____ _____ __ __ _____ _____ _____ ____ +|_ _| | | ||_ _| | _ | | __| | _ | | | | | | _ | __ | \ + | | | | | | | |__| | |- -| __| |__ | | | | | |__| |__ | --| | -| | | + |_| |_____|_____|_____|_| |_____|__| |_____|_|_|_|__|__|_____|_____| |_____|__|__|__|__|____/ + +*/ +#tooltip{ + .group-header.smallcard{ + @include fs14; @include fs500; + .field-name-title-field{@include fs700;} + .field-name-field-reference-materio, .field-name-field-localisation{ @include inlineblock(); @include fs12; } + .field-name-field-localisation{ float:right; } + } +} + +/* + + _____ _____ _____ ____ _____ _____ ____ _____ _____ _____ +| | _ | __ | \ | | __| \| | | | | +| --| | -| | | | | | | __| | |- -| | | | | | +|_____|__|__|__|__|____/ |_|_|_|_____|____/|_____|_____|_|_|_| + +*/ +article.node-materiau.vm-cardmedium, article.node-breve.vm-cardmedium{ + @include card($cardmedium_w, $cardmedium_h); //width:210px; height:295px; + + .side{ + @include layer(); background-color:#fff; cursor:pointer; + &:nth-child(2){z-index:1;} + } + + .group-header{ + position:absolute; bottom:0; z-index:2; + width:190px; padding:5px 15px 5px 5px; min-height:55px; + @include fs20; @include fs300; line-height:1; + .field-name-title-field{@include fs700;} + .field-name-field-nature-titre{@include fs14;} + @include bgcWhite(); + + @include border-radius(0, 0, 4px, 4px); overflow: hidden; + + .field-name-field-reference-materio, .field-name-field-localisation, .field-name-field-authored-on{ @include inlineblock(); @include fs12; vertical-align: bottom; width:48%;} + .field-name-field-localisation{ text-align: right; } + .ie8 &{background:#fff; font-color:#000; line-height: 1em; padding: 10px;} + + } + + &.node-breve .group-header{ + // @include fs20; @include fs300; line-height:1.1; + color:#fff; @include bgcBlack(); + .field-name-field-authored-on{ @include fs12; @include fs500; } + .ie8 &{background:#000; font-size:15px; line-height: 1.2em;} + } + + // &:hover .group-header{ + // .bgcWhiteParentHover(); + // } + + .group-images{ @include horihoverswitch(); } + + // side 2 + .field-name-field-description, .field-name-body{ + @include fs12; @include fs300; overflow: hidden; z-index:-1; @include columnized(5px); + .column>*{padding-right:25px;} + } + + // side 3 + .column-wrapper{ + @include columnized(5px); + } + .field-name-field-company-fab, .field-name-field-company-distrib{ + @include fs12; padding:5px; @include fs300; + .field-label{ @include fs10; text-transform: lowercase; margin:0;} + .field-name-field-tode-company{@include fs14;} + // span.print-link{display:none;} + } + + .field-name-field-materiau-ref, .field-name-field-source, .field-name-field-attachments{ + + @include fs12; padding: 5px; @include fs300; a{color:#000;} + } + .field-label{@include fs900; margin: 1em 0 0.5em;} + // nav + .no-touch &:not(.focused) nav.nav{@include op-hidden;} + + .no-touch &:not(.focused) div.workflow{@include op-hidden;} + + .ie8 &{nav.nav{background: #FFF}} +} + +/* + _____ _____ _____ ____ _____ _____ _____ +| | _ | __ | \ | __ | | __| +| --| | -| | | | __ -|- -| | | +|_____|__|__|__|__|____/ |_____|_____|_____| + +*/ +article.node-materiau.vm-cardbig, article.node-breve.vm-cardbig{ + @include card($cardbig_w, $cardbig_h); //width:425px; height:610px; + + .side{ + @include layer(); background-color:#fff; height:270px; top:340px; cursor:pointer; + &:nth-child(2){z-index:1;} + } + + .group-side1{position:relative; @include border-radius(5px, 5px, 0, 0); overflow:hidden;} + + .group-header{ + position:absolute; bottom:0; z-index:2; + width:405px; padding:10px; + @include fs20; @include fs300; line-height: 1.1; + .field-name-title-field{@include fs700;} + .field-name-field-nature-titre{@include fs14;} + @include bgcWhite(); + .field-name-field-reference-materio, .field-name-field-localisation, .field-name-field-authored-on { @include inlineblock(); @include fs12; vertical-align: bottom; width:48%;} + .field-name-field-localisation{ text-align: right; } + .ie8 &{background:#fff; font-color:#000; line-height: 1em; padding: 20px; border-bottom: 1px solid #C6C6C6;} + } + // &:hover .group-header{ .bgcWhiteParentHover(); } + + &.node-breve .group-header{ + color:#fff; @include bgcBlack(); + .field-name-field-authored-on{ @include fs12; @include fs500; } + .ie8 &{background:#000; font-color:#fff; line-height: 1em; padding: 20px;} + } + + .group-images{ @include horihoverswitch(); height:auto;} + + // side 2 + .field-name-field-description, .field-name-body{ + @include fs12; @include fs300; @include columnized(10px); + } + // side 3 + .column-wrapper{ + @include columnized(10px); + } + // side 4 + .field-name-field-company-fab, .field-name-field-company-distrib{ + @include fs12; padding:10px; @include fs300; + .field-label{ @include fs10; text-transform: lowercase; float: none; } + .field-name-field-tode-company{@include fs14;} + } + + + .field-name-field-materiau-ref, .field-name-field-source, .field-name-field-attachments{ + @include fs12; padding: 10px; @include fs300; a{color:#000;} + } + .field-label{@include fs900; margin: 0 0 0.5em;} + + // nav + // nav.nav{ margin: 5px; } + .ie8 &{nav.nav{background: #FFF}} + + // upgarde and full + .side.oops p, .side .upgrade p{ + padding: 3em; + a{ + border: 2px solid #eee; background-color:#eee; color:#fff; + @include transition-simply-prefix(border 0.3s ease-out); + @include transition-simply-prefix(background-color 0.3s ease-out); + } + } + &:hover .side.oops p, &:hover .side .upgrade p{ + a{ + border: 2px solid #69CDCF; background-color:#69CDCF; + } + } +} + +/* + _____ _____ _____ ____ _____ _____ __ __ +| | _ | __ | \ | __| | | | | | +| --| | -| | | | __| | | |__| |__ +|_____|__|__|__|__|____/ |__| |_____|_____|_____| + +*/ +article.node-materiau.vm-cardfull, article.node-breve.vm-cardfull{ + @include card($cardfull_w, $cardfull_h); //width:875px; height:610px; + nav.nav{top:0;} + + + font-size:0px; + >*{@include fs16;} + + >.side{@include inlineblock(); width:50%; + &.group-side-left{ + @include border-radius(5px, 0, 0, 5px); + } + &.group-side-right{ + @include border-radius(0, 5px, 5px, 0); + } + + } + + .group-images{ @include horihoverswitch(); } + + .group-header{ + @include fs20; @include fs300; padding:10px; + .field-name-title-field{@include fs700;} + .field-name-field-reference-materio, .field-name-field-localisation, .field-name-field-authored-on{ @include inlineblock(); @include fs12; padding-right:15px;} + // .field-name-field-localisation{ float:right; } + } + + &.node-breve .group-header{ + color:#fff; @include bgcBlack(); + .field-name-field-authored-on{ @include fs500; } + } + + + .field-name-field-description, .field-name-body{ + @include fs12; @include fs300; padding: 10px; + } + + .field-name-field-attachments{ + padding: 10px; + @include fs12; + } + + // side 4 + .field-name-field-company-fab, .field-name-field-company-distrib{ + @include fs12; padding:10px; @include fs300; + @include inlineblock(); width:40%; + .field-item{margin-top:1em;} + .field-label{ @include fs10; text-transform: lowercase; float: none; } + .field-name-field-tode-company{@include fs14;} + } + + .field-name-field-materiau-ref, .field-name-field-source, .field-name-field-attachments{ + @include fs12; padding: 10px; @include fs300; a{color:#000;} + } + .field-label{@include fs900; margin: 0 0 0.5em;} + + // nav + nav.nav{ margin: 5px; } + + div.workflow{ margin: 5px; } + + // upgarde and full + .side.oops p, .side .upgrade p{ + padding: 3em; + a{ + border: 2px solid #eee; background-color:#eee; color:#fff; + @include transition-simply-prefix(border 0.3s ease-out); + @include transition-simply-prefix(background-color 0.3s ease-out); + } + } + &:hover .side.oops p, &:hover .side .upgrade p{ + a{ + border: 2px solid #69CDCF; background-color:#69CDCF; + } + } +} + +@import "misc.scss"; + + +/* + ___ __ ____________ __________ __ _______ __ __________________ + / | / / / /_ __/ __ \/ ____/ __ \/ |/ / __ \/ / / ____/_ __/ ____/ + / /| |/ / / / / / / / / / / / / / / /|_/ / /_/ / / / __/ / / / __/ + / ___ / /_/ / / / / /_/ / /___/ /_/ / / / / ____/ /___/ /___ / / / /___ +/_/ |_\____/ /_/ \____/\____/\____/_/ /_/_/ /_____/_____/ /_/ /_____/ + +*/ +#autocomplete{ + border: 0; @include rounded(3px); + background-color: rgba(0,0,0,0.6); + text-align: left; + margin-left: 2px; + .oldie &{background-color:#545454;} + li{ + color:#FFF; background-color: transparent; + &.selected{background-color: rgba(0,0,0,0.8);} + div{padding:0.1em 5px;} @include fs12; + } + +} + +/** +* the old modal api (balck bg) for contextual forms (create new flag list) +*/ +@mixin mat_modal(){ + background-color: rgba(0,0,0,0.7); + @include rounded(5px); border: 0; + *{color:#fff; background-color:transparent;} + @include fs12; + form{ + background-color:transparent; color:#fff; border: 0px; + + .form-actions{ + background-color:transparent; margin: 0; padding: 0; border: 0; + } + input.form-text, textarea, div.grippie{background-color:#fff; color:#000; border: 0;} + + .form-actions{ text-align: right ;} + input.form-submit{ + @include button($button-tny); + //@include btn-mini; color:#000; //change this btn bootstrap -> foundation + &[name="create"]{ + @include button($button-tny, $success-color); + } + &[name="save"]{ + @include button($button-tny, $success-color); + } + &[name="delete"]{ + @include button($button-tny, $alert-color); + } + &[name="cancel"]{ + @include button($button-tny, $secondary-color); + } + } + } +} + +#modal{ + @include mat_modal(); + >*{padding: 10px;} + .form-item-flag-lists-name{ + // label, input{.inlineblock();} + // label{width:38%;} + input{width:95%;} + + } + .actions{ + text-align: right; + } +} + +/** +* the new modal api used for preview and register modal +*/ +.modal-wrapper { + &:before { + content: ""; + display: inline-block; + height: 100%; + margin-right: -0.25em; + vertical-align: middle; + } + &:after, &:before { + -moz-box-sizing: border-box; + } + + // background-color: rgba(0, 0, 0, 0.4); + bottom: 0; + // display: none; + left: 0; + position: fixed; + right: 0; + text-align: center; + top: 0; + white-space: nowrap; + z-index: 99998; + + .modal-bg{ + background-color: #000; + position:absolute; + top:0; left:0; + width:100%; height:100%; + opacity:0.5; + } + + .modal-content{ + position:relative; + display: inline-block; + margin: 0 auto; + text-align: left; + vertical-align: middle; + white-space: normal; + // width: 400px; + min-height:200px; + // background-color: #fff; + } +} + +/* + _______ __________ ____ __ __ ____ ___ _ __ + / / ___// ____/ __ \/ __ \/ / / / / __ \/ | / | / / + __ / /\__ \/ / / /_/ / / / / / / / / /_/ / /| | / |/ / +/ /_/ /___/ / /___/ _, _/ /_/ / /___/ /___/ ____/ ___ |/ /| / +\____//____/\____/_/ |_|\____/_____/_____/_/ /_/ |_/_/ |_/ + +*/ +.jspContainer{ + .jspVerticalBar{ + background-color: transparent; + width:5px; //margin-right:-5px; + + .jspTrack{ + background-color: transparent; + .jspDrag{ + background-color: #ccc; + @include rounded(3px); + } + } + } +} + +/* + __________ ____ __ ______________ + /_ __/ __ \/ __ \/ / /_ __/ _/ __ \ + / / / / / / / / / / / / / // /_/ / + / / / /_/ / /_/ / /___/ / _/ // ____/ +/_/ \____/\____/_____/_/ /___/_/ + +*/ +#tooltip{ + position:absolute; z-index:999; max-width:180px; background-color: rgba(255, 255, 255, 1); padding: 5px; @include rounded(3px); + @include fs12; @include fs500; + @include drop-shadow(0, 0, 5px, 0.4); + &.op-visible{ + @include transition-simply-prefix(opacity 0.1s ease-out); // top 0.1s linear); // left 0.1s linear, + // change this transition foundation + } +} + +/* + ______________________ ____ ___ ________ __ + / ____/ ____/ ____/ __ \/ __ )/ | / ____/ //_/ + / /_ / __/ / __/ / / / / __ / /| |/ / / ,< + / __/ / /___/ /___/ /_/ / /_/ / ___ / /___/ /| | +/_/ /_____/_____/_____/_____/_/ |_\____/_/ |_| + +*/ +#block-feedback-form{ + + @media #{$medium-only}{ bottom:5px; left:5px; right:auto; } + + h2{ + line-height:1.2; @include fs14; margin: 0; + .title{display:none;} + } + + #feedback-form-toggle{ + padding: 2px 3px; @include rounded(3px); background-color:#ff7600; color:#fff; + line-height:2; @include fs900; + } + .content{ + @include mat_modal(); + .ie8 &{background:#000;} + } + + #feedback-status-message{background-color:#fff; padding: 5px;} +} + +/* + _________ _____ __ __ __ _________ ____ _____ + /_ __/ | / ___// //_/ _/_/ /_ __/ | / __ ) ___/ + / / / /| | \__ \/ ,< _/_/ / / / /| | / __ \__ \ + / / / ___ |___/ / /| | _/_/ / / / ___ |/ /_/ /__/ / +/_/ /_/ |_/____/_/ |_| /_/ /_/ /_/ |_/_____/____/ + +*/ +@mixin tabs-primary(){ + a{ + @include fs12; + padding: 5px 10px; + background-color:#e6e6e6; + &.active, &:hover{background-color:#e6e6e6;} + @include rounded(3px); + } +} +@mixin tabs-secondary(){ + @include fs10; + padding: 0.5em 1em; +} +#tasks{ + ul.tabs{ + @include inlineblock(); + border:0 solid #fff; + padding: 0; margin: 0; + li{padding: 0; margin: 2px 5px; border:0 solid #fff;} + a{ + border:0; color:#7f7f7f; + &.active, &:hover{font-weight: 900; color:#000;} + } + + &.primary{ + @include tabs-primary(); + } + + &.secondary{ + @include tabs-secondary(); + } + } +} + + +/* + ______________ _____________________ + / ___/_ __/ |/_ __/ _/ ____/ ___/ + \__ \ / / / /| | / / / // / \__ \ + ___/ // / / ___ |/ / _/ // /___ ___/ / +/____//_/ /_/ |_/_/ /___/\____//____/ + +*/ + +/* + _ _ ___ ___ ___ +| | |_ -| -_| _| +|___|___|___|_| + +*/ +.page-user, .page-user-edit, .page-user-password, .page-user-reset, .page-toboggan{ + #main{ background: #fff url('../img/user-page-bg.gif') no-repeat bottom right; } + + .messages{ width:800px; margin:0 auto; } + + &.role-6 #tasks .tabs.primary{display:none;} + &.role-6 #tasks .tabs.secondary{@include tabs-primary();} + + #content .inner-content >*{ + width:800px; margin:0 auto; padding-top:1em; @include fs14; + + fieldset{ + margin-bottom:1em; + } + + legend{ + @include fs16; margin:0; padding:10px 0 5px 0; line-height:1; border:0 solid #fff; + a{color:#000;} + } + + .form-item{ + margin:0 0 0.5em 0; width:100%; + label, input.form-text{ + @include inlineblock(); vertical-align:middle; + } + label{margin-right:1em; min-width:6em;} + input.form-text{ + padding:2px 4px; + } + } + .form-wrapper{ + &>.form-item{margin:0 0 2em 0;} + } + + .form-type-password-confirm, .form-type-new-password-confirm{ + label{width:9em;} + .password-parent{width:auto;} + .password-strength, .password-confirm{ + width:15em; margin-top:0; + } + } + + .form-type-checkbox{ + input{margin:0;} + label{@include fs14; margin:0;} + } + + #edit-language{ + .form-item{ + @include inlineblock(); width:auto; margin-right:1em; + input, label{margin:0;} + } + } + + select.form-select{ + width:auto; padding:2px 4px; height:auto; + } + + div.description{ + @include fs11; + } + div.form-actions{ + margin: 0; text-align:right; padding: 1em 0.5em; + } + + // input#edit-submit{@include btn; @include btn-success;} //change this btn foundation + + /* #user-profile-form */ + #edit-profile-adherent-field-first-name, #edit-profile-adherent-field-name, + #edit-profile-adherent-field-private-quality, #edit-profile-adherent-field-service, #edit-profile-adherent-field-employee, + #edit-profile-adherent-field-naf, #edit-profile-adherent-field-siret{ + @include inlineblock(); vertical-align:middle; width:auto; margin: 0 1em 0.5em 0; + div{width:auto; margin: 0; padding: 0;} + // label{margin: 0 0.5em 0 0;} + } + + #edit-profile-adherent-field-name, #edit-profile-adherent-field-service, + #edit-profile-adherent-field-naf, #edit-profile-adherent-field-siret, .form-item-profile-adherent-field-adresse-und-0-locality{ + label{min-width:auto;} + } + + #edit-profile-adherent-field-siret{input{width:8em;}} + #edit-profile-adherent-field-naf{input{width:13em;}} + + #edit-profile-adherent-field-organization{ margin: 2em 0 0 0; input{width:35em;} } + #edit-profile-adherent-field-employee{ + input{width:4em;} + } + + #edit-profile-adherent-field-private-phone{ + .form-phone-number{ + @include inlineblock(); vertical-align:middle; + } + } + + #edit-profile-adherent-field-adresse{ + .street-block{ + input{ width:35em;} + } + .locality-block{ + .form-item{width:auto; margin-right:1em;} + } + } + + #edit-profile-adherent-field-user-website{ + margin: 2em 0 0 0; + .form-item>*{@include inlineblock(); vertical-align: middle; } + input{width:35em} + } + + &.profile{ + h3{border:0 solid transparent;} + .field-label{display:inline;} + } + } +} // user + +/* + _____ _____ _____ _____ __ _____ _____ _____ _ _ _ _____ +| __| | | _ | | | __| | | __| | | | __| +|__ |- -| | | | __| |__| __| | | | __| | | |__ | +|_____|_____|_|_|_|__| |_____|_____|_|___|_____|_____|_____| + +*/ +body.node-type-simplenews{ + #content{ + .inner-content{ + text-align:center; + } + article.node.node-simplenews{ + @include inlineblock(); + max-width:600px; + padding:1em 0; + tbody{ + border-top:0px; + } + } + } +} + +/* + _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| _ | _ | __| __| | | | | |_ _| _ | |_ _| +| __| | | | __| | --| | | | | | | | | | --| | | +|__| |__|__|_____|_____| |_____|_____|_|___| |_| |__|__|_____| |_| + +*/ +.page-node-11175{ + #main{ + // background-color:#fff; + background: #fff url('../img/bg-contact.gif') no-repeat bottom right; + + .field-name-body p{ + @include inlineblock; margin: 15px; + strong{@include fs18;} + } + } +} // contact + +/* + _____ _____ _____ _____ _____ _____ _____ +| _ | __ | | | | | | __| +| __| -|- -| --|- -| | | | | | +|__| |__|__|_____|_____|_____|_|___|_____| + +*/ +body.page-node-11187{ + // #center{ background-color: #fff; } + + @media #{$medium-up}{ + .node-11187{ + .field-name-body{ + div.column, div.column-demi, div.column-full, div.column-auto{ + @include inlineblock; margin: 10px; + } + div.column{ + width:22.4%; + ul.list-text{ min-height:170px;} + } + div.column-demi{ + width:46%; + ul.list-text{ min-height:110px;} + } + div.column-full{ + width:92%; + // ul.list-text{ min-height:110px;} + } + div.column-auto{ + width:auto; + max-width: 98%; + } + } + } + + #block-materio-user-user-register{ + width:600px; margin: 0 auto; + } + } + + @media #{$small-only}{ + // #block-materio-user-user-register{ padding: 25px 0 0 0; #user-login, >h3:first-child, h3 >span{display:block;}} + #block-system-help{text-align: center;} + } + + .node-11187{ + .field-name-body{ + text-align:center; + >*{text-align:left;} + div.column, div.column-demi, div.column-full, div.column-auto{ + position:relative; + @include rounded(5px); @include drop-shadow(0, 0, 6px, 0.5); + .ie8 &{max-width:500px; margin:auto; margin-bottom:15px; border:1px solid #C6C6C6;} + overflow:hidden; + + &>*{ padding: 0 10px;} + img{float:left; padding: 0; } + h2{ text-align: left; margin: 5px 0 0; } + .subtitle{ + padding: 0 0 0 1em; + @include fs18; @include italic; @include bold; line-height:1; + } + ul{margin: 0; padding: 0 15px;} + li{ + list-style: none; @include fs12; + &:before{ + content:"+ "; + @include fs900; + } + } + .get-link{ + margin: 0; @include border-radius(0 0 5px 5px); border: 1px solid #fff; min-height: 92px; + a{ display:block; width:100%; padding: 15px 0; color:#1A1A1A; text-decoration: none; } + } + &.gratos{ .get-link{background-color: #4BA13D; } } + &.flocon{ .get-link{ background-color: #69CDCF; } } + &.etoile { .get-link{ background-color: #D476AE; } } + &.cinqetoiles { .get-link{ background-color: #E6DE1C; } } + &.ecole-de-neige{float: none}; + // &.ecole-de-neige { .list-neige{min-height:80px;} } + } // end div.column div.column-demi + + + div.column{ + h2{ padding:10px 0 0; @include fs24; } + .subtitle{ min-height:3em; } + .get-link{ + padding: 0; + @include fs28; text-align: center; + @include italic; @include fs900; + span{ @include fs20; } + @include shadowTextBtnWhite(); + } + } + div.column-demi{ + h2{ padding:10px 0 0; @include fs24; top:0; } + .subtitle{ min-height:2em; } + ul{ @include fs14; min-height:120px;} + .get-link{ @include fs14; text-align: left; padding: 0 1em; background-color:#ddd; } + } + } + + } // end .node-11187 + + // hide get free account for user already logged-in + // hide get flocon for user already flocon (role-6) + &.logged-in{ + .column.gratos{.get-link{ + cursor:auto!important; + a{display:none!important;} + }} + &.role-6{ + .column.flocon{.get-link{ + cursor:auto!important; + a{display:none!important;} + }} + } + } +} // princing + +/* + _____ ____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| _ | \| | | __| __| | | | | | __| | __ | | +| | | | | __|__ |- -| | | | | | | __| | | -| | | | +|__|__|____/|__|__|_____|_____|_____|_____|_|___| |__| |_____|__|__|_|_|_| + +*/ +.node-11186{ + nav ul.links a.language-link { display:none; } +} + +#webform-client-form-11186{ + @media #{$medium-up}{ + padding: 10px 30px; + #webform-component-column-left--membership-options{ + margin: 10px 0; + label{width:auto;} + } + fieldset{ + @include rounded(5px); border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; padding: 10px; + fieldset{ border: 0 solid #ddd; padding: 0;} + } + legend{margin: 0; @include fs18; @include fs700;} + .form-item{ margin: 0 20px 0 0; } + label{ @include fs12; width:10em; @include inlineblock; vertical-align:middle; margin-right:1em; border-bottom: 1px solid #cccccc; } + .description{ @include fs11; width:25em; @include inlineblock; vertical-align:bottom; margin-left:1em; color:#7f7f7f;} + input.form-text{width:13em;} + } + + @media #{$medium-only}{ + padding: 10px; + #webform-component-column-left--membership-options{ + margin: 0 0 10px 0; + .form-item{width:100%;} + label{ width:75%; } + } + legend{margin: 0; @include fs16; @include fs700;} + .form-item{ margin: 0; float:none;} + label{ @include fs12; width:30%; @include inlineblock; vertical-align:middle; margin-right:0.5em; } + input.form-text, select.form-select{width:60%;} + #webform-component-infos{@include fs14;} + } //change this + + background-color: #e6e6e6; @include rounded(10px); + + .fieldset-wrapper>.form-item{ @include inlineblock; } + + #webform-component-column-left{@include inlineblock; width:25%; border:none;} + #webform-component-column-right{ @include inlineblock; min-width:70%;} + + #webform-component-column-left--membership-options{ + + .form-type-radio{ + border:1px solid #ddd; @include rounded(5px); padding: 10px 5px; margin: 5px 0; + input{ @include inlineblock; vertical-align: middle; margin:0px 5px;} + label{@include fs20; @include fs700; @include inlineblock; vertical-align: middle; margin: 0;} + background-color: #fff; + &:hover{@include drop-shadow(0, 0, 5px, 0.2); } + &.form-item-submitted-column-left-membership-options:nth-child(1){background-color: #69CDCF;} + &.form-item-submitted-column-left-membership-options:nth-child(2){background-color: #D476AE;} + &.form-item-submitted-column-left-membership-options:nth-child(3){background-color: #E6DE1C;} + + &.form-item-submitted-column-left-membership-options:not(.selected){opacity:0.4;} + + } + &>label{width:200px; @include fs18; @include fs700; } + label{ border: 0; } + } + + #webform-component-column-right--me--my-account-email{ + display:block; + } + + #webform-component-column-right--company--administrative-e-mail{ + .description{@include inlineblock;} + } + + #addressfield-wrapper{ margin-top:1em; } + .street-block .form-item{ @include inlineblock; } + + #webform-component-column-right--collaborators{ + margin: 20px 0; overflow:hidden; + fieldset{@include inlineblock; width:33%;} + .form-item{display:block;} + label{width:6em;} + input{width:11em;} + } + + #webform-component-infos{margin: 20px 0;} + + .form-actions{ + padding: 0; margin: 0; + border: 0px; + background-color: transparent; + text-align: left; + .form-submit{ + border: 2px solid #69CDCF; background-color:#69CDCF; color:#fff; + @include fs18; padding: 0.2em 1em 0.3em; @include rounded(0.3em); + font-weight:bold; + margin-bottom:9px; + @include shadowTextBtnBlack(); + } + } + + #webform-component-column-right--news-letters{ + >label{margin: 0; @include fs18; @include fs700; border:none; line-height:40px} + .form-item{ + @include inlineblock(); + label{width:auto} + input, label{margin: 0;} + } + } + + #edit-submitted-terms-of-services{ + margin-bottom:0.5em; + input, label{margin: 0 0.3em 0 0;} + label{ width:auto; } + } +} // adhesion + +/* + _____ _____ _____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ +| | | | | | _ | __ |_ _| | | | | __| | | | | __| | __ | | +| | | --| | --| | -| | | | | |- -| __| | | | | __| | | -| | | | +|_____|_____| |_____|__|__|__|__| |_| \___/|_____|_____|_____| |__| |_____|__|__|_|_|_| + +*/ +#uc-cart-view-form{ + background-color: #e6e6e6; + // @include rounded(10px); + padding: 10px, 30px; + // max-width:$cardfull_w; + display:inline-block; + table{ + width:auto; display:table; + background-color:#fff; + + thead th{border-bottom:none;padding: 1em;} + tbody{ + border-top:none; + tr.even, tr.odd{ + background-color:#fff; + border-bottom:none; + } + td{ + padding: 1em; + // &.price{ padding: 0.5em 1em; } + } + } + } + + .form-type-uc-quantity input{ + width:2em; + } + + .form-actions{ + padding: 0; margin: 0; + border: 0px; + background-color: transparent; + text-align: right; + display:block; width:100%; + + &:before, &:after{ + display:block; + } + .form-submit{ + @include bouton(); + margin-left:1em; + &#edit-checkout--2{ + @include bouton-bleu(); + } + } + } +} + +/* + _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ +| | | | | | | | __| | | | | | |_ _| | __| | __ | | +| | | --| | --| | __| --| -| | | | | | | | __| | | -| | | | +|_____|_____| |_____|__|__|_____|_____|__|__|_____|_____| |_| |__| |_____|__|__|_|_|_| + +*/ +#uc-cart-checkout-form{ + display:inline-block; + + @mixin price-table(){ + @include fs14; + min-width:20em; + td.price{width:4em;}; + } + + background-color: #e6e6e6; + // @include rounded(10px); + padding: 10px, 30px; + + fieldset.form-row{ + // @include rounded(5px); border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; + padding-bottom:20px; margin-bottom:20px; + // fieldset{ border: 0 solid #ddd; padding: 0;} + } + + fieldset.form-column{ + @include inlineblock; max-width:39%; + margin: 15px 1em; + > .fieldset-wrapper > .form-wrapper{ + margin: 10px 0; + } + } + + fieldset.form-column-left{} + + fieldset.form-column-right{ + border-left:1px solid #ccc; + margin-left:2em; padding-left:2em; + // background-color:#fff; @include rounded(5px); + } + + legend{margin: 0; @include fs18; @include fs700; border:none; line-height:2;} + .fieldset-description{@include fs12;} + .fieldset-wrapper{@include fs12;} + .form-item{ margin: 0 20px 0 0; } + + .description{ @include fs11; width:25em; @include inlineblock; vertical-align:bottom; margin-left:1em; color:#7f7f7f;} + + #cart-pane{ + >.fieldset-wrapper{ + @include inlineblock(); + @include rounded(5px); + padding: 10px; + background-color:#fff; + } + + table{ + @include price-table(); + } + + tbody{border:none; } + tr{background-color: transparent; border:none; } + td{ + padding: 0 5px; + vertical-align: bottom; + &.products{ + a{color:inherit; @include fs700;} + width:auto; + ul.product-description{margin: 0; @include fs12;} + li{list-style: none;} + } + } + tr.subtotal{ + td{@include fs16; @include fs700;} + } + } + + #customer-pane{width:35em;} + + #billing-pane{ + label{ @include fs12; width:8em; @include inlineblock; vertical-align:middle; margin-right:1em; border-bottom: 1px solid #cccccc; } + input.form-text{width:13em;} + } + + #coupon_automatic-pane{} + + #coupon-pane{} + + #payment-pane{ + float:right; + + .fieldset-wrapper{ + background-color:#fff; + @include rounded(5px); + padding: 10px; + } + + #line-items-div{ + float:none; border:none; + @include inlineblock(); margin: 10px 0 20px; + table{@include price-table();} + tbody{border:none;} + td{ + padding: 0 5px; + } + tr{ + td{@include fs500;} + + &.line-item-total td{ + @include fs16; @include fs700; text-align: right; + } + } + } + + #edit-panes-payment-payment-method{ + label{width:auto; border-bottom:none;} + .form-item-panes-payment-payment-method{ + border:1px solid #ddd; + border-radius:5px; + margin: 0.5em; padding: 0.5em; + label{font-weight:bold;} + } + } + + #payment-details{ + width:25em; + border-top:none; padding: 0; margin: 0; + } + } + + .form-actions{ + padding: 0; margin: 0; + border: 0px; + background-color: transparent; + text-align: right; + .form-submit{ + @include bouton(); + margin-left:1em; + &#edit-continue{ + @include bouton-bleu(); + } + + } + } +} + +/* + + _____ _____ _____ _____ _____ _____ +| | | | | | _ | __ |_ _| +| | | --| | --| | -| | | +|_____|_____| |_____|__|__|__|__| |_| + +&& + + _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ __ _____ ____ _____ _____ _____ _____ _____ +| | | | | | | | __| | | | | | |_ _| | | | _ | | | | \| _ |_ _| | | | | +| | | --| | --| | __| --| -| | | | | | | | | | | |__|- -| | | | | | |- -| | | | | | +|_____|_____| |_____|__|__|_____|_____|__|__|_____|_____| |_| \___/|__|__|_____|_____|____/|__|__| |_| |_____|_____|_|___| + +*/ +//.page-cart, +.page-cart-checkout-review{ + #content{ + //text-align:center; + &> .inner-content{ + //.card-box($cardfull_w, $cardfull_h); + //text-align:left; + display:inline-block; + padding: 1em; + } + } + + #edit-actions{ + margin: 0; padding: 0; + &:before, &:after{display:block;} + } + + + #review-instructions{ + width:30em; + padding: 1em 0; + // .info; + } + + table.order-review-table{ + border:none; + .pane-title-row{ + border:none; + background-color:transparent; + text-align:left; + @include fs18; + td{ padding: 1em 0 0 0; } + } + table.cart-review{ + tr.odd{ + background-color:transparent; + border:none; + } + } + td.title-col{ + padding: 0; + text-align:left; + } + td.data-col{ + padding: 0; + width:75%; + } + .review-button-row{ + border:none; + background-color:transparent; + + &>td{ + padding: 3em 0 0 0; + } + + form{ + margin: 0 0.5em 0 0; @include inlineblock(); + + } + } + } + + #edit-actions{ + border: 0px; + background-color: transparent; + text-align: right; + } + input.form-submit{ + @include bouton(); + margin-left:1em; + &#edit-submit{ + @include bouton-bleu(); + } + } +} + + +/* + ____ _____ ____ _____ _____ _____ _____ _____ _____ _____ +| \| | \| _ | |_ _| | | | | __| +| | |- -| | | | --| | | |- -| | | | | __| +|____/|_____|____/|__|__|_____| |_| |_____|__ _|_____|_____| + |__| +*/ +#didactique-page{ + + .node-didactique{ + @include rounded(5px); background-color: #FFF; + @include drop-shadow(0, 0, 5px, 0.2); + max-width:850px; + @include fs14; background-color:#fff; //padding: 5px; + margin: 1em auto; padding: 1em; + + .field-name-field-emvideo{ + margin: 1em 0; + } + + .field-name-title-field{ + @include fs24; @include fs900; @include italic; padding:5px 0; + } + .field-name-field-visuel{ + figure, img{max-width:100%;} + } + } + + @media #{$medium-up}{ + .side{ @include inlineblock(); vertical-align: top; } + .group-sideleft{ width:60%; } + .group-sideright{ width:39%; } + } + + // @media #{$small-up}{ + + // } // change this +} + +/* + _ _ _ _____ _____ _ _ _ _____ _____ _____ _____ +| | | | | | | | | | | __| | _ | __ | __| +| | | | | | | | | | | __| | | -| __| +|_____|__|__|_____| |_____|_____| |__|__|__|__|_____| + +*/ +.page-whoweare{ + #tool-bar{ + @media #{$small-only}{ + #block-materio-page-title-materio-page-title{display:none;} + } // chanhe this + } +} + +/* + + _ _ + _____ ___|_|___| |_ ___ ___ ___ ___ ___ ___ +| | .'| | | _| -_| | .'| | _| -_| +|_|_|_|__,|_|_|_|_| |___|_|_|__,|_|_|___|___| + +*/ +.maintenance-page{ + #container, #header{ text-align: center; padding: 0; position:relative;} + #main{background-color: transparent; } + #header h1.site-name{font-size:36px; margin: 0; padding-left:0;} + h2.site-slogan{font-size:16px; @include fs300; margin: 0; line-height:1.1;} +} + +/* + _____ _____ _____ +| __| _ | | +| __| | | | +|__| |__|__|__ _| + |__| +*/ +.page-faq-page #main{ + background: #fff url('../img/bg-faq.png') no-repeat bottom right; +} + +#content .faq-content{ + + .faq-description{ + @include fs12; padding-bottom:2em; + } + + ul.faq-ul-questions-top{ + margin: 0; + li{ + list-style: none; + a{ + @include fs18; @include fs500; + } + } + } + + h3.faq-header{ + @include fs20; @include fs700; line-height:1.2; + margin: 0; + a{color:#000;} + } + + .faq-dl-hide-answer{ + padding: 0; + } + .faq-category-group{ + padding-bottom:1em; + } + .faq-question-answer{ + padding: 0.3em 0 0 0.8em; + .faq-question{ + @include fs16; padding: 0; @include fs500; + a{color:#000;} + } + .faq-answer{ + padding: 0; margin-bottom:2em; + @include fs12; + } + } + + .field-name-body img{ + max-width:50%; + height:auto; + } +} + +// ------ HOME PAGE --------- +#homev2{ + h2{font-size: 47px; font-weight: 700;} + a{color: #000}; + .pane-menu-menu-home-v2{ + .menu li{ + display: inline-block; + a{ + background-color: #4d4d4d; + @include rounded(5px); + padding: 10px 10px; + color: #FFF; + font-size: 18px; + font-weight: 700; + } + } + } + .pane-node { + height:650px; + .pane-content{ + .content{ + background-color: rgba(255,255,255, 0.5); + width: 40%; + @include rounded(5px); + padding: 15px; + } + } + } +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/scss/wysiwyg.scss b/sites/all/themes/gui/materiobasetheme/scss/wysiwyg.scss new file mode 100644 index 00000000..e787c6cd --- /dev/null +++ b/sites/all/themes/gui/materiobasetheme/scss/wysiwyg.scss @@ -0,0 +1,95 @@ +/* LISIBILITY */ +@import "gui.scss"; + + +*{font-size:14px;} +div{border: 1px dashed #D4D4D4;} +p:after, ul:after{content:"¬"; color:red;} + +h1:before, h2:before, h3:before, h4:before, h5:before, h6:before{ + color:blue; font-weight: normal; font-size:10px; vertical-align: super; +} + +h1:before{content:"h1 ";} +h2:before{content:"h2 ";} +h3:before{content:"h3 ";} +h4:before{content:"h4 ";} +h5:before{content:"h5 ";} +h6:before{content:"h6 ";} + + +h2{font-size:24px;} +h3{font-size:18px;} +h4{font-size:16px;} +h5{font-size:14px;} +h6{font-size:12px;} + +br:after{content:"·"; color:red; border: 1px solid #999;} + +/* LAYOUT AND GRAPHICS */ +@mixin full(){ width:99%; } +@mixin demi(){ width:47%; } +@mixin tiers(){ width:29%; } +@mixin quart(){ width:23%; } +@mixin right(){ float:right; margin-left:2%; } +@mixin left(){ float:left; margin-right:2%; } +@mixin center(){ display:block; margin:0 auto; } + + +img{height:auto; margin:0.5em 0;} +p{ border: 1px dashed #848484; } +div{border: 1px solid #1A1A1A;} + +img,p,div{ position:relative; + &:before{font-size:10px; color:red; background-color: #1A1A1A; position:absolute; top:0; z-index:3000;} + + &.full{@include full(); &:before{content:" full ";}} + &.demi{ @include demi(); margin-right:2%; &:before{content:" demi "; right:0;}} + &.tiers{ @include tiers(); margin-right:2%; &:before{content:" tiers "; right:0;}} + &.quart{ @include quart(); margin-right:2%; &:before{content:" quart "; right:0;}} + + &.demi-left{ @include demi(); @include left(); &:before{content:" demi-left "; left:0;}} + &.demi-right{ @include demi(); @include right(); &:before{content:" demi-right "; right:0;}} + &.demi-center{ @include demi(); @include center(); &:before{content:" demi-denter "; right:0;}} + + &.tiers-left{ @include tiers(); @include left(); &:before{content:" tiers-left "; left:0;}} + &.tiers-right{ @include tiers(); @include right(); &:before{content:" tiers-right "; right:0;}} + &.tiers-center{ @include tiers(); @include center(); &:before{content:" tiers-center "; right:0;}} + + &.quart-left{ @include quart(); @include left(); &:before{content:" quart-left "; left:0;}} + &.quart-right{ @include quart(); @include right(); &:before{content:" quart-right "; right:0;}} + &.quart-center{ @include quart(); @include center(); &:before{content:" quart-center "; right:0;}} + + + +} + +table, tr,td{ + position:relative; + padding:1em 0.3em 0.3em; + width:100%; + + &:before{ + font-size:10px; color:white; background-color: blue; + position:absolute; top:0; left:0; z-index:3000; + padding:1px 3px; + } +} +table{ + border:2px solid blue!important; + &:before{content:"table";} +} + +tr{ + display:block; + border:1px dashed blue!important; + &:before{content:"tr";} +} + +td{ + border:1px dotted blue!important; + &:before{content:"td";} + p{ + padding:0 15px; + } +} \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/templates/html.tpl.php b/sites/all/themes/gui/materiobasetheme/templates/html.tpl.php index 96e9c2e5..19fc5769 100644 --- a/sites/all/themes/gui/materiobasetheme/templates/html.tpl.php +++ b/sites/all/themes/gui/materiobasetheme/templates/html.tpl.php @@ -1,4 +1,4 @@ -> - - - + <?php print $head_title; ?> - + - + - + >
                        -
                        - +
                        + - -
                        + +
                        @@ -92,7 +92,7 @@ - + @@ -102,5 +102,5 @@ - + \ No newline at end of file diff --git a/sites/all/themes/gui/materiobasetheme/templates/node--breve.tpl.php b/sites/all/themes/gui/materiobasetheme/templates/node--breve.tpl.php index d686001f..9630da29 100644 --- a/sites/all/themes/gui/materiobasetheme/templates/node--breve.tpl.php +++ b/sites/all/themes/gui/materiobasetheme/templates/node--breve.tpl.php @@ -17,14 +17,14 @@
                        - +
                        diff --git a/sites/all/themes/gui/materiobasetheme/templates/node--materiau.tpl.php b/sites/all/themes/gui/materiobasetheme/templates/node--materiau.tpl.php index 47253863..7f4e25ab 100644 --- a/sites/all/themes/gui/materiobasetheme/templates/node--materiau.tpl.php +++ b/sites/all/themes/gui/materiobasetheme/templates/node--materiau.tpl.php @@ -42,14 +42,14 @@
                        - +