Hi Om,

Is this a separate topic?  If you are asking for @font-face to be passed
through to the final css we can figure out how to do that if that doesn't
work already, but I think I'm asking about <link> tags in the HTML.  Is
that different or the same?  Carlos wants to inject:

<link href="https://fonts.googleapis.com/css?family=Lato"; rel="stylesheet">


Isn't that a bit different?

-Alex

On 3/14/18, 12:04 PM, "[email protected] on behalf of OmPrakash Muppirala"
<[email protected] on behalf of [email protected]> wrote:

>Ignoring the behind the screen mechanics, as a developer, I would like
>something like this:
>
>*styles.css:*
>
>@font-face {
>    font-family: error;
>    src: url(helvetica_bold.woff);
>}
>
>@font-face {
>    font-family: warning;
>    src: url(sans_light.woff);
>}
>
>.error {
>  color: red;
>  font-family: error;
>}
>
>.warning {
>  color: orange;
>  font-family: warning;
>}
>
>
>*Component.as:*
>
>package components {
>  import styles.css;
>  import org.apache.royale.core.WrappedHTMLElement;
>  import org.apache.royale.html.util.addElementToWrapper;
>  import org.apache.royale.core.UIBase;
>
>  public class Component extends UIBase {
>    private var myStyles:CSS = styles.css;
>    private var myDiv: WrappedHTMLElement =
>addElement.wrapper(this,'div');
>
>//Elsewhere:
>   if(condition) {
>     myDiv.className = myStyles.classNames.error;
>   }
>   else {
>     myDiv.className = myStyles.classNames.warning;
>   }
>
>  }
>}
>
>
>The act of "importing" the styles.css should automatically inject the
>appropriate html for importing the css file.
>The CSS class can be a simple object (with perhaps some util methods)
>which
>is constructed by reading all the classnames in the css file.
>
>This approach is sort of inspired from the CSS Modules component used in
>React development here [1]
>
>Just my 2 cents.
>
>Thanks,
>Om
>
>[1] 
>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.co
>m%2Fgajus%2Freact-css-modules&data=02%7C01%7Caharui%40adobe.com%7Cd03e7327
>d00849781ae908d589de7d38%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365
>66511032068655&sdata=X070alK2%2B289tVP6v9xYazcztqtsEmqPiTaPA9UxITM%3D&rese
>rved=0
>
>On Wed, Mar 14, 2018 at 10:09 AM, Alex Harui <[email protected]>
>wrote:
>
>> The Jewel Theme wants to add a <link> element to the HTML to bring in a
>> font.  The <inject_html> directive was introduced to add elements to the
>> HTML needed for code in the class decorated by the <inject_html>.
>>Jewel
>> is using a dummy class with <inject_html> which probably means that the
>>AS
>> code doesn't need the link element, but the CSS in the theme does.
>>
>> IMO, that means that there should be a directive in CSS that also
>>injects
>> html.  I don't think comments are retained in CSS, so using inject_html
>>in
>> a comment is not something I would recommend.  IMO, the directive should
>> be on/in the selectors that need it, and not at the file level.
>>
>> One way to do this would be a fake media-query like:
>>
>> @media -inject_html
>>
>> That could contain selectors with fake properties like:
>>
>> Button {
>>  foo: <link .... />
>> }
>>
>> If a Button is used in the app, then the compiler would see the Button
>> selector in the -inject_html media, and inject the html for every
>>property
>> in the selector.  IOW, if you did:
>>
>> Button {
>>   foo: <link .... />
>>   bar: <style ... />
>> }
>>
>> Then both link and style would be injected into the output HTML.
>>
>> Another approach would be to introduce a special inject_html property
>>that
>> you would use in the selector as needed.  So, if Button sets
>> font-family="Lato" it would also set inject_html like below:
>>
>> Button {
>>   font-family: Lato;
>>   inject-html: <link ... />
>> }
>>
>>
>> This has the advantage of keeping the links with the font-family that
>> needs it, but you will have to duplicate inject-html in each of the
>> selectors that need it.
>>
>> Other ideas are welcome.  Thoughts?
>> -Alex
>>
>>

Reply via email to