diff --git a/core/modules/media/config/schema/media.schema.yml b/core/modules/media/config/schema/media.schema.yml index dad5189..3adeb77 100644 --- a/core/modules/media/config/schema/media.schema.yml +++ b/core/modules/media/config/schema/media.schema.yml @@ -52,6 +52,14 @@ media.source.image: type: media.source.field_aware label: '"Image" media source configuration' +media.source.local_audio: + type: media.source.field_aware + label: '"Audio" media source configuration' + +media.source.local_video: + type: media.source.field_aware + label: '"Video" media source configuration' + media.source.field_aware: type: mapping mapping: diff --git a/core/modules/media/images/icons/audio.png b/core/modules/media/images/icons/audio.png new file mode 100755 index 0000000..56b3d00 --- /dev/null +++ b/core/modules/media/images/icons/audio.png @@ -0,0 +1,15 @@ +‰PNG + + IHDR´´²¯‘etEXtSoftwareAdobe ImageReadyqÉe< iTXtXML:com.adobe.xmp  EŸ:CIDATxÚì]ÙWÉÓEeovºADdSÙWE@ܿŇùóæ?™QY†mØaØE‡¥Gdi–i mÔß=]çãø9LEdu7V5qæaÌ“TWÞŠ¸yå—_~‰ÎC¤¼��C ä9B��C ä9B��C ä„!‡@È!r„!‡@È!r„!‡@ðˆ–W`6ÄÅÅÛíö´´´+W®¸Ýî÷ïß/-- 9.5œNgCCCFFÆÙÿILLÌËË+**Y__·rI‘™™ÙÞÞþ-3Î�žžþðáÃëׯ 9.¥ú‹Œ¬®®Ž��ÿ¯±±±­­­0-BŽK›Í–••EÊ‘¶¶¶ììl!ÇåBBBÖž3 üHIIr\"�œœpF‚�&`‰�#$ºïöíÛðñ¦zª½½½ÍÍMæ`8 è�«W¯ +9‚‰ÜÜÜ'Ož8Ž/_¾˜êÁð<“““�‡9ñmKKKtt´�#8¸uëÖãÇ�?}údÂÇÛÚÚêííå?[QQQUU•�#�bmm-L1B3?çúúzWW—×ëeޝ¨¨(,,rGLL̽{÷@ލ¨(ó?­ËåêëëcÚ¸ü´ôôt!‡Á±£££¼¼ÜBϼ¼¼<88ÈTEñññ!²ˆaN|ROŸ>½à¬sP°´´}Ê�¿êëë¯\¹"äà"??ÿÙ³gxq}~�cqq‘9¸´´r[ÈÁ}Yð&L¬ûàV†††˜;±0 ÁÍœ†!9ðšêêêîß¿êѲât{{›)>ƒ˜ù7r\»v­­­­¦¦Æ� ÿüóOoo/þË uDéVäHJJzòäIqqq˜1–£¿¿ŸÜVTT¤¥¥ 9þ²²² ?sssÃRB¹\®‘‘‘¯_¿rœK°Ò¦aBŽ‚‚„¬Áúb‚+€°Z©©©ÉÉÉpy�Lµ°°ðæÍÎÈB?øp¨!½sç¢ü˜˜RöæÍ›ˆ bcczx<€¥¥¥££#³ÁlŒ��çääÀ{_|d$ŒÇû÷ï™5ÿ…¨çÏŸ[—PæÐçˆMTåçÎÎÎêêjè,..®¥¥–žžË�¸ fqµÃáp:�»»»L�ùïà€ê$ó]ø£Ÿ??.©[ÑjæîÞ½k¶ƒ 3 ‹Ï-�ïëèè0œšûËÎÈÛ·oÛl¶ËHxq&0Ú&|¶’’’7nè € yôè‘1~ÀÀ¹r¢z|9�äÔ-Iø]ÈO»ÝnÂgƒµÈËË#‡AŸÂ~Khîïï���qF²{`=rÀZ<~ü8@ƒ:@^pê„#üåæp‹ÌÁßa ǹàa Ö/94nø…^ |>?ÉÎξwïž±dîèèèÁÁ9 ÎpîÇ2ä@`ÒÜÜŒ�5¤U“�šÁêéé)ßÖÔÔøC`ÆÜÜŽFEASÖ LäwÐKB�ååå¡¡!~suuuii©±ÈÅív“Ãòóó�) �±ß³gϬU°3???00À·MMM~ ü×ëׯ9a ”i’ÃétþôÓOä9Abaa�_ê姉ƀñØÝÝå(ÞÔä(++ÓNX4³¸¸û fÔÖÖªµòx<�8ä°„„9!ó’2- +v`?ø¥ X¿‚‚aíÞÞgrU-oFrÀG¶¶¶ÖÕÕ™íÄ¢1LLLÌÌÌ0cuüj�. çâøø$‡¥¤¤¨¶o0ÝÛ‡uE`bL½›£££oß¾åŒÄˆláYHã�@OÕ³˜‹žOŸ>½Èþ$„-§ïÞ½ã Æ‡¡¹x½^ÄGä°ÜÜÜÔÔTK’oòÓ„;AÁÉÉI?g§^s.ª‡”VWWÉÉãââòóó­GŽòòò‡Zú$‰ƒƒƒ‘‘ÎÈôôtÕJX0ãÇœ˜–ŸHüñ䀄njj +�“$ <8i+͹¨n!qdMšܥѷBœŠVäóùô³„øÍÍÍÆòwÅØØXvv6¹Y�Ð�³³³ü™?~ü¸¿¿¯Ÿì§ϲ³³(9~þùg~øßˆŠŠB§ÿó´›VYWÄØøQx'�´÷ðxáï8dÍÉÉáÄ,B=€úYE uÚÛÛ ôN�ñàôºWMk¾{÷Ž”DP»œØPÈAH"Î1µÂ––Õ� ½½=NX ¦T‡ =D#ÉÉÉœT©�CЛ̋,À�¦¦&U~,,,�iMØ$%Ï‚g&ËÃ`6Îm¿/äP€Ïçã¤5ÜñCiþÃÃC«ä0§Ó©T„Ì)ÿáô˜rÐÁ!?¤ª««ƒÖS kÉxØn·+Õq!f!e,©“„677™ oM£444(�¦ÇB’:¦UÚ§…«"Sg äs +9|þüYéŠ$Ä·üùa–8u~ü 3˜ ’p�¤5rÐðz½===œ%ÔP^^®T�à“ì•�””Ä�Y@8$bá##IÙ!ä`1K__3“ s]VV¦$K].9''¾8Ãþþ>)•ÈhVÈ¡à_þøã¦ý¸yó&ßx|ýú1‘þ8|ŠR¶Ñ,$ÇÇÇëçv… +Ѓþý÷ßeªÔÕo{{›ô,øÐùyúü 3(ú‹�C XÂÁÁAN;%§ÓÉ/Ø„g!ã‹´´4~a:xLN'ä2vvv¦§§ÉaXH‡ÃÁ�/Èœ7ÖRéÔI±!”)hñ'3¡ÁAN£¤IIr@Ç9‚ŸÏlj\ìv;_Eîíí‘ÕYJ 87‚é×s 9 bee…L4Álð{SAv�R)÷Ê©/Ëœžžrî»à_|||LêÜ«W¯ò7~a9Èúp}¶ 9Œƒ³¿e³Ù˜ñ'§nkÉ�f1ÜŸ�ãÇÀív“•˜pê|ÙAÖŠjÍn™³AÁ�žE¿LÈ�,%Ëj°–üø“,,ºæ?ÕAjRÑ!Äþþ¾þ€¨¨(þr’k‰�_¬ +ËAŠý†ñBŽ€ppp@–êð;öà èKH¨Q¥C£¤ Õ/r,'™œP*Läü鿞 m„!g-ùÁç?H%Á…Ëä„B#€/çKQº\ä £bÎ¥ngàÜÞ¢_ð!ä0‚ÂÂBNƒv˜ ~pAž�C¨trèç`„ÊÀK¯¯¯'èPNc–³ ÙØƒßfˆcBýÚ3!‡rn£±±‘|ïÀúú:§�£†””2²€>à“#::š,8ñCÈ4©QSS£ù™ àÔ¦ŸfƒŒ,¶¶¶øÝŒ¡`Hr@‰ ªªª*++9#ÁrŽÄ�qŽs”Íívósçr€júš#Z–œÏŒºº:ÎHøòÙÙYþflBBy¼Åçóñ�”F² �”·b9X(--­­­e†CQêy�šš +~�‚nEiNý0Bô‰=Yxyyyüç÷öö¦¦¦”æ¿uë9æÃ‡ä ¥oÕ(iŠ`ÞÈÒy!`óœ>Çññq¾lŒ`w7_YYáÏ µAZΞ�ƒþ¬ù=@!5ø¹ ÅÅÅäÙ…ÃÃCæõ9ÒÒÒÈL<œ¹#(äЖ >…9ø¯¿þV*ÆINN.,,$‡mll(Y£¬¬,2GyKîá 9r0/ZCì:00 z}LQQyXQÏêêªR2†¬2ÁœäAN!�/~�Ãðööö2ë6ÎpíÚ5Φ?V‘¿ïáO¶fffê�Ñ.›r¯×K~µkkk¯^½RÚ;3œøoÞ¼Qº, >…´FxZŽŸ’$}LOOóœ{¢V(P,?È…üÞðΙ×MFë?\¨_7( +>xð€ßuÏꨨ¨àìÁ~úôIiÓ_‹SÈkY 5ø"æÇG+Õ ö9÷h†²³³™W}Am¨š „?¤AB Ëarh溧§gjjÊüwèPš››9K¨º{ËI¶Âlðc³ä9´ ‘†‡‡�]n~@ɶ¶¶2ïÙ@„¬š8�Ú +Š•“­¦zƒ3330!�‹>³Ú¼©©‰S_áÏ·ÎÏϫΟBî§À¡(¹*ÓeHák_¾|ÉIîZÕÕÕœ”—–„0`>!ç9¹/¼[¥™Í˜>Áûí7þY1“´9˜ƒáP666TÿD.i6<�RQH„i÷V;;;ùw̞qø*þüóOÕ?áôƒc6Tó¹æÝxóz½}}}“““Aì¾xÁp8<`ö!Åï…Ca¦§ÎËDªÁ›ÈZ™zWêztt´¿¿Ÿß9É<ÈÏÏôè³ç_�®ª6”ŽJXƒ^½zÅ?‘lf´··óÛÓÎû¡úW`6ÊËËÉ#_¾|Y\\4°b�zˆSHT¥ƒ?Ö›(1ŸõÐÐ��àu?8óS÷–)öÑvaÖÖÖLþœpÿ|f¸ÝîÞÞ^©?ü‰ššN3I˜^c©E+U‚Á³tww0¿ yò„Ò·¿è÷ß7PEá¿=--�©¡tÂʪäˆðïUBŸŽŒŒ˜vOÈŒ80 Ì0 #ü°wïÞ%‡!Л��5¼#aÉÒ©©)½¬§ÂO0�ïŠð'Ëëëë9׸`þ@r‰V-0^ZZêìì4f�C�¹¹9ý Ôçóõõõ©æ+ÏPRRÂÙ¦�qÅWHÀÂÕçø,Â3Ë!LÚÀÀÀÙü+¼‰áú•ÌÌLæa|?JgÎ •Ÿ?n]~àE»\®¤¤$¥ÛxµØ'¤unÇÇǘ�§uÎ×2˜ 4¢V¥‚òïB¡¶¶6Ž…Ô…qRÍ·~ÿç",Ž£££®®.ø`4S•+ÞOOO¿~ýÚf³�¾Ð†‡‡‡ÛÛÛ�ì Hv8LצT¶žäˆðgÙñ9z<ž††f£„ ¾Ý�~>•Óé98#·¶¶TëOÃMs|‡™™™îîns†0�±kKK çö?|*:”p#G„W•<a9ÄÆÆ¶¶¶rúŠj%Xyäp;+»¹¹ù믿¨ÒM©ÆÆFæÑ h�`ýé0Ã+ä0ÜnwOO�žDÜŠ@È!r„!‡@È!r„!‡@È!rB��C ä9B��C ä9a‹ÿ 0-Ô5^Â5IEND®B`‚ \ No newline at end of file diff --git a/core/modules/media/images/icons/video.png b/core/modules/media/images/icons/video.png new file mode 100755 index 0000000..17b4816 --- /dev/null +++ b/core/modules/media/images/icons/video.png @@ -0,0 +1,7 @@ +‰PNG + + IHDR´´¦Yî�IDATxíܧzå0†á\m: +ÙÞ[zJ;ÈÈLè0!#1#3¡Ù¾«‘Ó�Ge÷ÿ`ê‹\f”,ˆ›{º˜¡Oâæ€èrÐ'–XCSºˆeOÚRœÎ�ÖgšFÙühK£Bô �rùÑŽF�h] Z 4ГZÔ‚!ÚSÜ<#zKühNqž¡ÇŸWâG[‹é[?S7ghaz +s3ñ«ÍÅ使š9 +ë�`èÚzš¶—{â¶D… 4Ðu ·>%mïÐï×·±5½·²˜¼�©è7‹ÚÃ,h �h �.mœ§¿õ�.­»žþæ�áhCq2?ZRœ)x–÷éöY^­SS Õ�èÿ]å)„*Ï{Ôy²æ$Rû¶„§¼ÖGæ¼ 4Ð@ 4Ð÷h �h �Z[fd hi\˜ÕÝP”/a»å)ªaè�âL~´¡¸¡úí–ª­° èÉ-kAË›o.]~twËvËQ\“ÝPœchÙ�ÖdG��Öô2zžV:L–ñ<-u˜Â›Kn4Ð@ 4Ð@ 4Ð@ 4Ð@ËÖ„5e ÖJŽÖžxýI~ôIO<¯oÙnµùÑí¿²ÝªrÔ‹M@=h �Æv Û­¾ŽÛxÏЪŽ&ÅÐâ¤1a³2Mg&¬9Á› Ð@ 4Ð÷è—‹ÚšˆÞ[Lߺ˜ˆoS·²5-öÞset('settings', ['file_extensions' => 'mp3 ogg wav wma aiff aac']); + } + + /** + * {@inheritdoc} + */ + public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) { + $display->setComponent($this->getSourceFieldDefinition($type)->getName(), [ + 'type' => 'file_audio', + ]); + } + +} diff --git a/core/modules/media/src/Plugin/media/Source/LocalVideo.php b/core/modules/media/src/Plugin/media/Source/LocalVideo.php index 0f5e952..cf40b86 100644 --- a/core/modules/media/src/Plugin/media/Source/LocalVideo.php +++ b/core/modules/media/src/Plugin/media/Source/LocalVideo.php @@ -2,6 +2,7 @@ namespace Drupal\media\Plugin\media\Source; +use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\media\MediaTypeInterface; /** @@ -14,7 +15,7 @@ * label = @Translation("Video (local)"), * description = @Translation("Use local videos for reusable media."), * allowed_field_types = {"file"}, - * default_thumbnail_filename = "generic.png" + * default_thumbnail_filename = "video.png" * ) */ class LocalVideo extends File { @@ -23,19 +24,16 @@ class LocalVideo extends File { * {@inheritdoc} */ public function createSourceField(MediaTypeInterface $type) { - return parent::createSourceField($type)->set('settings', ['file_extensions' => 'mp4 webm']); + return parent::createSourceField($type)->set('settings', ['file_extensions' => 'mp4 webm ogg ogv']); } /** * {@inheritdoc} */ - public function getDisplayOptions(MediaTypeInterface $type, $display_context) { - if ($display_context == 'view') { - return [ - 'type' => 'file_video', - ]; - } - return []; + public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) { + $display->setComponent($this->getSourceFieldDefinition($type)->getName(), [ + 'type' => 'file_video', + ]); } } diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php new file mode 100644 index 0000000..53b3001 --- /dev/null +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php @@ -0,0 +1,62 @@ +doTestCreateMediaType($type_name, $source_id); + + // Check that the source field was created with the correct settings. + $storage = FieldStorageConfig::load("media.$field_name"); + $this->assertNotNull($storage); + $field = FieldConfig::load("media.$type_name.$field_name"); + $this->assertNotNull($field); + $this->assertSame('mp3 ogg wav wma aiff aac', FieldConfig::load("media.$type_name.$field_name")->get('settings')['file_extensions']); + + // Check that the display holds the correct formatter configuration. + $display = EntityViewDisplay::load("media.$type_name.default"); + $this->assertNotNull($display); + $formatter = $display->getComponent($field_name)['type']; + $this->assertSame('file_audio', $formatter); + } + + /** + * Check the Local Video source functionality. + */ + public function testVideoTypeCreation() { + $source_id = 'local_video'; + $type_name = 'video_type'; + $field_name = 'field_media_' . $source_id; + $this->doTestCreateMediaType($type_name, $source_id); + + // Check that the source field was created with the correct settings. + $storage = FieldStorageConfig::load("media.$field_name"); + $this->assertNotNull($storage); + $field = FieldConfig::load("media.$type_name.$field_name"); + $this->assertNotNull($field); + $this->assertSame('mp4 webm ogg ogv', FieldConfig::load("media.$type_name.$field_name")->get('settings')['file_extensions']); + + // Check that the display holds the correct formatter configuration. + $display = EntityViewDisplay::load("media.$type_name.default"); + $this->assertNotNull($display); + $formatter = $display->getComponent($field_name)['type']; + $this->assertSame('file_video', $formatter); + } + +}