Addon WebLoader a LESS
- Mikulas Dite
- Člen | 756
O
Vylepšená verze WebLoaderu od Honzy Marka, obohacená o lessphp (https://github.com/leafo/lessphp, http://lesscss.org/) funkce pro kaskádové styly.
Download
https://github.com/…ebLoaderLess
Oficiální demo lessphp
http://leafo.net/lessphp/#demo
Filtry
- řádkové komenty –
// comment
- promazání komentářů
- mixins – funkce
- proměnné
- přímé dědění
- komprese
- jmenné prostory
- a několik dalších vychytávek
Vytvoření komponenty
<?php
protected function createComponentCss()
{
$css = new CssLoader;
// cesta na disku ke zdroji
$css->sourcePath = WWW_DIR . "/css";
// cesta na webu ke zdroji (kvůli absolutizaci cest v css souboru)
$css->sourceUri = Environment::getVariable("baseUri") . "css";
// cesta na webu k cílovému adresáři
$css->tempUri = Environment::getVariable("baseUri") . "webtemp";
// cesta na disku k cílovému adresáři
$css->tempPath = WWW_DIR . "/webtemp";
//doporučené (a logické) pořadí, nepřehazovat
$css->filters[] = array(new OneLineCommentsFilter);
$css->filters[] = array(new RemoveCommentsFilter);
$css->filters[] = array(new MixinsFilter);
$css->filters[] = array(new VariablesFilter);
$css->filters[] = array(new NestingFilter);
$css->filters[] = array(new CompressFilter);
return $css;
}
?>
Použití v template
{control css 'screen.css'}
, ale dokonce i
{control css 'screen.css', 'print.css', 'extra.css'}
Ukázky
přímé dědění
.parent {
color: red;
.child {
color: blue;
}
}
se přepíše na
.parent {
color: red;
}
.parent .child {
color: blue;
}
proměnné
@hodnota: 50px;
.header {
font-size: @hodnota;
}
vznikne
.header {
font-size: 50px;
}
mixins
.mixin (@color, @width: 5px) {
background-color: @color;
border-left: @width black solid;
padding-left: @width;
}
.mixin_example {
.mixin(#DDD, 20px);
}
vygeneruje
.mixin_example {
background-color: #DDD;
border-left: 20px black solid;
padding-left: 20px;
}
komenty
.comments {
/*
* Multiline comment
*/
//one line comment
}
se přepíše na
.comments {
/*
* Multiline comment
*/
/* one line comment */
}
případně s filtrem na promazávání komentářů na
.comments {
}
Editoval Mikulas Dite (11. 9. 2010 21:44)
- Honza Kuchař
- Člen | 1662
Hezké. ;)
Nechceš to přidat do extras?
Editoval honzakuchar (4. 3. 2010 21:36)
- Ondřej Brejla
- Člen | 746
OT: A nechceš se naučit editovat svůj poslední krátký příspěvek? Místo spamování novým postem…;-)
Editoval Ondřej Brejla (2. 3. 2010 11:39)
- Mikulas Dite
- Člen | 756
honzakuchar napsal(a):
Nechceš to přidat do extras.
Našel sem ještě drobné chybky v rozkladu dědění, až zmizí a trošku to přepíšu, tak snad.
- jtousek
- Člen | 951
Vývojově mnohem dál je tato verze LESS – je to kompletně napsané v PHP.:
A zde ještě vývojová verze.:
https://github.com/leafo/lessphp
Původní LESS oproti tomuhle již poněkud zastaral a navíc tohle v PHP se nám hodí víc. ;)
- Mikulas Dite
- Člen | 756
Ej, super, dík! Když si chvilku najdu, takt to na webloader napojim.
Mimochodem, myslíte, že by stálo za to vytvořit browser filter? Něco na styl
~firefox color: #000000;
by se propagoval jenom do firefoxu, do ostatních by se smazal. Tohle by se cachovalo (počet cache souborů = počet filtovaných browserů).
Dá se napsat i něco na styl ~alpha
co vloží tuhle část
jenom do prohlížečů co podporujou alfu (rgba, shade, atp.) a podobné.
Editoval Mikulas Dite (10. 3. 2010 10:02)
- Ondřej Mirtes
- Člen | 1536
IMHO by se to dalo zařídit pomocí spolehlivých CSS hacků.
IE6:
_height: 100px;
IE6 + IE7:
&height: 100px;
Pouze IE7:
&height: 100px;
_height: původní hodnota;
IE8:
.prvek_na_kterem_chci_aplikovat {
height /*\**/: 100px\9
}
Webkit (Safari + Chrome):
@media screen and (-webkit-min-device-pixel-ratio:0) {
/* uvnitř už se aplikují všechny styly jen na Webkit */
.prvek_na_kterem_chci_aplikovat {
height: 100px;
}
}
Bylo by hezké, kdyby LESS umělo tyhle fíčury: http://css3please.com/ :)
Editoval Ondřej Mirtes (10. 3. 2010 10:21)
- Mikulas Dite
- Člen | 756
Ok, klidně by tohle mohl ten filtr vkládat, byl by to jeden cache soubor,
ale psalo by se to jenom jednou čistě (a všude stejně). Nerozumím zmínce
http://css3please.com/, asi
by bylo nejsnažší to udělat přes mixin, něco na styl mixin inline-css
funkce vložBorder()
a tam to bude rozepsané s vendor
prefixy a hacky pro iečka.
Editoval Mikulas Dite (10. 3. 2010 10:38)
- Ondřej Mirtes
- Člen | 1536
No že kdyby někdo napsal nějakou vlastnost z CSS3, tak by se vygenerovala a rozepsala se všemi vendor prefixy a filtry pro IE :)
- Mikulas Dite
- Člen | 756
Jasný, myslíš jako to rozepsat automaticky… Určitě ne rovnou do pLESS kódu, udělám na to nějaké předpřipravené mixins. Konec konců, tohle je všechno beta, takže se to může docela často měnit – přímo v kódu by se to pak editovalo hůř.
- Mikulas Dite
- Člen | 756
\\Pak je taky dobrá Rosemary, ale je to čuňácky napsaný. bigspaceship
Nejradši bych použil to co poslal jtousek, ale nějak to rozdělim
do WebLoader filtrů. Potom tam bude rychlý přidávat další fce. V tom
csscaffoldu je navíc asi jenom firelog
, time
a
flags
. Sice skoro zbytečnosti, ale otevírá to prima
monosti, takže to tam asi přidám taky.
Editoval Mikulas Dite (10. 3. 2010 11:23)
- Mikulas Dite
- Člen | 756
jtousek napsal(a):
Vývojově mnohem dál je tato verze LESS – je to kompletně napsané v PHP.:
http://leafo.net/lessphp/
Uf, původně sem myslel, že to svoje nahradim timhle, ale má to přes 1000 linek a funkce to volá přímo s referencí. Navíc to nezvládá filter tag (vůbec syntax key: value: foo) a chybí tam způsob na vkádání @variable do textů, což u ie filtrů nejde obejít. Vidim to tak, že radši rozšířim a vylepšim ty moje filtry. (A jsou mimochodem i rychlejší ;)
- jtousek
- Člen | 951
Mikulas Dite:
Vývojová verze 2.0 už filter v pohodě zvládá a záležitosti se string proměnnejma + mnoho dalších věcí jsou dávno opravené a funkční. Vážně si nemyslím, že bys mohl jen tak napsat něco lepšího. ;)
gawan:
Less má řádově víc funkcí než xcss.
jasir:
Znám, a opět platí: Less je lepší.
Ondřej Mirtes:
Naprosto jednoznačně vyřešit přes mixiny.
Editoval jtousek (10. 3. 2010 20:08)
- Mikulas Dite
- Člen | 756
Popravdě, z tohohle repa jsem to stahoval a ani jedno z toho co sem psal tam nefunguje. (Ale přece jenom, radši to ověřim.)
- jtousek
- Člen | 951
OK zkusil jsem to sám, a máš pravdu, že filter nefunguje. Dám to autorovi na github jako issue. (Já filtry nepoužívám, jen vím, že byl dříve problém se závorkami v hodnotě – což už je ok)
//EDIT 12.3.2010:
Autor již problém s filtrem pro IE odstranil a vše funguje.
Editoval jtousek (12. 3. 2010 8:54)
- Mikulas Dite
- Člen | 756
Nó… Těžko říct, až to bude plně funkčí, tak je žádoucí mít output co nejkompresovanější a zaarchivovanej, takže cokoliv navíc je tam zbytečně. Pro testování css můžeš filter pro kompresi vypnout, zpětně dohledatelné to bude i tak v pohodě.
- wotaen
- Člen | 82
Mikulas Dite napsal(a):
Nó… Těžko říct, až to bude plně funkčí, tak je žádoucí mít output co nejkompresovanější a zaarchivovanej, takže cokoliv navíc je tam zbytečně. Pro testování css můžeš filter pro kompresi vypnout, zpětně dohledatelné to bude i tak v pohodě.
Tak potom to rozlišit podle módu. Na lokále to bude generovat všechny možné komentáře včetně řádků kódu a na produkčním to bude zkomprimované čisté css
- Mikulas Dite
- Člen | 756
Přidal jsem originální lessphp, má plnou podporu cachování atd. a umí to co původní verze: github:lessphp.
A má předepsané mixiny tríčků z css3please.
Download
- Mikulas Dite
- Člen | 756
Přiklonil sem se k phpless – filtry se tedy spouští automaticky (a zatím nejdou selektivně vypnout). API je z hlediska použití snad stejné jako u WebLoaderu.
- Mikulas Dite
- Člen | 756
Snad by to mělo jít takhle:
<div class="oble"></div>
.oble {
@box_round(2px);
//nebo
@box_round(2px; 3px; 4px; 5px);
}
- Oggy
- Člen | 306
Oggy napsal(a):
kde dělám chybu:
<?php .box (@width, @height) { width: @width; height:@height; } .box700 { .box(700px,48px); } ?>
když tohle nefunguje a css je ignorováno.. připadá mi, že to má problém, pokud te „vstupních parametrů“ víc než jeden..
aha..už to vidím.. mezi těmi parametry musí být ; ne čárka.. já to kopíroval z tvého příkladu tady :-)
- Oggy
- Člen | 306
Vyskytla se mi chybka při přesunu na produkční server: na locale vše OK.
tato chyba:
Call to undefined method Front_HomepagePresenter::apply().
WebLoader/WebLoader.php (214) source ► Front_HomepagePresenter→ apply (arguments ►)
Line 207: * Apply filters to a string
Line 208: * @param string $s
Line 209: * @return string
Line 210: */
Line 211: protected function applyFilters($s) {
Line 212: foreach ($this->filters as $group)
Line 213: foreach($group as $filter)
Line 214: $s = $filter->apply($s);
Line 215:
Line 216: return $s;
Line 217: }
Line 218:
Line 219: /**
Line 220: * Load file
Line 221: * @param string $path
*
verze:
local:
# PHP 5.3.2–1ubuntu4.2
# Apache/2.2.14 (Ubuntu)
# Nette Framework 0.9.3 (revision 2ce0ca6 released on 2010–02–02)
ostrý server:
# PHP 5.2.13–0.dotdeb.1
# Apache/2.2.9 (Debian) PHP/5.2.13–0.dotdeb.1 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
# Nette Framework 0.9.3 (revision 2ce0ca6 released on 2010–02–02)
Chyba nastane při „minimalizaci js souborů“ ..
Editoval Oggy (11. 6. 2010 15:53)
- westrem
- Člen | 398
Tak zbezne som si pozrel tento thread a tak trochu sa cudujem, preco tu nikto nespomenul Compass
Je to nadstavba nad SASS takze ma jeho veskeru funkcionalitu plus je obohatena o pekne featuresy denneho zivota CSS kodera.
Tiez nechapem, preco je snaha robit CSS (post)proccessing pomocou PHPka pripadne priamo na serveri, ked si to proste spravim lokalne a na ostru verziu uz hadzem len minified compressed CSS subor?
- Lopo
- Člen | 277
myslim ze ja som pred asi 2 tyzdnami sitahol co bolo na github-e …
asi 2 dni som sa s tym hral (napr. som dorobil check ci uz nie je min verzia
pritomna priamo) nez som usudil ze to prekodim za pouzitia http://code.google.com/p/minify/
stale mi pri tom vsak chyba moznost zlucovania jednotlivych CSS/JS z viacerych
templatov, tj napr veci v @lyaout-e zlucit s vecami v template view
takze sa snazim vymysliet ako to jednoducho spravit
- Jay Gridley
- Člen | 16
Lopo napsal(a):
tak som pred chvilou pushol LessFilter pre WebLoader v BailIff -e
bez nejakych velkych problemov by mal byt pouzitelny aj v original WebLoader-i
Dal bys prosim nejaky navod jak to rozjet v normalnim WebLoaderu?
- Lopo
- Člen | 277
Jay Gridley napsal(a):
Dal bys prosim nejaky navod jak to rozjet v normalnim WebLoaderu?
uf … to je uz hodne davno odkedy som to postol …
ale obecne by malo stacit vytiahnut moj wrapper
(BailIff/Utils/WebLoader/filters/PreFile/LessFilter.php) + lessphp a pouzit
v originali – tam tusim nejake filtre boli takze mozno trosku priohnut podla
nich … predsa len ten wrapper je uplne primitivny takze by nemal byt
problem
- Jay Gridley
- Člen | 16
Jo, diky za hint, vazne to nebyl problem. Kdyby chtel nekdo help, necht se ozve.
- Tomáš Votruba
- Moderator | 1114
Je tato komponenta ještě někde k dispozici? Na gitu už nejsi. Díky.
Tady je něco, ale staršího: https://github.com/…ebLoaderLess
Editoval Schmutzka (6. 12. 2011 13:41)