各パーシャルの前後に、パーシャルのパスまたは名前を付けて、それを実装する担当者に HTML コメントを書きたいと思います。
ページのパスとファイル名は取得できますが、部分的なものは取得できません。どのようにするか知っていますか?
各パーシャルの前後に、パーシャルのパスまたは名前を付けて、それを実装する担当者に HTML コメントを書きたいと思います。
ページのパスとファイル名は取得できますが、部分的なものは取得できません。どのようにするか知っていますか?
私はあなたが今何を意味するか知っていると思います。
このヘルパーをまとめました。役立つかどうか教えてください。
現在、ヘルパーはパーシャルの名前を含む元のパーシャルへのパスを持つパーシャルの前にコメントを追加するだけです。既にパスに含まれているため、パーシャルの名前も含めるのは不必要に思えますが、必要な場合は、そのレポに機能リクエストを追加してください。追加します。コメントも簡単に追加できます。
次の方法でヘルパーをインストールできます。
npm i handlebars-helper-partial
ヘルパーにパーシャルへのパスを含む HTML コメントを生成させるには、アセンブル オプションで次のように定義する必要があります (ヘルパーを他のユーザーにも使用できるようにするために、このようにしました)。
assemble: {
options: {
include: {
origin: true
}
},
site: {
files: {}
}
}
または、次の名前のファイルを追加することもできますinclude.json
。
{
"include": {
"origin": true
}
}
次に、Assemble オプションでそのファイルへのパスを指定します。
assemble: {
options: {
data: ['include.json', 'other/files/*.json']
},
site: {
files: {}
}
}
ヘルパーの完全なコードは次のとおりです。
/**
* Handlebars Helpers: {{include}}
* Copyright (c) 2013 Jon Schlinkert
* Licensed under the MIT License (MIT).
*/
var path = require('path');
var _ = require('lodash');
var yfm = require('assemble-yaml');
// Export helpers
module.exports.register = function (Handlebars, options, params) {
'use strict';
var assemble = params.assemble;
var grunt = params.grunt;
var opts = options || {};
/**
* {{partial}}
* Alternative to {{> partial }}
*
* @param {String} name The name of the partial to use
* @param {Object} context The context to pass to the partial
* @return {String} Returns compiled HTML
* @xample: {{partial 'foo' bar}}
*/
Handlebars.registerHelper('include', function(name, context) {
if(!Array.isArray(assemble.partials)) {
assemble.partials = [assemble.partials];
}
var filepath = _.first(_.filter(assemble.partials, function(fp) {
return path.basename(fp, path.extname(fp)) === name;
}));
// Process context, using YAML front-matter,
// grunt config and Assemble options.data
var pageObj = yfm.extract(filepath) || {};
var metadata = pageObj.context || {};
// `context` = the given context (second parameter)
// `metadata` = YAML front matter of the partial
// `opts.data[name]` = JSON/YAML data file defined in Assemble options.data with a basename
// matching the name of the partial, e.g {{partial 'foo'}} => foo.json
// `this` = YAML front matter of _either_ the "inheriting" page, or a block
// expression wrapping the helper
// `opts` = Custom properties defined in Assemble options
// `grunt.config.data` = Data from grunt.config.data (e.g. pkg: grunt.file.readJSON('package.json'))
context = _.extend({}, grunt.config.data, opts, this, opts.data[name], metadata, context);
context = grunt.config.process(context);
var template = Handlebars.partials[name];
var fn = Handlebars.compile(template);
var output = fn(context).replace(/^\s+/, '');
// Prepend output with the filepath to the original partial
opts.data.include = opts.data.include || {};
if(opts.data.include.origin === true) {
output = '<!-- ' + filepath + ' -->\n' + output;
}
return new Handlebars.SafeString(output);
});
};