From 40b29cb0d3ff90094c44dd4cb7abd087a0fd9598 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Wed, 28 Apr 2021 21:57:49 -0400 Subject: Add pitch categories template helper (#1636) * Move utility function * Expose dictionary entry as a hidden property for internal use * Add pitchCategories helper --- ext/js/templates/template-renderer.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'ext/js/templates') diff --git a/ext/js/templates/template-renderer.js b/ext/js/templates/template-renderer.js index 9bb7a414..07b2849c 100644 --- a/ext/js/templates/template-renderer.js +++ b/ext/js/templates/template-renderer.js @@ -16,6 +16,7 @@ */ /* global + * DictionaryDataUtil * Handlebars */ @@ -146,7 +147,8 @@ class TemplateRenderer { ['getKanaMorae', this._getKanaMorae.bind(this)], ['typeof', this._getTypeof.bind(this)], ['join', this._join.bind(this)], - ['concat', this._concat.bind(this)] + ['concat', this._concat.bind(this)], + ['pitchCategories', this._pitchCategories.bind(this)] ]; for (const [name, helper] of helpers) { @@ -466,4 +468,20 @@ class TemplateRenderer { } return result; } + + _pitchCategories(context, data) { + const {pronunciations, headwords} = data.dictionaryEntry; + const categories = new Set(); + for (const {headwordIndex, pitches} of pronunciations) { + const {reading, wordClasses} = headwords[headwordIndex]; + const isVerbOrAdjective = DictionaryDataUtil.isNonNounVerbOrAdjective(wordClasses); + for (const {position} of pitches) { + const category = this._japaneseUtil.getPitchCategory(reading, position, isVerbOrAdjective); + if (category !== null) { + categories.add(category); + } + } + } + return [...categories]; + } } -- cgit v1.2.3