Simple Template Engine used for gulp-generator
<script id="search" type="text/template"> <input type="text" data-bind="search" data-action-input="update"> <ul> <!-- BEGIN result:loop --> <li>{name}-{id}</li> <!-- END result:loop --> </ul> </script> <script> var list = new aTemplate({ templates:["search"], data:{ search:"", list:[ {name:"tomomi",id:0}, {name:"daigo",id:1112}, {name:"taro",id:11113}, {name:"koike",id:1114}, {name:"aboki",id:1115}, {name:"tetsuro",id:1116}, {name:"takahashi",id:1117}, {name:"suzuki",id:1118}, {name:"okazaki",id:1119}, {name:"aoi",id:1120}, ], result:function(){ var search = this.data.search; var list = this.data.list; return list.filter(function(str){ var id = str.id+""; return str.name.indexOf(search) >= 0 || id.indexOf(search) >= 0; }); } }, }).update(); </script>
a-template.js はテンプレートの描画に innerHTML / insertAdjacentHTML を使用しています。
{key} に展開される値や data に渡す値は HTML としてそのまま挿入されるため、
ユーザー入力など信頼できない文字列を エスケープせずに data へ渡すと XSS
(クロスサイトスクリプティング) の原因になります。
信頼できない値をテンプレートに渡す場合は、あらかじめ HTML エスケープするか、
DOMPurify 等のサニタイズライブラリを通してから
data にセットしてください。