замена функции в стилусе

У меня есть файл Stylus с этим кодом:

body
  background url('/templates/main/img/sprites/ico-soc.png') 100px 100px no-repeat

Мне нужна функция (mixin) background, которая удалит '/templates/main/' из ссылки на изображение.

body
      background url('img/sprites/ico-soc.png') 100px 100px no-repeat

Пожалуйста, помогите мне) Я думаю, может быть, я пошел в неправильном направлении, и есть простой способ решить проблему. обратите внимание, что мне нужна функция. Не предлагать создать переменную для каталога!


Вот что я делаю

я сделал функцию

background()
  background arguments

то я пытался решить проблему двумя способами 1) пытался найти замену функции. но не удалось. Затем я попытался использовать решение документации (функция замены). Но это не подходит для моего случая. http://learnboost.github.io/stylus/docs/bifs.html#add-propertyname-expr

2) Написал свою функцию на js через функцию use(path) (http://learnboost.github.io/stylus/docs/bifs.html#usepath). Но у меня возникла проблема: значение, поступающее в функцию js, неверно. Есть дополнительные места.

стиль.стиль

use("add.js")

background()
  background arguments

body
  background url('img/sprites/ico-soc.png') 100px 100px no-repeat

add.js

    var plugin = function(){
    return function(style){
        style.define('add', function(a) {
            console.log(typeof a);
            console.log(a);
        });
    };
};
module.exports = plugin;

person Alex Khlebaev    schedule 23.01.2015    source источник


Ответы (1)


Вы можете переопределить функцию url и проверить, что она вызывается из background, используя current-property. Например:

url(str)
  if current-property && current-property[0] == 'background'
    str = replace('/templates/main/', '', str)

  return unquote('url(' + str + ')')

body
  background: url('/templates/main/img/sprites/ico-soc.png') 100px 100px no-repeat

Компилируется в:

body {
  background: url(img/sprites/ico-soc.png) 100px 100px no-repeat;
}
person Panya    schedule 23.01.2015
comment
Хороший ответ. Спасибо. - person Alex Khlebaev; 23.01.2015