Path: blob/master/src/infrastructure/markup/rule/PhabricatorYoutubeRemarkupRule.php
12241 views
<?php12final class PhabricatorYoutubeRemarkupRule extends PhutilRemarkupRule {34public function getPriority() {5return 350.0;6}78public function apply($text) {9try {10$uri = new PhutilURI($text);11} catch (Exception $ex) {12return $text;13}1415$domain = $uri->getDomain();16if (!preg_match('/(^|\.)youtube\.com\z/', $domain)) {17return $text;18}1920$v_params = array();2122$params = $uri->getQueryParamsAsPairList();23foreach ($params as $pair) {24list($k, $v) = $pair;25if ($k === 'v') {26$v_params[] = $v;27}28}2930if (count($v_params) !== 1) {31return $text;32}3334$v_param = head($v_params);3536$text_mode = $this->getEngine()->isTextMode();37$mail_mode = $this->getEngine()->isHTMLMailMode();3839if ($text_mode || $mail_mode) {40return $text;41}4243$youtube_src = 'https://www.youtube.com/embed/'.$v_param;4445$iframe = $this->newTag(46'div',47array(48'class' => 'embedded-youtube-video',49),50$this->newTag(51'iframe',52array(53'width' => '650',54'height' => '400',55'style' => 'margin: 1em auto; border: 0px;',56'src' => $youtube_src,57'frameborder' => 0,58),59''));6061return $this->getEngine()->storeText($iframe);62}6364public function didMarkupText() {65CelerityAPI::getStaticResourceResponse()66->addContentSecurityPolicyURI('frame-src', 'https://www.youtube.com/');67}6869}707172