Angus' Events Plugin ๐Ÿ“…

์บ˜๋ฆฐ๋” ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋œ ํ›„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€์š”?


์ˆ˜์ •: ์ œ ์ƒํ™ฉ์„ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์ƒ‰ ์ด๋ฒคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค:

ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํฌํฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์•„์„œ, ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ƒ‰์ƒ์€ ์ด๋ฒคํŠธ ํƒœ๊ทธ์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ‰์ƒ์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ HTML์— ํƒœ๊ทธ ๋ชฉ๋ก์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค: data-tags="{{event.topic.tags}}"

<script type="text/x-handlebars" data-template-name="javascripts/components/events-calendar-event">
<div class="{{event.classes}}" data-tags="{{event.topic.tags}}" {{action 'selectEvent' event.topic.url}} style="{{event.listStyle}}">
  {{#unless event.allDay}}
    <span style='{{event.dotStyle}}'>{{d-icon 'circle'}}</span>
  {{/unless}}
  {{#if event.time}}
    <span class="time">{{event.time}}</span>
  {{/if}}
  {{#if event.title}}
    <span class="title" style="{{event.titleStyle}}">{{replace-emoji event.title}}</span>
  {{/if}}
</div>

{{#if showEventCard}}
  {{events-calendar-card topic=event.topic selectEvent="selectEvent"}}
{{/if}}
</script>

์ŠคํŠธ๋ผ์ดํ”„ ํŒจํ„ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
    // tags colors
    let colors = {muni: "#91D0B5", road: "#8ABBE2", freestyle: "#CFB3D3"};

    let events = document.getElementsByClassName("event");
    for (var i = 0; i < events.length; i++) {
        let event = events[i];
        let gradient = "";
        let tags = event.getAttribute("data-tags").split(",");
        for (j = 1; j <= tags.length; j++) {
            gradient +=
                ", " +
                colors[tags[j - 1]] +
                " " +
                j * 8 +
                "px, " +
                colors[tags[j - 1]] +
                " " +
                (j * 8 + 8) +
                "px";
        }
        event.style.background = "repeating-linear-gradient(-45deg" + gradient + ")";
    }
});
</script>

๊ทธ๋ฆฌ๊ณ  CSS๋ฅผ ์กฐ๊ธˆ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ:
ํƒœ๊ทธ 2๊ฐœ์ธ ์ด๋ฒคํŠธ:

ํƒœ๊ทธ 3๊ฐœ์ธ ์ด๋ฒคํŠธ:

์ œ๊ฐ€ ๊ฒช๋Š” ๋ฌธ์ œ๋Š” ์ œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‹œ ์‹คํ–‰๋˜๋Š”๋ฐ, ์บ˜๋ฆฐ๋”๊ฐ€ ๋™์ ์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „/๋‹ค์Œ ๋‹ฌ์˜ ์ด๋ฒคํŠธ์—๋Š” ์ŠคํŠธ๋ผ์ดํ”„ ์ƒ‰์ƒ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

10์›”์— ์žˆ์œผ๋ฉด์„œ "๋‹ค์Œ"์„ ๋‘ ๋ฒˆ ํด๋ฆญํ•˜์—ฌ 12์›”๋กœ ์ด๋™ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:

์ด ๋•Œ๋ฌธ์— ์บ˜๋ฆฐ๋” ์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜์—ˆ์„ ๋•Œ ์ œ JS๊ฐ€ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”