diff --git a/core/includes/config.inc b/core/includes/config.inc index b4a0666..6db6d81 100644 --- a/core/includes/config.inc +++ b/core/includes/config.inc @@ -4,6 +4,7 @@ use Drupal\Core\Config\FileStorage; use Drupal\Core\Config\NullStorage; use Drupal\Core\Config\StorageInterface; +use Drupal\Core\Config\Schema\SchemaStorage; /** * @file @@ -240,6 +241,7 @@ function config_import() { * @param Drupal\Core\Config\StorageInterface $target_storage * The storage to synchronize configuration to. * + * @return array * @todo Add support for other extension types; e.g., themes etc. */ function config_import_invoke_owner(array $config_changes, StorageInterface $source_storage, StorageInterface $target_storage) { diff --git a/core/lib/Drupal/Core/Config/InstallStorage.php b/core/lib/Drupal/Core/Config/InstallStorage.php index 5a7044b..8c2d793 100644 --- a/core/lib/Drupal/Core/Config/InstallStorage.php +++ b/core/lib/Drupal/Core/Config/InstallStorage.php @@ -15,6 +15,13 @@ class InstallStorage extends FileStorage { /** + * Folder map indexed by configuration name. + * + * @var array + */ + protected $folders; + + /** * Overrides Drupal\Core\Config\FileStorage::__construct(). */ public function __construct() { @@ -38,17 +45,9 @@ public function __construct() { * afterwards check for a corresponding module or theme. */ public function getFilePath($name) { - // Extract the owner. - $owner = strtok($name, '.'); - // Determine the path to the owner. - $path = FALSE; - foreach (array('profile', 'module', 'theme') as $type) { - if ($path = drupal_get_path($type, $owner)) { - $file = $path . '/config/' . $name . '.' . static::getFileExtension(); - if (file_exists($file)) { - return $file; - } - } + $folders = $this->getAllFolders(); + if (isset($folders[$name])) { + return $folders[$name] . '/' . $name . '.' . $this->getFileExtension(); } // If any code in the early installer requests a configuration object that // does not exist anywhere as default config, then that must be mistake. @@ -83,15 +82,83 @@ public function delete($name) { public function rename($name, $new_name) { throw new StorageException('Rename operation is not allowed during install.'); } - /** * Implements Drupal\Core\Config\StorageInterface::listAll(). * * @throws Drupal\Core\Config\StorageException */ public function listAll($prefix = '') { - throw new StorageException('List operation is not allowed during install.'); - } + $names = array_keys($this->getAllFolders()); + if (!$prefix) { + return $names; + } + else { + $return = array(); + foreach ($names as $index => $name) { + if (strpos($name, $prefix) === 0 ) { + $return[$index] = $names[$index]; + } + } + return $return; + } + } + + /** + * Returns a map of all metadata names and the module they belong to. + * + * @return array + * An array mapping metadata names with directories. + */ + protected function getAllFolders() { + if (!isset($this->folders)) { + $this->folders = $this->getComponentNames('profile', array(drupal_get_profile())); + $this->folders += $this->getComponentNames('module', array_keys(drupal_system_listing('/^' . DRUPAL_PHP_FUNCTION_PATTERN . '\.module$/', 'modules', 'name', 0))); + $this->folders += $this->getComponentNames('theme', array_keys(drupal_system_listing('/^' . DRUPAL_PHP_FUNCTION_PATTERN . '\.info$/', 'themes'))); + } + return $this->folders; + } + + /** + * Get all configuration names and folders for a list of modules or themes. + * + * @param string $type + * Type of components: 'module' | 'theme' | 'profile' + * @param array $list + * Array of theme or module names. + * + * @return array + * Folders indexed by configuration name. + */ + public function getComponentNames($type, $list) { + $extension = '.' . $this->getFileExtension(); + $folders = array(); + foreach ($list as $name) { + $directory = $this->getComponentFolder($type, $name); + if (file_exists($directory)) { + $files = glob($directory . '/*' . $extension); + foreach ($files as $filename) { + $name = basename($filename, $extension); + $folders[$name] = $directory; + } + } + } + return $folders; + } + + /** + * Get folder inside each component that contains the files. + * + * @param string $type + * Component type: 'module' | 'theme' | 'profile' + * @param string $name + * Component name. + * + * @return string + * The configuration folder name for this component. + */ + protected function getComponentFolder($type, $name) { + return drupal_get_path($type, $name) . '/config'; + } /** * Overrides Drupal\Core\Config\FileStorage::deleteAll(). diff --git a/core/lib/Drupal/Core/Config/Schema/SchemaStorage.php b/core/lib/Drupal/Core/Config/Schema/SchemaStorage.php new file mode 100644 index 0000000..d6df48e --- /dev/null +++ b/core/lib/Drupal/Core/Config/Schema/SchemaStorage.php @@ -0,0 +1,31 @@ +getAllFolders()); + } + + /** + * Overrides Drupal\Core\Config\InstallStorage::getComponentFolder(). + */ + protected function getComponentFolder($type, $name) { + return drupal_get_path($type, $name) . '/config/schema'; + } + +} diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php index 035f282..8425e9b 100644 --- a/core/lib/Drupal/Core/CoreBundle.php +++ b/core/lib/Drupal/Core/CoreBundle.php @@ -61,9 +61,14 @@ public function build(ContainerBuilder $container) { ->register('config.storage.staging', 'Drupal\Core\Config\FileStorage') ->addArgument(config_get_config_directory(CONFIG_STAGING_DIRECTORY)); + + // Register schema configuration storage. + $container + ->register('config.schema.storage', 'Drupal\Core\Config\Schema\SchemaStorage'); + // Register the typed configuration data manager. $container->register('config.typed', 'Drupal\Core\Config\TypedConfigManager') - ->addArgument(new Reference('config.storage')); + ->addArgument(new Reference('config.schema.storage')); // Register the service for the default database connection. $container->register('database', 'Drupal\Core\Database\Connection') diff --git a/core/modules/contact/config/contact.schema.yml b/core/modules/contact/config/contact.schema.yml deleted file mode 100644 index f0b70bd..0000000 --- a/core/modules/contact/config/contact.schema.yml +++ /dev/null @@ -1,35 +0,0 @@ -# Configuration schema: contact.schema.yml - -# Schema for contact category (multiple) -contact.category.*: - type: mapping - mapping: - "id": - type: string - "label": - type: string - "recipients": - type: sequence - sequence: - - type: email - "reply": - type: string - "weight": - type: integer - -# Module settings -contact.settings: - type: mapping - mapping: - "default_category": - type: string - required: yes - "flood": - type: mapping - mapping: - "limit": - type: integer - "interval": - type: integer - "user_default_enabled": - type: boolean diff --git a/core/modules/contact/config/schema/contact.schema.yml b/core/modules/contact/config/schema/contact.schema.yml new file mode 100644 index 0000000..f0b70bd --- /dev/null +++ b/core/modules/contact/config/schema/contact.schema.yml @@ -0,0 +1,35 @@ +# Configuration schema: contact.schema.yml + +# Schema for contact category (multiple) +contact.category.*: + type: mapping + mapping: + "id": + type: string + "label": + type: string + "recipients": + type: sequence + sequence: + - type: email + "reply": + type: string + "weight": + type: integer + +# Module settings +contact.settings: + type: mapping + mapping: + "default_category": + type: string + required: yes + "flood": + type: mapping + mapping: + "limit": + type: integer + "interval": + type: integer + "user_default_enabled": + type: boolean diff --git a/core/modules/image/config/image.schema.yml b/core/modules/image/config/image.schema.yml deleted file mode 100644 index f4c8fd0..0000000 --- a/core/modules/image/config/image.schema.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Image module schema: image.schema.yml - -# Data types for image module. -image.size: - type: mapping - mapping: - "width": - type: integer - label: "Width" - "height": - type: integer - label: "Height" - -# Image styles (multiple). -# Plugin \Drupal\image\Plugin\Core\Entity\ImageStyle -image.style.*: - type: mapping - label: "Image style" - mapping: - "name": - type: string - "label": - type: label - "effects": - type: sequence - sequence: - - type: mapping - mapping: - "name": - type: string - "data": - type: image.effect.[%parent.name] - "weight": - type: integer - "ieid": - type: string - -# Image effects plugins: image.effect.% -# These are used in image styles. -image.effect.image_crop: - type: image.size - label: "Image crop" - mapping: - "anchor": - label: "Anchor" - -image.effect.image_resize: - type: image.size - label: "Image resize" - -image.effect.image_rotate: - type: mapping - label: "Image rotate" - mapping: - degrees: - type: integer - label: 'Rotation angle' - bgcolor: - label: 'Background color' - random: - type: boolean - label: 'Randomize' - -image.effect.image_scale: - type: image.size - label: "Image scale" - mapping: - "upscale": - type: boolean - label: "Upscale" - -image.effect.image_scale_and_crop: - type: image.size - label: "Image scale and crop" - -# Schema for configuration files of image module. -image.settings: - type: mapping - mapping: - "preview_image": - type: string - label: "Preview image" diff --git a/core/modules/image/config/schema/image.schema.yml b/core/modules/image/config/schema/image.schema.yml new file mode 100644 index 0000000..f4c8fd0 --- /dev/null +++ b/core/modules/image/config/schema/image.schema.yml @@ -0,0 +1,82 @@ +# Image module schema: image.schema.yml + +# Data types for image module. +image.size: + type: mapping + mapping: + "width": + type: integer + label: "Width" + "height": + type: integer + label: "Height" + +# Image styles (multiple). +# Plugin \Drupal\image\Plugin\Core\Entity\ImageStyle +image.style.*: + type: mapping + label: "Image style" + mapping: + "name": + type: string + "label": + type: label + "effects": + type: sequence + sequence: + - type: mapping + mapping: + "name": + type: string + "data": + type: image.effect.[%parent.name] + "weight": + type: integer + "ieid": + type: string + +# Image effects plugins: image.effect.% +# These are used in image styles. +image.effect.image_crop: + type: image.size + label: "Image crop" + mapping: + "anchor": + label: "Anchor" + +image.effect.image_resize: + type: image.size + label: "Image resize" + +image.effect.image_rotate: + type: mapping + label: "Image rotate" + mapping: + degrees: + type: integer + label: 'Rotation angle' + bgcolor: + label: 'Background color' + random: + type: boolean + label: 'Randomize' + +image.effect.image_scale: + type: image.size + label: "Image scale" + mapping: + "upscale": + type: boolean + label: "Upscale" + +image.effect.image_scale_and_crop: + type: image.size + label: "Image scale and crop" + +# Schema for configuration files of image module. +image.settings: + type: mapping + mapping: + "preview_image": + type: string + label: "Preview image" diff --git a/core/modules/system/config/schema/system.schema.yml b/core/modules/system/config/schema/system.schema.yml new file mode 100644 index 0000000..3514260 --- /dev/null +++ b/core/modules/system/config/schema/system.schema.yml @@ -0,0 +1,104 @@ +# Basic scalar data types from typed data. +boolean: + label: 'Boolean' + class: '\Drupal\Core\TypedData\Type\Boolean' +email: + label: 'Email' + class: '\Drupal\Core\TypedData\Type\Email' +integer: + label: 'Integer' + class: '\Drupal\Core\TypedData\Type\Integer' +string: + label: 'String' + class: '\Drupal\Core\TypedData\Type\String' +uri: + label: 'Uri' + class: '\Drupal\Core\TypedData\Type\Uri' + +# Basic data types for configuration. +undefined: + label: 'Undefined' + class: '\Drupal\Core\Config\Schema\Property' +mapping: + label: Mapping + class: '\Drupal\Core\Config\Schema\Mapping' +sequence: + label: Sequence + class: '\Drupal\Core\Config\Schema\Sequence' + +# Default mapping for unknown types or types not found. +default: + type: undefined + label: 'Unknown' + +# Simple extended data types: + +# Human readable string that must be plain text and editable with a text field. +label: + type: string + label: 'Label' + +# Internal Drupal path +path: + type: string + label: 'Path' + +# Human readable string that can contain multiple lines of text or HTML. +text: + type: string + label: 'Text' + +# Complex extended data types: + +# Mail text with subject and body parts. +mail: + type: mapping + label: "Mail" + mapping: + "subject": + type: text + label: "Subject" + "body": + type: text + label: "Body" + +# Schema for configuration files of system module: + +system.site: + type: mapping + label: 'Site information' + mapping: + "name": + label: "Site name" + type: label + "mail": + label: "Site mail" + type: email + "slogan": + label: "Site slogan" + type: text + "page": + type: mapping + mapping: + "403": + type: path + "404": + type: path + "front": + type: path + label: "Front page path" + "admin_compact_mode": + type: boolean + "weight_select_max": + type: integer + +system.maintenance: + type: mapping + label: 'Maintenance mode' + mapping: + "enabled": + type: boolean + label: "Put site into maintenance mode" + "message": + type: text + label: "Message to display when in maintenance mode" diff --git a/core/modules/system/config/system.schema.yml b/core/modules/system/config/system.schema.yml deleted file mode 100644 index 3514260..0000000 --- a/core/modules/system/config/system.schema.yml +++ /dev/null @@ -1,104 +0,0 @@ -# Basic scalar data types from typed data. -boolean: - label: 'Boolean' - class: '\Drupal\Core\TypedData\Type\Boolean' -email: - label: 'Email' - class: '\Drupal\Core\TypedData\Type\Email' -integer: - label: 'Integer' - class: '\Drupal\Core\TypedData\Type\Integer' -string: - label: 'String' - class: '\Drupal\Core\TypedData\Type\String' -uri: - label: 'Uri' - class: '\Drupal\Core\TypedData\Type\Uri' - -# Basic data types for configuration. -undefined: - label: 'Undefined' - class: '\Drupal\Core\Config\Schema\Property' -mapping: - label: Mapping - class: '\Drupal\Core\Config\Schema\Mapping' -sequence: - label: Sequence - class: '\Drupal\Core\Config\Schema\Sequence' - -# Default mapping for unknown types or types not found. -default: - type: undefined - label: 'Unknown' - -# Simple extended data types: - -# Human readable string that must be plain text and editable with a text field. -label: - type: string - label: 'Label' - -# Internal Drupal path -path: - type: string - label: 'Path' - -# Human readable string that can contain multiple lines of text or HTML. -text: - type: string - label: 'Text' - -# Complex extended data types: - -# Mail text with subject and body parts. -mail: - type: mapping - label: "Mail" - mapping: - "subject": - type: text - label: "Subject" - "body": - type: text - label: "Body" - -# Schema for configuration files of system module: - -system.site: - type: mapping - label: 'Site information' - mapping: - "name": - label: "Site name" - type: label - "mail": - label: "Site mail" - type: email - "slogan": - label: "Site slogan" - type: text - "page": - type: mapping - mapping: - "403": - type: path - "404": - type: path - "front": - type: path - label: "Front page path" - "admin_compact_mode": - type: boolean - "weight_select_max": - type: integer - -system.maintenance: - type: mapping - label: 'Maintenance mode' - mapping: - "enabled": - type: boolean - label: "Put site into maintenance mode" - "message": - type: text - label: "Message to display when in maintenance mode" diff --git a/core/modules/user/config/schema/user.schema.yml b/core/modules/user/config/schema/user.schema.yml new file mode 100644 index 0000000..6af7471 --- /dev/null +++ b/core/modules/user/config/schema/user.schema.yml @@ -0,0 +1,75 @@ +# User module schema: user.schema.yml + +# User mails. +user.mail: + type: mapping + mapping: + "cancel_confirm": + type: mail + label: "Account cancellation confirmation" + "password_reset": + type: mail + label: "Password reset email" + "register_admin_created": + type: mail + label: "Account created by administrator" + "register_no_approval_required": + type: mail + label: "Registration confirmation (No approval required)" + "register_pending_approval": + type: mail + label: "Registration confirmation (Pending approval)" + "status_activated": + type: mail + label: "Account activation" + "status_blocked": + type: mail + label: "Account blocked" + "status_canceled": + type: mail + label: "Account cancelled" + +# User settings. +user.settings: + type: mapping + mapping: + "admin_role": + type: string + label: "Administrator role" + "anonymous": + type: label + label: "Anonymous name" + "verify_mail": + type: boolean + label: "Verify mail" + "notify": + type: mapping + label: "Notify user" + mapping: + "cancel_confirm": + type: boolean + "password_reset": + type: boolean + "status_activated": + type: boolean + "status_blocked": + type: boolean + "status_cancelled": + type: boolean + "register_admin_created": + type: boolean + "register_no_approval_required": + type: boolean + "register_pending_approval": + type: boolean + "register": + type: string + enum: [visitors, admin_only, visitors_admin_approval] + "signatures": + type: boolean + label: "User signatures" + "cancel_method": + type: string + label: "User cancel method" + "password_reset_timeout": + type: integer diff --git a/core/modules/user/config/user.schema.yml b/core/modules/user/config/user.schema.yml deleted file mode 100644 index 6af7471..0000000 --- a/core/modules/user/config/user.schema.yml +++ /dev/null @@ -1,75 +0,0 @@ -# User module schema: user.schema.yml - -# User mails. -user.mail: - type: mapping - mapping: - "cancel_confirm": - type: mail - label: "Account cancellation confirmation" - "password_reset": - type: mail - label: "Password reset email" - "register_admin_created": - type: mail - label: "Account created by administrator" - "register_no_approval_required": - type: mail - label: "Registration confirmation (No approval required)" - "register_pending_approval": - type: mail - label: "Registration confirmation (Pending approval)" - "status_activated": - type: mail - label: "Account activation" - "status_blocked": - type: mail - label: "Account blocked" - "status_canceled": - type: mail - label: "Account cancelled" - -# User settings. -user.settings: - type: mapping - mapping: - "admin_role": - type: string - label: "Administrator role" - "anonymous": - type: label - label: "Anonymous name" - "verify_mail": - type: boolean - label: "Verify mail" - "notify": - type: mapping - label: "Notify user" - mapping: - "cancel_confirm": - type: boolean - "password_reset": - type: boolean - "status_activated": - type: boolean - "status_blocked": - type: boolean - "status_cancelled": - type: boolean - "register_admin_created": - type: boolean - "register_no_approval_required": - type: boolean - "register_pending_approval": - type: boolean - "register": - type: string - enum: [visitors, admin_only, visitors_admin_approval] - "signatures": - type: boolean - label: "User signatures" - "cancel_method": - type: string - label: "User cancel method" - "password_reset_timeout": - type: integer diff --git a/core/modules/views/config/schema/views.schema.yml b/core/modules/views/config/schema/views.schema.yml new file mode 100644 index 0000000..59c90a5 --- /dev/null +++ b/core/modules/views/config/schema/views.schema.yml @@ -0,0 +1,232 @@ +# View definition (multiple) +views.view.*: + type: mapping + label: 'View' + mapping: + disabled: + type: boolean + label: 'Disabled' + api_version: + label: 'API version' + module: + label: 'Module' + name: + label: 'Machine name' + description: + type: text + label: 'Administrative description' + tag: + label: 'Tag' + base_table: + label: 'Base table' + base_field: + label: 'Base field' + human_name: + type: label + label: 'Human readable name' + core: + label: 'Drupal version' + uuid: + label: 'UUID' + display: + type: sequence + label: 'Displays' + sequence: + - type: mapping + label: 'Display settings' + mapping: + id: + label: 'Machine name' + display_title: + type: text + label: 'Title' + display_plugin: + label: 'Display plugin' + position: + type: integer + label: 'Position' + display_options: + type: 'views.display.[%parent.display_plugin]' + +# Views display: common +# Options for Drupal\views\Plugin\views\display\DisplayPluginBase +views.display.*: + type: mapping + label: 'Display options' + mapping: + title: + type: text + label: 'Display title' + format: + label: 'Format' + fields: + type: sequence + label: 'Fields' + sequence: + - type: 'views.field.[table]-[field]' + pager: + type: mapping + label: 'Pager' + mapping: + type: + label: 'Pager type' + options: + type: mapping + label: 'Options' + mapping: + offset: + type: integer + label: 'Offset' + + exposed_form: + type: mapping + label: 'Exposed form' + mapping: + type: + label: 'Exposed form type' + access: + type: mapping + label: 'Access' + mapping: + type: + label: 'Access type' + other: + label: 'Other' + cache: + type: mapping + label: 'Cache' + mapping: + type: + label: 'Cache type' + sorts: + type: sequence + label: 'Sorts' + sequence: + - type: 'views.sort.[table]-[field]' + arguments: + type: sequence + label: 'Arguments' + sequence: + - type: 'views.argument.[table]-[field]' + filters: + type: sequence + label: 'Filters' + sequence: + - type: 'views.filter.[table]-[field]' + style: + type: mapping + label: 'Style' + mapping: + type: + label: 'Type' + row: + type: mapping + label: 'Row' + mapping: + type: + label: 'Row type' + options: + include: 'views.row.[%parent.type]' + query: + type: mapping + label: 'Query' + mapping: + type: + label: 'Query type' + options: + type: mapping + label: 'Query options' + mapping: + query_comment: + type: boolean + label: 'Query comment' + defaults: + type: mapping + label: 'Defaults' + mapping: + style_plugin: + label: 'Style plugin' + style_options: + type: 'views.style.[%parent.style_plugin]' + row_plugin: + label: 'Row plugin' + row_options: + type: 'views.style.[%parent.row_plugin]' + relationships: + type: sequence + label: 'Relationships' + sequence: + - type: 'views.relationship.[table]-[field]' + +# Options for Drupal\views\Plugin\views\display\PathPluginBase +views.display.PathPluginBase: + include: 'views.display.%' + type: mapping + mapping: + path: + type: string + label: 'Page path' + +# Views display plugin: Drupal\views\Plugin\views\display\Page +views.display.page: + type: 'views.display.PathPluginBase' + label: 'Page display options' + mapping: + menu: + type: mapping + label: 'Menu' + mapping: + type: + label: 'Type' + title: + type: text + label: 'Title' + description: + type: text + label: 'Description' + weight: + type: integer + label: 'Weight' + name: + label: 'Menu name' + context: + label: 'Context' + tab_options: + type: mapping + label: 'Tab options' + mapping: + type: + label: 'Type' + title: + type: text + label: 'Title' + description: + type: text + label: 'Description' + weight: + type: integer + label: 'Weight' + name: + label: 'Menu name' + +# Views display plugin: Drupal\views\Plugin\views\display\Block +views.display.block: + type: 'views.display.%' + label: 'Block display options' + mapping: + block_description: + type: text + label: 'Block name' + block_caching: + label: 'Block caching' + +# Views display plugin: Drupal\views\Plugin\views\display\Feed +views.display.feed: + type: 'views.display.PathPluginBase' + label: 'Feed display options' + mapping: + sitename_title: + type: boolean + label: 'Use the site name for the title' + displays: + label: 'The feed icon will be available only to the selected displays.' diff --git a/core/modules/views/config/views.schema.yml b/core/modules/views/config/views.schema.yml deleted file mode 100644 index 59c90a5..0000000 --- a/core/modules/views/config/views.schema.yml +++ /dev/null @@ -1,232 +0,0 @@ -# View definition (multiple) -views.view.*: - type: mapping - label: 'View' - mapping: - disabled: - type: boolean - label: 'Disabled' - api_version: - label: 'API version' - module: - label: 'Module' - name: - label: 'Machine name' - description: - type: text - label: 'Administrative description' - tag: - label: 'Tag' - base_table: - label: 'Base table' - base_field: - label: 'Base field' - human_name: - type: label - label: 'Human readable name' - core: - label: 'Drupal version' - uuid: - label: 'UUID' - display: - type: sequence - label: 'Displays' - sequence: - - type: mapping - label: 'Display settings' - mapping: - id: - label: 'Machine name' - display_title: - type: text - label: 'Title' - display_plugin: - label: 'Display plugin' - position: - type: integer - label: 'Position' - display_options: - type: 'views.display.[%parent.display_plugin]' - -# Views display: common -# Options for Drupal\views\Plugin\views\display\DisplayPluginBase -views.display.*: - type: mapping - label: 'Display options' - mapping: - title: - type: text - label: 'Display title' - format: - label: 'Format' - fields: - type: sequence - label: 'Fields' - sequence: - - type: 'views.field.[table]-[field]' - pager: - type: mapping - label: 'Pager' - mapping: - type: - label: 'Pager type' - options: - type: mapping - label: 'Options' - mapping: - offset: - type: integer - label: 'Offset' - - exposed_form: - type: mapping - label: 'Exposed form' - mapping: - type: - label: 'Exposed form type' - access: - type: mapping - label: 'Access' - mapping: - type: - label: 'Access type' - other: - label: 'Other' - cache: - type: mapping - label: 'Cache' - mapping: - type: - label: 'Cache type' - sorts: - type: sequence - label: 'Sorts' - sequence: - - type: 'views.sort.[table]-[field]' - arguments: - type: sequence - label: 'Arguments' - sequence: - - type: 'views.argument.[table]-[field]' - filters: - type: sequence - label: 'Filters' - sequence: - - type: 'views.filter.[table]-[field]' - style: - type: mapping - label: 'Style' - mapping: - type: - label: 'Type' - row: - type: mapping - label: 'Row' - mapping: - type: - label: 'Row type' - options: - include: 'views.row.[%parent.type]' - query: - type: mapping - label: 'Query' - mapping: - type: - label: 'Query type' - options: - type: mapping - label: 'Query options' - mapping: - query_comment: - type: boolean - label: 'Query comment' - defaults: - type: mapping - label: 'Defaults' - mapping: - style_plugin: - label: 'Style plugin' - style_options: - type: 'views.style.[%parent.style_plugin]' - row_plugin: - label: 'Row plugin' - row_options: - type: 'views.style.[%parent.row_plugin]' - relationships: - type: sequence - label: 'Relationships' - sequence: - - type: 'views.relationship.[table]-[field]' - -# Options for Drupal\views\Plugin\views\display\PathPluginBase -views.display.PathPluginBase: - include: 'views.display.%' - type: mapping - mapping: - path: - type: string - label: 'Page path' - -# Views display plugin: Drupal\views\Plugin\views\display\Page -views.display.page: - type: 'views.display.PathPluginBase' - label: 'Page display options' - mapping: - menu: - type: mapping - label: 'Menu' - mapping: - type: - label: 'Type' - title: - type: text - label: 'Title' - description: - type: text - label: 'Description' - weight: - type: integer - label: 'Weight' - name: - label: 'Menu name' - context: - label: 'Context' - tab_options: - type: mapping - label: 'Tab options' - mapping: - type: - label: 'Type' - title: - type: text - label: 'Title' - description: - type: text - label: 'Description' - weight: - type: integer - label: 'Weight' - name: - label: 'Menu name' - -# Views display plugin: Drupal\views\Plugin\views\display\Block -views.display.block: - type: 'views.display.%' - label: 'Block display options' - mapping: - block_description: - type: text - label: 'Block name' - block_caching: - label: 'Block caching' - -# Views display plugin: Drupal\views\Plugin\views\display\Feed -views.display.feed: - type: 'views.display.PathPluginBase' - label: 'Feed display options' - mapping: - sitename_title: - type: boolean - label: 'Use the site name for the title' - displays: - label: 'The feed icon will be available only to the selected displays.'