Addon WebLoader a LESS

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

Hezké. ;)

Nechceš to přidat do extras?

Editoval honzakuchar (4. 3. 2010 21:36)

Ondřej Brejla
Člen | 746
+
0
-

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
+
0
-

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
+
0
-

Vývojově mnohem dál je tato verze LESS – je to kompletně napsané v PHP.:

http://leafo.net/lessphp/

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
+
0
-

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)

jtousek
Člen | 951
+
0
-

Myslím, že to není špatný nápad, ale asi by to muselo být alespoň částečně implementované přímo v LESS.

Ondřej Mirtes
Člen | 1536
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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ůř.

jasir
Člen | 746
+
0
-

Tohle znáte? Nějakou dobu sleduji a přemýšlím, zda použít či ne…

https://github.com/…ab/README.md

Mikulas Dite
Člen | 756
+
0
-

\\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)

gawan
Člen | 110
+
0
-

ja zase používam na podobné účely xccs a som s tým spokojný a funguje to bez problémov.

Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

wotaen
Člen | 82
+
0
-

Vypadá to super, trochu problém vidím při ladění ve firebugu, nešlo by ke každému pravidlu z vytvořeného CSS přidat do komentáře na kterém řádku se vygenerovalo? Nebo to řešíte nějak jinak?

Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

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
+
0
-

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

http://bit.ly/aU4z2y

Oggy
Člen | 306
+
0
-

Můžu poprosit o návod.. je potřeba nyní registrovat filtry?

třídy OneLineComment atd nevidím..

kdy volat applyfilters..aby se aplikoval mixins? a co má tahle metoda za parametr? $s..

Mikulas Dite
Člen | 756
+
0
-

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.

Oggy
Člen | 306
+
0
-

jak tedy aplikovat styly z mixins? ..
pokud jsem dal nějakému bloku třídu např. box_round a do svého css jsem definoval @topleft: 10px atd .. tak ten styl, kde jsou nadefinované proměné toho css je po generování webloaderem prázdný..

Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

děkuju

Oggy
Člen | 306
+
0
-

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..

Oggy
Člen | 306
+
0
-

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
+
0
-

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
+
0
-

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?

cuga
Člen | 210
+
0
-

rad bych vyzkousel, ale odkaz ke stazeni tusim odkazuje jinam nez by mel. diky za opraveni

cuga
Člen | 210
+
0
-

Toz tak na git hubu nekdo zrusil Mikulasovi commity a zaloha taky neni nikde dostupna… chcu se zeptat, jestli nekdo tenhle doplnek pouziva a jestli by mi ho mohl poslat.

Diky

Oggy
Člen | 306
+
0
-

Vyvíjí se nějak tenhle doplněk? Koukal jsem že nějak nefunguje už odkaz na stažení. Nebo jaký „nástroj“ jako je lessphp využíváte?

Editoval Oggy (30. 9. 2010 21:08)

cuga
Člen | 210
+
0
-

dle posledniho prispevku to vypada, ze vyvoj uz nebude, protoze co bylo vyvinuto bylo ztraceno :/ takze pokud nekdo nenajde nejakou posledni verzi, tak tusim, ze Mikulasovi se to asi znova chtit programovat nebude…

Lopo
Člen | 277
+
0
-

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

cuga
Člen | 210
+
0
-

a ted mluvis o WebLoader samotnem nebo i o LESS rozsireni?

Lopo
Člen | 277
+
0
-

cuga napsal(a):

a ted mluvis o WebLoader samotnem nebo i o LESS rozsireni?

oboje … hrabal som sa v oboch a jakosi sa mi nepodarilo ani jedno narvat do projektu tak aby som bol spokojny

Lopo
Člen | 277
+
0
-

tak som pred chvilou pushol LessFilter pre WebLoader v BailIff -e

bez nejakych velkych problemov by mal byt pouzitelny aj v original WebLoader-i

Jay Gridley
Člen | 16
+
0
-

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
+
0
-

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
+
0
-

Jo, diky za hint, vazne to nebyl problem. Kdyby chtel nekdo help, necht se ozve.

Tomáš Votruba
Moderator | 1114
+
0
-

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)