• В препроцессоре Pug не работает ${variable}, как быть?

    @lorentso
    Abwel, так зачем вообще писать require?? уберите его

    ...вот -- первый вариант
    - var img_row= `../../../components/length-stay/${www}`

    и все у вас будет работать -- вместо ${www} подставится 'row_expand.png'

    путь будет
    src="../../../components/length-stay/row_expand.png"
    ведь вы этого результат ждете?
  • В препроцессоре Pug не работает ${variable}, как быть?

    @lorentso
    Abwel, таку у вас переменная ${www} так и настроена, чтобы выводить 'row_expand.png', и ничего иного она вывести не может. Что жу вы хотите вывести еще, я не понимаю. И интересно, что у вас делает require в путях? Это не ошибка? Я просто новичок, и не сталкивался с таким кодом.
  • В препроцессоре Pug не работает ${variable}, как быть?

    @lorentso
    вроде бы путь нужно полностью брать в кавычки.

    если написать так, то работает

    mixin length-stay(arrival,departure,path)
        div.length-stay
        div.date-arrival
        p #{arrival}
        div.date-arrival__dropdown ДД.ММ.ГГГГ
        img.img-row(src=path, alt="Стрелка")
        div.date-departure
        p #{departure}
        div.date-departure__dropdown 19.08.2019
        img.img-row(src=path, alt="Стрелка")
        
    - var www= 'row_expand.png';
    - var img_row= `../../../components/length-stay/${www}`;
    
    ...или так, если у вас  с  require
    
    - var img_row= `require(../../../components/length-stay/${www})`
    
    и дальше вызов
    
    +length-stay("date Dropdown","date Dropdown",img_row)
  • Как прикрутить сетку SmartGrid к gulp-y?

    @lorentso Автор вопроса
    Brendan Castaneda, я уже именно так делал(подключал через .pipe ), и у меня не вышло, но..

    я решил попробовать еще раз, точно так и результат получился, хотя не совсем такой, какой ожидался, то есть -- SmartGrid генерирует файл сетки именно там, где и нужно, но потом gulp сразу вылетает, и останавливается.

    в конце-концов, я сделал так -- просто подключил SmartGrid по образцу ( как подключенны все остальные функции), прописав ее везде, где нужно.

    приводить код, возможно не актуально, но на всякий случай напишу, может новичку, у которого в его gulpfil -e он тоже усложнен, это пригодится.

    сначала я написал функцию

    function grid(done){
       smartGrid('path-to-your-folder', options);
       done();
    }

    строку с task проигнорировал.

    а затем прописал ее везде , где прописаны все остальные

    exports.grid      = grid
    exports.pugToHtml = pugToHtml
    exports.scripts = scripts
    exports.styles  = styles
    exports.images  = images
    exports.deploy  = deploy
    exports.assets  = series(scripts, pugToHtml, styles, images, grid)
    exports.build   = series(cleandist, scripts, styles, images, grid pugToHtml, buildcopy, buildhtml)
    exports.default = series(scripts, styles, pugToHtml, images, grid, parallel(browsersync, startwatch))


    И у меня все работает!
    ..Хотя, сомневаюсь, что в функции buil она вообще нужна, но это уже детали

    Сейчас уже думаю использовать smartGrid в другом варианте, который тоже приведен на сайте -- то есть, сделать так, чтобы сетка обновлялась на лету при каждом изменении параметров, и не требовала презапуска gulp-а.

    Вам спасибо! Вы смотивировал меня попробовать еще раз.
  • Как прикрутить сетку SmartGrid к gulp-y?

    @lorentso Автор вопроса
    Спасибо, но, прошу простить, все-таки не ясно полностью

    Во-первых, у меня другой синтаксис, где task не используется. Только функции с подключением в вотчер и экспорт.

    вот пример

    function styles() {
    	return src([`app/styles/${preprocessor}/*.*`, `!app/styles/${preprocessor}/_*.*`])
    		.pipe(eval(`${preprocessor}glob`)())
    		.pipe(eval(preprocessor)({'include css': true,  use: axis()}))
    		.pipe(dest('app/css'))
    		.pipe(autoprefixer({ overrideBrowserslist: ['last 10 versions'], grid: true }))
    		.pipe(cleancss({ level: { 1: { specialComments: 0 } },/* format: 'beautify' */ }))
    		.pipe(rename({ suffix: ".min" }))
    		.pipe(dest('app/css'))
    		.pipe(browserSync.stream())
    }


    а, во-вторых, , я так понимаю, в параметрах ( 'path-to-your-folder ) нужно указывать папку исходную(src) ?. Если так, то куда прописывать путь компилированных файлов? В options таких парметров нет...
  • Какие более короткие варианты, или альтернативы деструктрирующего присваивания?

    @lorentso Автор вопроса

    Но что делать, если элементов много?

    Если есть такая потребность, то скорее всего ты что-то делаешь не так. Лучше попробуй подумать как обработать свой массив иначе.


    А их не может быть мало. Вот смотри -- тело миксина. Он еще в процессе разработки, и будет больше раза в два- три. Тут все данные элементов -- теги, классы, атрибуты, контент - группируются в одни массивы, а наполняется другими массивами. Все должно быть построено на комбинировании массивов с массивами, поэтому короткая форма записи предпочтительна.

    mixin makeText(makeTextContent, h_title= "title", ...others)
       if (makeTextElems && makeTextElems.hasOwnProperty('$div')) ? elDiv= makeTextElems.$div : elDiv= $$div || 'div' 
       if (makeTextElems && makeTextElems.hasOwnProperty('$h'))  ? elH= makeTextElems.$h : elH= $$h ||'h3'
       if (makeTextElems && makeTextElems.hasOwnProperty('$p')) ? elP= makeTextElems.$p : elP= $$p ||'p'
    
       - className = makeTextClass || false
       - attr_text = makeTextAttr || false
    
       - var div_class = className.div || ''
       - var h_class = className.h || ''
       - var p_class = className.p || '' 
    
       - var attr_div= '' || attr_text.div
       - var attr_h = '' || attr_text.h
       - var attr_p = '' || attr_text.p
       // класссы и атрибуты скрытых элементов
       - var f_class = className.f || ''
       - var s_class = className.s || ''
       - var fo_class = className.fo || ''
       - var fv_class = className.fv || ''
       - var sx_class = className.sx || ''
       - var sv_class = className.sv || ''
       - var e_class = className.e || ''
       - var n_class = className.n || ''
    
       - var attr_f = '' || attr_text.f
       - var attr_s = '' || attr_text.s
       - var attr_fo = '' || attr_text.fo
       - var attr_fv = '' || attr_text.fv
       - var attr_sx = '' || attr_text.sx
       - var attr_sv = '' || attr_text.sv
       - var attr_e = '' || attr_text.e
       - var attr_n = '' || attr_text.n
    
    
       if makeTextContent 
          #{elDiv}&attributes(attr_div)(class= div_class || (block='block'))= makeTextContent.$div
             ifmakeTextElems
                #{$f= makeTextElems.$f || 'div'}&attributes(attr_f)(class= f_class || block +'__'+'f') 
                #{$s= makeTextElems.$s || 'div'}&attributes(attr_s)(class= s_class || block +'__'+'s')
                #{$t= makeTextElems.$t || 'div'}&attributes(attr_t)(class= t_class || block +'__'+'t')
             #{elH}&attributes(attr_h)(class= h_class || block +'__'+'title')= makeTextContent.$h
             if makeTextElems
                #{$fo= makeTextElems.$fo || 'div'}&attributes(attr_fo)(class= fo_class || block +'__'+'fo')
                #{$fv= makeTextElems.$fv || 'div'}&attributes(attr_fv)(class= fv_class || block +'__'+'fv')
                #{$sx= makeTextElems.$sx || 'div'}&attributes(attr_sx)(class= sx_class || block +'__'+'sx')
             #{elP}&attributes(attr_p)(class= p_class || block +'__'+'text')= makeTextContent.$p
             if makeTextElems
                #{$sv= makeTextElems.$sv || 'div'}&attributes(attr_sv)(class= sv_class || block +'__'+'sv')
                #{$e= makeTextElems.$e || 'div'}&attributes(attr_e)(class= e_class || block +'__'+'e')
                #{$t= makeTextElems.$n || 'div'}&attributes(attr_n)(class= n_class || block +'__'+'n')
       else
          #{elDiv}&attributes(attr_div)(class= div_class || $divClass|| (block='block'))
             if makeTextElems
                #{$f= makeTextElems.$f || 'div'}&attributes(attr_f)(class= f_class || block +'__'+'f')= $fCC || ''
                #{$s= makeTextElems.$s || 'div'}&attributes(attr_s)(class= s_class || block +'__'+'s')= $sCC || ''
                #{$t= makeTextElems.$t || 'div'}&attributes(attr_t)(class= t_class || block +'__'+'t')= $tCC || ''
             #{elH}&attributes(attr_h)(class= h_class || block +'__'+'title')= $title || h_title
             if makeTextElems
                #{$fo= makeTextElems.fo || 'div'}&attributes(attr_fo)(class= fo_class || block +'__'+'fo')= $foCC || ''
                #{$fv= makeTextElems.fv || 'div'}&attributes(attr_fv)(class= fv_class || block +'__'+'fv')= $fvCC || ''
                #{$sx= makeTextElems.sx || 'div'}&attributes(attr_sx)(class= sx_class || block +'__'+'sx')= $sxCC || ''
             each other in others	
                #{elP}&attributes(attr_p)(class= p_class || block +'__'+'text')=  $text || other
                   if makeTextElems
                      #{$pInF= makeTextElems.$pinf || 'span'}&attributes(attr_pinf)(class= pinf_class || block +'__'+'pinf')= $pinfCC || ''
                      #{$pInS= makeTextElems.$pins || 'span'}&attributes(attr_pins)(class= pins_class || block +'__'+'pins')= $pinsCC || ''
             if makeTextElems
                #{$sv= makeTextElems.$sv || 'div'}&attributes(attr_sv)(class= sv_class || block +'__'+'sv')= $svCC || ''
                #{$e= makeTextElems.$e || 'div'}&attributes(attr_e)(class= e_class || block +'__'+'e')= $eCC || ''
                #{$n= makeTextElems.$n || 'div'}&attributes(attr_n)(class= n_class || block +'__'+'n')= $nCC || ''
    
    - makeTextElems= { $h: 'h3', $f: "span", $s}
    - makeTextClass = { h: 'title'}; 
    - makeTextAttr = {p: {data: 5}, div: {data: 6, class: 'new'} }
  • Какие более короткие варианты, или альтернативы деструктрирующего присваивания?

    @lorentso Автор вопроса
    Роман, да, конечно. Я поторопился ответить Да и не получится вовсе. Я не знаю, как работает этот код, но это ведь для скриптов и для работы с DOM , а мне нужно то, что работает с шаблонами pug.
  • Какие более короткие варианты, или альтернативы деструктрирующего присваивания?

    @lorentso Автор вопроса
    Сергей delphinpro, задача присвоить одному массиву элементов значения другого массива элементов. По-моему это ясно. Если элемента три четыре, то это легко. А если их даже 8-10, то это уже может немного напрягать, особенно если операцию придется повторять регулярно.

    Для чего это ВООБЩЕ -- долгий разговор. Я хочу создать особый тип миксинов -конструкторов, где можно в отдельные массивы выводить классы, теги, и все прочее, а через другие массивы их наполнять.
    Если это вариант самй короткий - то ОК. О чем тогда разговор.
    Читаю lodash -- там есть что-то похоже, но не совсем. Там метода создается объект, где переменные одного массива становятся ключами, а другого значениями...
    Или , еще их можно пtрергруппировать, разбить, так что будут массивы ["a", elem1] ["b", elem2]... и так далее, но это снова не то.
    P.S Да, и потребность в короткой записи заключается еще и в том, что у меня могут быть готовые сгруппированные шаблоны, чтобы каждый раз не прописывать заново - elem1, elem2, и.т. д
  • Какие более короткие варианты, или альтернативы деструктрирующего присваивания?

    @lorentso Автор вопроса
    Сергей delphinpro, я не могу сделать более коротким второй массив. , где идет список элементов. -- let [elem1, elem2]Вот - прямо пальцем показываю , Там может быть сколько угодно элементов. Не ясно чтоли?
    Насчет озвучивания ТЗ -- нужно будет - озвучу. А то похоже, что вы за своим прогерским снобизмом сами потеряли спосбность ясно изъяняться и вести культурный диалог. Прошу прощение, если что не так. Засим отклаиниваюсь.
  • Можно ли экспортировать переменные из .pug в .js, и обратно из файлов js в pug?

    @lorentso Автор вопроса
    Сергей delphinpro, вы пишите:
    вопрос не актуальный, потому что в готовом проекте пага нет
    .

    я не до конца понимаю это...скажите, пожалуйста, зачем тогда пишутся постоянно миксины для вывода из json-а в pug, а только потом на html страницу?
  • Можно ли экспортировать переменные из .pug в .js, и обратно из файлов js в pug?

    @lorentso Автор вопроса
    Сергей delphinpro, спасибо.
    А насколько сложно передавать такие данный из js, и что важно отправлять их обратно, то есть осуществлять двойной обмен.? Это пара трочек кода, или масса сложных модулей? Я не то, чтобы про общие настройки..Мне бы хотелось, например, экспортировать динамически переменные из инкулюда не вниз , а вверх по разметке, чтобы можно было влиять на блоки , которые находятся выше с нижнего уровня. Переменная могла бы изменяться от характера контнтента, и а инкюды, которые выше, получали бы эти даннные через метод экспорта js
  • Как быстро заменить слова в разных файлах по шаблону из текстового файла?

    @lorentso
    Азат Киберов, не свовсем, но близко. Я новичок в верстке и программировании и как раз в силу непонимания у меня есть разные навиные фантазии относительного того, что можно (или нельзя) делать с содержимым файлов.
    В общих чертах, грубо упрощая, я хочу что-то вроде плагина, который бы каждый файл вне зависимости от расширения открывал бы как текст, и по шаблону бы дела там замены и перестановки, а птом сохранял в своемизначальном формате.
    И чтобы работать можно было удобно через файл подключеный к другому файлу. Иными словами, чтобы через один файл я мог бы управлять другими файлом обращаясь к нему как к простому тексту - меняя ипереставля строки, и в идеале даже, чтобы я мог через этот файл селективно отслеживать действия с с отельными выбранными строками, все измения которых тут же прописывались у в подключенном файле вотчере.
    К примеру - я пишу строчку разметки -- и тут же у меня эта строка в виде преобразованного минимодуля, которым я могу управлять дистанционно, отображается в файле-вотчере, который я на лету могу зарегестрировать и дистанционно менять парметры, отслеживая вме изенения сэтой строкой, и из любого метса это файла-вотчера я могу обратиться к этой строке, даже если она изменилась или изменила свое местоположение.
    Но так как я не зная,к возможо ли это, то пытаюсь подступиться издалека и с разных сторон.
  • Как сохранять копию файла при каждом изменении выбранных выражений?

    @lorentso Автор вопроса
    Хочу сказать, что я почти не знаю, что такое git. Когда-то попользовался и забыл, -- не было нужды. Однако, представляя что это такое в общих чертах, могу утверждать, что моя задумка служит другим практическим целям.

    Например, у меня есть pug миксин, и я могу изменить его настройки и переименовать., дописать , допустим суффикс. Таким образом, я получаю сразу два миксина -- нетронутый исходный с его дефолтными настройками и переименованый с модифицированными и применяю их по обстоятельствам, причем оба мискина автоматически инклюдятся, потому как инклюд настроен на все файлы из определенной папки.
  • Можно ли автоматически передавать код в определеную "точку" (или позицию) документа?

    @lorentso Автор вопроса
    Не могу сказать точно, но маленькая ремарка -- это расширение у меня не работает, потому что обе клавиши Ctrl сейчас не работают, а весь функционал завязан на них.
    Буду изучать..но, забегая вперед, я понял, что этот плагин обеспечивает только свободную навигацию по выбранным строкам. ..как бы это сказать, по фиксированным строкам самого документа Мне же нужно гораздо-гораздо большее. Мне нужна навигация по строкам самого кода, -с жесткой привязкой к их любому перемещению. То есть, если я написал
    h1 Hellow World
    а потом изменил строку и переместил вниз, тоя все ранов буду иметь с ней неразрывную связь, потому что она регистрируется автоматически в виде компонента, доступоного через другой файл.
  • Активное меню и субменю в pug?

    @lorentso
    Извините, а можно вас спросить?
    Не можете ли вы прокомментировать, как связана переменная - activeMenu с остальным кодом и как она вообще работает? Никак не могу найти связь.
  • Можно ли автоматически передавать код в определеную "точку" (или позицию) документа?

    @lorentso Автор вопроса
    А разве есть шаблонизаторы, которые справляются с такой задачей?
  • Можно ли автоматически передавать код в определеную "точку" (или позицию) документа?

    @lorentso Автор вопроса
    Нет, вовсе не с таблицей.
    Я хочу, чтобы ты открыл любой документ, - html, сss, js...не важно.
    У тебя на странице открытого файла нумеруются как-то ряды ведь, так?
    И если ошибка, то консоль тоже выдает, что на такой-то строчке в таком-то столбце ошибка.
    Это значит, что сам чистый лист можно как-то просчитать.
    Теперь, допустим, ты знаешь, что у тебя на такой-то строке есть разметка html, или функция -- без разицы. , и тебе было бы удобно создавать разметку так - пишешешь, например, ( в любом месте:

    <p>lorem...<p/>

    и дописываешь что-то вроде x 45, y 700 --attach, и у тебя в аккурат на строка идет на нужное место.

    Второй вариант еще удобнее. Например, есть какая-то строка кода. , которая занимает некую позицию в документе. Ты регистрируещь эту строку, например доавляешь некий уникальный атрибут, чтобы дальше с ней работать и иметь к ней жесткую привязку, и потом при любых изменениях этой строки и ее перемещениях внутри документа ты можешь написать что-то вроде:

    span = "1, 2, 3" 
    position: {x: -1;  y: -2}
    attach( уникальный номер строки)


    и в любом случае, даже если строка ушла в другое место, твой код попадает на 1 строку ниже и (как видно из позиции) на два отступа дальше от места привязки