From 0f04d08d130e09d521faf67d94588f97e4606e3c Mon Sep 17 00:00:00 2001 From: ArtOfCode- <hello@artofcode.co.uk> Date: Tue, 30 Jun 2020 15:43:14 +0100 Subject: [PATCH] Display tag descriptions in selector --- app/assets/javascripts/tags.js | 29 +++++++++++++++++++++++++++-- db/schema.rb | 2 +- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/tags.js b/app/assets/javascripts/tags.js index 78ea2e368..f8ef98d40 100644 --- a/app/assets/javascripts/tags.js +++ b/app/assets/javascripts/tags.js @@ -1,4 +1,26 @@ $(() => { + const sum = (ary) => ary.reduce((a, b) => a + b, 0); + + const splitWordsMaxLength = (text, max) => { + const words = text.split(' '); + const splat = [[]]; + words.forEach(word => { + if (sum(splat[splat.length - 1].map(w => w.length + 1)) > max - word.length) { + splat.push([]); + } + splat[splat.length - 1].push(word); + }); + return splat.map(s => s.join(' ')); + }; + + const template = (tag) => { + const tagSpan = `<span>${tag.text}</span>`; + const descSpan = !!tag.desc ? + `<br/><span class="has-color-tertiary-900 has-font-size-caption">${splitWordsMaxLength(tag.desc, 120)[0]}...</span>` : + ''; + return $(tagSpan + descSpan); + } + $('.js-tag-select').each((i, el) => { const $tgt = $(el); const useIds = $tgt.attr('data-use-ids') === 'true'; @@ -11,8 +33,11 @@ $(() => { }, headers: { 'Accept': 'application/json' }, delay: 100, - processResults: data => ({results: data.map(t => ({id: useIds ? t.id : t.name, text: t.name}))}), - } + processResults: data => { + return {results: data.map(t => ({id: useIds ? t.id : t.name, text: t.name, desc: t.excerpt}))}; + }, + }, + templateResult: template }); }); diff --git a/db/schema.rb b/db/schema.rb index 3578990e1..2235b7b0c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -225,7 +225,7 @@ ActiveRecord::Schema.define(version: 2020_06_30_105117) do t.integer "post_type_id", null: false t.text "body_markdown" t.integer "answer_count", default: 0, null: false - t.datetime "last_activity", default: -> { "current_timestamp()" }, null: false + t.datetime "last_activity", default: -> { "CURRENT_TIMESTAMP" }, null: false t.string "att_source" t.string "att_license_name" t.string "att_license_link" -- GitLab