Tech Tips

  1. プログラミング
  2. 76 view

[CoffeeScript]簡易的なテンプレートエンジンを作ってみた

これを
<script type="text/javascript">
people = [];
(function () {
{repeat}
people.push({
name: "#{people[index].name}"
});
{repeat}
})();
</script>
このようにしたくて、簡単に作ってみた。
<script type="text/javascript">
people = [];
(function () {
{repeat}
people.push({
name: "suzuki"
});

people.push({
name: "tanaka"
});

people.push({
name: "bob"
});

})();
</script>
以下がcoffee scriptのクラス。
class Tag constructor: (data, text) -> @validated = data @text = text @keywords = [ /^numpeople$/ /^people$/ /^people\[[0-9]\].name$/ ] validate: (str) -> for keyword in @keywords if keyword.test(str) return true return false string_to_value: (str) ->                 # Syntax Sugar if str == 'names' names = [] for people, i in @validated.people names.push "'#{people.name}'" names.toString() # Normal replace                 else if @validate(str) eval("this.validated." + str) else str replace: () -> # Replace repeatable line targets = @text.match(/{repeat}([\n\r]|.)*?{repeat}/) if targets != null target = targets[0] insert_line = target.substring(8,target.length-9) result = "" for people, i in @validated.items replaced_insert_line = insert_line.replace(/{index\+1}/g, i+1) replaced_insert_line = replaced_insert_line.replace(/index/g, i) result += replaced_insert_line @text = @text.replace(/{repeat}([\n\r]|.)*?{repeat}/, result) # Replace variable targets = @text.match(/#{.*?}/g) if targets != null for target in targets pattern = target.replace(/\[/g, '\\[') pattern = pattern.replace(/\]/g, '\\]') regex = new RegExp(pattern, 'g') @text = @text.replace(regex, @string_to_value(target.substring(2,target.length-1))) get_tag: () -> @text exports.Tag = Tag

プログラミングの最近記事

  1. TF-Agents で独自の環境を利用する方法

  2. Amazon Lex V2 で入力させる内容を分岐する方法

  3. Amazon Rekognition Video を使って動画内の顔検出と境界ボックスの描…

  4. Google Calendar API で自分のカレンダーの予定を取得する方法

  5. LeetCode の問題リストページで Like/Dislike 数を表示するだけの雑な …

関連記事

PAGE TOP