<feed xmlns='http://www.w3.org/2005/Atom'>
<title>leap_web.git/app/assets/stylesheets/custom, branch master</title>
<subtitle>[leap_web] 
</subtitle>
<link rel='alternate' type='text/html' href='https://leap.se/git/leap_web.git/'/>
<entry>
<title>custom: fix stylesheet customization</title>
<updated>2017-07-26T09:19:41+00:00</updated>
<author>
<name>Azul</name>
<email>azul@riseup.net</email>
</author>
<published>2017-07-26T09:19:41+00:00</published>
<link rel='alternate' type='text/html' href='https://leap.se/git/leap_web.git/commit/?id=d939562360377dad4dfd8ab1520b15f85fc0a730'/>
<id>d939562360377dad4dfd8ab1520b15f85fc0a730</id>
<content type='text'>
fixes #8794

Reported the underlying issue here:
https://github.com/rails/sass-rails/issues/406

Basically `@import` works like this:
* look for the file relative to the current file
* look for the file as an absolute path following the priorities in the
* asset load_paths

If the file can be imported as a relative path that will take
precedence.

So in order to pick up the head and tails inside customization rather
than in app/assets there are three possibilities:
1) use an absolute path. This is not as easy as it seems. There is no
way of indicating a path is meant to be absolute so we would have to
ensure it does not resolve to a relative path.
2) have a application.scss file inside the customization folder. Since
this is the main file it will be used instead of the app/assets one. In
there relative paths will now also default to the customization folder
rather than app/assets. Once we are in an app/assets file though it will
not go back to picking up customization with relative paths
3) use //= require instead of import. rails-sass advices against this as
each required file would be compiled on it's own and variables could not
be shared.

Going with option 1 here:
```scss
// application.scss:
@import "custom/head_import";
```

```scss
// custom/head_import.scss:
@import "head";
```

As long as there is no custom/head.scss in app/assets it will import
head as an absolute path and thus prefer config/custom over app/assets.

This seems like the best option for now as it does not require changes
to the deployments.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fixes #8794

Reported the underlying issue here:
https://github.com/rails/sass-rails/issues/406

Basically `@import` works like this:
* look for the file relative to the current file
* look for the file as an absolute path following the priorities in the
* asset load_paths

If the file can be imported as a relative path that will take
precedence.

So in order to pick up the head and tails inside customization rather
than in app/assets there are three possibilities:
1) use an absolute path. This is not as easy as it seems. There is no
way of indicating a path is meant to be absolute so we would have to
ensure it does not resolve to a relative path.
2) have a application.scss file inside the customization folder. Since
this is the main file it will be used instead of the app/assets one. In
there relative paths will now also default to the customization folder
rather than app/assets. Once we are in an app/assets file though it will
not go back to picking up customization with relative paths
3) use //= require instead of import. rails-sass advices against this as
each required file would be compiled on it's own and variables could not
be shared.

Going with option 1 here:
```scss
// application.scss:
@import "custom/head_import";
```

```scss
// custom/head_import.scss:
@import "head";
```

As long as there is no custom/head.scss in app/assets it will import
head as an absolute path and thus prefer config/custom over app/assets.

This seems like the best option for now as it does not require changes
to the deployments.
</pre>
</div>
</content>
</entry>
</feed>
