'www.google.com/url*', 'googleTranslator' => 'translate.google.com/translate', 'hashBang' => '*#!*', 'spotify' => 'play.spotify.com/*', 'tumblr' => 't.umblr.com/redirect', ]; /** * Resolve the url redirection. * * @param Url $url * * @return Url */ public static function resolve(Url $url) { foreach (self::$patterns as $method => $pattern) { if ($url->match($pattern)) { return self::$method($url); } } return $url; } /** * Resolve a google redirection url. * * @param Url $url * * @return Url */ public static function google(Url $url) { if (($value = $url->getQueryParameter('url'))) { return Url::create($value); } return $url; } /** * Resolve a google translation url. * * @param Url $url * * @return Url */ public static function googleTranslator(Url $url) { if (($value = $url->getQueryParameter('u'))) { return Url::create($value); } return $url; } /** * Resolve an url with hashbang. * * @param Url $url * * @return Url */ public static function hashBang(Url $url) { if (($path = preg_replace('|^(/?!)|', '', $url->getFragment()))) { return $url->withPath($url->getPath().$path); } return $url; } /** * Redirect the player of spotify. * * @param Url $url * * @return Url */ public static function spotify(Url $url) { return $url->withHost('open.spotify.com'); } /** * Redirect the tumblr url * * @param Url $url * * @return Url */ public static function tumblr(Url $url) { if (($value = $url->getQueryParameter('z'))) { return Url::create($value); } return $url; } }