[addon webloader] Extras/webloader
- Michal Vyšinský
- Člen | 608
@CZechBoY: já mám v bootstrap.php na začátku:
umask(0);
a práva nových souborů (včetně temp/cache) mě netrápí.
- Michal Vyšinský
- Člen | 608
@CZechBoY http://php.net/…on.umask.php
umask vrací starou masku, jinak ale také nastaví práva pro nově vytvořené soubory na danou masku & 0777 takže umask(0) nastaví 0777.
- Rypi
- Člen | 38
Mohl by mi někdo prosím poradit, jak použít CSSUrlFilter tak, aby
předělal url v CSS souborech?
Ideálně pomocí configu v neonu.
css mám třeba v /web/theme/css/abc.css a WebLoader pouziva
/webtemp/css.css
obrázky jsou umístěny třeba v /web/theme/img/abc.png, takže v css je
url(‚../abc.png‘)
Díky moc
- zimmi
- Člen | 94
Nepotýkali jste se někdo při minifikaci pomocí https://github.com/natxet/CssMin s tím, že se vám pak přestanou načítat font-awesome/glyphicon @font-face? Případně doporučení na nějaký jiný minifier?
Edit: Achjo, to mám nejradši, když něco napíšu, pak se podívám do toho css a zjistím, že je tam akorát špatně import path :)
Editoval zimmi (15. 1. 2015 10:05)
- duskohu
- Člen | 778
Caute snazim sa nahodit weloader na Nette 2.3.0-beta2, webloader mam:
„janmarek/webLoader“: „~2.3.0“,
ale Hadze mi to:
notice: Undefined index: webloader\nette\loaderfactory
v : vendor\janmarek\webloader\WebLoader\Nette\Extension.php:159
$meta->value['types']['webloader\\loaderfactory'] = $meta->value['types']['webloader\\nette\\loaderfactory'];
v types sa „WebLoader\Nette\LoaderFactory“ nachadza, nebude nejaky problem s Case sensitivity?
Neviete poradit kde je hacik?
- Mysteria
- Člen | 797
Předpokládám, že to bude tímhle: https://github.com/…3e4af052c0e1
$meta->value['types']['WebLoader\\LoaderFactory'] = $meta->value['types']['WebLoader\\Nette\\LoaderFactory'];
- Jan Mikeš
- Člen | 771
Pri tomto zapisu:
webloader:
css:
frontend:
files:
- {files: ["*.css", "*.less"], exclude: ["*print*"], in: [%appDir%/../www/css, %appDir%/../www/css/frontend]}
Po aktualizaci na nejnovejsi verzi se objevil error is_dir() expects parameter 1 to be a valid path, array given (ve drivejsi verzi vse jelo).
Uprava na tento zapis chybu vyresil:
webloader:
css:
frontend:
files:
- {files: ["*.css", "*.less"], exclude: ["*print*"], in: %appDir%/../www/css}
- {files: ["*.css", "*.less"], exclude: ["*print*"], in: %appDir%/../www/css/frontend}
Planuje se vraceni vyuziti predchozi syntax (vyuziti pole v in/from)?
Nasel jsem, ze tento commit, funkcionalitu „rozbil“.
Editoval Lexi (18. 2. 2015 14:33)
- lukasojd
- Člen | 3
Tento problém sem vyřešil Filip procházka commitem do webloaderu
https://github.com/…2179a23b36fe
notice: Undefined index: webloader\nette\loaderfactory
v : vendor\janmarek\webloader\WebLoader\Nette\Extension.php:159
ale zatím tento commit není otagovaný
stačilo přidat řádek do composeru
„janmarek/webloader“: „dev-master“,
- flexroad
- Člen | 117
Ahoj vsem,
potreboval bych poradit, jak docilit toho, aby se mi v nette 2.3.2 soubory na „DEVELOPMENT“ neminifikovali do jednoho ale vypsali jako jednotlive radky. neco jako:
<link rel="stylesheet" media="screen,projection,tv" href="/assets/plugins/grido/grido.css">
<link rel="stylesheet" media="screen,projection,tv" href="/assets/plugins/isotope/isotope.css">
Diky za jakekoliv rady a postrehy!
@flexroad
Editoval flexroad (13. 6. 2015 10:05)
- Jeriiii
- Člen | 21
Ahoj,
myslím že jsem opravil stromové načítání less souborů. Tedy když jsem měl v less souboru přidaný jiný soubor pomocí @import např. @import „abc.less“ a soubor abc.less jsem změnil, změna se neprojevila na stránce. Bylo to kvůli tomu, že se vůbec tyto soubory neprohlíželi Compilerem. Proto jsem přidal metody do třídy Compiler.php
/** @var Seznam souborů u kterých se již kontrolovalo, zda nejsou změněné */
private $listCheckFiles = array();
/**
* Zkontroluje, zda jsou v souboru importy souborů a zda tyto soubory nebyly změněné.
* @param string $filePath Soubor, u kterého se mají kontrolovat importy.
* @return int Nejvyšší čas modifikace importovaných souborů.
*/
private function isImportModified($filePath) {
/* kontrola, zda jde o less soubor */
if (pathinfo($filePath, PATHINFO_EXTENSION) != 'less') {
return 0;
}
/* kontrola, zda se tento soubor již nekontroloval */
if (in_array($filePath, $this->listCheckFiles)) {
return 0;
}
$this->listCheckFiles[] = $filePath;
return $this->checkImportModified($filePath);
}
/**
* Vypočítá, kdy byl soubor naposledy modifikován.
* @param string $filePath Soubor, u kterého se mají kontrolovat importy.
* @return int Čas poslední modifikace.
*/
private function checkImportModified($filePath) {
$modified = 0;
$offset = 0;
$fileContent = file_get_contents($filePath);
$offset = strpos($fileContent, '@import', $offset);
while ($offset !== FALSE) {
/* nalezení importu */
$startOffsetFile = strpos($fileContent, '"', $offset);
$endOffsetFile = strpos($fileContent, '"', $startOffsetFile + 1);
/* nalezení souboru, který se importuje */
$fileName = substr($fileContent, $startOffsetFile + 1, $endOffsetFile - $startOffsetFile - 1);
$offset = $endOffsetFile + 1;
$fileImportPath = dirname($filePath) . '/' . $fileName;
/* kontrola, zda se tento soubor již nekontroloval */
if (!in_array($fileImportPath, $this->listCheckFiles)) {
$this->listCheckFiles[] = $filePath;
/* pokud nemá koncovku, přidá less koncovku */
if (pathinfo($fileImportPath, PATHINFO_EXTENSION) == "") {
$fileImportPath = $fileImportPath . '.less';
}
/* zjištění, kdy se naposledy změnil */
$modified = max($modified, filemtime($fileImportPath));
$modified = max($modified, $this->isImportModified($fileImportPath));
}
$offset = strpos($fileContent, '@import', $offset);
}
return $modified;
}
a zavolal jsem je v metodě getLastModified takto:
...
foreach ($files as $file) {
$modified = max($modified, filemtime($file));
$modified = max($modified, $this->isImportModified($file)); //tady kontroluji importované soubory
}
...
výkonnostně se jedná o zpomalení o cca setiny milisekundy možná méně. Co myslíte?
EDIT: Když by jste to chtěli nasadit, tak si dejte pryč řádek
dump((microtime() - $start));
Editoval Jeriiii (2. 8. 2015 10:27)
- Matúš Matula
- Člen | 257
@Jeriiii tu sa to myslim riesilo, hod tam ked tak aspon link, idealne PR. Dik :)
- Jeriiii
- Člen | 21
@Myiyk Myslím, že není potřeba to vypínat, protože se to spouští opravu jen na less soubory. Kdyby jsi ale přesto chtěl, můžeš to udělat jednoduše přes globální proměnnou Compileru a jeden if, třeba takto (neodzkoušeno):
/* zapne kontrolu, zda byly modifikovány importované less soubory */
public $checkImportLessFiles = TRUE;
/* původní metoda na zjištění poslední modifikace */
public function getLastModified(array $files = null) {
if ($files === null) {
$files = $this->collection->getFiles();
}
$modified = 0;
foreach ($files as $file) {
$modified = max($modified, filemtime($file));
if($this->checkImportLessFiles) { //zapnutí / vypnutí kontroly
$modified = max($modified, $this->isImportModified($file)); //kontrola všech importů
}
}
return $modified;
}
Takhle si to pak zapneš/vypneš u každé instance jak chceš. :-)
@MatúšMatula Díky, hodím to tam.
- Oli
- Člen | 1215
Zdravím, měl bych 2 dotazy. Prvně jak to mám:
extensions:
webloader: WebLoader\Nette\Extension
webloader:
css:
default:
files:
- style.css
# další styly
filters:
- @wlCssFilter
admin:
files:
- admin_style.css
# další styly
filters:
- @wlCssFilter
js:
# to není podstatný
services:
wlCssFilter: WebLoader\Filter\CssUrlsFilter(%wwwDir%)
/**
* @autowire
* @var \WebLoader\LoaderFactory
*/
protected $webLoader;
protected function createComponentCss()
{
return $this->webLoader->createCssLoader('default');
}
To je v podstatě vše.
A Teď k otázkám:
- Proč mě to v
WebLoader\Filter\CssUrlsFilter
naplňuje tenhle řádek prázdnou hodnotou pro$cssFile
? Pokud je$url
absolutní, tak nic v pohodě, pokud ale není, tak to nastaví$cssFile
naNULL
a vrátí to původní hodnotu z$url
. - Jde nějakým způsobem pracovat s
css.map
soubory? Přenést do webtemp složky nebo změnit cestu k nim aby si to našlo i z toho novýho umístění?
- Tirus91
- Člen | 199
Měl bych na vás menší dotaz.
Od té chvíle, kdy jsem tuto fičuru začal používat, mi přestalo fungovat
komplet nette js
V konfigu mám toto. Vzal jsem vše co jsem měl v @layout.latte a přesunul jen sem (pořadí jsem zachoval). Netuší někdo, co by s tím mohlo být? V konzoli browseru dostávám error, že $.nette není definováno
webloader:
css:
default:
files:
- %appDir%/../webLibs/stylesheets/pixel-admin.css
- %appDir%/../webLibs/stylesheets/widgets.css
- %appDir%/../webLibs/stylesheets/pages.css
- %appDir%/../webLibs/stylesheets/themes.css
- %appDir%/../webLibs/stylesheets/main.css
- %appDir%/../webLibs/stylesheets/grido.css
remoteFiles:
- "http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,600,700,300&subset=latin"
- https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css
- https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css
- https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/css/bootstrap-select.min.css
filters:
- @cssMin
js:
default:
files:
- %appDir%/../webLibs/javascripts/pixel-admin.js
- %appDir%/../webLibs/javascripts/nprogress.js
- %appDir%/../webLibs/javascripts/bootstrap.datetimepicker.js
- %appDir%/../webLibs/javascripts/nette.ajax.js
- %appDir%/../webLibs/javascripts/grido.js
- %appDir%/../webLibs/javascripts/plugins/grido.nette.ajax.js
- %appDir%/../webLibs/javascripts/plugins/grido.datepicker.js
- %appDir%/../webLibs/javascripts/plugins/grido.bootstrap.select.js
- %appDir%/../webLibs/javascripts/plugins/grido.bootstrap.paginator.js
- %appDir%/../webLibs/javascripts/plugins/grido.daterangepicker.js
- %appDir%/../webLibs/javascripts/nette.nprogress.js
remoteFiles:
- https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js
- https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js
- https://cdn.rawgit.com/dangrossman/bootstrap-daterangepicker/v1.3.19/daterangepicker.js
- https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js
- https://nette.github.io/resources/js/netteForms.min.js
filters:
- @jsMin
- d@rkWolf
- Člen | 167
Měl bych dotaz, je možné nakonfigurovat aktuální verzi Webloaderu(a aktuální Nette 2.4) tak, abych mi na localhostu nekomprimoval všechny CSS a JS soubory? Protože s jedním kilometrovým řádkem CSS stylů se bohužel nedá designovat. Už se v tom vrtám nějakou chvíli, ale jediné, co se mi podařilo pochytit je parametr:
joinFiles: FALSE
který zamezí spojení souborů, nicméně stále se soubory neustále vytvářejí do WebTemp(a minifikují) nějak takto „cssloader-e1b56949a973-web.css“, vážně není možnost, jak to nakonfigurovat, aby se vložily přímo(mimo less který se musí kompilovat) a neminifikovaly? Nebo mi uniká nějaký parametr nastavení? Nebo je jediná možnost nakopírovat si konfiguraci do config.local.neon bez filterů? Nevím, co to udělá s less soubory.
- d@rkWolf
- Člen | 167
@CZechBoY mě by přišlo nejlepší úplně se bez zarábění s těmi soubory na dev obejít, asi by to muselo mít nějaký specifikum kvůli cestám k obrázkům, ale prostě je jen vylistovat tak jak jsou zadané, přijde mi to jako plýtvání výpočetním výkonem je na devu byť jen přepisovat(jak jsem si to teď nakonfiguroval do local.neonu, s vypnutými filtry a nastaveným joinFiles na false), ale jo, i ten .map by byl určitý řešení, ale jak na to to fakt netuším.
- pitr82
- Člen | 121
Dobrý den,
mám nainstalované fonts awasome přes bower. A špatně se mi detekuje URL
pro načítání fontů.
src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
zatím jsem fonty zkopíroval do wwwDir.
Ještě bych mohl editovat @fa-font-path: a přegenerovat less soubor…
Jak tohle řešíty vy?
- JohnyRicio
- Člen | 1
Pomocí gulpu automaticky kopíruji věci node_modules nebo vendorů co potřebuji do www. pak jsou data dostupné
- brano
- Člen | 25
Po upgrade zo staršej verzie WebLoaderu bojujem s nahradzovaním URL.
Obkreslil som konfiguráciu config.neon z GitHub-u a mierne upravil na moje podmienky:
extensions:
webloader: WebLoader\Nette\Extension
services:
router: RouterFactory::createRouter
wlCssFilter: WebLoader\Filter\CssUrlsFilter(%wwwDir%)
lessFilter: WebLoader\Filter\LessFilter
webloader:
css:
default:
files:
- {files: ["*.css", "*.less"], from: %wwwDir%/css} # Nette\Utils\Finder support
filters:
fileFilters:
- @lessFilter
- @wlCssFilter
watchFiles: # only watch modify file
- {files: ["*.css", "*.less"], from: css}
- {files: ["*.css", "*.less"], in: css}
js:
default:
remoteFiles:
files:
Prestali sa mi však nahrádzať odkazy k obrázkom v CSS. Napr.:
.tip {
background-image:url("tip1.gif");
}
Môže za to tento kus kódu:
// inside document root
if (strncmp($cssFile, $this->docRoot, strlen($this->docRoot)) === 0) {
$path = $this->basePath . substr(dirname($cssFile), strlen($this->docRoot)) . DIRECTORY_SEPARATOR . $url;
} else {
// outside document root we don't know
return $url;
}
Premenná %wwwDir%
a teda $this->docRoot
smeruje
správne na absolútnu cestu k web rootu, teda napr.
‚C:\xampp\htdocs\project\www‘. $cssFile
je nastavené napr.
‚css/style.css‘, teda podmienka sa vyhodnotí ako false. Krízovo som to
vyriešil tým, že som upravil else vetvu:
// inside document root
if (strncmp($cssFile, $this->docRoot, strlen($this->docRoot)) === 0) {
$path = $this->basePath . substr(dirname($cssFile), strlen($this->docRoot)) . DIRECTORY_SEPARATOR . $url;
} else {
// outside document root we don't know
$path = $this->basePath . dirname($cssFile). DIRECTORY_SEPARATOR . $url;
}
Nejaký nápad čo by som mal ešte skontrolovať, prípadne ako to elegantne
vyriešiť? Ostatným to ide bez problémov? Popravde moc mi tá podmienka
nedáva zmysel. Ako máte $cssFile
nastavený vy? Ako je to
myslené?
- cafesk8
- Člen | 103
Zdravím,
v config.neon mám:
extensions:
webloader: WebLoader\Nette\Extension
services:
wlCssFilter: WebLoader\Filter\CssUrlsFilter(%wwwDir%)
lessFilter: WebLoader\Filter\LessFilter
webloader:
css:
default:
files:
- {files: ["*.css", "*.less"], from: %wwwDir%/css} # Nette\Utils\Finder support
filters:
fileFilters:
- @lessFilter
- @wlCssFilter
watchFiles: # only watch modify file
- {files: ["*.css", "*.less"], from: css}
- {files: ["*.css", "*.less"], in: css}
V BasePresenteru mám potom:
class BasePresenter extends Nette\Application\UI\Presenter {
/** @var \WebLoader\Nette\LoaderFactory @inject */
public $webLoader;
/** @return CssLoader */
protected function createComponentCss()
{
return $this->webLoader->createCssLoader('default');
}
}
Soubory mi to ze složky vytáhne, ale nepřekompiluje mi to LESS proměnné např:
@pink: #fac;
body {
color: @pink;
}
Měl jsem za to, že od toho jsou právě v config.neon ty řádky s LESS filterem.
Poradíte mi někdo prosím. Nebo používáte někdo na kompilace a případnou minifikaci z LESS nějakou jinou komponentu, přece jen je tato komponenta 3 roky neaktualizovaná.