/** * @param Request $request * @return \Illuminate\View\View | \Illuminate\Http\RedirectResponse */ public function site(Request $request) { $url = $request->input('site'); if ($this->hasNoHost($url)) { return $this->buildNewUrlRedirect($request, 'http://' . $url); } if ($redirect = $this->getRedirect($url)) { return $this->buildNewUrlRedirect($request, $redirect); } $html = $this->getUrlContents($url); if ($html === false) { return $this->buildErrorRedirect($url); } $parts = parse_url($url); $baseUrl = $parts['scheme'] . '://' . $parts['host']; $files = Scraper::extractCssFiles($html, $baseUrl); $css = ''; foreach ($files as $file) { $contents = $this->getUrlContents($file); if ($contents == false) { return $this->buildErrorRedirect($file); } $css .= $contents; } return view('colours')->with('colours', CssParser::extractColours($css)); }
public function testExtractingCssFileNames() { $html = '<head><link rel="stylesheet" type="text/css" href="theme.css"></head>'; $urls = Scraper::extractCssFiles($html, 'http://localhost'); $this->assertCount(1, $urls); $this->assertSame('http://localhost/theme.css', $urls[0]); $html = '<head><link rel="stylesheet" type="text/css" href="directory/theme.css"></head>'; $urls = Scraper::extractCssFiles($html, 'http://localhost'); $this->assertCount(1, $urls); $this->assertSame('http://localhost/directory/theme.css', $urls[0]); $html = '<head><link rel="stylesheet" type="text/css" href="directory/theme.css"><link rel="stylesheet" type="text/css" href="theme.css"></head>'; $urls = Scraper::extractCssFiles($html, 'http://localhost'); $this->assertCount(2, $urls); $html = '<head><link rel="stylesheet" type="text/css" href="theme.css"><link rel="stylesheet" type="text/css" href="theme.css"></head>'; $urls = Scraper::extractCssFiles($html, 'http://localhost'); $this->assertCount(1, $urls); $html = '<head><link rel="stylesheet" type="text/css" href="' . url('theme.css') . '"></head>'; $urls = Scraper::extractCssFiles($html, 'http://localhost'); $this->assertCount(1, $urls); $this->assertSame('http://localhost/theme.css', $urls[0]); }