{"id":26279060,"url":"https://github.com/colak/txp-media-shortcode","last_synced_at":"2026-02-13T21:13:40.739Z","repository":{"id":90092640,"uuid":"278306358","full_name":"colak/txp-media-shortcode","owner":"colak","description":"A shortcode for Textpattern CMS which allows the easy embedding of local or external media in articles.","archived":false,"fork":false,"pushed_at":"2024-11-01T17:34:51.000Z","size":463,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-05T19:36:57.929Z","etag":null,"topics":["textpattern","textpattern-shortcode"],"latest_commit_sha":null,"homepage":"","language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/colak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-07-09T08:23:01.000Z","updated_at":"2024-11-01T17:34:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"c5ef1615-eaa8-45b8-b706-43d695677b1e","html_url":"https://github.com/colak/txp-media-shortcode","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/colak/txp-media-shortcode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colak%2Ftxp-media-shortcode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colak%2Ftxp-media-shortcode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colak%2Ftxp-media-shortcode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colak%2Ftxp-media-shortcode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/colak","download_url":"https://codeload.github.com/colak/txp-media-shortcode/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/colak%2Ftxp-media-shortcode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29417767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["textpattern","textpattern-shortcode"],"created_at":"2025-03-14T13:19:14.853Z","updated_at":"2026-02-13T21:13:40.723Z","avatar_url":"https://github.com/colak.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"# txp-media-shortcode \n\n\n## Introduction\n\nThis textpattern shortcode draws inspiration from [Nicolas Morand's](https://github.com/NicolasGraph) oui_player plugin and tries to produce similar results using textapattern's native tags but also make the players [GDPR](https://gdpr-info.eu/) compliant. In the case of locally hosted media no cookie consent is required. This work was [encouraged](https://forum.textpattern.com/viewtopic.php?pid=324309#p324309) by [Stef Dawson](https://github.com/Bloke), who first developed the smd_macro textpattern plugin. This later became part of txp's core code thanks to [Oleg's](https://github.com/bloatware) reworking of the native `\u003ctxp:yield /\u003e` tag. Finally, many thanks are also due to [Michael K. Pate](https://github.com/michaelkpate) for the exhaustive testing and help for the detection of numerous bugs.\n\n## Disclaimer (further to the one in the Licence)\n\nObviously, the author does not agree with one, or any of the policies or content of the providers the shortcode supports. \n\n## Dependencies \n\n* [Textpattern 4.7+](https://textpattern.com/)\n* [oui_cookie](https://forum.textpattern.com/viewtopic.php?id=47048)\n* [etc_query](https://forum.textpattern.com/viewtopic.php?id=37932)\n* The media hosts' url schemas and embed codes.\n* Georestrictions and privacy settings of individual media.\n* The availability of the content. Millions of videos and sound-files are taken off the web daily. This is because they are removed by the original uploader or blocked by the hosts (usually because of DMCA notices).\n\n## Advantages and disadvantages of shortcodes\n\nShortcodes are easy to edit by those without any knowledge of php but with sufficient knowledge of html and txp tags. \n\nIf you often embed media in your website, it is much easier to update the shortcode when providers change their embed scripts rather than find and change all instances of the embedded content in your articles.\n\nThe shortcode's GDPR warnings are parsed automatically, which save on typing, remembering cookie names, and privacy policy links. \n\nWhen visitors accept a particular host's cookies, they do so for all embeds from that host site-wide. \n\nShortcodes are normally slightly slower in execution than raw php, or txp plugins.\n\n## Installing\n\n1. Copy the latest txp snippet from the [GitHub project page](https://github.com/colak/txp-media-shortcode/blob/master/media.tpl), \n2. Create a new miscellaneous form in your Textpattern administration interface and name it `media`,\n3. Paste the code into the form you created, and save.\n4. Copy the media providers you are using for your website and paste those codes in new miscellaneous forms, using the same names as the ones provided without the tpl extension. For example `media_yt.tpl`should be `media_yt`.\n5. Copy and paste the provided [css](https://github.com/colak/txp-media-shortcode/blob/master/css.css) in your style sheet and edit it to your liking.\n\n## Cookies\n\nAccording to GDPR, webmasters should never serve any tracking cookies without their visitors' explicit consent. The GDPR gives the right to any EU citizen to legally institute legal proceedings against any website owner, regardless of the website's or owner's location. The cookies served by the oui_cookie plugin do not track, but most media hosting providers do include tracking in their embeddable content. The acceptance cookies last for a duration of one year. \n\nThe above is but only one of the steps needed for full adherence to the EU law which also requests for a privacy policy and a description of the first and third party cookies served. Examples of such pages can be found in the neme.org site on:\n\n* http://www.neme.org/about/privacy-policy\n* http://www.neme.org/about/cookies\n\n## Usage\n\n1. To embed the media, simply use \n\n`==\u003ctxp::media from=\"xxx\" media=\"yyy\" title=\"my text here\" /\u003e==`\n\n2. Using the shortcode above, insert the id of the media file in the `media` attribute. The id can normally be found in the url of the video. For example:\n\n* For a Vimeo address such as https://vimeo.com/336049258, the video id is `336049258`\n* For a YouTube address such as https://www.youtube.com/watch?v=zlZTghhCuxg, the video id is `zlZTghhCuxg`\n\n3. Use the `title` attribute should you wish to have a textile enabled descriptive text in the GDPR container. This text is replaced by the `embed` container once the cookie for the particular provider is accepted.\n\n4. The `url` attribute is used in different ways, explained in the examples.\n\n## Errors and warnings\n\nYou may see some errors and warnings after posting your shortcodes. These can appear before or after the cookies are accepted and they are only visible to logged-in users. They were added as prompts to promote the proper usage of the attributes. \n\n## Attributes\n\n1. from (required)\n2. media (required)\n3. title (recommended)\n4. url (Required or recommended by some hosts)\n5. img (optional id of an image from the database)\n6. \u003ci\u003eothers\u003c/i\u003e. (See examples.)\n\n### Details\n\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003cth scope=\"col\"\u003eMedia hosts\u003c/th\u003e\n\t\t\t\u003cth scope=\"col\"\u003efrom\u003c/th\u003e\n\t\t\t\u003cth scope=\"col\"\u003eurl\u003c/th\u003e\n\t\t\t\u003cth scope=\"col\"\u003etitle\u003c/th\u003e\n\t\t\t\u003cth scope=\"col\"\u003eimg\u003c/th\u003e\n\t\t\t\u003cth scope=\"col\"\u003e\u003ci\u003eothers\u003c/i\u003e\u003c/th\u003e\n\t\t\t\u003cth scope=\"col\"\u003eExamples\u003c/th\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd colspan=\"7\"\u003e \u003cb\u003eVideo or audio\u003c/b\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e Local\u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e local \u003c/td\u003e\n\t\t\t\u003ctd\u003e url=\"v\" \u003c/td\u003e\n\t\t\t\u003ctd\u003e ISO 639-1 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e mp4, ogg, mpeg-4, flac, webm, m4v, mpg \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"#5-embed-a-local-video\"\u003e(5)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"a\" \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e m4a, mp3, ogg, mp4, sac, webm, flac \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"#3-embed-local-audio\"\u003e(3)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u003ca href=\"https://archive.org/\"\u003eInternet Archive\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e ia \u003c/td\u003e\n\t\t\t\u003ctd\u003e url=\"v\" \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u003ca href=\"#7-embed-from-the-internet-archive\"\u003e(7)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"a\" \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd colspan=\"7\"\u003e \u003cb\u003eVideo\u003c/b\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u003ca href=\"https://www.youtube.com/\"\u003eYouTube\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e yt \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026nbsp; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u003ca href=\"#6-embed-from-youtube\"\u003e(6)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"pl\" \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"user\" \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u003ca href=\"https://www.vimeo.com/\"\u003eVimeo\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e v \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026nbsp; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"3\"\u003e \u003ca href=\"#1-embed-from-vimeo\"\u003e(1)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"a\" \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"vr\" \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.dailymotion.com/\"\u003eDailyMotion\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e dm \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://utreon.com\"\u003eUtreon\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e u \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://twitch.tv\"\u003eUtreon\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e twitch \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://peertube.video\"\u003ePeerTube\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e peer \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://rumble.com/\"\u003eRumble\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e rum \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://ted.com\"\u003eTED\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e ted \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.vidyard.com/\"\u003eVidyard\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e vy \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e  \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.vlare.tv/\"\u003eVlare\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e vl \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e  \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.freespeechtube.org/\"\u003eFreespeechtube\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e fst \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.bitchute.com\"\u003eBitChute\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e bc \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.playtube.pk\"\u003ePlaytube\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e pt \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://youtube-nocookie.com/\"\u003eYouTube-nocookie\u003c/a\u003e \u003csup id=\"a1\"\u003e\u003ca href=\"#fn1\"\u003e1\u003c/a\u003e\u003c/sup\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e ytnc \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://metacafe.com/\"\u003eMetaCafe\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e mc \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e 0 \u003c/td\u003e\n\t\t\t\u003ctd\u003e Rebranded as \u003ca href=\"https://videoshub.com\"\u003eVideoshub\u003c/a\u003e\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://coub.com/\"\u003eCoub\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e cb \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd colspan=\"7\"\u003e \u003cb\u003eVideo and GIF\u003c/b\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u003ca href=\"https://giphy.com/\"\u003eGiphy\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e gp \u003c/td\u003e\n\t\t\t\u003ctd\u003e url=\"g\" \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd rowspan=\"2\"\u003e \u003ca href=\"#4-embed-from-giphy\"\u003e(4)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e url=\"v\" \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd colspan=\"7\"\u003e \u003cb\u003eAudio\u003c/b\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://audioboom.com/\"\u003eAudioBoom\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e ab \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.indiesound.com/\"\u003eIndieSound\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e is \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://soundcloud.com/\"\u003eSoundCloud\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e sc \u003c/td\u003e\n\t\t\t\u003ctd\u003e url in SoundCloud \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"#2-embed-from-soundcloud\"\u003e(2)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://spotify.com/\"\u003eSpotify\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e sf \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://bandcamp.com/\"\u003eBandCamp\u003c/a\u003e (albums) \u003c/td\u003e\n\t\t\t\u003ctd\u003e bac \u003c/td\u003e\n\t\t\t\u003ctd\u003e Artist\u0026#8217;s name as it appears in the subdomain\u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"#8-embed-from-bandcamp\"\u003e(8)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.mixcloud.com/\"\u003eMixCloud\u003c/a\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e mix \u003c/td\u003e\n\t\t\t\u003ctd\u003e Artist\u0026#8217;s name as it appears in the url\u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"#9-embed-from-mixcloud\"\u003e(9)\u003c/a\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd colspan=\"7\" style=\"background-color:#ffc;color:#000;\"\u003e \u003cb\u003eOthers\u003c/b\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.google.com/mymaps\"\u003eGoogle Maps\u003c/a\u003e \u003csup id=\"a2\"\u003e\u003ca href=\"#fn2\"\u003e2\u003c/a\u003e\u003c/sup\u003e \u003c/td\u003e\n\t\t\t\u003ctd\u003e gm \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd\u003e \u003ca href=\"https://www.datawrapper.de\"\u003eDatawrapper\u003c/a\u003e  \u003c/td\u003e\n\t\t\t\u003ctd\u003e dw \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u0026check; \u003c/td\u003e\n\t\t\t\u003ctd\u003e NA \u003c/td\u003e\n\t\t\t\u003ctd\u003e \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n##  Examples\n\n### 1. Embed from Vimeo\n\nThe shortcode allows for **individual video** embeds and Vimeo albums. \n\nTo embed an individual video use\n\n`\u003ctxp::media from=\"v\" media=\"336049258\" title=\"My awesome video\" img=\"33\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cimg src=\"http(s)://site.tld/images/33.jpg\" width=\"720\" height=\"576\" alt=\"still from my ausome video\" /\u003e\n\t\t\u003cp\u003eMy awesome video\u003c/p\u003e\n\t\t\u003cp\u003eHosted by Vimeo on \u003ca rel=\"external noopener\" href=\"https://vimeo.com/336049258\"\u003evimeo.com/336049258\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://vimeo.com/privacy\"\u003eVimeo\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_vimeo_cookie=yes#m_336049258\"\u003eView it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"m_336049258\" itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003ciframe src=\"https://player.vimeo.com/video/336049258?title=0\u0026amp;byline=0\u0026amp;portrait=0\" allowfullscreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nThe `title` attribute is textile enabled. As such you can have\n\n`\u003ctxp::media from=\"v\" media=\"336049258\" title=\"h3. My awesome video\" img=\"33\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003ctxp:img src=\"http(s)://site.tld/images/33.jpg\" width=\"720\" height=\"576\" alt=\"still from my ausome video\" /\u003e\n\t\t\u003ch3\u003eMy awesome video\u003c/h3\u003e\n\t\t\u003cp\u003eHosted by Vimeo on \u003ca rel=\"external noopener\" href=\"https://vimeo.com/336049258\"\u003evimeo.com/336049258\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://vimeo.com/privacy\"\u003eVimeo\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_vimeo_cookie=yes#m_336049258\"\u003eView it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nFor Vimeo **albums** use the `url=\"a\"` attribute\n\n`\u003ctxp::media from=\"v\" media=\"2217152\" url=\"a\" title=\"Through the Roadblocks\" img=\"33\" /\u003e`\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"m_2217152\" itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003ciframe src='https://vimeo.com/showcase/2217152/embed' allowfullscreen frameborder='0' style='position:absolute;top:0;left:0;width:100%;height:100%;'\u003e\u003c/iframe\u003e\t\t\u003c/div\u003e\n\n`\u003ctxp::media from=\"v\" media=\"336049258\" title=\"My awesome video\" img=\"33\" /\u003e`\n\n### 2. Embed from SoundCloud\n\n`\u003ctxp::media from=\"sc\" media=\"336049258\" title=\"News from Nowhere\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eNews from Nowhere\u003c/p\u003e\n        \t\u003cp\u003eHosted by  \u003ca rel=\"external noopener\" href=\"https://soundcloud.com/\"\u003eSoundCloud\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://soundcloud.com/pages/privacy\"\u003eSoundCloud\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_soundcloud_cookie=yes#m_336049258\"\u003eListen to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"m_336049258\" itemscope itemtype=\"http://schema.org/AudioObject\"\u003e\n\t\t\u003ciframe width=\"100%\" height=\"300\" scrolling=\"no\" frameborder=\"no\" allow=\"autoplay\" src=\"https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/336049258\u0026amp;color=%23ff5500\u0026amp;auto_play=false\u0026amp;hide_related=true\u0026amp;show_comments=false\u0026amp;show_user=true\u0026amp;show_reposts=false\u0026amp;show_teaser=true\u0026amp;visual=true\"\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nEmbed from SoundCloud **using the url** attribute\n\n`\u003ctxp::media from=\"sc\" media=\"336049258\" title=\"News from Nowhere\" url=\"https://soundcloud.com/furtherfield/news-from-where-we-are-1\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eNews from Nowhere\u003c/p\u003e\n\t\t\u003cp\u003eHosted by SoundCloud on \u003ca rel=\"external noopener\" href=\"https://soundcloud.com/furtherfield/news-from-where-we-are-1\"\u003ehttps://soundcloud.com/furtherfield/news-from-where-we-are-1\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://soundcloud.com/pages/privacy\"\u003eSoundCloud\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_soundcloud_cookie=yes#m_336049258\"\u003eListen to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nThe resulting code after the cookie is accepted is the same as the one in the second example.\n\n### 3. Embed local audio\n\nThe html5 audio tag, allows for the embedding of multiple formats to enhance compatibility with the various browsers and computer setups. To embed music residing in your installation's files directory, first upload the audio files using the same name followed by the extension. In your articles call the file name and state the extensions you have encoded those files to. (Currently the tag supports m4a, mp3, mp4, aac, webm, flac and ogg). You may want to check the [formats supported by different web browsers](https://en.wikipedia.org/wiki/HTML5_audio#Supported_audio_coding_formats).\n\n`\u003ctxp::media from=\"local\" url=\"a\" media=\"my_title\" m4a mp3 flac /\u003e`\n\nThe resulting code will be\n\n\t\u003cspan itemscope itemtype=\"http://schema.org/AudioObject\"\u003e\n\t\t\u003caudio controls\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/files/my_title.m4a\" type=\"audio/m4a\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/files/my_title.mp3\" type=\"audio/mpeg\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/files/my_title.flac\" type=\"audio/flac\"\u003e\n\t\t\t\u003cp\u003eYour browser does not support the audio element.\u003c/p\u003e\n\t\t\u003c/audio\u003e\n\t\u003c/span\u003e\n\n### 4. Embed from Giphy\n\nGiphy offers two types of urls based on the media type, gif and video.\n\n* giphy.com/gifs/name\n* giphy.com/videos/name\n\nTo embed a **gif from Giphy** use\n\n`\u003ctxp::media from=\"gp\" media=\"QZyYmcnN7uYgx6uGyL\" title=\"We want justice\" url=\"g\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eWe want justice\u003c/p\u003e\n\t\t\u003cp\u003eHosted by Giphy on \u003ca rel=\"external noopener\" href=\"https://giphy.com/gifs/QZyYmcnN7uYgx6uGyL\"\u003egiphy.com/gifs/QZyYmcnN7uYgx6uGyL\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://support.giphy.com/hc/en-us/articles/360032872931-GIPHY-Privacy-Policy\"\u003eGiphy\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_giphy_cookie=yes#m_QZyYmcnN7uYgx6uGyL\"\u003eView to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"m_QZyYmcnN7uYgx6uGyL\"  itemscope itemtype=\"http://schema.org/ImageObject\"\u003e\n\t\t\u003ciframe src=\"https://giphy.com/embed/QZyYmcnN7uYgx6uGyL\" frameBorder=\"0\" allowFullScreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nTo embed a **video from Giphy** use\n\n`\u003ctxp::media from=\"gp\" media=\"YOMRpF8MSxjMqlPO6h\" title=\"Tear Gas\" url=\"v\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eTear Gas\u003c/p\u003e\n\t\t\u003cp\u003eHosted by Giphy on \u003ca rel=\"external noopener\" href=\"https://giphy.com/videos/YOMRpF8MSxjMqlPO6h\"\u003egiphy.com/videos/YOMRpF8MSxjMqlPO6h\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://support.giphy.com/hc/en-us/articles/360032872931-GIPHY-Privacy-Policy\"\u003eGiphy\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_giphy_cookie=yes#m_YOMRpF8MSxjMqlPO6h\"\u003eView to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"YOMRpF8MSxjMqlPO6h\"  itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003ciframe src=\"https://giphy.com/embed/YOMRpF8MSxjMqlPO6h\" frameBorder=\"0\" allowFullScreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\n### 5. Embed a local video\n\nThe html5 video tag, allows for the embedding of multiple formats to enhance compatibility with the various browsers and computer setups. To embed your videos residing in your installation's files directory, first upload the video files using the same name followed by the extension. In your articles call the file name and state the extensions you have encoded those files to. (Currently the tag supports  mp4, ogg, mpeg-4, flac, webm). You may want to check the [status of video format support in each web browser](https://en.wikipedia.org/wiki/HTML5_video#Browser_support).\n\n`\u003ctxp::media from=\"local\" url=\"v\" media=\"my_title\" mp4 webm /\u003e`\n\nThe resulting code will be\n\n\t\u003cspan itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003cvideo width=\"100%\" height=\"100%\" controls\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/my_video.mp4\" type=\"video/mp4\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/my_video.webm\" type=\"video/webm\"\u003e\n\t\t\t\u003cp\u003eYour browser does not support the video element.\u003c/p\u003e\n\t\t\u003c/video\u003e\n\t\u003c/span\u003e\n\nIf you wish to include a poster-frame for the video use\n\n`\u003ctxp::media from=\"local\" url=\"v\" media=\"my_title\" mp4 webm img=\"32\" /\u003e`\n\nWhere the `32` is the id number of your selected image from the database.\n\nThe resulting code will be\n\n\t\u003cspan itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003cvideo width=\"100%\" height=\"100%\" controls poster=\"http(s)://site.tld/images/32.jpg\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/my_video.mp4\" type=\"video/mp4\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/my_video.webm\" type=\"video/webm\"\u003e\n\t\t\t\u003cp\u003eYour browser does not support the video element.\u003c/p\u003e\n\t\t\u003c/video\u003e\n\t\u003c/span\u003e\n\nHTML5 allows the addition of subitiles in the videos and suport for one **srt** subtitle track is provided. The track should have the same name as the video file with the addition of `_language`, so for an english subtitled track the name of the file could be `my_video_en.srt`. The language string should use the [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) standard.\n\nSo for:\n\n`\u003ctxp::media from=\"local\" url=\"v\" media=\"my_title\" mp4 webm img=\"32\" title=\"en\" /\u003e`\n\nThe resulting code will be\n\n\t\u003cspan itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003cvideo width=\"100%\" height=\"100%\" controls poster=\"http(s)://site.tld/images/32.jpg\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/my_video.mp4\" type=\"video/mp4\"\u003e\n\t\t\t\u003csource src=\"http(s)://site.tld/files/my_video.webm\" type=\"video/webm\"\u003e\n\t\t\t\u003ctrack enabled=\"true\" kind=\"subtitles\" label=\"en\" srclang=\"en\" type=\"text/x-srt\" src=\"http(s)://site.tld/files/my_video_en.srt\" /\u003e\u003c/track\u003e\n\t\t\t\u003cp\u003eYour browser does not support the video element.\u003c/p\u003e\n\t\t\u003c/video\u003e\n\t\u003c/span\u003e\n\n### 6. Embed from YouTube\n\nYouTube's url structures allow for the presentation of the video thumbnail before their cookies are served. As such the code below also embeds the thumbnail before the cookie is accepted. \n\nThe shorcode allows for embeding individual videos, YouTube playlists, or a feed from a YouTube user. \n\nEmbed an **individual video**\n\n`\u003ctxp::media from=\"yt\" media=\"zlZTghhCuxg\" title=\"Delivery for Mr. Assange\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cimg src=\"https://i3.ytimg.com/vi/zlZTghhCuxg/hqdefault.jpg\" srcset=\"https://i3.ytimg.com/vi/zlZTghhCuxg/hqdefault.jpg 480w, https://i3.ytimg.com/vi/zlZTghhCuxg/maxresdefault.jpg 1280w\" alt=\"Delivery for Mr. Assange\" itemscope itemtype=\"http://schema.org/ImageObject\" /\u003e\u003cpicture\u003e\n\t\t\u003cp\u003eDelivery for Mr. Assange\u003c/p\u003e\n\t\t\u003cp\u003eHosted by YouTube on \u003ca rel=\"external noopener\" href=https://youtu.be/zlZTghhCuxg\"\u003eyoutu.be/zlZTghhCuxg\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://youtube.com/privacy\"\u003eYouTube\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_youtube_cookie=yes#m_zlZTghhCuxg\"\u003eView it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"m_zlZTghhCuxg\"  itemscope itemtype=\"http://schema.org/VideoObject\"\u003e\n\t\t\u003ciframe src=\"https://www.youtube.com/embed/zlZTghhCuxg?rel=0\" frameborder=\"0\" allowfullscreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nThe default, pre cookie acceptance behaviour, calls the images from YouTube and some may find this unacceptable so I provided an option to include an image from the database. For that you can use:\n\n`\u003ctxp::media from=\"yt\" media=\"zlZTghhCuxg\" title=\"Delivery for Mr. Assange\" img=\"34\" /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cimg src=\"http(s)://site.tld/images/34.jpg\" alt=\"Delivery for Mr. Assange\" width=\"720\" height=\"576\" /\u003e \n\t\t\u003cp\u003eDelivery for Mr. Assange\u003c/p\u003e\n\t\t\u003cp\u003eHosted by YouTube on \u003ca rel=\"external noopener\" href=https://youtu.be/zlZTghhCuxg\"\u003eyoutu.be/zlZTghhCuxg\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://youtube.com/privacy\"\u003eYouTube\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_youtube_cookie=yes#m_zlZTghhCuxg\"\u003eView it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nIf an image is not desired before the cookie acceptance use \n\n`\u003ctxp::media from=\"yt\" media=\"zlZTghhCuxg\" title=\"Delivery for Mr. Assange\" 0 /\u003e`\n\nResulting code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eDelivery for Mr. Assange\u003c/p\u003e\n\t\t\u003cp\u003eHosted by YouTube on \u003ca rel=\"external noopener\" href=https://youtu.be/zlZTghhCuxg\"\u003eyoutu.be/zlZTghhCuxg\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://youtube.com/privacy\"\u003eYouTube\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_youtube_cookie=yes#m_zlZTghhCuxg\"\u003eView it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nTo embed a **YouTube user's feed** use the `media` attribute for the user handle and the `url` attribute to prompt the shortcode that it will will be embedding the feed. \n\n`\u003ctxp::media from=\"yt\" url=\"user\" media=\"thejuicemedia\" title=\"The Juice Media\" /\u003e`\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\"\u003e\n\t\t\u003ciframe src=\"https://www.youtube.com/embed?listType=user_uploads\u0026amp;list=thejuicemedia\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nTo embed a **playlist from YouTube** use the `url` attribute to prompt the shortcode that it will be loading a playlist and the `media` attribute for the playlist ID. Note that YouTube playlist IDs always start with `PL`. \n\n`\u003ctxp::media from=\"yt\" url=\"pl\" media=\"PLAC463A2B6B2CEC7F\" title=\"TED talks\" /\u003e`\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\"\u003e\n\t\t\u003ciframe src=\"https://www.youtube.com/embed/videoseries?list=PLAC463A2B6B2CEC7F\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\n### 7. Embed from the Internet archive\n\nThe Internet archive allows the embedding of both video and audio files.\n\nTo embed a **video** from the the Archive simply, use\n\n`\u003ctxp::media from=\"ia\" url=\"v\" media=\"PiesAndaluzyjski\" title=\"Luis Bunuel: Un Chien Andalou, 1929\" /\u003e`\n\nThe resultig code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eLuis Bunuel: Un Chien Andalou, 1929\u003c/p\u003e\n\t\t\u003cp\u003eHosted by Vimeo on \u003ca rel=\"external noopener\" href=\"https://archive.org/details/PiesAndaluzyjski\"\u003earchive.org/details/PiesAndaluzyjski\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://archive.org/about/terms.php\"\u003eInternet Archive\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow noindex\" href=\"?My_Site_iarchive_cookie=yes#m_PiesAndaluzyjski\"\u003eView it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nResulting code after cookie is accepted\n\n\t\u003cdiv class=\"embed-container\" id=\"m_PiesAndaluzyjski\"\u003e\n\t\t\u003ciframe src=\"https://archive.org/embed/PiesAndaluzyjski\" frameborder=\"0\" webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\" allowfullscreen\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nYou may have noticed that the parsed code of the embed-container, after the cookie is accepted, does not include ARIA. This is because the Object types (video or audio) need to be specified. You can do that by typing: `url=\"v\"` or `url=\"a\"`, where `v` is for video and `a` is for audio. \n\n### 8. Embed from Bandcamp\n\nBandcamp offers subdomains for their artists and normalised urls do not appear to be supported. The id of the tracks can be found in their embed code but found no way to link to their pages by using those ids. Having this in mind, to embed from Bandcamp use\n\n`\u003ctxp::media from=\"bac\" media=\"600847421\" title=\"Icarus\" url=\"jabbacartel\" /\u003e`\n\nResulting code after cookie is accepted:\n\n\t\u003cdiv class=\"embed-container\" id=\"m_\u003ctxp:yield name=\"media\" /\u003e\" itemscope itemtype=\"http://schema.org/AudioObject\"\u003e\n\t\t\u003ciframe style=\"border: 0; width: 100%; height: 274px;\" src=\"https://bandcamp.com/EmbeddedPlayer/album=600847421/size=large/bgcol=ffffff/linkcol=0687f5/artwork=small/transparent=true/\" seamless\u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nResultig code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eIcarus\u003c/p\u003e\n\t\t\u003cp\u003eHosted by BandCamp on \u003ca rel=\"external noopener\" href=\"https://jabbacartel.bandcamp.com/album/icarus\"\u003ejabbacartel.bandcamp.com/album/icarus\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://bandcamp.com/privacy\"\u003eBandCamp\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_bandcamp_cookie=yes#m_600847421\"\u003eListen to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\nIf the url attribute is not used, a warning, only visible to logged in users will be provided\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eIcarus\u003c/p\u003e\n\t\t\u003cp\u003eHosted by \u003ca rel=\"external noopener\" href=\"https://bandcamp.com\"\u003eBandCamp\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://bandcamp.com/privacy\"\u003eBandCamp\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"error\"\u003eWarning: \u003cb\u003eurl\u003c/b\u003e is a recommended attribute. Use url=\"artistname\" and replace \u003ci\u003eartistname\u003c/i\u003e with the name appearing in the subdomain.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_bandcamp_cookie=yes#m_600847421\"\u003eListen to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\n### 9. Embed from Mixcloud\n\nMixcloud offers subdirectories for their artists and normalised urls do not appear to be supported. The id of the tracks can be found in their embed code but found no way to link to their pages by using those ids. Also the artist's name is a required field and should be used under the `url` attribute. Having this in mind, to embed from Mixcloud use\n\n`\u003ctxp::media from=\"mix\" media=\"midnight-silhouettes-7-5-20\" title=\"Midnight silhouettes\" url=\"eyeam4real\" /\u003e`\n\nResulting code after cookie is accepted:\n\n\t\u003cdiv class=\"embed-container\" id=\"m_\u003ctxp:yield name=\"media\" /\u003e\" itemscope itemtype=\"http://schema.org/AudioObject\"\u003e\n\t\t\u003ciframe width=\"100%\" height=\"120\" src=\"https://www.mixcloud.com/widget/iframe/?hide_cover=1\u0026light=1\u0026feed=%2Feyeam4real%2Fmidnight-silhouettes-7-5-20%2F\" frameborder=\"0\" \u003e\u003c/iframe\u003e\n\t\u003c/div\u003e\n\nResultig code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eMidnight silhouettes\u003c/p\u003e\n\t\t\u003cp\u003eHosted by Mixcloud on \u003ca rel=\"external noopener\" href=\"https://www.mixcloud.com/eyeam4real/midnight-silhouettes-7-5-20/\"\u003emixcloud.com/eyeam4real/midnight-silhouettes-7-5-20/\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp\u003e\u003ca rel=\"external noopener\" href=\"https://mixcloud.com/privacy\"\u003eMixcloud\u0026#8217;s private policy\u003c/a\u003e.\u003c/p\u003e\n\t\t\u003cp class=\"accept\"\u003e\u003ca rel=\"nofollow\" href=\"?My_Site_mixcloud_cookie=yes#m_idnight-silhouettes-7-5-20\"\u003eListen to it here\u003c/a\u003e\u003c/p\u003e\n\t\u003c/div\u003e\n\n\nIf the required `url` attribute is not used, an error will be presented\n\nResultig code before cookie is accepted\n\n\t\u003cdiv class=\"gdpr\"\u003e\n\t\t\u003cp\u003eMidnight silhouettes\u003c/p\u003e\n\t\t\u003cp class=\"error\"\u003eError: \u003cb\u003eurl\u003c/b\u003e is a required attribute.\u003c/p\u003e \u003c!-- only visible to logged-in users --\u003e\n\t\u003c/div\u003e\n\nResultig code after cookie is accepted\n\n\t\u003cdiv class=\"embed_container\"\u003e \u003c!-- only visible to logged-in users --\u003e\n\t\t\u003cp class=\"error\"\u003eError: \u003cb\u003eurl\u003c/b\u003e is a required attribute.\u003c/p\u003e\n\t\u003c/div\u003e\n\n## Licence \n\nThis shortcode is released as free and unencumbered software. Read about it on https://github.com/colak/txp-media-shortcode/blob/master/LICENCE.md.\n\n## Support\n\nPlease post any questions requests, or bugs on https://forum.textpattern.com/viewtopic.php?id=50879\n\n## Not what you are looking for?\n\nIf you are not using textpattern or if you are looking for a general php which can *embed from anywhere*, you may want to have a look at Oscar Otero's [Embed](https://github.com/oscarotero/Embed).\n\n## Notes\n\n\u003cp class=\"footnote\" id=\"fn1\"\u003e\u003csup\u003e1\u003c/sup\u003e I have detected that embedded videos from youtube-nocookies do serve 3 cookies, 2 of which are from youtube. I have nevertheless included it in the list as, unlike Youtube, the embedded videos do not show related content when a video is paused or finished.\u003c/p\u003e \n\u003cp class=\"footnote\" id=\"fn2\"\u003e\u003csup\u003e2\u003c/sup\u003e Created in and shared from the \u003ci\u003eMy Maps\u003c/i\u003e API.\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolak%2Ftxp-media-shortcode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcolak%2Ftxp-media-shortcode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolak%2Ftxp-media-shortcode/lists"}