From e7e0a499b74041131c1322f272f1fcac0ff8a11e Mon Sep 17 00:00:00 2001 From: Marton Kiss Date: Tue, 10 Dec 2013 21:30:02 +0100 Subject: [PATCH] Frontpage block layout Reorganize frontpage layout and add new block templates like community stats, community map and find nearby groups. Change-Id: I1acf920113068ba8cba8af78cf2e532002c569cd --- .../groups_homepage/groups_homepage.css | 23 ++++ .../groups/groups_homepage/groups_homepage.js | 19 +++ .../groups_homepage/groups_homepage.module | 67 +++++++++- .../groups_homepage.pages_default.inc | 112 ++++++++++++---- .../templates/community_map.tpl.php | 35 +++++ .../templates/community_stats.tpl.php | 8 ++ .../templates/groups_find_nearby.tpl.php | 19 +++ modules/groups/groups_homepage/world-map.png | Bin 0 -> 34484 bytes themes/openstack/css/custom.css | 121 ++++++++++++++++-- .../openstack_front/openstack-front.tpl.php | 64 +++++++++ .../openstack_front/openstack_front.admin.css | 8 ++ .../openstack_front/openstack_front.inc | 27 ++++ themes/openstack/openstack.info | 5 +- themes/openstack/sass/custom.scss | 42 ++++++ 14 files changed, 511 insertions(+), 39 deletions(-) create mode 100644 modules/groups/groups_homepage/groups_homepage.css create mode 100644 modules/groups/groups_homepage/groups_homepage.js create mode 100644 modules/groups/groups_homepage/templates/community_map.tpl.php create mode 100644 modules/groups/groups_homepage/templates/community_stats.tpl.php create mode 100644 modules/groups/groups_homepage/templates/groups_find_nearby.tpl.php create mode 100644 modules/groups/groups_homepage/world-map.png create mode 100644 themes/openstack/layouts/panels/openstack_front/openstack-front.tpl.php create mode 100644 themes/openstack/layouts/panels/openstack_front/openstack_front.admin.css create mode 100644 themes/openstack/layouts/panels/openstack_front/openstack_front.inc diff --git a/modules/groups/groups_homepage/groups_homepage.css b/modules/groups/groups_homepage/groups_homepage.css new file mode 100644 index 0000000..2047347 --- /dev/null +++ b/modules/groups/groups_homepage/groups_homepage.css @@ -0,0 +1,23 @@ +#community-map { + background: url(world-map.png); + width: 450px; + height: 250px; + overflow: hidden; + margin-bottom: 2em; +} + +#community-map .community-map-pin { + position: relative; +} + +#community-map .community-map-pin span.latitude, +#community-map .community-map-pin span.longitude { + display: none; +} + +#community-map .content { + background: #E0E0E0; + font-size: 80%; + display: inline; + padding: 2px; +} \ No newline at end of file diff --git a/modules/groups/groups_homepage/groups_homepage.js b/modules/groups/groups_homepage/groups_homepage.js new file mode 100644 index 0000000..464c93e --- /dev/null +++ b/modules/groups/groups_homepage/groups_homepage.js @@ -0,0 +1,19 @@ +/** + * Relocate html map pinpoints based on lat and long data. + */ +(function($) { + Drupal.behaviors.groups_homepage = { + attach : function(context) { + console.log("ready!"); + var communityMap = $("#community-map"); + communityMap.find(".community-map-pin").each(function() { + var lat = new Number($(this).find("span.latitude").text()); + var lng = new Number($(this).find("span.longitude").text()); + longPx = ((communityMap.width()/360) * (180 + lng)); + latPx = ((communityMap.height()/180) * (90 - lat)); + $(this).css('top', latPx + "px"); + $(this).css('left', longPx + "px"); + }); + } + } +})(jQuery); \ No newline at end of file diff --git a/modules/groups/groups_homepage/groups_homepage.module b/modules/groups/groups_homepage/groups_homepage.module index 415af8f..3671334 100644 --- a/modules/groups/groups_homepage/groups_homepage.module +++ b/modules/groups/groups_homepage/groups_homepage.module @@ -14,6 +14,18 @@ function groups_homepage_block_info() { 'info' => t('Groups welcome block'), 'cache' => DRUPAL_CACHE_GLOBAL, ); + $blocks['groups_community_map'] = array( + 'info' => t('Groups community map'), + 'cache' => DRUPAL_CACHE_GLOBAL, + ); + $blocks['groups_community_stats']= array( + 'info' => t('Groups community stats'), + 'cache' => DRUPAL_CACHE_GLOBAL, + ); + $blocks['groups_find_nearby']= array( + 'info' => t('Groups find nearby'), + 'cache' => DRUPAL_CACHE_GLOBAL, + ); return $blocks; } @@ -21,8 +33,33 @@ function groups_homepage_block_info() { * Implements hook_block_view(). */ function groups_homepage_block_view($delta='') { - $block['content'] = variable_get('groups_welcome_body', "Can't find one nearby? Want to start one? The OpenStack International Community team is your main contact point. Join the mailing list and read the HowTo page if you are hosting or want to start a user group with meetups, hackathons and other social events talking about OpenStack and free/libre open source software for the cloud."); - $block['subject'] = variable_get('groups_welcome_title', 'Welcome to OpenStack User Groups!'); + $block = array(); + switch ($delta) { + case 'groups_homepage_welcome': + $block['content'] = variable_get('groups_welcome_body', "Can't find one nearby? Want to start one? The OpenStack International Community team is your main contact point. Join the mailing list and read the HowTo page if you are hosting or want to start a user group with meetups, hackathons and other social events talking about OpenStack and free/libre open source software for the cloud."); + $block['subject'] = variable_get('groups_welcome_title', 'Welcome to OpenStack User Groups!'); + break; + case 'groups_community_map': + $block['content'] = theme('community_map', array()); + $block['subject'] = 'Community map'; + drupal_add_css(drupal_get_path('module', 'groups_homepage') . '/groups_homepage.css'); + drupal_add_js(drupal_get_path('module', 'groups_homepage'). '/groups_homepage.js'); + break; + case 'groups_community_stats': + // TODO: fetch community stats from remote service + $stats = array( + 'people' => 12593, + 'countries' => 131, + 'user-groups' => 58, + ); + $block['subject'] = 'Community stats'; + $block['content'] = theme('community_stats', array('stats' => $stats)); + break; + case 'groups_find_nearby': + $block['content'] = theme('groups_find_nearby', array()); + $block['subject'] = 'Find nearby groups'; + break; + } return $block; } @@ -33,3 +70,29 @@ function groups_homepage_block_view($delta='') { function groups_homepage_menu_alter(&$items) { unset($items['search']); } + +/** + * Implements hook_theme() + * @return multitype:number + */ + +function groups_homepage_theme() { + $module_path = drupal_get_path('module', 'groups_homepage'); + $base = array( + 'path' => "$module_path/templates", + ); + return array( + 'community_stats' => $base + array( + 'template' => 'community_stats', + 'variables' => array('stats' => NULL,), + ), + 'groups_find_nearby' => $base + array( + 'template' => 'groups_find_nearby', + 'variables' => array(), + ), + 'community_map' => $base + array( + 'template' => 'community_map', + 'variables' => array(), + ) + ); +} diff --git a/modules/groups/groups_homepage/groups_homepage.pages_default.inc b/modules/groups/groups_homepage/groups_homepage.pages_default.inc index 14aebf9..fa96470 100644 --- a/modules/groups/groups_homepage/groups_homepage.pages_default.inc +++ b/modules/groups/groups_homepage/groups_homepage.pages_default.inc @@ -52,23 +52,19 @@ function groups_homepage_default_page_manager_pages() { 'relationships' => array(), ); $display = new panels_display(); - $display->layout = 'three_50_25_25'; + $display->layout = 'openstack_front'; $display->layout_settings = array(); $display->panel_settings = array( 'style_settings' => array( 'default' => NULL, - 'two_brick_top' => NULL, - 'two_brick_left_above' => NULL, - 'two_brick_right_above' => NULL, - 'two_brick_middle' => NULL, - 'two_brick_left_below' => NULL, - 'two_brick_right_below' => NULL, - 'two_brick_bottom' => NULL, - 'three_50_25_25_top' => NULL, - 'three_50_25_25_first' => NULL, - 'three_50_25_25_second' => NULL, - 'three_50_25_25_third' => NULL, - 'three_50_25_25_bottom' => NULL, + 'os_top' => NULL, + 'os_left' => NULL, + 'os_center' => NULL, + 'os_right' => NULL, + 'os_middle' => NULL, + 'os_bottom_left' => NULL, + 'os_bottom_right' => NULL, + 'os_bottom' => NULL, ), ); $display->cache = array(); @@ -76,9 +72,72 @@ function groups_homepage_default_page_manager_pages() { $display->uuid = '7a0357d1-bf3b-54e4-b522-6c15eedf8a93'; $display->content = array(); $display->panels = array(); + $pane = new stdClass(); + $pane->pid = 'new-4149ec78-f9ea-2084-5961-19adcd9726c5'; + $pane->panel = 'os_bottom_left'; + $pane->type = 'block'; + $pane->subtype = 'groups_homepage-groups_community_map'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'override_title' => 0, + 'override_title_text' => '', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array(); + $pane->extras = array(); + $pane->position = 0; + $pane->locks = array(); + $pane->uuid = '4149ec78-f9ea-2084-5961-19adcd9726c5'; + $display->content['new-4149ec78-f9ea-2084-5961-19adcd9726c5'] = $pane; + $display->panels['os_bottom_left'][0] = 'new-4149ec78-f9ea-2084-5961-19adcd9726c5'; + $pane = new stdClass(); + $pane->pid = 'new-c2b9e460-b848-d8f4-8153-cf0687afd8ea'; + $pane->panel = 'os_bottom_right'; + $pane->type = 'block'; + $pane->subtype = 'groups_homepage-groups_find_nearby'; + $pane->shown = TRUE; + $pane->access = array(); + $pane->configuration = array( + 'override_title' => 0, + 'override_title_text' => '', + ); + $pane->cache = array(); + $pane->style = array( + 'settings' => NULL, + ); + $pane->css = array(); + $pane->extras = array(); + $pane->position = 0; + $pane->locks = array(); + $pane->uuid = 'c2b9e460-b848-d8f4-8153-cf0687afd8ea'; + $display->content['new-c2b9e460-b848-d8f4-8153-cf0687afd8ea'] = $pane; + $display->panels['os_bottom_right'][0] = 'new-c2b9e460-b848-d8f4-8153-cf0687afd8ea'; + $pane = new stdClass(); + $pane->pid = 'new-1a23fada-1c8b-2cf4-2978-e8aa64e28877'; + $pane->panel = 'os_center'; + $pane->type = 'views_panes'; + $pane->subtype = 'commons_activity_streams_activity-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 = '1a23fada-1c8b-2cf4-2978-e8aa64e28877'; + $display->content['new-1a23fada-1c8b-2cf4-2978-e8aa64e28877'] = $pane; + $display->panels['os_center'][0] = 'new-1a23fada-1c8b-2cf4-2978-e8aa64e28877'; $pane = new stdClass(); $pane->pid = 'new-dd6ca3f4-3444-af04-f1e2-47c9f488ed53'; - $pane->panel = 'three_50_25_25_first'; + $pane->panel = 'os_left'; $pane->type = 'block'; $pane->subtype = 'groups_homepage-groups_homepage_welcome'; $pane->shown = TRUE; @@ -97,15 +156,18 @@ function groups_homepage_default_page_manager_pages() { $pane->locks = array(); $pane->uuid = 'dd6ca3f4-3444-af04-f1e2-47c9f488ed53'; $display->content['new-dd6ca3f4-3444-af04-f1e2-47c9f488ed53'] = $pane; - $display->panels['three_50_25_25_first'][0] = 'new-dd6ca3f4-3444-af04-f1e2-47c9f488ed53'; + $display->panels['os_left'][0] = 'new-dd6ca3f4-3444-af04-f1e2-47c9f488ed53'; $pane = new stdClass(); - $pane->pid = 'new-1a23fada-1c8b-2cf4-2978-e8aa64e28877'; - $pane->panel = 'three_50_25_25_second'; - $pane->type = 'views_panes'; - $pane->subtype = 'commons_activity_streams_activity-panel_pane_1'; + $pane->pid = 'new-7ae087d4-887e-4b54-b980-44fb87245089'; + $pane->panel = 'os_middle'; + $pane->type = 'block'; + $pane->subtype = 'groups_homepage-groups_community_stats'; $pane->shown = TRUE; $pane->access = array(); - $pane->configuration = array(); + $pane->configuration = array( + 'override_title' => 0, + 'override_title_text' => '', + ); $pane->cache = array(); $pane->style = array( 'settings' => NULL, @@ -114,12 +176,12 @@ function groups_homepage_default_page_manager_pages() { $pane->extras = array(); $pane->position = 0; $pane->locks = array(); - $pane->uuid = '1a23fada-1c8b-2cf4-2978-e8aa64e28877'; - $display->content['new-1a23fada-1c8b-2cf4-2978-e8aa64e28877'] = $pane; - $display->panels['three_50_25_25_second'][0] = 'new-1a23fada-1c8b-2cf4-2978-e8aa64e28877'; + $pane->uuid = '7ae087d4-887e-4b54-b980-44fb87245089'; + $display->content['new-7ae087d4-887e-4b54-b980-44fb87245089'] = $pane; + $display->panels['os_middle'][0] = 'new-7ae087d4-887e-4b54-b980-44fb87245089'; $pane = new stdClass(); $pane->pid = 'new-4f60b089-fac8-aa14-d1f8-d5674b0d51bc'; - $pane->panel = 'three_50_25_25_third'; + $pane->panel = 'os_right'; $pane->type = 'views_panes'; $pane->subtype = 'commons_events_upcoming-panel_pane_2'; $pane->shown = TRUE; @@ -135,7 +197,7 @@ function groups_homepage_default_page_manager_pages() { $pane->locks = array(); $pane->uuid = '4f60b089-fac8-aa14-d1f8-d5674b0d51bc'; $display->content['new-4f60b089-fac8-aa14-d1f8-d5674b0d51bc'] = $pane; - $display->panels['three_50_25_25_third'][0] = 'new-4f60b089-fac8-aa14-d1f8-d5674b0d51bc'; + $display->panels['os_right'][0] = 'new-4f60b089-fac8-aa14-d1f8-d5674b0d51bc'; $display->hide_title = PANELS_TITLE_NONE; $display->title_pane = '0'; $handler->conf['display'] = $display; diff --git a/modules/groups/groups_homepage/templates/community_map.tpl.php b/modules/groups/groups_homepage/templates/community_map.tpl.php new file mode 100644 index 0000000..71f438e --- /dev/null +++ b/modules/groups/groups_homepage/templates/community_map.tpl.php @@ -0,0 +1,35 @@ +
+
+ + 47.4719 + + + 19.0503 + +
+ admin created New post in the Budapest group +
+
+
+ + 52.5167 + + + 13.3833 + +
+ admin created New post in the Berlin group +
+
+
+ + 37.7833 + + + -122.4167 + +
+ SFO Group +
+
+
\ No newline at end of file diff --git a/modules/groups/groups_homepage/templates/community_stats.tpl.php b/modules/groups/groups_homepage/templates/community_stats.tpl.php new file mode 100644 index 0000000..6c42db9 --- /dev/null +++ b/modules/groups/groups_homepage/templates/community_stats.tpl.php @@ -0,0 +1,8 @@ + +
+ people in countries and established user groups all around the world. +
\ No newline at end of file diff --git a/modules/groups/groups_homepage/templates/groups_find_nearby.tpl.php b/modules/groups/groups_homepage/templates/groups_find_nearby.tpl.php new file mode 100644 index 0000000..c6d221f --- /dev/null +++ b/modules/groups/groups_homepage/templates/groups_find_nearby.tpl.php @@ -0,0 +1,19 @@ + +
+
+

+ Find the nearest usergroup in your region and meet with other stackers! +

+ + +
+

Not found?

+

+ Establish a new Openstack User Group in your city. Read our organizer tips About bootstrapping a local group and join to our fast growing vibrant community! +

+ Register new user group +
\ No newline at end of file diff --git a/modules/groups/groups_homepage/world-map.png b/modules/groups/groups_homepage/world-map.png new file mode 100644 index 0000000000000000000000000000000000000000..5592d295bf80f8d72c271245e01b650ee2dcd1fc GIT binary patch literal 34484 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 eh7B8+!v6;midxp5xBM>v0000 +
> + +
+
+ +
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+ + +
+
+ +
+
+ +
\ No newline at end of file diff --git a/themes/openstack/layouts/panels/openstack_front/openstack_front.admin.css b/themes/openstack/layouts/panels/openstack_front/openstack_front.admin.css new file mode 100644 index 0000000..9a022f2 --- /dev/null +++ b/themes/openstack/layouts/panels/openstack_front/openstack_front.admin.css @@ -0,0 +1,8 @@ +#panels-dnd-main .region {margin-bottom: 5px} +#panels-dnd-main .region-openstack-front-first {float: left; width: 50%} +#panels-dnd-main .region-openstack-front-second {float: left; width: 24.5%; margin-left: 0.5%} +#panels-dnd-main .region-openstack-front-third {float: right; width: 24.5%} +#panels-dnd-main .region-openstack-front-bottom-first {float: left; width: 50%} +#panels-dnd-main .region-openstack-front-bottom-second {float: left; width: 49.5%; margin-left: 0.5%} +#panels-dnd-main .region-openstack-front-bottom {clear: both} +#panels-dnd-main .region-openstack-front-middle {clear: both} \ No newline at end of file diff --git a/themes/openstack/layouts/panels/openstack_front/openstack_front.inc b/themes/openstack/layouts/panels/openstack_front/openstack_front.inc new file mode 100644 index 0000000..d10b114 --- /dev/null +++ b/themes/openstack/layouts/panels/openstack_front/openstack_front.inc @@ -0,0 +1,27 @@ + t('Openstack Front'), + 'category' => t('Openstack Panels'), + 'icon' => 'front.png', + 'theme' => 'openstack_front', + 'admin css' => 'openstack_front.admin.css', + 'regions' => array( + 'os_top' => t('Top (Conditional)'), + 'os_left' => t('Left'), + 'os_center' => t('Center'), + 'os_right' => t('Right'), + 'os_middle' => t('Middle (Conditional)'), + 'os_bottom_left' => t('Bottom Left'), + 'os_bottom_right' => t('Bottom Right'), + 'os_bottom' => t('Bottom (Conditional)'), + ), + ); + return $items; +} \ No newline at end of file diff --git a/themes/openstack/openstack.info b/themes/openstack/openstack.info index 2678534..0a9ca11 100644 --- a/themes/openstack/openstack.info +++ b/themes/openstack/openstack.info @@ -105,7 +105,8 @@ regions[bottom] = Page bottom regions[page_top] = Page top regions[page_bottom] = Page bottom - +; Panels Module layouts +plugins[panels][layouts] = layouts/panels ; Various page elements output by the theme can be toggled on and off. The ; "features" control which of these check boxes display on the @@ -128,7 +129,7 @@ features[] = secondary_menu ; Set the default values of settings on the theme-settings.php form. settings[zen_breadcrumb] = yes -settings[zen_breadcrumb_separator] = ' › ' +settings[zen_breadcrumb_separator] = ' ��� ' settings[zen_breadcrumb_home] = 1 settings[zen_breadcrumb_trailing] = 0 settings[zen_breadcrumb_title] = 0 diff --git a/themes/openstack/sass/custom.scss b/themes/openstack/sass/custom.scss index fda3740..9813f82 100644 --- a/themes/openstack/sass/custom.scss +++ b/themes/openstack/sass/custom.scss @@ -274,6 +274,29 @@ nav.breadcrumb { } } +.openstack-front { + $zen-column-count: 12; + $zen-gutter-width: 10px; + .openstack-front-container { + @include zen-grid-container; + } + .region-openstack-front-first { + @include zen-grid-item(6, 1); + } + .region-openstack-front-second { + @include zen-grid-item(3, 7); + } + .region-openstack-front-third { + @include zen-grid-item(3, 10); + } + .region-openstack-front-bottom-first { + @include zen-grid-item(6, 1); + } + .region-openstack-front-bottom-second { + @include zen-grid-item(6, 7); + } +} + /** Landing page upcoming events **/ .view-commons-events-upcoming { @@ -318,4 +341,23 @@ nav.breadcrumb { margin-top: 2em; margin-bottom: 2em; } +} + +/** Community stats block **/ + +.pane-groups-homepage-groups-community-stats { + h2 { + display: none; + } + em { + font-weight: bold; + } + font-size: 130%; + text-align: center; + color: #7F7F7F; + /*border: 3px solid #D5D5D5;*/ + border-bottom: 2px solid #D5D5D5; + border-top: 2px solid #D5D5D5; + font-family: 'PT Sans',serif; + padding: 5px; } \ No newline at end of file