Issue #2962110 by samuel.mortenson, drpal, andrewmacpherson, ckrina, phenaproxima, yoroy, webchick, amateescu, chr.fritsch, starshaped, lauriii, webflo, Dennis Cohn, dawehner, seanB, rfmarcelino, DyanneNova, benjifisher, jan.stoeckler, danbohea, John Pitcairn: Add the Media Library module to Drupal core
							parent
							
								
									4dc2f4aea8
								
							
						
					
					
						commit
						d4350e2b1e
					
				| 
						 | 
				
			
			@ -133,6 +133,7 @@
 | 
			
		|||
        "drupal/locale": "self.version",
 | 
			
		||||
        "drupal/minimal": "self.version",
 | 
			
		||||
        "drupal/media": "self.version",
 | 
			
		||||
        "drupal/media_library": "self.version",
 | 
			
		||||
        "drupal/menu_link_content": "self.version",
 | 
			
		||||
        "drupal/menu_ui": "self.version",
 | 
			
		||||
        "drupal/migrate": "self.version",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  enforced:
 | 
			
		||||
    module:
 | 
			
		||||
      - media_library
 | 
			
		||||
  module:
 | 
			
		||||
    - media
 | 
			
		||||
id: media.media_library
 | 
			
		||||
label: 'Media library'
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
cache: true
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,447 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - core.entity_view_mode.media.media_library
 | 
			
		||||
  enforced:
 | 
			
		||||
    module:
 | 
			
		||||
      - media_library
 | 
			
		||||
  module:
 | 
			
		||||
    - media
 | 
			
		||||
    - user
 | 
			
		||||
id: media_library
 | 
			
		||||
label: 'Media library'
 | 
			
		||||
module: views
 | 
			
		||||
description: ''
 | 
			
		||||
tag: ''
 | 
			
		||||
base_table: media_field_data
 | 
			
		||||
base_field: mid
 | 
			
		||||
core: 8.x
 | 
			
		||||
display:
 | 
			
		||||
  default:
 | 
			
		||||
    display_plugin: default
 | 
			
		||||
    id: default
 | 
			
		||||
    display_title: Master
 | 
			
		||||
    position: 0
 | 
			
		||||
    display_options:
 | 
			
		||||
      access:
 | 
			
		||||
        type: perm
 | 
			
		||||
        options:
 | 
			
		||||
          perm: 'access media overview'
 | 
			
		||||
      cache:
 | 
			
		||||
        type: tag
 | 
			
		||||
        options: {  }
 | 
			
		||||
      query:
 | 
			
		||||
        type: views_query
 | 
			
		||||
        options:
 | 
			
		||||
          disable_sql_rewrite: false
 | 
			
		||||
          distinct: false
 | 
			
		||||
          replica: false
 | 
			
		||||
          query_comment: ''
 | 
			
		||||
          query_tags: {  }
 | 
			
		||||
      exposed_form:
 | 
			
		||||
        type: basic
 | 
			
		||||
        options:
 | 
			
		||||
          submit_button: 'Apply Filters'
 | 
			
		||||
          reset_button: false
 | 
			
		||||
          reset_button_label: Reset
 | 
			
		||||
          exposed_sorts_label: 'Sort by'
 | 
			
		||||
          expose_sort_order: false
 | 
			
		||||
          sort_asc_label: Asc
 | 
			
		||||
          sort_desc_label: Desc
 | 
			
		||||
      pager:
 | 
			
		||||
        type: mini
 | 
			
		||||
        options:
 | 
			
		||||
          items_per_page: 25
 | 
			
		||||
          offset: 0
 | 
			
		||||
          id: 0
 | 
			
		||||
          total_pages: null
 | 
			
		||||
          expose:
 | 
			
		||||
            items_per_page: false
 | 
			
		||||
            items_per_page_label: 'Items per page'
 | 
			
		||||
            items_per_page_options: '5, 10, 25, 50'
 | 
			
		||||
            items_per_page_options_all: false
 | 
			
		||||
            items_per_page_options_all_label: '- All -'
 | 
			
		||||
            offset: false
 | 
			
		||||
            offset_label: Offset
 | 
			
		||||
          tags:
 | 
			
		||||
            previous: ‹‹
 | 
			
		||||
            next: ››
 | 
			
		||||
      style:
 | 
			
		||||
        type: default
 | 
			
		||||
        options:
 | 
			
		||||
          grouping: {  }
 | 
			
		||||
          row_class: 'media-library-item js-click-to-select'
 | 
			
		||||
          default_row_class: true
 | 
			
		||||
      row:
 | 
			
		||||
        type: fields
 | 
			
		||||
        options:
 | 
			
		||||
          default_field_elements: true
 | 
			
		||||
          inline: {  }
 | 
			
		||||
          separator: ''
 | 
			
		||||
          hide_empty: false
 | 
			
		||||
      fields:
 | 
			
		||||
        media_bulk_form:
 | 
			
		||||
          id: media_bulk_form
 | 
			
		||||
          table: media
 | 
			
		||||
          field: media_bulk_form
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          label: ''
 | 
			
		||||
          exclude: false
 | 
			
		||||
          alter:
 | 
			
		||||
            alter_text: false
 | 
			
		||||
            text: ''
 | 
			
		||||
            make_link: false
 | 
			
		||||
            path: ''
 | 
			
		||||
            absolute: false
 | 
			
		||||
            external: false
 | 
			
		||||
            replace_spaces: false
 | 
			
		||||
            path_case: none
 | 
			
		||||
            trim_whitespace: false
 | 
			
		||||
            alt: ''
 | 
			
		||||
            rel: ''
 | 
			
		||||
            link_class: ''
 | 
			
		||||
            prefix: ''
 | 
			
		||||
            suffix: ''
 | 
			
		||||
            target: ''
 | 
			
		||||
            nl2br: false
 | 
			
		||||
            max_length: 0
 | 
			
		||||
            word_boundary: true
 | 
			
		||||
            ellipsis: true
 | 
			
		||||
            more_link: false
 | 
			
		||||
            more_link_text: ''
 | 
			
		||||
            more_link_path: ''
 | 
			
		||||
            strip_tags: false
 | 
			
		||||
            trim: false
 | 
			
		||||
            preserve_tags: ''
 | 
			
		||||
            html: false
 | 
			
		||||
          element_type: ''
 | 
			
		||||
          element_class: js-click-to-select__checkbox
 | 
			
		||||
          element_label_type: ''
 | 
			
		||||
          element_label_class: ''
 | 
			
		||||
          element_label_colon: false
 | 
			
		||||
          element_wrapper_type: ''
 | 
			
		||||
          element_wrapper_class: ''
 | 
			
		||||
          element_default_classes: true
 | 
			
		||||
          empty: ''
 | 
			
		||||
          hide_empty: false
 | 
			
		||||
          empty_zero: false
 | 
			
		||||
          hide_alter_empty: true
 | 
			
		||||
          action_title: Action
 | 
			
		||||
          include_exclude: exclude
 | 
			
		||||
          selected_actions: {  }
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          plugin_id: bulk_form
 | 
			
		||||
        rendered_entity:
 | 
			
		||||
          id: rendered_entity
 | 
			
		||||
          table: media
 | 
			
		||||
          field: rendered_entity
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          label: ''
 | 
			
		||||
          exclude: false
 | 
			
		||||
          alter:
 | 
			
		||||
            alter_text: false
 | 
			
		||||
            text: ''
 | 
			
		||||
            make_link: false
 | 
			
		||||
            path: ''
 | 
			
		||||
            absolute: false
 | 
			
		||||
            external: false
 | 
			
		||||
            replace_spaces: false
 | 
			
		||||
            path_case: none
 | 
			
		||||
            trim_whitespace: false
 | 
			
		||||
            alt: ''
 | 
			
		||||
            rel: ''
 | 
			
		||||
            link_class: ''
 | 
			
		||||
            prefix: ''
 | 
			
		||||
            suffix: ''
 | 
			
		||||
            target: ''
 | 
			
		||||
            nl2br: false
 | 
			
		||||
            max_length: 0
 | 
			
		||||
            word_boundary: true
 | 
			
		||||
            ellipsis: true
 | 
			
		||||
            more_link: false
 | 
			
		||||
            more_link_text: ''
 | 
			
		||||
            more_link_path: ''
 | 
			
		||||
            strip_tags: false
 | 
			
		||||
            trim: false
 | 
			
		||||
            preserve_tags: ''
 | 
			
		||||
            html: false
 | 
			
		||||
          element_type: ''
 | 
			
		||||
          element_class: media-library-item__content
 | 
			
		||||
          element_label_type: ''
 | 
			
		||||
          element_label_class: ''
 | 
			
		||||
          element_label_colon: false
 | 
			
		||||
          element_wrapper_type: ''
 | 
			
		||||
          element_wrapper_class: ''
 | 
			
		||||
          element_default_classes: true
 | 
			
		||||
          empty: ''
 | 
			
		||||
          hide_empty: false
 | 
			
		||||
          empty_zero: false
 | 
			
		||||
          hide_alter_empty: true
 | 
			
		||||
          view_mode: media_library
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          plugin_id: rendered_entity
 | 
			
		||||
      filters:
 | 
			
		||||
        status:
 | 
			
		||||
          id: status
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: status
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          operator: '='
 | 
			
		||||
          value: '1'
 | 
			
		||||
          group: 1
 | 
			
		||||
          exposed: true
 | 
			
		||||
          expose:
 | 
			
		||||
            operator_id: ''
 | 
			
		||||
            label: 'Publishing status'
 | 
			
		||||
            description: null
 | 
			
		||||
            use_operator: false
 | 
			
		||||
            operator: status_op
 | 
			
		||||
            identifier: status
 | 
			
		||||
            required: true
 | 
			
		||||
            remember: false
 | 
			
		||||
            multiple: false
 | 
			
		||||
            remember_roles:
 | 
			
		||||
              authenticated: authenticated
 | 
			
		||||
          is_grouped: true
 | 
			
		||||
          group_info:
 | 
			
		||||
            label: Published
 | 
			
		||||
            description: ''
 | 
			
		||||
            identifier: status
 | 
			
		||||
            optional: true
 | 
			
		||||
            widget: select
 | 
			
		||||
            multiple: false
 | 
			
		||||
            remember: false
 | 
			
		||||
            default_group: All
 | 
			
		||||
            default_group_multiple: {  }
 | 
			
		||||
            group_items:
 | 
			
		||||
              1:
 | 
			
		||||
                title: Published
 | 
			
		||||
                operator: '='
 | 
			
		||||
                value: '1'
 | 
			
		||||
              2:
 | 
			
		||||
                title: Unpublished
 | 
			
		||||
                operator: '='
 | 
			
		||||
                value: '0'
 | 
			
		||||
          plugin_id: boolean
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: status
 | 
			
		||||
        name:
 | 
			
		||||
          id: name
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: name
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          operator: contains
 | 
			
		||||
          value: ''
 | 
			
		||||
          group: 1
 | 
			
		||||
          exposed: true
 | 
			
		||||
          expose:
 | 
			
		||||
            operator_id: name_op
 | 
			
		||||
            label: Name
 | 
			
		||||
            description: ''
 | 
			
		||||
            use_operator: false
 | 
			
		||||
            operator: name_op
 | 
			
		||||
            identifier: name
 | 
			
		||||
            required: false
 | 
			
		||||
            remember: false
 | 
			
		||||
            multiple: false
 | 
			
		||||
            remember_roles:
 | 
			
		||||
              authenticated: authenticated
 | 
			
		||||
              anonymous: '0'
 | 
			
		||||
              administrator: '0'
 | 
			
		||||
          is_grouped: false
 | 
			
		||||
          group_info:
 | 
			
		||||
            label: ''
 | 
			
		||||
            description: ''
 | 
			
		||||
            identifier: ''
 | 
			
		||||
            optional: true
 | 
			
		||||
            widget: select
 | 
			
		||||
            multiple: false
 | 
			
		||||
            remember: false
 | 
			
		||||
            default_group: All
 | 
			
		||||
            default_group_multiple: {  }
 | 
			
		||||
            group_items: {  }
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: name
 | 
			
		||||
          plugin_id: string
 | 
			
		||||
        bundle:
 | 
			
		||||
          id: bundle
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: bundle
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          operator: in
 | 
			
		||||
          value: {  }
 | 
			
		||||
          group: 1
 | 
			
		||||
          exposed: true
 | 
			
		||||
          expose:
 | 
			
		||||
            operator_id: bundle_op
 | 
			
		||||
            label: 'Media type'
 | 
			
		||||
            description: ''
 | 
			
		||||
            use_operator: false
 | 
			
		||||
            operator: bundle_op
 | 
			
		||||
            identifier: type
 | 
			
		||||
            required: false
 | 
			
		||||
            remember: false
 | 
			
		||||
            multiple: false
 | 
			
		||||
            remember_roles:
 | 
			
		||||
              authenticated: authenticated
 | 
			
		||||
              anonymous: '0'
 | 
			
		||||
              administrator: '0'
 | 
			
		||||
            reduce: false
 | 
			
		||||
          is_grouped: false
 | 
			
		||||
          group_info:
 | 
			
		||||
            label: 'Media type'
 | 
			
		||||
            description: null
 | 
			
		||||
            identifier: bundle
 | 
			
		||||
            optional: true
 | 
			
		||||
            widget: select
 | 
			
		||||
            multiple: false
 | 
			
		||||
            remember: false
 | 
			
		||||
            default_group: All
 | 
			
		||||
            default_group_multiple: {  }
 | 
			
		||||
            group_items:
 | 
			
		||||
              1: {  }
 | 
			
		||||
              2: {  }
 | 
			
		||||
              3: {  }
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: bundle
 | 
			
		||||
          plugin_id: bundle
 | 
			
		||||
      sorts:
 | 
			
		||||
        created:
 | 
			
		||||
          id: created
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: created
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          order: DESC
 | 
			
		||||
          exposed: true
 | 
			
		||||
          expose:
 | 
			
		||||
            label: 'Newest first'
 | 
			
		||||
          granularity: second
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: created
 | 
			
		||||
          plugin_id: date
 | 
			
		||||
        name:
 | 
			
		||||
          id: name
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: name
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          order: ASC
 | 
			
		||||
          exposed: true
 | 
			
		||||
          expose:
 | 
			
		||||
            label: 'Name (A-Z)'
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: name
 | 
			
		||||
          plugin_id: standard
 | 
			
		||||
        name_1:
 | 
			
		||||
          id: name_1
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: name
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          order: DESC
 | 
			
		||||
          exposed: true
 | 
			
		||||
          expose:
 | 
			
		||||
            label: 'Name (Z-A)'
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: name
 | 
			
		||||
          plugin_id: standard
 | 
			
		||||
      title: Media
 | 
			
		||||
      header: {  }
 | 
			
		||||
      footer: {  }
 | 
			
		||||
      empty: {  }
 | 
			
		||||
      relationships: {  }
 | 
			
		||||
      arguments:
 | 
			
		||||
        bundle:
 | 
			
		||||
          id: bundle
 | 
			
		||||
          table: media_field_data
 | 
			
		||||
          field: bundle
 | 
			
		||||
          relationship: none
 | 
			
		||||
          group_type: group
 | 
			
		||||
          admin_label: ''
 | 
			
		||||
          default_action: ignore
 | 
			
		||||
          exception:
 | 
			
		||||
            value: all
 | 
			
		||||
            title_enable: false
 | 
			
		||||
            title: All
 | 
			
		||||
          title_enable: false
 | 
			
		||||
          title: ''
 | 
			
		||||
          default_argument_type: fixed
 | 
			
		||||
          default_argument_options:
 | 
			
		||||
            argument: ''
 | 
			
		||||
          default_argument_skip_url: false
 | 
			
		||||
          summary_options:
 | 
			
		||||
            base_path: ''
 | 
			
		||||
            count: true
 | 
			
		||||
            items_per_page: 25
 | 
			
		||||
            override: false
 | 
			
		||||
          summary:
 | 
			
		||||
            sort_order: asc
 | 
			
		||||
            number_of_records: 0
 | 
			
		||||
            format: default_summary
 | 
			
		||||
          specify_validation: false
 | 
			
		||||
          validate:
 | 
			
		||||
            type: none
 | 
			
		||||
            fail: 'not found'
 | 
			
		||||
          validate_options: {  }
 | 
			
		||||
          glossary: false
 | 
			
		||||
          limit: 0
 | 
			
		||||
          case: none
 | 
			
		||||
          path_case: none
 | 
			
		||||
          transform_dash: false
 | 
			
		||||
          break_phrase: false
 | 
			
		||||
          entity_type: media
 | 
			
		||||
          entity_field: bundle
 | 
			
		||||
          plugin_id: string
 | 
			
		||||
      display_extenders: {  }
 | 
			
		||||
      use_ajax: true
 | 
			
		||||
      css_class: media-library-view
 | 
			
		||||
    cache_metadata:
 | 
			
		||||
      max-age: 0
 | 
			
		||||
      contexts:
 | 
			
		||||
        - 'languages:language_interface'
 | 
			
		||||
        - url
 | 
			
		||||
        - url.query_args
 | 
			
		||||
        - 'url.query_args:sort_by'
 | 
			
		||||
        - user.permissions
 | 
			
		||||
      tags: {  }
 | 
			
		||||
  page:
 | 
			
		||||
    display_plugin: page
 | 
			
		||||
    id: page
 | 
			
		||||
    display_title: Page
 | 
			
		||||
    position: 1
 | 
			
		||||
    display_options:
 | 
			
		||||
      display_extenders: {  }
 | 
			
		||||
      path: admin/content/media
 | 
			
		||||
      menu:
 | 
			
		||||
        type: tab
 | 
			
		||||
        title: Media
 | 
			
		||||
        description: 'Allows users to browse and administer media items'
 | 
			
		||||
        expanded: false
 | 
			
		||||
        parent: system.admin_content
 | 
			
		||||
        weight: 5
 | 
			
		||||
        context: '0'
 | 
			
		||||
        menu_name: admin
 | 
			
		||||
    cache_metadata:
 | 
			
		||||
      max-age: 0
 | 
			
		||||
      contexts:
 | 
			
		||||
        - 'languages:language_interface'
 | 
			
		||||
        - url
 | 
			
		||||
        - url.query_args
 | 
			
		||||
        - 'url.query_args:sort_by'
 | 
			
		||||
        - user.permissions
 | 
			
		||||
      tags: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - core.entity_view_mode.media.media_library
 | 
			
		||||
    - field.field.media.audio.field_media_audio_file
 | 
			
		||||
    - image.style.thumbnail
 | 
			
		||||
    - media.type.audio
 | 
			
		||||
  module:
 | 
			
		||||
    - image
 | 
			
		||||
id: media.audio.media_library
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: audio
 | 
			
		||||
mode: media_library
 | 
			
		||||
content:
 | 
			
		||||
  thumbnail:
 | 
			
		||||
    type: image
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    label: hidden
 | 
			
		||||
    settings:
 | 
			
		||||
      image_style: thumbnail
 | 
			
		||||
      image_link: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden:
 | 
			
		||||
  created: true
 | 
			
		||||
  field_media_audio_file: true
 | 
			
		||||
  name: true
 | 
			
		||||
  uid: true
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - core.entity_view_mode.media.media_library
 | 
			
		||||
    - field.field.media.file.field_media_file
 | 
			
		||||
    - image.style.thumbnail
 | 
			
		||||
    - media.type.file
 | 
			
		||||
  module:
 | 
			
		||||
    - image
 | 
			
		||||
id: media.file.media_library
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: file
 | 
			
		||||
mode: media_library
 | 
			
		||||
content:
 | 
			
		||||
  thumbnail:
 | 
			
		||||
    type: image
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    label: hidden
 | 
			
		||||
    settings:
 | 
			
		||||
      image_style: thumbnail
 | 
			
		||||
      image_link: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden:
 | 
			
		||||
  created: true
 | 
			
		||||
  field_media_file: true
 | 
			
		||||
  name: true
 | 
			
		||||
  uid: true
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - core.entity_view_mode.media.media_library
 | 
			
		||||
    - field.field.media.image.field_media_image
 | 
			
		||||
    - image.style.medium
 | 
			
		||||
    - media.type.image
 | 
			
		||||
  module:
 | 
			
		||||
    - image
 | 
			
		||||
id: media.image.media_library
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: image
 | 
			
		||||
mode: media_library
 | 
			
		||||
content:
 | 
			
		||||
  thumbnail:
 | 
			
		||||
    type: image
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    label: hidden
 | 
			
		||||
    settings:
 | 
			
		||||
      image_style: medium
 | 
			
		||||
      image_link: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden:
 | 
			
		||||
  created: true
 | 
			
		||||
  field_media_image: true
 | 
			
		||||
  name: true
 | 
			
		||||
  uid: true
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - core.entity_view_mode.media.media_library
 | 
			
		||||
    - field.field.media.video.field_media_video_file
 | 
			
		||||
    - image.style.thumbnail
 | 
			
		||||
    - media.type.video
 | 
			
		||||
  module:
 | 
			
		||||
    - image
 | 
			
		||||
id: media.video.media_library
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: video
 | 
			
		||||
mode: media_library
 | 
			
		||||
content:
 | 
			
		||||
  thumbnail:
 | 
			
		||||
    type: image
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    label: hidden
 | 
			
		||||
    settings:
 | 
			
		||||
      image_style: thumbnail
 | 
			
		||||
      image_link: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden:
 | 
			
		||||
  created: true
 | 
			
		||||
  field_media_video_file: true
 | 
			
		||||
  name: true
 | 
			
		||||
  uid: true
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
/**
 | 
			
		||||
* @file media_library.module.css
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
.media-library-page-form {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-page-form > .form-actions {
 | 
			
		||||
  flex-basis: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-page-form__header > div,
 | 
			
		||||
.media-library-view .form--inline {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-page-form__header {
 | 
			
		||||
  flex-basis: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item {
 | 
			
		||||
  position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .js-click-to-select__trigger {
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-view .form-actions {
 | 
			
		||||
  align-self: flex-end;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .js-click-to-select__checkbox {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  display: block;
 | 
			
		||||
  z-index: 1;
 | 
			
		||||
  top: 5px;
 | 
			
		||||
  right: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__status {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 10px;
 | 
			
		||||
  left: 2px;
 | 
			
		||||
  pointer-events: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-select-all {
 | 
			
		||||
  flex-basis: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 600px) {
 | 
			
		||||
  .media-library-view .form-actions {
 | 
			
		||||
    flex-basis: 100%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,151 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file media_library.theme.css
 | 
			
		||||
 *
 | 
			
		||||
 * @todo Move into the Seven theme when this module is marked as stable.
 | 
			
		||||
 * @see https://www.drupal.org/project/drupal/issues/2980769
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
.media-library-page-form__header .form-item {
 | 
			
		||||
  margin-right: 8px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#drupal-modal .view-header {
 | 
			
		||||
  margin: 16px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item {
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  vertical-align: top;
 | 
			
		||||
  padding: 2px;
 | 
			
		||||
  border: 1px solid #ebebeb;
 | 
			
		||||
  margin: 16px 16px 2px 2px;
 | 
			
		||||
  width: 180px;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  transition: border-color 0.2s, color 0.2s, background 0.2s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-view .form-actions {
 | 
			
		||||
  margin: 0.75em 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .field--name-thumbnail {
 | 
			
		||||
  background-color: #ebebeb;
 | 
			
		||||
  margin: 2px;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .field--name-thumbnail img {
 | 
			
		||||
  height: 180px;
 | 
			
		||||
  object-fit: contain;
 | 
			
		||||
  object-position: center center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item.is-hover,
 | 
			
		||||
.media-library-item.checked,
 | 
			
		||||
.media-library-item.is-focus {
 | 
			
		||||
  border-color: #40b6ff;
 | 
			
		||||
  border-width: 3px;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  margin: 14px 14px 0 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item.checked {
 | 
			
		||||
  border-color: #0076c0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .js-click-to-select__checkbox input {
 | 
			
		||||
  width: 30px;
 | 
			
		||||
  height: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .js-click-to-select__checkbox .form-item {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__preview {
 | 
			
		||||
  padding-bottom: 44px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__status {
 | 
			
		||||
  color: #e4e4e4;
 | 
			
		||||
  font-style: italic;
 | 
			
		||||
  background: #666;
 | 
			
		||||
  padding: 5px 10px;
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .views-field-operations {
 | 
			
		||||
  height: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item .views-field-operations .dropbutton-wrapper {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  right: 5px;
 | 
			
		||||
  bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__attributes {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  display: block;
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
  max-width: calc(100% - 20px);
 | 
			
		||||
  max-height: calc(100% - 60px);
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  background: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__name {
 | 
			
		||||
  font-size: 14px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__name a {
 | 
			
		||||
  display: block;
 | 
			
		||||
  text-decoration: underline;
 | 
			
		||||
  margin: 2px;
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  text-overflow: ellipsis;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__attributes:hover .media-library-item__name a,
 | 
			
		||||
.media-library-item__name a:focus,
 | 
			
		||||
.media-library-item.is-focus .media-library-item__name a,
 | 
			
		||||
.media-library-item.checked .media-library-item__name a {
 | 
			
		||||
  white-space: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__name a:focus {
 | 
			
		||||
  border: 2px solid;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-item__type {
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
  color: #696969;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-select-all {
 | 
			
		||||
  margin: 10px 0 10px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.media-library-select-all input {
 | 
			
		||||
  margin-right: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 600px) {
 | 
			
		||||
  .media-library-item {
 | 
			
		||||
    width: 150px;
 | 
			
		||||
  }
 | 
			
		||||
  .media-library-item .field--name-thumbnail img {
 | 
			
		||||
    height: 150px;
 | 
			
		||||
    width: 150px;
 | 
			
		||||
  }
 | 
			
		||||
  .media-library-item .views-field-operations .dropbutton-wrapper {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    border: 0;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file media_library.click_to_select.es6.js
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
(($, Drupal) => {
 | 
			
		||||
  /**
 | 
			
		||||
   * Allows users to select an element which checks a hidden checkbox.
 | 
			
		||||
   */
 | 
			
		||||
  Drupal.behaviors.ClickToSelect = {
 | 
			
		||||
    attach(context) {
 | 
			
		||||
      $('.js-click-to-select__trigger', context)
 | 
			
		||||
        .once('media-library-click-to-select')
 | 
			
		||||
        .on('click', (event) => {
 | 
			
		||||
          // Links inside the trigger should not be click-able.
 | 
			
		||||
          event.preventDefault();
 | 
			
		||||
          // Click the hidden checkbox when the trigger is clicked.
 | 
			
		||||
          const $input = $(event.currentTarget)
 | 
			
		||||
            .closest('.js-click-to-select')
 | 
			
		||||
            .find('.js-click-to-select__checkbox input');
 | 
			
		||||
          $input.prop('checked', !$input.prop('checked')).trigger('change');
 | 
			
		||||
        });
 | 
			
		||||
      $('.js-click-to-select__checkbox input', context)
 | 
			
		||||
        .once('media-library-click-to-select')
 | 
			
		||||
        .on('change', ({ currentTarget }) => {
 | 
			
		||||
          $(currentTarget)
 | 
			
		||||
            .closest('.js-click-to-select')
 | 
			
		||||
            .toggleClass('checked', $(currentTarget).prop('checked'));
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
})(jQuery, Drupal);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
/**
 | 
			
		||||
* DO NOT EDIT THIS FILE.
 | 
			
		||||
* See the following change record for more information,
 | 
			
		||||
* https://www.drupal.org/node/2815083
 | 
			
		||||
* @preserve
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
(function ($, Drupal) {
 | 
			
		||||
  Drupal.behaviors.ClickToSelect = {
 | 
			
		||||
    attach: function attach(context) {
 | 
			
		||||
      $('.js-click-to-select__trigger', context).once('media-library-click-to-select').on('click', function (event) {
 | 
			
		||||
        event.preventDefault();
 | 
			
		||||
 | 
			
		||||
        var $input = $(event.currentTarget).closest('.js-click-to-select').find('.js-click-to-select__checkbox input');
 | 
			
		||||
        $input.prop('checked', !$input.prop('checked')).trigger('change');
 | 
			
		||||
      });
 | 
			
		||||
      $('.js-click-to-select__checkbox input', context).once('media-library-click-to-select').on('change', function (_ref) {
 | 
			
		||||
        var currentTarget = _ref.currentTarget;
 | 
			
		||||
 | 
			
		||||
        $(currentTarget).closest('.js-click-to-select').toggleClass('checked', $(currentTarget).prop('checked'));
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
})(jQuery, Drupal);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file media_library.view.es6.js
 | 
			
		||||
 */
 | 
			
		||||
(($, Drupal) => {
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds hover effect to media items.
 | 
			
		||||
   */
 | 
			
		||||
  Drupal.behaviors.MediaLibraryHover = {
 | 
			
		||||
    attach(context) {
 | 
			
		||||
      $('.media-library-item .js-click-to-select__trigger,.media-library-item .js-click-to-select__checkbox', context).once('media-library-item-hover')
 | 
			
		||||
        .on('mouseover mouseout', ({ currentTarget, type }) => {
 | 
			
		||||
          $(currentTarget).closest('.media-library-item').toggleClass('is-hover', type === 'mouseover');
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds focus effect to media items.
 | 
			
		||||
   */
 | 
			
		||||
  Drupal.behaviors.MediaLibraryFocus = {
 | 
			
		||||
    attach(context) {
 | 
			
		||||
      $('.media-library-item .js-click-to-select__checkbox input', context).once('media-library-item-focus')
 | 
			
		||||
        .on('focus blur', ({ currentTarget, type }) => {
 | 
			
		||||
          $(currentTarget).closest('.media-library-item').toggleClass('is-focus', type === 'focus');
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds checkbox to select all items in the library.
 | 
			
		||||
   */
 | 
			
		||||
  Drupal.behaviors.MediaLibrarySelectAll = {
 | 
			
		||||
    attach(context) {
 | 
			
		||||
      const $view = $('.media-library-view', context).once('media-library-select-all');
 | 
			
		||||
      if ($view.length && $view.find('.media-library-item').length) {
 | 
			
		||||
        const $checkbox = $('<input type="checkbox" class="form-checkbox" />')
 | 
			
		||||
          .on('click', ({ currentTarget }) => {
 | 
			
		||||
            // Toggle all checkboxes.
 | 
			
		||||
            const $checkboxes = $(currentTarget)
 | 
			
		||||
              .closest('.media-library-view')
 | 
			
		||||
              .find('.media-library-item input[type="checkbox"]');
 | 
			
		||||
            $checkboxes
 | 
			
		||||
              .prop('checked', $(currentTarget).prop('checked'))
 | 
			
		||||
              .trigger('change');
 | 
			
		||||
            // Announce the selection.
 | 
			
		||||
            const announcement = $(currentTarget).prop('checked') ?
 | 
			
		||||
              Drupal.t('Zero items selected') :
 | 
			
		||||
              Drupal.t('All @count items selected', { '@count': $checkboxes.length });
 | 
			
		||||
            Drupal.announce(announcement);
 | 
			
		||||
          });
 | 
			
		||||
        const $label = $('<label class="media-library-select-all"></label>')
 | 
			
		||||
          .text(Drupal.t('Select all media'));
 | 
			
		||||
        $label.prepend($checkbox);
 | 
			
		||||
        $view.find('.media-library-item').first().before($label);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
})(jQuery, Drupal);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
/**
 | 
			
		||||
* DO NOT EDIT THIS FILE.
 | 
			
		||||
* See the following change record for more information,
 | 
			
		||||
* https://www.drupal.org/node/2815083
 | 
			
		||||
* @preserve
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
(function ($, Drupal) {
 | 
			
		||||
  Drupal.behaviors.MediaLibraryHover = {
 | 
			
		||||
    attach: function attach(context) {
 | 
			
		||||
      $('.media-library-item .js-click-to-select__trigger,.media-library-item .js-click-to-select__checkbox', context).once('media-library-item-hover').on('mouseover mouseout', function (_ref) {
 | 
			
		||||
        var currentTarget = _ref.currentTarget,
 | 
			
		||||
            type = _ref.type;
 | 
			
		||||
 | 
			
		||||
        $(currentTarget).closest('.media-library-item').toggleClass('is-hover', type === 'mouseover');
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Drupal.behaviors.MediaLibraryFocus = {
 | 
			
		||||
    attach: function attach(context) {
 | 
			
		||||
      $('.media-library-item .js-click-to-select__checkbox input', context).once('media-library-item-focus').on('focus blur', function (_ref2) {
 | 
			
		||||
        var currentTarget = _ref2.currentTarget,
 | 
			
		||||
            type = _ref2.type;
 | 
			
		||||
 | 
			
		||||
        $(currentTarget).closest('.media-library-item').toggleClass('is-focus', type === 'focus');
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Drupal.behaviors.MediaLibrarySelectAll = {
 | 
			
		||||
    attach: function attach(context) {
 | 
			
		||||
      var $view = $('.media-library-view', context).once('media-library-select-all');
 | 
			
		||||
      if ($view.length && $view.find('.media-library-item').length) {
 | 
			
		||||
        var $checkbox = $('<input type="checkbox" class="form-checkbox" />').on('click', function (_ref3) {
 | 
			
		||||
          var currentTarget = _ref3.currentTarget;
 | 
			
		||||
 | 
			
		||||
          var $checkboxes = $(currentTarget).closest('.media-library-view').find('.media-library-item input[type="checkbox"]');
 | 
			
		||||
          $checkboxes.prop('checked', $(currentTarget).prop('checked')).trigger('change');
 | 
			
		||||
 | 
			
		||||
          var announcement = $(currentTarget).prop('checked') ? Drupal.t('Zero items selected') : Drupal.t('All @count items selected', { '@count': $checkboxes.length });
 | 
			
		||||
          Drupal.announce(announcement);
 | 
			
		||||
        });
 | 
			
		||||
        var $label = $('<label class="media-library-select-all"></label>').text(Drupal.t('Select all media'));
 | 
			
		||||
        $label.prepend($checkbox);
 | 
			
		||||
        $view.find('.media-library-item').first().before($label);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
})(jQuery, Drupal);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
name: 'Media library'
 | 
			
		||||
type: module
 | 
			
		||||
description: 'Provides a library for re-using Media Items.'
 | 
			
		||||
package: Core (Experimental)
 | 
			
		||||
version: VERSION
 | 
			
		||||
core: 8.x
 | 
			
		||||
dependencies:
 | 
			
		||||
  - drupal:media
 | 
			
		||||
  - drupal:views
 | 
			
		||||
  - drupal:user
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
 * Install, update and uninstall functions for the media_library module.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use Drupal\views\Entity\View;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_install().
 | 
			
		||||
 */
 | 
			
		||||
function media_library_install() {
 | 
			
		||||
  // Change the path to the original media view.
 | 
			
		||||
  /** @var \Drupal\views\Entity\View $view */
 | 
			
		||||
  if ($view = View::load('media')) {
 | 
			
		||||
    $display = &$view->getDisplay('media_page_list');
 | 
			
		||||
    if (!empty($display)) {
 | 
			
		||||
      $display['display_options']['path'] = 'admin/content/media-table';
 | 
			
		||||
      unset($display['display_options']['menu']);
 | 
			
		||||
      $view->trustData()->save();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_uninstall().
 | 
			
		||||
 */
 | 
			
		||||
function media_library_uninstall() {
 | 
			
		||||
  // Restore the path to the original media view.
 | 
			
		||||
  /** @var \Drupal\views\Entity\View $view */
 | 
			
		||||
  if ($view = View::load('media')) {
 | 
			
		||||
    $display = &$view->getDisplay('media_page_list');
 | 
			
		||||
    if (!empty($display)) {
 | 
			
		||||
      $display['display_options']['path'] = 'admin/content/media';
 | 
			
		||||
      $display['display_options']['menu'] = [
 | 
			
		||||
        'type' => 'tab',
 | 
			
		||||
        'title' => 'Media',
 | 
			
		||||
        'description' => '',
 | 
			
		||||
        'expanded' => FALSE,
 | 
			
		||||
        'parent' => '',
 | 
			
		||||
        'weight' => 0,
 | 
			
		||||
        'context' => '0',
 | 
			
		||||
        'menu_name' => 'main',
 | 
			
		||||
      ];
 | 
			
		||||
      $view->trustData()->save();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
style:
 | 
			
		||||
  version: VERSION
 | 
			
		||||
  css:
 | 
			
		||||
    component:
 | 
			
		||||
      css/media_library.module.css: {}
 | 
			
		||||
    theme:
 | 
			
		||||
      css/media_library.theme.css: {}
 | 
			
		||||
 | 
			
		||||
click_to_select:
 | 
			
		||||
  version: VERSION
 | 
			
		||||
  js:
 | 
			
		||||
    js/media_library.click_to_select.js: {}
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - core/drupal
 | 
			
		||||
    - core/jquery.once
 | 
			
		||||
 | 
			
		||||
view:
 | 
			
		||||
  version: VERSION
 | 
			
		||||
  js:
 | 
			
		||||
    js/media_library.view.js: {}
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - media_library/style
 | 
			
		||||
    - media_library/click_to_select
 | 
			
		||||
    - core/drupal.announce
 | 
			
		||||
    - core/jquery.once
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
media_library.add:
 | 
			
		||||
  route_name: entity.media.add_page
 | 
			
		||||
  title: 'Add media'
 | 
			
		||||
  appears_on:
 | 
			
		||||
    - view.media_library.page
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
media_library.grid:
 | 
			
		||||
  title: 'Grid'
 | 
			
		||||
  parent_id: entity.media.collection
 | 
			
		||||
  route_name: entity.media.collection
 | 
			
		||||
  weight: 10
 | 
			
		||||
media_library.table:
 | 
			
		||||
  title: 'Table'
 | 
			
		||||
  parent_id: entity.media.collection
 | 
			
		||||
  route_name: view.media.media_page_list
 | 
			
		||||
  weight: 20
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,109 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
 * Contains hook implementations for the media_library module.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use Drupal\Core\Routing\RouteMatchInterface;
 | 
			
		||||
use Drupal\views\Plugin\views\cache\CachePluginBase;
 | 
			
		||||
use Drupal\views\ViewExecutable;
 | 
			
		||||
use Drupal\Core\Template\Attribute;
 | 
			
		||||
use Drupal\Core\Form\FormStateInterface;
 | 
			
		||||
use Drupal\Core\Render\Element;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_help().
 | 
			
		||||
 *
 | 
			
		||||
 * @todo Update in https://www.drupal.org/project/drupal/issues/2964789
 | 
			
		||||
 */
 | 
			
		||||
function media_library_help($route_name, RouteMatchInterface $route_match) {
 | 
			
		||||
  switch ($route_name) {
 | 
			
		||||
    case 'help.page.media_library':
 | 
			
		||||
      $output = '<h3>' . t('About') . '</h3>';
 | 
			
		||||
      $output .= '<p>' . t('The Media library module overrides the /admin/content/media view to provide a rich visual interface for performing administrative operations on media. For more information, see the <a href=":media">online documentation for the Media library module</a>.', [':media' => 'https://www.drupal.org/docs/8/core/modules/media']) . '</p>';
 | 
			
		||||
      return $output;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_theme().
 | 
			
		||||
 */
 | 
			
		||||
function media_library_theme() {
 | 
			
		||||
  return [
 | 
			
		||||
    'media__media_library' => [
 | 
			
		||||
      'base hook' => 'media',
 | 
			
		||||
    ],
 | 
			
		||||
  ];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_views_post_render().
 | 
			
		||||
 */
 | 
			
		||||
function media_library_views_post_render(ViewExecutable $view, &$output, CachePluginBase $cache) {
 | 
			
		||||
  if ($view->id() === 'media_library') {
 | 
			
		||||
    $output['#attached']['library'][] = 'media_library/view';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_preprocess_media().
 | 
			
		||||
 */
 | 
			
		||||
function media_library_preprocess_media(&$variables) {
 | 
			
		||||
  if ($variables['view_mode'] === 'media_library') {
 | 
			
		||||
    /** @var \Drupal\media\MediaInterface $media */
 | 
			
		||||
    $media = $variables['media'];
 | 
			
		||||
    $variables['#cache']['contexts'][] = 'user.permissions';
 | 
			
		||||
    $rel = $media->access('edit') ? 'edit-form' : 'canonical';
 | 
			
		||||
    $variables['url'] = $media->toUrl($rel, [
 | 
			
		||||
      'language' => $media->language(),
 | 
			
		||||
    ]);
 | 
			
		||||
    $variables['preview_attributes'] = new Attribute();
 | 
			
		||||
    $variables['preview_attributes']->addClass('media-library-item__preview', 'js-click-to-select__trigger');
 | 
			
		||||
    $variables['metadata_attributes'] = new Attribute();
 | 
			
		||||
    $variables['metadata_attributes']->addClass('media-library-item__attributes');
 | 
			
		||||
    $variables['status'] = $media->isPublished();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Alter the bulk form to add a more accessible label.
 | 
			
		||||
 *
 | 
			
		||||
 * @param array $form
 | 
			
		||||
 *   An associative array containing the structure of the form.
 | 
			
		||||
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 | 
			
		||||
 *   The current state of the form.
 | 
			
		||||
 *
 | 
			
		||||
 * @todo Remove in https://www.drupal.org/project/drupal/issues/2969660
 | 
			
		||||
 */
 | 
			
		||||
function media_library_form_views_form_media_library_page_alter(array &$form, FormStateInterface $form_state) {
 | 
			
		||||
  if (isset($form['media_bulk_form']) && isset($form['output'])) {
 | 
			
		||||
    $form['#attributes']['class'][] = 'media-library-page-form';
 | 
			
		||||
    $form['header']['#attributes']['class'][] = 'media-library-page-form__header';
 | 
			
		||||
    /** @var \Drupal\views\ViewExecutable $view */
 | 
			
		||||
    $view = $form['output'][0]['#view'];
 | 
			
		||||
    foreach (Element::getVisibleChildren($form['media_bulk_form']) as $key) {
 | 
			
		||||
      if (isset($view->result[$key])) {
 | 
			
		||||
        $media = $view->field['media_bulk_form']->getEntity($view->result[$key]);
 | 
			
		||||
        $form['media_bulk_form'][$key]['#title'] = t('Select @label', [
 | 
			
		||||
          '@label' => $media->label(),
 | 
			
		||||
        ]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_local_tasks_alter().
 | 
			
		||||
 *
 | 
			
		||||
 * Removes tasks for the Media library if the view display no longer exists.
 | 
			
		||||
 */
 | 
			
		||||
function media_library_local_tasks_alter(&$local_tasks) {
 | 
			
		||||
  /** @var \Symfony\Component\Routing\RouteCollection $route_collection */
 | 
			
		||||
  $route_collection = \Drupal::service('router')->getRouteCollection();
 | 
			
		||||
  foreach (['media_library.grid', 'media_library.table'] as $key) {
 | 
			
		||||
    if (isset($local_tasks[$key]) && !$route_collection->get($local_tasks[$key]['route_name'])) {
 | 
			
		||||
      unset($local_tasks[$key]);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
{#
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
 * Default theme implementation to present a media entity in the media library.
 | 
			
		||||
 *
 | 
			
		||||
 * Available variables:
 | 
			
		||||
 * - media: The entity with limited access to object properties and methods.
 | 
			
		||||
 *   Only method names starting with "get", "has", or "is" and a few common
 | 
			
		||||
 *   methods such as "id", "label", and "bundle" are available. For example:
 | 
			
		||||
 *   - entity.getEntityTypeId() will return the entity type ID.
 | 
			
		||||
 *   - entity.hasField('field_example') returns TRUE if the entity includes
 | 
			
		||||
 *     field_example. (This does not indicate the presence of a value in this
 | 
			
		||||
 *     field.)
 | 
			
		||||
 *   Calling other methods, such as entity.delete(), will result in an exception.
 | 
			
		||||
 *   See \Drupal\Core\Entity\EntityInterface for a full list of methods.
 | 
			
		||||
 * - name: Name of the media.
 | 
			
		||||
 * - content: Media content.
 | 
			
		||||
 * - title_prefix: Additional output populated by modules, intended to be
 | 
			
		||||
 *   displayed in front of the main title tag that appears in the template.
 | 
			
		||||
 * - title_suffix: Additional output populated by modules, intended to be
 | 
			
		||||
 *   displayed after the main title tag that appears in the template.
 | 
			
		||||
 * - view_mode: View mode; for example, "teaser" or "full".
 | 
			
		||||
 * - attributes: HTML attributes for the containing element.
 | 
			
		||||
 * - title_attributes: Same as attributes, except applied to the main title
 | 
			
		||||
 *   tag that appears in the template.
 | 
			
		||||
 * - url: Direct URL of the media.
 | 
			
		||||
 * - preview_attributes: HTML attributes for the preview wrapper.
 | 
			
		||||
 * - metadata_attributes: HTML attributes for the expandable metadata area.
 | 
			
		||||
 * - status: Whether or not the Media is published.
 | 
			
		||||
 *
 | 
			
		||||
 * @see template_preprocess_media()
 | 
			
		||||
 *
 | 
			
		||||
 * @ingroup themeable
 | 
			
		||||
 */
 | 
			
		||||
#}
 | 
			
		||||
<article{{ attributes }}>
 | 
			
		||||
  {% if content %}
 | 
			
		||||
    <div{{ preview_attributes }}>
 | 
			
		||||
      {{ content|without('name') }}
 | 
			
		||||
    </div>
 | 
			
		||||
    {% if not status %}
 | 
			
		||||
      <div class="media-library-item__status">{{ "unpublished" | t }}</div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    <div{{ metadata_attributes }}>
 | 
			
		||||
      <div class="media-library-item__name">
 | 
			
		||||
        <a href="{{ url }}" rel="bookmark">{{ name }}</a>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  {% endif %}
 | 
			
		||||
</article>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - field.field.media.type_one.field_media_test
 | 
			
		||||
    - media.type.type_one
 | 
			
		||||
id: media.type_one.default
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: type_one
 | 
			
		||||
mode: default
 | 
			
		||||
content:
 | 
			
		||||
  created:
 | 
			
		||||
    type: datetime_timestamp
 | 
			
		||||
    weight: 10
 | 
			
		||||
    region: content
 | 
			
		||||
    settings: {  }
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  field_media_test:
 | 
			
		||||
    settings:
 | 
			
		||||
      size: 60
 | 
			
		||||
      placeholder: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
    type: string_textfield
 | 
			
		||||
    weight: 11
 | 
			
		||||
    region: content
 | 
			
		||||
  name:
 | 
			
		||||
    type: string_textfield
 | 
			
		||||
    weight: -5
 | 
			
		||||
    region: content
 | 
			
		||||
    settings:
 | 
			
		||||
      size: 60
 | 
			
		||||
      placeholder: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  uid:
 | 
			
		||||
    type: entity_reference_autocomplete
 | 
			
		||||
    weight: 5
 | 
			
		||||
    settings:
 | 
			
		||||
      match_operator: CONTAINS
 | 
			
		||||
      size: 60
 | 
			
		||||
      placeholder: ''
 | 
			
		||||
    region: content
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - field.field.media.type_two.field_media_test_1
 | 
			
		||||
    - media.type.type_two
 | 
			
		||||
id: media.type_two.default
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: type_two
 | 
			
		||||
mode: default
 | 
			
		||||
content:
 | 
			
		||||
  created:
 | 
			
		||||
    type: datetime_timestamp
 | 
			
		||||
    weight: 10
 | 
			
		||||
    region: content
 | 
			
		||||
    settings: {  }
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  field_media_test_1:
 | 
			
		||||
    settings:
 | 
			
		||||
      size: 60
 | 
			
		||||
      placeholder: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
    type: string_textfield
 | 
			
		||||
    weight: 11
 | 
			
		||||
    region: content
 | 
			
		||||
  name:
 | 
			
		||||
    type: string_textfield
 | 
			
		||||
    weight: -5
 | 
			
		||||
    region: content
 | 
			
		||||
    settings:
 | 
			
		||||
      size: 60
 | 
			
		||||
      placeholder: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  uid:
 | 
			
		||||
    type: entity_reference_autocomplete
 | 
			
		||||
    weight: 5
 | 
			
		||||
    settings:
 | 
			
		||||
      match_operator: CONTAINS
 | 
			
		||||
      size: 60
 | 
			
		||||
      placeholder: ''
 | 
			
		||||
    region: content
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - field.field.media.type_one.field_media_test
 | 
			
		||||
    - image.style.thumbnail
 | 
			
		||||
    - media.type.type_one
 | 
			
		||||
  module:
 | 
			
		||||
    - image
 | 
			
		||||
    - user
 | 
			
		||||
id: media.type_one.default
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: type_one
 | 
			
		||||
mode: default
 | 
			
		||||
content:
 | 
			
		||||
  created:
 | 
			
		||||
    label: hidden
 | 
			
		||||
    type: timestamp
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    settings:
 | 
			
		||||
      date_format: medium
 | 
			
		||||
      custom_date_format: ''
 | 
			
		||||
      timezone: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  field_media_test:
 | 
			
		||||
    label: above
 | 
			
		||||
    settings:
 | 
			
		||||
      link_to_entity: true
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
    type: string
 | 
			
		||||
    weight: 6
 | 
			
		||||
    region: content
 | 
			
		||||
  thumbnail:
 | 
			
		||||
    type: image
 | 
			
		||||
    weight: 5
 | 
			
		||||
    label: hidden
 | 
			
		||||
    settings:
 | 
			
		||||
      image_style: thumbnail
 | 
			
		||||
      image_link: ''
 | 
			
		||||
    region: content
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  uid:
 | 
			
		||||
    label: hidden
 | 
			
		||||
    type: author
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    settings: {  }
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - field.field.media.type_two.field_media_test_1
 | 
			
		||||
    - image.style.thumbnail
 | 
			
		||||
    - media.type.type_two
 | 
			
		||||
  module:
 | 
			
		||||
    - image
 | 
			
		||||
    - user
 | 
			
		||||
id: media.type_two.default
 | 
			
		||||
targetEntityType: media
 | 
			
		||||
bundle: type_two
 | 
			
		||||
mode: default
 | 
			
		||||
content:
 | 
			
		||||
  created:
 | 
			
		||||
    label: hidden
 | 
			
		||||
    type: timestamp
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    settings:
 | 
			
		||||
      date_format: medium
 | 
			
		||||
      custom_date_format: ''
 | 
			
		||||
      timezone: ''
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  field_media_test_1:
 | 
			
		||||
    label: above
 | 
			
		||||
    settings:
 | 
			
		||||
      link_to_entity: false
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
    type: string
 | 
			
		||||
    weight: 6
 | 
			
		||||
    region: content
 | 
			
		||||
  thumbnail:
 | 
			
		||||
    type: image
 | 
			
		||||
    weight: 5
 | 
			
		||||
    label: hidden
 | 
			
		||||
    settings:
 | 
			
		||||
      image_style: thumbnail
 | 
			
		||||
      image_link: ''
 | 
			
		||||
    region: content
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
  uid:
 | 
			
		||||
    label: hidden
 | 
			
		||||
    type: author
 | 
			
		||||
    weight: 0
 | 
			
		||||
    region: content
 | 
			
		||||
    settings: {  }
 | 
			
		||||
    third_party_settings: {  }
 | 
			
		||||
hidden: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - field.storage.media.field_media_test
 | 
			
		||||
    - media.type.type_one
 | 
			
		||||
id: media.type_one.field_media_test
 | 
			
		||||
field_name: field_media_test
 | 
			
		||||
entity_type: media
 | 
			
		||||
bundle: type_one
 | 
			
		||||
label: field_media_test
 | 
			
		||||
description: ''
 | 
			
		||||
required: false
 | 
			
		||||
translatable: true
 | 
			
		||||
default_value: {  }
 | 
			
		||||
default_value_callback: ''
 | 
			
		||||
settings: {  }
 | 
			
		||||
field_type: string
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  config:
 | 
			
		||||
    - field.storage.media.field_media_test_1
 | 
			
		||||
    - media.type.type_two
 | 
			
		||||
id: media.type_two.field_media_test_1
 | 
			
		||||
field_name: field_media_test_1
 | 
			
		||||
entity_type: media
 | 
			
		||||
bundle: type_two
 | 
			
		||||
label: field_media_test_1
 | 
			
		||||
description: ''
 | 
			
		||||
required: false
 | 
			
		||||
translatable: true
 | 
			
		||||
default_value: {  }
 | 
			
		||||
default_value_callback: ''
 | 
			
		||||
settings: {  }
 | 
			
		||||
field_type: string
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  module:
 | 
			
		||||
    - media
 | 
			
		||||
id: media.field_media_test
 | 
			
		||||
field_name: field_media_test
 | 
			
		||||
entity_type: media
 | 
			
		||||
type: string
 | 
			
		||||
settings:
 | 
			
		||||
  max_length: 255
 | 
			
		||||
  is_ascii: false
 | 
			
		||||
  case_sensitive: false
 | 
			
		||||
module: core
 | 
			
		||||
locked: false
 | 
			
		||||
cardinality: 1
 | 
			
		||||
translatable: true
 | 
			
		||||
indexes: {  }
 | 
			
		||||
persist_with_no_fields: false
 | 
			
		||||
custom_storage: false
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  module:
 | 
			
		||||
    - media
 | 
			
		||||
id: media.field_media_test_1
 | 
			
		||||
field_name: field_media_test_1
 | 
			
		||||
entity_type: media
 | 
			
		||||
type: string
 | 
			
		||||
settings:
 | 
			
		||||
  max_length: 255
 | 
			
		||||
  is_ascii: false
 | 
			
		||||
  case_sensitive: false
 | 
			
		||||
module: core
 | 
			
		||||
locked: false
 | 
			
		||||
cardinality: 1
 | 
			
		||||
translatable: true
 | 
			
		||||
indexes: {  }
 | 
			
		||||
persist_with_no_fields: false
 | 
			
		||||
custom_storage: false
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  module:
 | 
			
		||||
    - media
 | 
			
		||||
    - media_test_source
 | 
			
		||||
id: type_one
 | 
			
		||||
label: 'Type One'
 | 
			
		||||
description: ''
 | 
			
		||||
source: test
 | 
			
		||||
queue_thumbnail_downloads: false
 | 
			
		||||
new_revision: false
 | 
			
		||||
source_configuration:
 | 
			
		||||
  source_field: field_media_test
 | 
			
		||||
  test_config_value: 'This is default value.'
 | 
			
		||||
field_map: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
langcode: en
 | 
			
		||||
status: true
 | 
			
		||||
dependencies:
 | 
			
		||||
  module:
 | 
			
		||||
    - media
 | 
			
		||||
    - media_test_source
 | 
			
		||||
id: type_two
 | 
			
		||||
label: 'Type Two'
 | 
			
		||||
description: ''
 | 
			
		||||
source: test
 | 
			
		||||
queue_thumbnail_downloads: false
 | 
			
		||||
new_revision: false
 | 
			
		||||
source_configuration:
 | 
			
		||||
  source_field: field_media_test_1
 | 
			
		||||
  test_config_value: 'This is default value.'
 | 
			
		||||
field_map: {  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
name: 'Media library test'
 | 
			
		||||
type: module
 | 
			
		||||
description: 'Test module for Media library.'
 | 
			
		||||
package: Testing
 | 
			
		||||
core: 8.x
 | 
			
		||||
dependencies:
 | 
			
		||||
  - drupal:media_library
 | 
			
		||||
  - drupal:media_test_source
 | 
			
		||||
  - drupal:menu_ui
 | 
			
		||||
  - drupal:path
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,102 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Drupal\Tests\media_library\FunctionalJavascript;
 | 
			
		||||
 | 
			
		||||
use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
 | 
			
		||||
use Drupal\media\Entity\Media;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Contains Media library integration tests.
 | 
			
		||||
 *
 | 
			
		||||
 * @group media_library
 | 
			
		||||
 */
 | 
			
		||||
class MediaLibraryTest extends JavascriptTestBase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * {@inheritdoc}
 | 
			
		||||
   */
 | 
			
		||||
  protected static $modules = ['block', 'media_library_test'];
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * {@inheritdoc}
 | 
			
		||||
   */
 | 
			
		||||
  protected function setUp() {
 | 
			
		||||
    parent::setUp();
 | 
			
		||||
 | 
			
		||||
    // Create a few example media items for use in selection.
 | 
			
		||||
    $media = [
 | 
			
		||||
      'type_one' => [
 | 
			
		||||
        'media_1',
 | 
			
		||||
        'media_2',
 | 
			
		||||
      ],
 | 
			
		||||
      'type_two' => [
 | 
			
		||||
        'media_3',
 | 
			
		||||
        'media_4',
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    foreach ($media as $type => $names) {
 | 
			
		||||
      foreach ($names as $name) {
 | 
			
		||||
        $entity = Media::create(['name' => $name, 'bundle' => $type]);
 | 
			
		||||
        $source_field = $type === 'type_one' ? 'field_media_test' : 'field_media_test_1';
 | 
			
		||||
        $entity->set($source_field, $this->randomString());
 | 
			
		||||
        $entity->save();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Create a user who can use the Media library.
 | 
			
		||||
    $user = $this->drupalCreateUser([
 | 
			
		||||
      'access administration pages',
 | 
			
		||||
      'access media overview',
 | 
			
		||||
      'create media',
 | 
			
		||||
      'delete any media',
 | 
			
		||||
      'view media',
 | 
			
		||||
    ]);
 | 
			
		||||
    $this->drupalLogin($user);
 | 
			
		||||
    $this->drupalPlaceBlock('local_tasks_block');
 | 
			
		||||
    $this->drupalPlaceBlock('local_actions_block');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests that the Media library's administration page works as expected.
 | 
			
		||||
   */
 | 
			
		||||
  public function testAdministrationPage() {
 | 
			
		||||
    $assert_session = $this->assertSession();
 | 
			
		||||
 | 
			
		||||
    // Visit the administration page.
 | 
			
		||||
    $this->drupalGet('admin/content/media');
 | 
			
		||||
 | 
			
		||||
    // Verify that the "Add media" link is present.
 | 
			
		||||
    $assert_session->linkExists('Add media');
 | 
			
		||||
 | 
			
		||||
    // Verify that media from two separate types is present.
 | 
			
		||||
    $assert_session->pageTextContains('media_1');
 | 
			
		||||
    $assert_session->pageTextContains('media_3');
 | 
			
		||||
 | 
			
		||||
    // Test that users can filter by type.
 | 
			
		||||
    $this->getSession()->getPage()->selectFieldOption('Media type', 'Type One');
 | 
			
		||||
    $this->getSession()->getPage()->pressButton('Apply Filters');
 | 
			
		||||
    $assert_session->assertWaitOnAjaxRequest();
 | 
			
		||||
    $assert_session->pageTextContains('media_2');
 | 
			
		||||
    $assert_session->pageTextNotContains('media_4');
 | 
			
		||||
    $this->getSession()->getPage()->selectFieldOption('Media type', 'Type Two');
 | 
			
		||||
    $this->getSession()->getPage()->pressButton('Apply Filters');
 | 
			
		||||
    $assert_session->assertWaitOnAjaxRequest();
 | 
			
		||||
    $assert_session->pageTextNotContains('media_2');
 | 
			
		||||
    $assert_session->pageTextContains('media_4');
 | 
			
		||||
 | 
			
		||||
    // Test that selecting elements as a part of bulk operations works.
 | 
			
		||||
    $this->getSession()->getPage()->selectFieldOption('Media type', '- Any -');
 | 
			
		||||
    $this->getSession()->getPage()->pressButton('Apply Filters');
 | 
			
		||||
    $assert_session->assertWaitOnAjaxRequest();
 | 
			
		||||
    // This tests that anchor tags clicked inside the preview are suppressed.
 | 
			
		||||
    $this->getSession()->executeScript('jQuery(".js-click-to-select__trigger a")[0].click()');
 | 
			
		||||
    $this->submitForm([], 'Apply to selected items');
 | 
			
		||||
    $assert_session->pageTextContains('media_1');
 | 
			
		||||
    $assert_session->pageTextNotContains('media_2');
 | 
			
		||||
    $this->submitForm([], 'Delete');
 | 
			
		||||
    $assert_session->pageTextNotContains('media_1');
 | 
			
		||||
    $assert_session->pageTextContains('media_2');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue