diff -u b/core/modules/breakpoint/breakpoint.module b/core/modules/breakpoint/breakpoint.module --- b/core/modules/breakpoint/breakpoint.module +++ b/core/modules/breakpoint/breakpoint.module @@ -35,7 +35,7 @@ if ($themes[$theme_key]->status) { $theme_breakpoints = breakpoint_get_theme_breakpoint_list($theme_key); if (!empty($theme_breakpoints)) { - if ($breakpoint_group = _breakpoint_import_breakpoints($themes[$theme_key]->info['name'], $theme_key, Breakpoint::SOURCE_TYPE_THEME, $theme_breakpoints)) { + if ($breakpoint_group = BreakpointGroup::loadFromTheme($theme_key, $themes[$theme_key]->info['name'], $theme_breakpoints)) { $breakpoint_group->save(); $uri = $breakpoint_group->uri(); if ($uri) { @@ -85,7 +85,7 @@ foreach ($modules as $module) { $module_breakpoints = breakpoint_get_module_breakpoint_list($module); if (!empty($module_breakpoints)) { - if ($breakpoint_group = _breakpoint_import_breakpoints($module, $module, Breakpoint::SOURCE_TYPE_MODULE, $module_breakpoints)) { + if ($breakpoint_group = BreakpointGroup::loadFromModule($module, $module, $module_breakpoints)) { $breakpoint_group->save(); $uri = $breakpoint_group->uri(); if ($uri) { @@ -123,67 +123,6 @@ } /** - * Import breakpoints from theme or module. - * - * @param string $label - * Name of the breakpoint group. - * @param string $id - * Id of the breakpoint group. - * @param string $sourceType - * Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE. - * @param array $media_queries - * Array of media queries keyed by id. - * - * @return Drupal\breakpoint\BreakpointGroup|false - * Returns the new breakpoint group if one is created. - */ -function _breakpoint_import_breakpoints($label, $id, $source_type, $media_queries) { - if (!empty($media_queries)) { - $weight = 0; - // Use the existing breakpoint group if it exists. - $breakpoint_group = entity_load('breakpoint_group', $source_type . '.' . $id); - if (!$breakpoint_group) { - // Build a new breakpoint group. - $breakpoint_group = new BreakpointGroup(); - $breakpoint_group->id = $id; - $breakpoint_group->label = $label; - $breakpoint_group->source = $id; - $breakpoint_group->sourceType = $source_type; - } - else { - // Reset label. - $breakpoint_group->label = $label; - } - foreach ($media_queries as $name => $media_query) { - // Use the existing breakpoint if it exists. - $breakpoint = entity_load('breakpoint', $source_type . '.' . $id . '.' . $name); - if (!$breakpoint) { - // Build a new breakpoint. - $breakpoint = new Breakpoint; - $breakpoint->name = $name; - $breakpoint->label = drupal_ucfirst($name); - $breakpoint->mediaQuery = $media_query; - $breakpoint->source = $id; - $breakpoint->sourceType = $source_type; - $breakpoint->status = TRUE; - $breakpoint->weight = $weight++; - $breakpoint->save(); - } - else { - // Reset name, label, weight and media query. - $breakpoint->name = $name; - $breakpoint->label = drupal_ucfirst($name); - $breakpoint->mediaQuery = $media_query; - $breakpoint->weight = $weight++; - } - $breakpoint_group->breakpoints[$breakpoint->id()] = $breakpoint; - } - return $breakpoint_group; - } - return FALSE; -} - -/** * Import breakpoint groups from theme or module. * * @param string $group_id @@ -193,67 +132,14 @@ * * @return boolean */ -function _breakpoint_import_breakpoint_groups($group_id, $source_type) { - $breakpoint_groups = config($group_id . '.breakpoint_groups'); +function _breakpoint_import_breakpoint_groups($source, $source_type) { + $breakpoint_groups = config($source . '.breakpoint_groups'); if ($breakpoint_groups) { foreach ($breakpoint_groups->get() as $id => $data) { // Breakpoints is mandatory. if (isset($data['breakpoints']) && !empty($data['breakpoints'])) { - // Use the existing breakpoint group if it exists. - $breakpoint_group = entity_load('breakpoint_group', $source_type . '.' . $id); - if (!$breakpoint_group) { - $breakpoint_group = new BreakpointGroup(); - $breakpoint_group->sourceType = $source_type; - $breakpoint_group->source = $group_id; - $breakpoint_group->id = $id; - if (isset($data['label']) && !empty($data['label'])) { - $breakpoint_group->label = $data['label']; - } - else { - $breakpoint_group->label = drupal_ucfirst($data['label']); - } - } - else { - // Reset label. - if (isset($data['label']) && !empty($data['label'])) { - $breakpoint_group->label = $data['label']; - } - else { - $breakpoint_group->label = drupal_ucfirst($data['label']); - } - } - foreach ($data['breakpoints'] as $breakpoint_id => $multipliers) { - // Check if breakpoint exists, assume short name. - $breakpoint = entity_load('breakpoint', $source_type . '.' . $group_id . '.' . $breakpoint_id); - // If the breakpoint doesn't exist, try using the full name. - if (!$breakpoint) { - $breakpoint = entity_load('breakpoint', $breakpoint_id); - } - if ($breakpoint) { - // Check if the multipliers are set, if not set them now. - if (is_array($multipliers) && !empty($multipliers)) { - // Check settings first. - $settings = breakpoint_settings(); - $defined_multipliers = $settings->multipliers; - $new_multipliers = array_diff($multipliers, $defined_multipliers); - if (!empty($new_multipliers)) { - $defined_multipliers = array_merge($defined_multipliers, $new_multipliers); - breakpoint_settings_save_multipliers($defined_multipliers); - } - - // Check breakpoint multipliers. - $multipliers = drupal_map_assoc(array_values($multipliers)); - $new_multipliers = array_diff($multipliers, $breakpoint->multipliers); - if (!empty($new_multipliers)) { - $breakpoint->multipliers += $new_multipliers; - $breakpoint->save(); - } - } - - // Add breakpoint to group. - $breakpoint_group->breakpoints[$breakpoint->id()] = $breakpoint; - $breakpoint_group->save(); - } + if ($breakpoint_group = BreakpointGroup::ImportBreakpointGroup($source, $source_type, $id, isset($data['label']) ? $data['label'] : drupal_ucfirst($data[$id]), $data['breakpoints'])) { + $breakpoint_group->save(); } } } @@ -292,7 +178,7 @@ } } } - // Deletet groups defined by a module/theme even if that module/theme didn't + // Delete groups defined by a module/theme even if that module/theme didn't // define any breakpoints. foreach ($ids as $id) { // delete all breakpoint groups defined by the theme or module. @@ -362,7 +248,7 @@ if (isset($themes[$theme_key]) && $themes[$theme_key]->status) { $theme_breakpoints = breakpoint_get_theme_breakpoint_list($theme_key); if (!empty($theme_breakpoints)) { - return _breakpoint_import_breakpoints($themes[$theme_key]->info['name'], $theme_key, Breakpoint::SOURCE_TYPE_THEME, $theme_breakpoints); + return BreakpointGroup::loadFromTheme($theme_key, $themes[$theme_key]->info['name'], $theme_breakpoints); } } return FALSE; diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/Breakpoint.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Breakpoint.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/Breakpoint.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Breakpoint.php @@ -116,10 +116,6 @@ */ public function __construct(array $values = array(), $entity_type = 'breakpoint') { parent::__construct($values, $entity_type); - if (!isset($this->uuid)) { - $uuid = new Uuid(); - $this->uuid = $uuid->generate(); - } } /** @@ -222,9 +218,9 @@ * */ public function duplicate() { - $duplicate = new Breakpoint; - $duplicate->mediaQuery = $this->mediaQuery; - return $duplicate; + return entity_create('breakpoint', array( + 'mediaQuery' => $this->mediaQuery, + )); } /** diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroup.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroup.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroup.php @@ -78,11 +78,6 @@ */ public function __construct(array $values = array(), $entity_type = 'breakpoint_group') { parent::__construct($values, $entity_type); - // Assign a new UUID if there is none yet. - if (!isset($this->uuid)) { - $uuid = new Uuid(); - $this->uuid = $uuid->generate(); - } $this->loadAllBreakpoints(); } @@ -143,9 +138,9 @@ * */ public function duplicate() { - $duplicate = new BreakpointGroup; - $duplicate->breakpoints = $this->breakpoints; - return $duplicate; + return entity_create('breakpoint_group', array( + 'breakpoints' => $this->breakpoints, + )); } /** @@ -164,6 +159,164 @@ } /** + * Add a breakpoint using a name and a media query. + * + * @param string $name + * The name of the breakpoint. + * @param string $media_query + * Media query. + */ + public function addBreakpointFromMediaQuery($name, $media_query) { + // Use the existing breakpoint if it exists. + $breakpoint = entity_load('breakpoint', $this->sourceType . '.' . $this->id . '.' . $name); + if (!$breakpoint) { + // Build a new breakpoint. + $breakpoint = entity_create('breakpoint', array( + 'name' => $name, + 'label' => drupal_ucfirst($name), + 'mediaQuery' => $media_query, + 'source' => $this->id, + 'sourceType' => $this->sourceType, + 'weight' => count($this->breakpoints), + )); + $breakpoint->save(); + } + else { + // Reset name, label, weight and media query. + $breakpoint->name = $name; + $breakpoint->label = drupal_ucfirst($name); + $breakpoint->mediaQuery = $media_query; + $breakpoint->weight = count($this->breakpoints); + } + $this->breakpoints[$breakpoint->id()] = $breakpoint; + } + + /** + * Load breakpoints from a theme and build a default group. + * + * @param string $theme_key + * The name of the theme. + * @param string $name + * The human readable name of the theme. + * @param array $media_queries + * Array of media queries keyed by id. + * + * @return \Drupal\breakpoint\BreakpointGroup|false + * Return the new breakpoint group containing all breakpoints. + */ + public static function loadFromTheme($theme_key, $name, $media_queries) { + return BreakpointGroup::loadFromThemeOrModule($theme_key, $name, Breakpoint::SOURCE_TYPE_THEME, $media_queries); + } + + /** + * Load breakpoints from a module and build a default group. + * + * @param string $module + * The name of the theme. + * @param string $name + * The human readable name of the module. + * @param array $media_queries + * Array of media queries keyed by id. + * + * @return \Drupal\breakpoint\BreakpointGroup|false + * Return the new breakpoint group containing all breakpoints. + */ + public static function loadFromModule($module, $name, $media_queries) { + return BreakpointGroup::loadFromThemeOrModule($module, $name, Breakpoint::SOURCE_TYPE_MODULE, $media_queries); + } + + /** + * Load breakpoints from a theme/module and build a default group. + * + * @param string $id + * Name of the breakpoint group. + * @param string $label + * Human readable name of the breakpoint group. + * @param string $sourceType + * Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE. + * @param array $media_queries + * Array of media queries keyed by id. + * + * @return \Drupal\breakpoint\BreakpointGroup|false + * Return the new breakpoint group containing all breakpoints. + * + * @see Drupal\breakpoint\BreakpointGroup::loadFromTheme() + * @see Drupal\breakpoint\BreakpointGroup::loadFromModule() + */ + protected static function loadFromThemeOrModule($id, $label, $source_type, $media_queries) { + $breakpoint_group = entity_load('breakpoint_group', $source_type . '.' . $id); + /* @var $breakpoint_group \Drupal\breakpoint\BreakpointGroup */ + if (!$breakpoint_group) { + // Build a new breakpoint group. + $breakpoint_group = entity_create('breakpoint_group', array( + 'id' => $id, + 'label' => $label, + 'source' => $id, + 'sourceType' => $source_type, + )); + } + else { + // Reset label. + $breakpoint_group->label = $label; + } + + foreach ($media_queries as $name => $media_query) { + $breakpoint_group->addBreakpointFromMediaQuery($name, $media_query); + } + return $breakpoint_group; + } + + /** + * Import breakpoint groups from theme or module. + * + * @param string $source + * Source of the breakpoint group, theme_key or module name. + * @param string $sourceType + * Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE. + * @param string $name + * Name of the breakpoint group. + * @param string $label + * Human readable name of the breakpoint group. + * @param array $breakpoints + * Array of breakpoints, using either the short name or the full name. + * + * @return \Drupal\breakpoint\BreakpointGroup|false + * Return the new breakpoint group containing all breakpoints. + */ + public static function ImportBreakpointGroup($source, $source_type, $name, $label, $breakpoints) { + // Use the existing breakpoint group if it exists. + $breakpoint_group = entity_load('breakpoint_group', $source_type . '.' . $name); + /* @var $breakpoint_group \Drupal\breakpoint\BreakpointGroup */ + if (!$breakpoint_group) { + $breakpoint_group = entity_create('breakpoint_group', array( + 'id' => $name, + 'label' => !empty($label) ? $label : $name, + 'source' => $source, + 'sourceType' => $source_type, + )); + } + else { + // Reset label. + $breakpoint_group->label = !empty($label) ? $label : $name; + } + + // Add breakpoints to the group. + foreach ($breakpoints as $breakpoint_name) { + // Check if breakpoint exists, assume short name. + $breakpoint = entity_load('breakpoint', $source_type . '.' . $source . '.' . $breakpoint_name); + // If the breakpoint doesn't exist, try using the full name. + if (!$breakpoint) { + $breakpoint = entity_load('breakpoint', $breakpoint_name); + } + if ($breakpoint) { + // Add breakpoint to group. + $breakpoint_group->breakpoints[$breakpoint->id()] = $breakpoint; + } + } + return $breakpoint_group; + } + + /** * Load all breakpoints, remove non-existing ones. */ protected function loadAllBreakpoints() { diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointApiTest.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointApiTest.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointApiTest.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointApiTest.php @@ -30,14 +30,12 @@ * Test Breakpoint::buildConfigName(). */ public function testConfigName() { - $breakpoint = new Breakpoint( - array( - 'label' => drupal_strtolower($this->randomName()), - 'source' => 'custom_module', - // Try an invalid sourceType. - 'sourceType' => 'oops', - ) - ); + $breakpoint = entity_create('breakpoint', array( + 'label' => drupal_strtolower($this->randomName()), + 'source' => 'custom_module', + // Try an invalid sourceType. + 'sourceType' => 'oops', + )); try { $breakpoint->save(); diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointCrudTest.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointCrudTest.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointCrudTest.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointCrudTest.php @@ -30,12 +30,10 @@ */ public function testBreakpointCrud() { // Add a breakpoint with minimum data only. - $values = array( + $breakpoint = entity_create('breakpoint', array( 'label' => drupal_strtolower($this->randomName()), 'mediaQuery' => '(min-width: 600px)', - ); - - $breakpoint = new Breakpoint($values); + )); $breakpoint->save(); $this->verifyBreakpoint($breakpoint); diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupCrudTest.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupCrudTest.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupCrudTest.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointGroupCrudTest.php @@ -34,23 +34,21 @@ $breakpoints = array(); for ($i = 0; $i <= 3; $i++) { $width = ($i + 1) * 200; - $values = array( + $breakpoint = entity_create('breakpoint', array( 'name' => drupal_strtolower($this->randomName()), 'weight' => $i, 'mediaQuery' => "(min-width: {$width}px)", - ); - $breakpoint = new Breakpoint($values); + )); $breakpoint->save(); $breakpoints[$breakpoint->id()] = $breakpoint; } // Add a breakpoint group with minimum data only. $label = $this->randomName(); - $values = array( + + $group = entity_create('breakpoint_group', array( 'label' => $label, 'id' => drupal_strtolower($label), - ); - - $group = new BreakpointGroup($values); + )); $group->save(); $this->verifyBreakpointGroup($group); @@ -60,8 +58,9 @@ $this->verifyBreakpointGroup($group); // Duplicate the breakpoint group. - $new_set = new BreakpointGroup(); - $new_set->breakpoints = $group->breakpoints; + $new_set = entity_create('breakpoint_group', array( + 'breakpoints' => $group->breakpoints, + )); $duplicated_set = $group->duplicate(); $this->verifyBreakpointGroup($duplicated_set, $new_set); diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointThemeTest.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointThemeTest.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointThemeTest.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Tests/BreakpointThemeTest.php @@ -46,17 +46,18 @@ */ public function testThemeBreakpoints() { // Verify the breakpoint group for breakpoint_test_theme was created. - $breakpoint_group_obj = new BreakpointGroup(); - $breakpoint_group_obj->label = 'Breakpoint test theme'; - $breakpoint_group_obj->id = 'breakpoint_test_theme'; - $breakpoint_group_obj->sourceType = Breakpoint::SOURCE_TYPE_THEME; + $breakpoint_group_obj = entity_create('breakpoint_group', array( + 'label' => 'Breakpoint test theme', + 'id' => 'breakpoint_test_theme', + 'sourceType' => Breakpoint::SOURCE_TYPE_THEME, + 'overridden' => FALSE, + )); $breakpoint_group_obj->breakpoints = array( 'theme.breakpoint_test_theme.mobile' => array(), 'theme.breakpoint_test_theme.narrow' => array(), 'theme.breakpoint_test_theme.wide' => array(), 'theme.breakpoint_test_theme.tv' => array(), ); - $breakpoint_group_obj->overridden = 0; // Verify we can load this breakpoint defined by the theme. $this->verifyBreakpointGroup($breakpoint_group_obj); @@ -93,17 +94,18 @@ */ public function testThemeBreakpointGroup() { // Verify the breakpoint group 'test' was created by breakpoint_test_theme. - $breakpoint_group_obj = new BreakpointGroup(); - $breakpoint_group_obj->label = 'Test'; - $breakpoint_group_obj->id = 'test'; - $breakpoint_group_obj->sourceType = Breakpoint::SOURCE_TYPE_THEME; - $breakpoint_group_obj->source = 'breakpoint_test_theme'; + $breakpoint_group_obj = entity_create('breakpoint_group', array( + 'label' => 'Test', + 'id' => 'test', + 'sourceType' => Breakpoint::SOURCE_TYPE_THEME, + 'source' => 'breakpoint_test_theme', + 'overridden' => FALSE, + )); $breakpoint_group_obj->breakpoints = array( 'theme.breakpoint_test_theme.mobile' => array('1.5x', '2.x'), 'theme.breakpoint_test_theme.narrow' => array(), 'theme.breakpoint_test_theme.wide' => array(), ); - $breakpoint_group_obj->overridden = 0; // Verify we can load this breakpoint defined by the theme. $this->verifyBreakpointGroup($breakpoint_group_obj); @@ -123,32 +125,22 @@ // Verify the breakpoint group 'module_test' was created by // breakpoint_theme_test module. - $breakpoint_group_obj = new BreakpointGroup(); - $breakpoint_group_obj->label = 'Test Module'; - $breakpoint_group_obj->id = 'module_test'; - $breakpoint_group_obj->sourceType = Breakpoint::SOURCE_TYPE_MODULE; - $breakpoint_group_obj->source = 'breakpoint_theme_test'; + $breakpoint_group_obj = entity_create('breakpoint_group', array( + 'label' => 'Test Module', + 'id' => 'module_test', + 'sourceType' => Breakpoint::SOURCE_TYPE_MODULE, + 'source' => 'breakpoint_theme_test', + 'overridden' => FALSE, + )); $breakpoint_group_obj->breakpoints = array( 'theme.breakpoint_test_theme.mobile' => array(), - 'theme.breakpoint_test_theme.narrow' => array('3.x', '4.x'), + 'theme.breakpoint_test_theme.narrow' => array(), 'theme.breakpoint_test_theme.wide' => array(), ); - $breakpoint_group_obj->overridden = 0; // Verify we can load this breakpoint defined by the theme. $this->verifyBreakpointGroup($breakpoint_group_obj); - // Check that the multipliers are added to the settings. - $settings = breakpoint_settings(); - $expected_settings = array( - 0 => '1x', - 1 => '1.5x', - 2 => '2x', - 3 => '3x', - 4 => '4x', - ); - $this->assertEqual($settings->multipliers, $expected_settings, 'Multipliers are added to settings.'); - // Disable the test theme and verify the breakpoint group still exists. theme_disable(array('breakpoint_test_theme')); $this->assertTrue(entity_load('breakpoint_group', 'module_test'), 'Breakpoint group still exists if theme is disabled.'); diff -u b/core/modules/breakpoint/tests/config/breakpoint_theme_test.breakpoint_groups.yml b/core/modules/breakpoint/tests/config/breakpoint_theme_test.breakpoint_groups.yml --- b/core/modules/breakpoint/tests/config/breakpoint_theme_test.breakpoint_groups.yml +++ b/core/modules/breakpoint/tests/config/breakpoint_theme_test.breakpoint_groups.yml @@ -4,3 +4,3 @@ - theme.breakpoint_test_theme.mobile: [] - theme.breakpoint_test_theme.narrow: ['3x', '4x'] - theme.breakpoint_test_theme.wide: + - theme.breakpoint_test_theme.mobile + - theme.breakpoint_test_theme.narrow + - theme.breakpoint_test_theme.wide diff -u b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/breakpoint_test_theme.info b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/breakpoint_test_theme.info --- b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/breakpoint_test_theme.info +++ b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/breakpoint_test_theme.info @@ -5 +5 @@ -hidden = FALSE +hidden = TRUE diff -u b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/config/breakpoint_test_theme.breakpoint_groups.yml b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/config/breakpoint_test_theme.breakpoint_groups.yml --- b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/config/breakpoint_test_theme.breakpoint_groups.yml +++ b/core/modules/breakpoint/tests/themes/breakpoint_test_theme/config/breakpoint_test_theme.breakpoint_groups.yml @@ -4,3 +4,3 @@ - mobile: ['1.5x', '2x'] - narrow: - wide: + - mobile + - narrow + - wide