diff --git a/core/modules/responsive_preview/js/responsive-preview.js b/core/modules/responsive_preview/js/responsive-preview.js index 44637e4..d78bac6 100644 --- a/core/modules/responsive_preview/js/responsive-preview.js +++ b/core/modules/responsive_preview/js/responsive-preview.js @@ -734,7 +734,7 @@ Drupal.responsivePreview = Drupal.responsivePreview || { var paneHeight = height + (this.bleed * 2); // If the height of the pane that contains the preview frame is higher // than the available viewport area, then make it scroll. - if (paneHeight > (document.documentElement.clientHeight - offsets.top - offsets.bottom)) { + if ((paneHeight + $container.position().top) > (document.documentElement.clientHeight - offsets.top - offsets.bottom)) { $scrollPane .css({ height: paneHeight @@ -803,7 +803,12 @@ Drupal.responsivePreview = Drupal.responsivePreview || { // Step 0: find DOM nodes we'll need to modify. var $frame = this.$el.find('#responsive-preview-frame'); - var $html = $($frame[0].contentDocument || $frame[0].contentWindow.document).find('html'); + var doc = $frame[0].contentDocument || ($frame[0].contentWindow && $frame[0].contentWindow.document); + // No document has been loaded into the iframe yet. + if (!doc) { + return; + } + var $html = $(doc).find('html'); // Step 1: When scaling (as we're about to do), the background (color and // image) doesn't scale along. Fortunately, we can fix things in case of @@ -888,7 +893,8 @@ Drupal.responsivePreview = Drupal.responsivePreview || { scale = Math.max(scale, 0.25); var transform = "scale(" + scale + ")"; - var origin = "0 0"; + var xOrigin = (this.envModel.get('dir') === 'rtl') ? layoutViewportWidth : '0'; + var origin = xOrigin + "px 0px"; return { 'min-width': layoutViewportWidth + 'px', 'min-height': layoutViewportHeight + 'px', diff --git a/core/modules/responsive_preview/lib/Drupal/responsive_preview/Entity/Device.php b/core/modules/responsive_preview/lib/Drupal/responsive_preview/Entity/Device.php index e22e56b..f3adfba 100644 --- a/core/modules/responsive_preview/lib/Drupal/responsive_preview/Entity/Device.php +++ b/core/modules/responsive_preview/lib/Drupal/responsive_preview/Entity/Device.php @@ -89,7 +89,7 @@ class Device extends ConfigEntityBase { */ public function uri() { return array( - 'path' => 'admin/config/content/responsive-preview/manage/' . $this->id(), + 'path' => 'admin/config/content/responsive-preview/' . $this->id(), 'options' => array( 'entity_type' => $this->entityType, 'entity' => $this, diff --git a/core/modules/responsive_preview/lib/Drupal/responsive_preview/Tests/DeviceCRUDTest.php b/core/modules/responsive_preview/lib/Drupal/responsive_preview/Tests/DeviceCRUDTest.php index 777a7de..931f9c5 100644 --- a/core/modules/responsive_preview/lib/Drupal/responsive_preview/Tests/DeviceCRUDTest.php +++ b/core/modules/responsive_preview/lib/Drupal/responsive_preview/Tests/DeviceCRUDTest.php @@ -43,15 +43,15 @@ function testDeviceConfiguration() { $this->drupalGet('admin/config/content/responsive-preview'); // Some default devices exist. - $this->assertLinkByHref('admin/config/content/responsive-preview/manage/large/delete'); - $this->assertLinkByHref('admin/config/content/responsive-preview/manage/ipad/delete'); + $this->assertLinkByHref('admin/config/content/responsive-preview/large/delete'); + $this->assertLinkByHref('admin/config/content/responsive-preview/ipad/delete'); // Some devices are shown by default. $this->drupalGet(''); $this->checkDevices(array('iphone5', 'ipad', 'nexus4', 'nexus7')); // Delete one of the predefined devices. - $this->drupalPostForm('admin/config/content/responsive-preview/manage/iphone5/delete', array(), t('Delete')); + $this->drupalPostForm('admin/config/content/responsive-preview/iphone5/delete', array(), t('Delete')); $this->assertRaw(t('Device %name has been deleted.', array('%name' => 'iPhone 5'))); // Make generic tablet appear in the list. @@ -72,6 +72,17 @@ function testDeviceConfiguration() { // Check updated device list. New devices are shown in the list by default. $this->drupalGet(''); $this->checkDevices(array('smartwatch', 'ipad', 'medium', 'nexus4', 'nexus7')); + + // Update an existing device. + $edit = array( + 'dimensions[width]' => '1600', + 'dimensions[height]' => '2850', + 'dimensions[dppx]' => '2', + ); + + // Delete one of the predefined devices. + $this->drupalPostForm('admin/config/content/responsive-preview/iphone4', $edit, t('Save')); + $this->assertRaw(t('Device %name has been updated.', array('%name' => 'iPhone 4'))); } /** diff --git a/core/modules/responsive_preview/responsive_preview.module b/core/modules/responsive_preview/responsive_preview.module index 216b194..b85b7f4 100644 --- a/core/modules/responsive_preview/responsive_preview.module +++ b/core/modules/responsive_preview/responsive_preview.module @@ -38,16 +38,16 @@ function responsive_preview_menu() { 'route_name' => 'responsive_preview.device.add', 'type' => MENU_SIBLING_LOCAL_TASK, ); - $items['admin/config/content/responsive-preview/manage/%responsive_preview_device'] = array( + $items['admin/config/content/responsive-preview/%responsive_preview_device'] = array( 'title' => 'Edit device', 'route_name' => 'responsive_preview.device.edit', ); - $items['admin/config/content/responsive-preview/manage/%responsive_preview_device/edit'] = array( - 'title' => 'Edit', + $items['admin/config/content/responsive-preview/%responsive_preview_device/edit'] = array( + 'title' => 'Edit device', 'type' => MENU_DEFAULT_LOCAL_TASK, ); - $items['admin/config/content/responsive-preview/manage/%responsive_preview_device/delete'] = array( - 'title' => 'Delete', + $items['admin/config/content/responsive-preview/%responsive_preview_device/delete'] = array( + 'title' => 'Delete device', 'route_name' => 'responsive_preview.device.delete', 'type' => MENU_LOCAL_TASK, 'context' => MENU_CONTEXT_INLINE, diff --git a/core/modules/responsive_preview/responsive_preview.routing.yml b/core/modules/responsive_preview/responsive_preview.routing.yml index 1d3d338..fdbea95 100644 --- a/core/modules/responsive_preview/responsive_preview.routing.yml +++ b/core/modules/responsive_preview/responsive_preview.routing.yml @@ -1,6 +1,7 @@ responsive_preview.device.list: path: 'admin/config/content/responsive-preview' defaults: + _title: 'Responsive preview' _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' entity_type: 'responsive_preview_device' requirements: @@ -9,20 +10,23 @@ responsive_preview.device.list: responsive_preview.device.add: path: 'admin/config/content/responsive-preview/add' defaults: + _title: 'Add device' _entity_form: responsive_preview_device.add requirements: _permission: 'administer site configuration' responsive_preview.device.edit: - path: 'admin/config/content/responsive-preview/manage/{responsive_preview_device}' + path: 'admin/config/content/responsive-preview/{responsive_preview_device}' defaults: + _title: 'Edit device' _entity_form: responsive_preview_device.edit requirements: _permission: 'administer site configuration' responsive_preview.device.delete: - path: 'admin/config/content/responsive-preview/manage/{responsive_preview_device}/delete' + path: 'admin/config/content/responsive-preview/{responsive_preview_device}/delete' defaults: + _title: 'Delete device' _entity_form: responsive_preview_device.delete requirements: _permission: 'administer site configuration'