Fixed icons detection and caching
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
parent
8977c71f88
commit
9e5885963c
|
@ -36,7 +36,7 @@ use OCP\IRequest;
|
||||||
use OCP\IURLGenerator;
|
use OCP\IURLGenerator;
|
||||||
use OCP\IUserManager;
|
use OCP\IUserManager;
|
||||||
use OCP\IUserSession;
|
use OCP\IUserSession;
|
||||||
use OC\Template\SCSSCacher;
|
use OC\Template\IconsCacher;
|
||||||
|
|
||||||
class AccessibilityController extends Controller {
|
class AccessibilityController extends Controller {
|
||||||
|
|
||||||
|
@ -67,6 +67,9 @@ class AccessibilityController extends Controller {
|
||||||
/** @var IAppManager */
|
/** @var IAppManager */
|
||||||
private $appManager;
|
private $appManager;
|
||||||
|
|
||||||
|
/** @var IconsCacher */
|
||||||
|
protected $iconsCacher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Account constructor.
|
* Account constructor.
|
||||||
*
|
*
|
||||||
|
@ -88,7 +91,8 @@ class AccessibilityController extends Controller {
|
||||||
IURLGenerator $urlGenerator,
|
IURLGenerator $urlGenerator,
|
||||||
ITimeFactory $timeFactory,
|
ITimeFactory $timeFactory,
|
||||||
IUserSession $userSession,
|
IUserSession $userSession,
|
||||||
IAppManager $appManager) {
|
IAppManager $appManager,
|
||||||
|
IconsCacher $iconsCacher) {
|
||||||
parent::__construct($appName, $request);
|
parent::__construct($appName, $request);
|
||||||
$this->appName = $appName;
|
$this->appName = $appName;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
|
@ -98,6 +102,7 @@ class AccessibilityController extends Controller {
|
||||||
$this->timeFactory = $timeFactory;
|
$this->timeFactory = $timeFactory;
|
||||||
$this->userSession = $userSession;
|
$this->userSession = $userSession;
|
||||||
$this->appManager = $appManager;
|
$this->appManager = $appManager;
|
||||||
|
$this->iconsCacher = $iconsCacher;
|
||||||
|
|
||||||
$this->serverRoot = \OC::$SERVERROOT;
|
$this->serverRoot = \OC::$SERVERROOT;
|
||||||
$this->appRoot = $this->appManager->getAppPath($this->appName);
|
$this->appRoot = $this->appManager->getAppPath($this->appName);
|
||||||
|
@ -150,6 +155,11 @@ class AccessibilityController extends Controller {
|
||||||
$appWebRoot = substr($this->appRoot, strlen($this->serverRoot) - strlen(\OC::$WEBROOT));
|
$appWebRoot = substr($this->appRoot, strlen($this->serverRoot) - strlen(\OC::$WEBROOT));
|
||||||
$css = $this->rebaseUrls($css, $appWebRoot . '/css');
|
$css = $this->rebaseUrls($css, $appWebRoot . '/css');
|
||||||
|
|
||||||
|
if ($this->iconsCacher->getCachedCSS() && $this->iconsCacher->getCachedCSS()->getSize() > 0) {
|
||||||
|
$iconsCss = $this->invertSvgIconsColor($this->iconsCacher->getCachedCSS()->getContent());
|
||||||
|
$css = $css . $iconsCss;
|
||||||
|
}
|
||||||
|
|
||||||
$response = new DataDisplayResponse($css, Http::STATUS_OK, ['Content-Type' => 'text/css']);
|
$response = new DataDisplayResponse($css, Http::STATUS_OK, ['Content-Type' => 'text/css']);
|
||||||
|
|
||||||
// Set cache control
|
// Set cache control
|
||||||
|
@ -200,4 +210,14 @@ class AccessibilityController extends Controller {
|
||||||
|
|
||||||
return preg_replace($re, $subst, $css);
|
return preg_replace($re, $subst, $css);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all matches from the $rule regex
|
||||||
|
*
|
||||||
|
* @param string $css string to parse
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function invertSvgIconsColor(string $css) {
|
||||||
|
return str_replace(['/000', '/fff'], ['/fff', '/000'], $css);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ use OCP\AppFramework\Http\NotFoundResponse;
|
||||||
use OCP\AppFramework\Utility\ITimeFactory;
|
use OCP\AppFramework\Utility\ITimeFactory;
|
||||||
use OCP\Files\NotFoundException;
|
use OCP\Files\NotFoundException;
|
||||||
use OCP\IRequest;
|
use OCP\IRequest;
|
||||||
use OC\Template\IconsCacher;
|
|
||||||
|
|
||||||
class SvgController extends Controller {
|
class SvgController extends Controller {
|
||||||
|
|
||||||
|
@ -41,18 +40,13 @@ class SvgController extends Controller {
|
||||||
/** @var ITimeFactory */
|
/** @var ITimeFactory */
|
||||||
protected $timeFactory;
|
protected $timeFactory;
|
||||||
|
|
||||||
/** @var IconsCacher */
|
|
||||||
protected $iconsCacher;
|
|
||||||
|
|
||||||
public function __construct(string $appName,
|
public function __construct(string $appName,
|
||||||
IRequest $request,
|
IRequest $request,
|
||||||
ITimeFactory $timeFactory,
|
ITimeFactory $timeFactory) {
|
||||||
IconsCacher $iconsCacher) {
|
|
||||||
parent::__construct($appName, $request);
|
parent::__construct($appName, $request);
|
||||||
|
|
||||||
$this->serverRoot = \OC::$SERVERROOT;
|
$this->serverRoot = \OC::$SERVERROOT;
|
||||||
$this->timeFactory = $timeFactory;
|
$this->timeFactory = $timeFactory;
|
||||||
$this->iconsCacher = $iconsCacher;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,7 +62,7 @@ class SvgController extends Controller {
|
||||||
*/
|
*/
|
||||||
public function getSvgFromCore(string $folder, string $fileName, string $color = 'ffffff') {
|
public function getSvgFromCore(string $folder, string $fileName, string $color = 'ffffff') {
|
||||||
$path = $this->serverRoot . "/core/img/$folder/$fileName.svg";
|
$path = $this->serverRoot . "/core/img/$folder/$fileName.svg";
|
||||||
return $this->getSvg($path, $color);
|
return $this->getSvg($path, $color, $fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -94,7 +88,7 @@ class SvgController extends Controller {
|
||||||
return new NotFoundResponse();
|
return new NotFoundResponse();
|
||||||
}
|
}
|
||||||
$path = $this->serverRoot . $appPath ."/img/$fileName.svg";
|
$path = $this->serverRoot . $appPath ."/img/$fileName.svg";
|
||||||
return $this->getSvg($path, $color);
|
return $this->getSvg($path, $color, $fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,7 +99,7 @@ class SvgController extends Controller {
|
||||||
* @param string $color
|
* @param string $color
|
||||||
* @return DataDisplayResponse|NotFoundException
|
* @return DataDisplayResponse|NotFoundException
|
||||||
*/
|
*/
|
||||||
private function getSvg(string $path, string $color) {
|
private function getSvg(string $path, string $color, string $fileName) {
|
||||||
if (!file_exists($path)) {
|
if (!file_exists($path)) {
|
||||||
return new NotFoundResponse();
|
return new NotFoundResponse();
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ class Group implements IGroup {
|
||||||
|
|
||||||
public function getDisplayName() {
|
public function getDisplayName() {
|
||||||
if (is_null($this->displayName)) {
|
if (is_null($this->displayName)) {
|
||||||
return $this->gid.'-name';
|
return $this->gid;
|
||||||
}
|
}
|
||||||
return $this->displayName;
|
return $this->displayName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ class IconsCacher {
|
||||||
protected $urlGenerator;
|
protected $urlGenerator;
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $iconVarRE = '/--([a-z-]+): url\("([a-z0-9-\/]+)[^;]+;/m';
|
private $iconVarRE = '/--([a-z0-9-]+): url\(["\']([a-z0-9-\/]+)[^;]+;/m';
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $fileName = 'icons-vars.css';
|
private $fileName = 'icons-vars.css';
|
||||||
|
@ -84,12 +84,17 @@ class IconsCacher {
|
||||||
* @param string $css
|
* @param string $css
|
||||||
*/
|
*/
|
||||||
public function setIconsCss(string $css) {
|
public function setIconsCss(string $css) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$data = $this->folder->getFile($this->fileName)->getContent();
|
$currentData = $this->folder->getFile($this->fileName)->getContent();
|
||||||
} catch (NotFoundException $e) {
|
} catch (NotFoundException $e) {
|
||||||
$data = '';
|
$currentData = '';
|
||||||
}
|
}
|
||||||
$icons = $this->getIconsFromCss($data . $css);
|
|
||||||
|
// remove :root
|
||||||
|
$currentData = str_replace([':root {', '}'], '', $currentData);
|
||||||
|
|
||||||
|
$icons = $this->getIconsFromCss($currentData . $css);
|
||||||
|
|
||||||
$data = '';
|
$data = '';
|
||||||
foreach ($icons as $icon => $url) {
|
foreach ($icons as $icon => $url) {
|
||||||
|
@ -127,7 +132,10 @@ class IconsCacher {
|
||||||
public function injectCss() {
|
public function injectCss() {
|
||||||
// Only inject once
|
// Only inject once
|
||||||
foreach (\OC_Util::$headers as $header) {
|
foreach (\OC_Util::$headers as $header) {
|
||||||
if (strpos($header['attributes']['href'], $this->fileName) !== false) {
|
if (
|
||||||
|
array_key_exists('attributes', $header) &&
|
||||||
|
array_key_exists('href', $header['attributes']) &&
|
||||||
|
strpos($header['attributes']['href'], $this->fileName) !== false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue