thredded 0.13.8 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/app/assets/images/thredded/lock.svg +1 -0
- data/app/assets/stylesheets/thredded/components/_messageboard.scss +10 -1
- data/app/controllers/thredded/messageboards_controller.rb +1 -1
- data/app/notifiers/thredded/email_notifier.rb +6 -2
- data/app/policies/thredded/messageboard_policy.rb +3 -1
- data/app/policies/thredded/post_policy.rb +5 -1
- data/app/views/thredded/messageboards/_form.html.erb +6 -0
- data/app/views/thredded/messageboards/_messageboard.html.erb +1 -5
- data/app/views/thredded/messageboards/_messageboard_meta.html.erb +13 -0
- data/bin/rubocop +18 -0
- data/config/locales/de.yml +249 -0
- data/config/locales/en.yml +2 -0
- data/config/locales/es.yml +2 -0
- data/config/locales/fr.yml +2 -0
- data/config/locales/pl.yml +2 -0
- data/config/locales/pt-BR.yml +3 -0
- data/config/locales/ru.yml +2 -0
- data/config/locales/zh-CN.yml +2 -0
- data/db/migrate/20160329231848_create_thredded.rb +3 -2
- data/db/upgrade_migrations/20170811090735_upgrade_thredded_v0_13_to_v_014.rb +21 -0
- data/lib/thredded/version.rb +1 -1
- data/vendor/assets/javascripts/textcomplete.min.js +2 -2
- metadata +8 -4
- data/bin/create_migration_fixture +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ca544efca243747b5f8b3d11c65c5376999c016
|
4
|
+
data.tar.gz: 6d08bb441e304681531bee3977d32d66e9854f60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1601695337ccb89d4c2f2b058f183d22ae33eef5381c1165a3368ef93ab72915f232224a9d8c394c9c8cbeac46931b01be9be3c9af556731b8fe0fa2469381c
|
7
|
+
data.tar.gz: c25c917fed02ad08cd38e88dad77990c76f21165d04a7c684efe8431c5bb12b8d1ed37742550268dd16a3e8795a41c28e0d9f5af98451ac9dd6bbdbff172bfc0
|
data/README.md
CHANGED
@@ -98,7 +98,7 @@ Then, see the rest of this Readme for more information about using and customizi
|
|
98
98
|
Add the gem to your Gemfile:
|
99
99
|
|
100
100
|
```ruby
|
101
|
-
gem 'thredded', '~> 0.
|
101
|
+
gem 'thredded', '~> 0.14.0'
|
102
102
|
```
|
103
103
|
|
104
104
|
Add the Thredded [initializer] to your parent app by running the install generator.
|
@@ -381,7 +381,7 @@ change_column_default :thredded_user_preferences, :auto_follow_topics, 1
|
|
381
381
|
## I18n
|
382
382
|
|
383
383
|
Thredded is mostly internationalized. It is currently available in English, Brazilian Portuguese, Chinese (Simplified),
|
384
|
-
Polish, Russian, French, and Spanish.
|
384
|
+
German, Polish, Russian, French, and Spanish.
|
385
385
|
We welcome PRs adding support for new languages.
|
386
386
|
|
387
387
|
Here are the steps to ensure the best support for your language if it isn't English:
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M10 16c0-1.104.896-2 2-2s2 .896 2 2c0 .738-.404 1.376-1 1.723v2.277h-2v-2.277c-.596-.347-1-.985-1-1.723zm11-6v14h-18v-14h3v-4c0-3.313 2.687-6 6-6s6 2.687 6 6v4h3zm-13 0h8v-4c0-2.206-1.795-4-4-4s-4 1.794-4 4v4zm11 2h-14v10h14v-10z"/></svg>
|
@@ -49,11 +49,20 @@
|
|
49
49
|
font-size: 0.875em;
|
50
50
|
}
|
51
51
|
|
52
|
-
.thredded--messageboard--meta {
|
52
|
+
.thredded--messageboard--meta--icon {
|
53
|
+
@extend %thredded--icon;
|
54
|
+
opacity: 0.8;
|
55
|
+
width: 1rem;
|
56
|
+
height: 1rem;
|
57
|
+
}
|
58
|
+
|
59
|
+
.thredded--messageboard--meta--counts {
|
53
60
|
@extend %thredded--heading;
|
54
61
|
color: $thredded-secondary-text-color;
|
55
62
|
display: inline-block;
|
63
|
+
font-size: inherit;
|
56
64
|
font-weight: normal;
|
65
|
+
margin-bottom: 0;
|
57
66
|
vertical-align: baseline;
|
58
67
|
}
|
59
68
|
|
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
module Thredded
|
4
4
|
class EmailNotifier
|
5
|
+
def initialize
|
6
|
+
fail 'Please set Thredded.email_from in config/initializers/thredded.rb' if Thredded.email_from.blank?
|
7
|
+
end
|
8
|
+
|
5
9
|
def human_name
|
6
10
|
I18n.t('thredded.email_notifier.by_email')
|
7
11
|
end
|
@@ -11,11 +15,11 @@ module Thredded
|
|
11
15
|
end
|
12
16
|
|
13
17
|
def new_post(post, users)
|
14
|
-
PostMailer.post_notification(post.id, users.map(&:email)).deliver_now
|
18
|
+
Thredded::PostMailer.post_notification(post.id, users.map(&:email)).deliver_now
|
15
19
|
end
|
16
20
|
|
17
21
|
def new_private_post(post, users)
|
18
|
-
PrivateTopicMailer.message_notification(post.id, users.map(&:email)).deliver_now
|
22
|
+
Thredded::PrivateTopicMailer.message_notification(post.id, users.map(&:email)).deliver_now
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
@@ -37,7 +37,9 @@ module Thredded
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def post?
|
40
|
-
@user.thredded_admin? ||
|
40
|
+
@user.thredded_admin? ||
|
41
|
+
(!@messageboard.locked? || moderate?) &&
|
42
|
+
@user.thredded_can_write_messageboards.include?(@messageboard)
|
41
43
|
end
|
42
44
|
|
43
45
|
def moderate?
|
@@ -26,7 +26,11 @@ module Thredded
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def create?
|
29
|
-
@user.thredded_admin? ||
|
29
|
+
@user.thredded_admin? ||
|
30
|
+
!@post.postable.locked? &&
|
31
|
+
# Users are allowed to post in unlocked topics of a locked messageboard
|
32
|
+
# only if they would be allowed to post if the messageboard wasn't locked.
|
33
|
+
@user.thredded_can_write_messageboards.include?(@post.messageboard)
|
30
34
|
end
|
31
35
|
|
32
36
|
def read?
|
@@ -13,6 +13,12 @@
|
|
13
13
|
<%= f.collection_select :messageboard_group_id, Thredded::MessageboardGroup.all, :id, :name,
|
14
14
|
include_blank: t('thredded.messageboard.form.no_group') %>
|
15
15
|
</li>
|
16
|
+
<li>
|
17
|
+
<%= f.label :locked do %>
|
18
|
+
<%= f.check_box :locked %> <%= t 'thredded.messageboard.form.locked_label' %>
|
19
|
+
<% end %>
|
20
|
+
</li>
|
21
|
+
|
16
22
|
<li>
|
17
23
|
<%= f.submit @messageboard.persisted? ? t('thredded.messageboard.update') : t('thredded.messageboard.create'),
|
18
24
|
class: 'thredded--form--submit',
|
@@ -3,11 +3,7 @@
|
|
3
3
|
<%= link_to messageboard_topics_path(messageboard), class: 'thredded--messageboard' do %>
|
4
4
|
<header class="thredded--messageboard--header">
|
5
5
|
<h2 class="thredded--messageboard--title"><%= messageboard.name %></h2>
|
6
|
-
|
7
|
-
<%= t 'thredded.messageboard.topics_and_posts_counts',
|
8
|
-
topics_count: number_with_delimiter(messageboard.topics_count),
|
9
|
-
posts_count: number_with_delimiter(messageboard.posts_count) %>
|
10
|
-
</h3>
|
6
|
+
<%= render 'thredded/messageboards/messageboard_meta', messageboard: messageboard %>
|
11
7
|
</header>
|
12
8
|
|
13
9
|
<p class="thredded--messageboard--description"><%= messageboard.description %></p>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class="thredded--messageboard--meta">
|
2
|
+
<% if messageboard.locked? %>
|
3
|
+
<span class="thredded--messageboard--meta--locked"
|
4
|
+
title="<%= t('thredded.messageboard.form.locked_notice') %>">
|
5
|
+
<%= inline_svg('thredded/lock.svg', class: 'thredded--messageboard--meta--icon') %>
|
6
|
+
</span>
|
7
|
+
<% end %>
|
8
|
+
<h3 class="thredded--messageboard--meta--counts">
|
9
|
+
<%= t 'thredded.messageboard.topics_and_posts_counts',
|
10
|
+
topics_count: number_with_delimiter(messageboard.topics_count),
|
11
|
+
posts_count: number_with_delimiter(messageboard.posts_count) %>
|
12
|
+
</h3>
|
13
|
+
</div>
|
data/bin/rubocop
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rubocop' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require 'pathname'
|
12
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
require 'rubygems'
|
16
|
+
require 'bundler/setup'
|
17
|
+
|
18
|
+
load Gem.bin_path('rubocop', 'rubocop')
|
@@ -0,0 +1,249 @@
|
|
1
|
+
---
|
2
|
+
de:
|
3
|
+
thredded:
|
4
|
+
content_moderation_states:
|
5
|
+
content_blocked_notice: Blockiert
|
6
|
+
content_blocked_notice_with_record_html: Blockiert von %{moderator} %{time_ago}
|
7
|
+
email_notifier:
|
8
|
+
by_email: Per E-mail
|
9
|
+
emails:
|
10
|
+
message_notification:
|
11
|
+
html:
|
12
|
+
email_sent_reason_html: >-
|
13
|
+
Sie erhalten diese E-Mail, da %{user} Sie zu einer privaten Diskussion hinzugefügt hat, “<a href="%{post_url}">%{topic_title}</a>”.
|
14
|
+
post_lead_html: 'Eine neue Nachricht von %{user} in <a href="%{post_url}">“%{topic_title}”</a>:'
|
15
|
+
unsubscribe_instructions_html: :thredded.emails.post_notification.html.unsubscribe_instructions_html
|
16
|
+
subject: Neue Nachricht von %{user} in “%{topic_title}”
|
17
|
+
text:
|
18
|
+
email_sent_reason: |-
|
19
|
+
Sie erhalten diese E-Mail, da %{user} Sie zu einer privaten Diskussion
|
20
|
+
“%{topic_title}” hinzugefügt hat.
|
21
|
+
|
22
|
+
Klicken sie hier um die Diskussion zu sehen:
|
23
|
+
%{post_url}
|
24
|
+
post_lead: Neue Nachricht von %{user} in “%{topic_title}”
|
25
|
+
unsubscribe_instructions: :thredded.emails.post_notification.text.unsubscribe_instructions
|
26
|
+
post_notification:
|
27
|
+
html:
|
28
|
+
email_sent_reason_html: 'Sie erhalten diese E-Mail, da Sie der folgenden Diskussion folgen: “<a href="%{post_url}">%{topic_title}</a>”.'
|
29
|
+
post_lead_html: '%{user} <a href="%{post_url}">schrieb in “%{topic_title}”</a>:'
|
30
|
+
unsubscribe_instructions_html: >-
|
31
|
+
Um keine weiteren E-Mails zu erhalten, ändern Sie hier ihre <a href="%{preferences_url}">Benachrichtigungseinstellungen</a>.
|
32
|
+
subject: Ein neuer Beitrag in “%{topic_title}”
|
33
|
+
text:
|
34
|
+
email_sent_reason: |-
|
35
|
+
Sie erhalten diese E-Mail, da Sie der folgenden Diskussion
|
36
|
+
“%{topic_title}” folgen.
|
37
|
+
|
38
|
+
Klicken sie hier um die Diskussion zu sehen:
|
39
|
+
%{post_url}
|
40
|
+
post_lead: "%{user} schrieb in “%{topic_title}”:"
|
41
|
+
unsubscribe_instructions: |-
|
42
|
+
Um keine weiteren E-Mails zu erhalten, ändern Sie hier ihre Benachrichtigungseinstellungen:
|
43
|
+
%{unsubscribe_url}
|
44
|
+
errors:
|
45
|
+
login_required: Bitte zuerst anmelden
|
46
|
+
not_authorized: Du hast keinen Zugriff auf diese Seite
|
47
|
+
private_topic_create_denied: Du bist nicht autorisiert, private Unterhaltungen zu erstellen
|
48
|
+
private_topic_not_found: Diese private Unterhaltung existiert nicht
|
49
|
+
form:
|
50
|
+
create_btn_submitting: Erstellen...
|
51
|
+
preview: Vorschau
|
52
|
+
update: Änderungen übernehmen
|
53
|
+
update_btn_submitting: Änderungen übernehmen...
|
54
|
+
messageboard:
|
55
|
+
create: Erstelle ein neues Forum
|
56
|
+
form:
|
57
|
+
create_btn_submitting: :thredded.form.create_btn_submitting
|
58
|
+
description_label: Beschreibung
|
59
|
+
locked_label: Geschlossen
|
60
|
+
locked_notice: Dieses Forum ist geschlossen. Nur Moderatoren können hier neue Beiträge erstellen.
|
61
|
+
messageboard_group_id_label: Gruppe
|
62
|
+
no_group: Keine Gruppe
|
63
|
+
title_label: Name
|
64
|
+
update_btn_submitting: :thredded.form.update_btn_submitting
|
65
|
+
index:
|
66
|
+
page_title: Forum
|
67
|
+
last_updated_by_html: Letzter Beitrag %{time_ago} <cite>von %{user}</cite>
|
68
|
+
topics_and_posts_counts: "%{topics_count} Diskussionen / %{posts_count} Beiträge"
|
69
|
+
update: :thredded.form.update
|
70
|
+
updated_notice: Das Forum wurde aktualisiert
|
71
|
+
messageboard_group:
|
72
|
+
create: Erstelle eine neue Gruppe
|
73
|
+
form:
|
74
|
+
create_btn_submitting: :thredded.form.create_btn_submitting
|
75
|
+
saved: Die Gruppe %{name} wurde erstellt
|
76
|
+
moderation:
|
77
|
+
approve_btn: Erlauben
|
78
|
+
block_btn: Blockieren
|
79
|
+
moderation_state:
|
80
|
+
name: Moderationsstatus
|
81
|
+
pending:
|
82
|
+
empty:
|
83
|
+
content: Alle Beiträge wurden moderiert
|
84
|
+
title: Gute Arbeit!
|
85
|
+
post_approved_html: Beitrag wurde von %{moderator} %{time_ago} erlaubt
|
86
|
+
post_blocked_html: Beitrag wurde von %{moderator} %{time_ago} blockiert
|
87
|
+
post_deleted_notice: Dieser Beitrag wurde gelöscht
|
88
|
+
posts_content_changed_since_moderation_html: >-
|
89
|
+
Der Beitrag <a href="%{post_url}">post's</a> wurde in seinem Inhalt geändert. Unten wird der ursprüngliche
|
90
|
+
Beitrag angezeigt.
|
91
|
+
search_users:
|
92
|
+
form_label: Benutzer suchen
|
93
|
+
form_placeholder: :thredded.moderation.search_users.form_label
|
94
|
+
no_results_message: Keine Nutzer mit dem Inhalt %{query} gefunden
|
95
|
+
results_message: Nutzer mit dem Inhalt %{query} gefunden
|
96
|
+
user:
|
97
|
+
name: Benutzer
|
98
|
+
nav:
|
99
|
+
all_messageboards: Forenübersicht
|
100
|
+
edit_messageboard: Forum bearbeiten
|
101
|
+
edit_post: Beitrag bearbeiten
|
102
|
+
edit_private_topic: :thredded.nav.edit_topic
|
103
|
+
edit_topic: Bearbeiten
|
104
|
+
mark_all_read: Alles als gelesen markieren
|
105
|
+
moderation: Verwaltung
|
106
|
+
moderation_activity: Aktivität
|
107
|
+
moderation_history: Verlauf
|
108
|
+
moderation_pending: Ausstehend
|
109
|
+
moderation_users: Nutzer
|
110
|
+
private_topics: Private Unterhaltungen
|
111
|
+
settings: Benachrichtigungseinstellungen
|
112
|
+
null_user_name: Gelöschte Nutzer
|
113
|
+
posts:
|
114
|
+
delete: Beitrag gelöscht
|
115
|
+
delete_confirm: Bist du sicher, dass du diesen Beitrag löschen willst?
|
116
|
+
deleted_notice: Dein Beitrag wurde gelöscht
|
117
|
+
edit: :thredded.nav.edit_post
|
118
|
+
form:
|
119
|
+
content_label: Inhalt
|
120
|
+
create_btn: Beitrag erstellen
|
121
|
+
create_btn_submitting: Beitragen...
|
122
|
+
title_label: Erstelle einen neuen Beitrag
|
123
|
+
update_btn: Beitrag ändern
|
124
|
+
update_btn_submitting: :thredded.form.update_btn_submitting
|
125
|
+
pending_moderation_notice: Dein Beitrag wird veröffentlicht, sobald ein Moderator ihn angeschaut hat.
|
126
|
+
quote_btn: Zitat
|
127
|
+
preferences:
|
128
|
+
edit:
|
129
|
+
page_title: :thredded.nav.settings
|
130
|
+
form:
|
131
|
+
auto_follow_topics:
|
132
|
+
hint: Automatisch allen neuen Diskussionen folgen. Das Ändern dieser Einstellung wird alle Foren betreffen.
|
133
|
+
label: Allen Diskussionen folgen
|
134
|
+
follow_topics_on_mention:
|
135
|
+
hint: 'Wenn dich jemand mit deinem Nutzernamen erwähnt (eg: @sam) wirst du dem Beitrag folgen.'
|
136
|
+
label: Allen Diskussionen folgen, in denen du erwähnt wurdest
|
137
|
+
messageboard_auto_follow_topics:
|
138
|
+
hint: >-
|
139
|
+
Folge automatisch allen neuen Diskussionen in diesem Forum. Dies überschreibt die jeweiligen Einstellungen
|
140
|
+
weiter oben.
|
141
|
+
label: Folge allen neuen Diskussionen
|
142
|
+
messageboard_follow_topics_on_mention:
|
143
|
+
hint: 'Wenn jemand deinen Nutzernamen (eg: @sam) in diesem Forum erwähnt, wirst du der Diskussion folgen.'
|
144
|
+
label: :thredded.preferences.form.follow_topics_on_mention.label
|
145
|
+
messageboard_notifications_for_followed_topics:
|
146
|
+
label: :thredded.preferences.form.notifications_for_followed_topics.label
|
147
|
+
notifications_for_followed_topics:
|
148
|
+
label: Benachrichtigung für Diskussionen, denen du folgst
|
149
|
+
notifications_for_private_topics:
|
150
|
+
label: Benachrichtigung für private Unterhaltungen
|
151
|
+
submit_btn: Einstellungen bearbeiten
|
152
|
+
update_btn_submitting: :thredded.form.update_btn_submitting
|
153
|
+
global_preferences_title: Allgemeine Einstellungen
|
154
|
+
messageboard_preferences_nav_title: Forum bearbeiten
|
155
|
+
messageboard_preferences_title_html: Einstellungen für <em>%{messageboard}</em>
|
156
|
+
updated_notice: Deine Einstellungen sind jetzt gültig
|
157
|
+
private_posts:
|
158
|
+
form:
|
159
|
+
content_label: Nachricht
|
160
|
+
create_btn: Nchricht senden
|
161
|
+
create_btn_submitting: Senden...
|
162
|
+
update_btn_submitting: :thredded.form.update_btn_submitting
|
163
|
+
private_topics:
|
164
|
+
create: :thredded.private_topics.form.create_btn
|
165
|
+
edit: Bearbeiten
|
166
|
+
errors:
|
167
|
+
user_ids_length: Bitte nenne mindestens einen anderen Nutzer
|
168
|
+
form:
|
169
|
+
content_label: :thredded.private_posts.form.content_label
|
170
|
+
create_btn: :thredded.private_posts.form.create_btn
|
171
|
+
create_btn_submitting: :thredded.private_posts.form.create_btn_submitting
|
172
|
+
title_label: :thredded.topics.form.title_label
|
173
|
+
title_placeholder_new: Nenne das Thema der Unterhaltung
|
174
|
+
title_placeholder_start: Starte eine neue Unterhaltung
|
175
|
+
update_btn: Aktualisieren
|
176
|
+
update_btn_submitting: :thredded.private_posts.form.update_btn_submitting
|
177
|
+
users_label: Teilnehmer
|
178
|
+
users_placeholder: Lade Nutzer ein, an dieser Unterhaltung teilzunehmen
|
179
|
+
no_private_topics:
|
180
|
+
create_btn: Starte deine erste private Unterhaltung
|
181
|
+
title: Du hast keine privaten Nachrichten
|
182
|
+
updated_notice: Überschrift bearbeitet
|
183
|
+
recent_activity: Letzte Aktivität
|
184
|
+
search:
|
185
|
+
form:
|
186
|
+
btn_submit: :thredded.search.form.label
|
187
|
+
label: Suche
|
188
|
+
placeholder: Foren durchsuchen
|
189
|
+
time_ago: 'vor %{time} '
|
190
|
+
topics:
|
191
|
+
create: :thredded.topics.form.create_btn
|
192
|
+
delete_confirm: >-
|
193
|
+
Bist du sicher, dass du diese Diskussion endgültig löschen möchtest? Dies kann nicht rückgängig gemacht
|
194
|
+
werden.
|
195
|
+
delete_topic: Diskussion löschen
|
196
|
+
deleted_notice: Diskussion gelöscht
|
197
|
+
edit: Diskussion bearbeiten
|
198
|
+
follow: Folge dieser Diskussion
|
199
|
+
followed_by: 'gefolgt von:'
|
200
|
+
followed_by_noone: Die Diskussion wird von Niemandem verfolgt
|
201
|
+
followed_notice: Du folgst der Diskussion
|
202
|
+
following:
|
203
|
+
auto: Du folgst dieser Diskussion, da automatisches Folgen aktiviert ist
|
204
|
+
manual: Du folgst dieser Diskussion
|
205
|
+
mentioned: Du folgst dieser Diskussion, da du in ihr erwähnt wurdest
|
206
|
+
posted: Du folgst dieser Diskussion, da du diese kommentiert hast
|
207
|
+
form:
|
208
|
+
categories_placeholder: Kategorien
|
209
|
+
content_label: :thredded.posts.form.content_label
|
210
|
+
create_btn: Erstelle eine neue Diskussion
|
211
|
+
messageboard_label: Forum
|
212
|
+
title_label: Titel
|
213
|
+
title_placeholder: :thredded.topics.form.title_label
|
214
|
+
title_placeholder_start: Starte eine neue Diskussion
|
215
|
+
update_btn: Beitrag bearbeiten
|
216
|
+
locked:
|
217
|
+
label: Gesperrt
|
218
|
+
message: Der Beitrag wurde von einem Moderator gesperrt
|
219
|
+
mark_as_unread: Als ungelesen markieren
|
220
|
+
not_following: Du folgst dieser Diskussion nicht
|
221
|
+
search:
|
222
|
+
no_results_in_messageboard_message_html: Deine Suche nach <q>%{query}</q> in %{messageboard} hat keine Ergebnisse
|
223
|
+
erzielt
|
224
|
+
no_results_message_html: Deine Suche nach <q>%{query}</q> erzielte keine Treffer
|
225
|
+
page_title: Suchergebnisse
|
226
|
+
results_in_messageboard_message_html: Suchergebnisse für <q>%{query}</q> in %{messageboard}
|
227
|
+
results_message_html: Suchergebnisse für <q>%{query}</q>
|
228
|
+
search_in_all_messageboards_btn: Suche überall
|
229
|
+
started_by_html: Gestartet %{time_ago} von %{user}
|
230
|
+
sticky:
|
231
|
+
label: Angepinnt
|
232
|
+
unfollow: Nich mehr folgen
|
233
|
+
unfollowed_notice: Du folgst der Diskussion nicht mehr
|
234
|
+
updated_notice: Beitrag aktualisiert
|
235
|
+
users:
|
236
|
+
currently_online: Zurzeit Online
|
237
|
+
last_active_html: Zuletzt aktiv %{time_ago}
|
238
|
+
posted_in_topic_html: Hochgeladen in %{topic_link}
|
239
|
+
posts_count:
|
240
|
+
one: Einmalig hochgeladen
|
241
|
+
other: "%{count} -mal hochgeladen"
|
242
|
+
recent_activity: :thredded.recent_activity
|
243
|
+
started_topic_html: "%{topic_link} gestartet"
|
244
|
+
started_topics_count:
|
245
|
+
one: Eine Diskussion gestartet
|
246
|
+
other: "%{count} Diskussionen gestartet"
|
247
|
+
user_posted_in_topic_html: "%{user_link} hochgeladen in %{topic_link}"
|
248
|
+
user_since_html: Nutzer seit %{time_ago}
|
249
|
+
user_started_topic_html: "%{user_link} hat %{topic_link} gestartet"
|
data/config/locales/en.yml
CHANGED
@@ -55,6 +55,8 @@ en:
|
|
55
55
|
form:
|
56
56
|
create_btn_submitting: :thredded.form.create_btn_submitting
|
57
57
|
description_label: Description
|
58
|
+
locked_label: Locked
|
59
|
+
locked_notice: This messageboard is locked. Only moderators can create new topics here.
|
58
60
|
messageboard_group_id_label: Messageboard group
|
59
61
|
no_group: No Group
|
60
62
|
title_label: Name
|
data/config/locales/es.yml
CHANGED
@@ -57,6 +57,8 @@ es:
|
|
57
57
|
form:
|
58
58
|
create_btn_submitting: :thredded.form.create_btn_submitting
|
59
59
|
description_label: Descripción
|
60
|
+
locked_label: Bloqueado
|
61
|
+
locked_notice: Este mensaje está bloqueado. Solo los moderadores pueden crear nuevos temas aquí.
|
60
62
|
messageboard_group_id_label: grupo messageboard
|
61
63
|
no_group: Sin grupo
|
62
64
|
title_label: Nombre
|
data/config/locales/fr.yml
CHANGED
@@ -55,6 +55,8 @@ fr:
|
|
55
55
|
form:
|
56
56
|
create_btn_submitting: :thredded.form.create_btn_submitting
|
57
57
|
description_label: Description
|
58
|
+
locked_label: Verrouillé
|
59
|
+
locked_notice: Ce message est verrouillé. Seuls les modérateurs peuvent créer de nouveaux sujets ici.
|
58
60
|
messageboard_group_id_label: Groupe de la catégorie
|
59
61
|
no_group: Pas de groupe
|
60
62
|
title_label: Nom
|
data/config/locales/pl.yml
CHANGED
@@ -55,6 +55,8 @@ pl:
|
|
55
55
|
form:
|
56
56
|
create_btn_submitting: :thredded.form.create_btn_submitting
|
57
57
|
description_label: Opis
|
58
|
+
locked_label: Zablokowany
|
59
|
+
locked_notice: Ta wiadomość jest zablokowana. Tylko moderatorzy mogą tworzyć nowe tematy tutaj.
|
58
60
|
messageboard_group_id_label: messageboard grupa
|
59
61
|
no_group: Brak grupy
|
60
62
|
title_label: Nazwa
|
data/config/locales/pt-BR.yml
CHANGED
@@ -56,6 +56,9 @@ pt-BR:
|
|
56
56
|
form:
|
57
57
|
create_btn_submitting: :thredded.form.create_btn_submitting
|
58
58
|
description_label: Descrição
|
59
|
+
locked_label: Trancado
|
60
|
+
locked_notice: Este quadro de mensagens está bloqueado. Somente os moderadores podem criar novos tópicos
|
61
|
+
aqui.
|
59
62
|
messageboard_group_id_label: grupo messageboard
|
60
63
|
no_group: Sem Grupo
|
61
64
|
title_label: Nome
|
data/config/locales/ru.yml
CHANGED
@@ -54,6 +54,8 @@ ru:
|
|
54
54
|
form:
|
55
55
|
create_btn_submitting: :thredded.form.create_btn_submitting
|
56
56
|
description_label: Описание
|
57
|
+
locked_label: Заблокировать
|
58
|
+
locked_notice: Этот форум заблокирован. Только модераторы могут создавать новые темы здесь.
|
57
59
|
messageboard_group_id_label: Выбрать группу
|
58
60
|
no_group: Не группировать
|
59
61
|
title_label: Название форума
|
data/config/locales/zh-CN.yml
CHANGED
@@ -44,6 +44,7 @@ class CreateThredded < Thredded::BaseMigration
|
|
44
44
|
t.references :last_topic, index: false
|
45
45
|
t.references :messageboard_group, index: false
|
46
46
|
t.timestamps null: false
|
47
|
+
t.boolean :locked, null: false, default: false
|
47
48
|
t.index [:messageboard_group_id], name: :index_thredded_messageboards_on_messageboard_group_id
|
48
49
|
t.index [:slug], name: :index_thredded_messageboards_on_slug
|
49
50
|
end
|
@@ -140,7 +141,7 @@ class CreateThredded < Thredded::BaseMigration
|
|
140
141
|
order: { moderation_state_changed_at: :desc },
|
141
142
|
name: :index_thredded_user_details_for_moderations
|
142
143
|
t.index %i[latest_activity_at], name: :index_thredded_user_details_on_latest_activity_at
|
143
|
-
t.index %i[user_id], name: :index_thredded_user_details_on_user_id
|
144
|
+
t.index %i[user_id], name: :index_thredded_user_details_on_user_id, unique: true
|
144
145
|
end
|
145
146
|
|
146
147
|
create_table :thredded_messageboard_users do |t|
|
@@ -162,7 +163,7 @@ class CreateThredded < Thredded::BaseMigration
|
|
162
163
|
t.boolean :follow_topics_on_mention, default: true, null: false
|
163
164
|
t.boolean :auto_follow_topics, default: false, null: false
|
164
165
|
t.timestamps null: false
|
165
|
-
t.index [:user_id], name: :index_thredded_user_preferences_on_user_id
|
166
|
+
t.index [:user_id], name: :index_thredded_user_preferences_on_user_id, unique: true
|
166
167
|
end
|
167
168
|
|
168
169
|
create_table :thredded_user_messageboard_preferences do |t|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'thredded/base_migration'
|
4
|
+
|
5
|
+
class UpgradeThreddedV013ToV014 < Thredded::BaseMigration
|
6
|
+
def change
|
7
|
+
add_column :thredded_messageboards, :locked, :boolean, null: false, default: false
|
8
|
+
remove_index :thredded_user_details,
|
9
|
+
name: :index_thredded_user_details_on_user_id
|
10
|
+
add_index :thredded_user_details,
|
11
|
+
:user_id,
|
12
|
+
name: :index_thredded_user_details_on_user_id,
|
13
|
+
unique: true
|
14
|
+
remove_index :thredded_user_preferences,
|
15
|
+
name: :index_thredded_user_preferences_on_user_id
|
16
|
+
add_index :thredded_user_preferences,
|
17
|
+
:user_id,
|
18
|
+
name: :index_thredded_user_preferences_on_user_id,
|
19
|
+
unique: true
|
20
|
+
end
|
21
|
+
end
|
data/lib/thredded/version.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
/** https://unpkg.com/textcomplete@0.14.
|
2
|
-
!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(2),s=(function(e){e&&e.__esModule}(o),function(){function e(t,n,i){r(this,e),this.data=t,this.term=n,this.strategy=i}return i(e,[{key:"replace",value:function(e,t){var n=this.strategy.replace(this.data);if(null!==n){Array.isArray(n)&&(t=n[1]+t,n=n[0]);var r=this.strategy.matchText(e);if(r)return n=n.replace(/\$&/g,r[0]).replace(/\$(\d)/g,function(e,t){return r[parseInt(t,10)]}),[[e.slice(0,r.index),n,e.slice(r.index+r[0].length)].join(""),t]}}},{key:"render",value:function(){return this.strategy.template(this.data,this.term)}}]),e}());t.default=s},function(e){"use strict";function t(){}function n(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function r(){this._events=new t,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,o="~";Object.create&&(t.prototype=Object.create(null),(new t).__proto__||(o=!1)),r.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)i.call(e,t)&&n.push(o?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},r.prototype.listeners=function(e,t){var n=o?o+e:e,r=this._events[n];if(t)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,u=new Array(s);i<s;i++)u[i]=r[i].fn;return u},r.prototype.emit=function(e,t,n,r,i,s){var u=o?o+e:e;if(!this._events[u])return!1;var a,l,c=this._events[u],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,r),!0;case 5:return c.fn.call(c.context,t,n,r,i),!0;case 6:return c.fn.call(c.context,t,n,r,i,s),!0}for(l=1,a=new Array(h-1);l<h;l++)a[l-1]=arguments[l];c.fn.apply(c.context,a)}else{var f,d=c.length;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),h){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,n);break;case 4:c[l].fn.call(c[l].context,t,n,r);break;default:if(!a)for(f=1,a=new Array(h-1);f<h;f++)a[f-1]=arguments[f];c[l].fn.apply(c[l].context,a)}}return!0},r.prototype.on=function(e,t,r){var i=new n(t,r||this),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.once=function(e,t,r){var i=new n(t,r||this,!0),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.removeListener=function(e,n,r,i){var s=o?o+e:e;if(!this._events[s])return this;if(!n)return 0==--this._eventsCount?this._events=new t:delete this._events[s],this;var u=this._events[s];if(u.fn)u.fn!==n||i&&!u.once||r&&u.context!==r||(0==--this._eventsCount?this._events=new t:delete this._events[s]);else{for(var a=0,l=[],c=u.length;a<c;a++)(u[a].fn!==n||i&&!u[a].once||r&&u[a].context!==r)&&l.push(u[a]);l.length?this._events[s]=1===l.length?l[0]:l:0==--this._eventsCount?this._events=new t:delete this._events[s]}return this},r.prototype.removeAllListeners=function(e){var n;return e?(n=o?o+e:e,this._events[n]&&(0==--this._eventsCount?this._events=new t:delete this._events[n])):(this._events=new t,this._eventsCount=0),this},r.prototype.off=r.prototype.removeListener,r.prototype.addListener=r.prototype.on,r.prototype.setMaxListeners=function(){return this},r.prefixed=o,r.EventEmitter=r,e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e){return e}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(10),u=function(e){return e&&e.__esModule?e:{default:e}}(s),a=function(){function e(t){r(this,e),this.props=t,this.cache=t.cache?{}:null}return o(e,[{key:"destroy",value:function(){return this.cache=null,this}},{key:"buildQuery",value:function(e){if("function"==typeof this.props.context){var t=this.props.context(e);if("string"==typeof t)e=t;else if(!t)return null}var n=this.matchText(e);return n?new u.default(this,n[this.index],n):null}},{key:"search",value:function(e,t,n){this.cache?this.searchWithCache(e,t,n):this.props.search(e,t,n)}},{key:"replace",value:function(e){return this.props.replace(e)}},{key:"searchWithCache",value:function(e,t,n){var r=this;this.cache&&this.cache[e]?t(this.cache[e]):this.props.search(e,function(n){r.cache&&(r.cache[e]=n),t(n)},n)}},{key:"matchText",value:function(e){return"function"==typeof this.match?this.match(e):e.match(this.match)}},{key:"match",get:function(){return this.props.match}},{key:"index",get:function(){return"number"==typeof this.props.index?this.props.index:2}},{key:"template",get:function(){return this.props.template||i}}]),e}();t.default=a},function(e,t){"use strict";function n(e){var t=e.getBoundingClientRect(),n=e.ownerDocument,r=n.defaultView,i=n.documentElement,o={top:t.top+r.pageYOffset,left:t.left+r.pageXOffset};return i&&(o.top-=i.clientTop,o.left-=i.clientLeft),o}function r(e){return e>=o&&e<=s}function i(e){var t=window.getComputedStyle(e);if(r(t.lineHeight.charCodeAt(0)))return r(t.lineHeight.charCodeAt(t.lineHeight.length-1))?parseFloat(t.lineHeight)*parseFloat(t.fontSize):parseFloat(t.lineHeight);var n=document.body;if(!n)return 0;var i=document.createElement(e.nodeName);i.innerHTML=" ",i.style.fontSize=t.fontSize,i.style.fontFamily=t.fontFamily,n.appendChild(i);var o=i.offsetHeight;return n.removeChild(i),o}Object.defineProperty(t,"__esModule",{value:!0}),t.calculateElementOffset=n,t.getLineHeightPx=i;var o=(t.createCustomEvent=function(){return"function"==typeof window.CustomEvent?function(e,t){return new document.defaultView.CustomEvent(e,{cancelable:t&&t.cancelable||!1,detail:t&&t.detail||void 0})}:function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,!1,t&&t.cancelable||!1,t&&t.detail||void 0),n}}(),"0".charCodeAt(0)),s="9".charCodeAt(0)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(3),h=n(0),f=(r(h),function(e){function t(){return i(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return s(t,e),u(t,[{key:"destroy",value:function(){return this}},{key:"applySearchResult",value:function(){throw new Error("Not implemented.")}},{key:"getCursorOffset",value:function(){throw new Error("Not implemented.")}},{key:"getBeforeCursor",value:function(){throw new Error("Not implemented.")}},{key:"emitMoveEvent",value:function(e){var t=(0,c.createCustomEvent)("move",{cancelable:!0,detail:{code:e}});return this.emit("move",t),t}},{key:"emitEnterEvent",value:function(){var e=(0,c.createCustomEvent)("enter",{cancelable:!0});return this.emit("enter",e),e}},{key:"emitChangeEvent",value:function(){var e=(0,c.createCustomEvent)("change",{detail:{beforeCursor:this.getBeforeCursor()}});return this.emit("change",e),e}},{key:"emitEscEvent",value:function(){var e=(0,c.createCustomEvent)("esc",{cancelable:!0});return this.emit("esc",e),e}},{key:"getCode",value:function(e){return 9===e.keyCode?"ENTER":13===e.keyCode?"ENTER":27===e.keyCode?"ESC":38===e.keyCode?"UP":40===e.keyCode?"DOWN":78===e.keyCode&&e.ctrlKey?"DOWN":80===e.keyCode&&e.ctrlKey?"UP":"OTHER"}}]),t}(l.default));t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(11),h=r(c),f=n(0),d=(r(f),n(3)),p="dropdown-menu textcomplete-dropdown",v=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));n.shown=!1,n.items=[],n.footer=e.footer,n.header=e.header,n.maxCount=e.maxCount||10,n.el.className=e.className||p,n.rotate=!e.hasOwnProperty("rotate")||e.rotate,n.placement=e.placement;var r=e.style;return r&&Object.keys(r).forEach(function(e){n.el.style[e]=r[e]}),n}return s(t,e),u(t,null,[{key:"createElement",value:function(){var e=document.createElement("ul"),t=e.style;t.display="none",t.position="absolute",t.zIndex="10000";var n=document.body;return n&&n.appendChild(e),e}}]),u(t,[{key:"destroy",value:function(){var e=this.el.parentNode;return e&&e.removeChild(this.el),this.clear()._el=null,this}},{key:"render",value:function(e,t){var n=(0,d.createCustomEvent)("render",{cancelable:!0});if(this.emit("render",n),n.defaultPrevented)return this;var r=e.map(function(e){return e.data}),i=e.slice(0,this.maxCount||e.length).map(function(e){return new h.default(e)});return this.clear().setStrategyId(e[0]).renderEdge(r,"header").append(i).renderEdge(r,"footer").setOffset(t).show(),this.emit("rendered",(0,d.createCustomEvent)("rendered")),this}},{key:"deactivate",value:function(){return this.hide().clear()}},{key:"select",value:function(e){var t={searchResult:e.searchResult},n=(0,d.createCustomEvent)("select",{cancelable:!0,detail:t});return this.emit("select",n),n.defaultPrevented?this:(this.deactivate(),this.emit("selected",(0,d.createCustomEvent)("selected",{detail:t})),this)}},{key:"up",value:function(e){return this.shown?this.moveActiveItem("prev",e):this}},{key:"down",value:function(e){return this.shown?this.moveActiveItem("next",e):this}},{key:"getActiveItem",value:function(){return this.items.find(function(e){return e.active})}},{key:"append",value:function(e){var t=this,n=document.createDocumentFragment();return e.forEach(function(e){t.items.push(e),e.appended(t),n.appendChild(e.el)}),this.el.appendChild(n),this}},{key:"setOffset",value:function(e){if(e.left?this.el.style.left=e.left+"px":e.right&&(this.el.style.right=e.right+"px"),this.isPlacementTop()){var t=document.documentElement;t&&(this.el.style.bottom=t.clientHeight-e.top+e.lineHeight+"px")}else this.el.style.top=e.top+"px";return this}},{key:"show",value:function(){if(!this.shown){var e=(0,d.createCustomEvent)("show",{cancelable:!0});if(this.emit("show",e),e.defaultPrevented)return this;this.el.style.display="block",this.shown=!0,this.emit("shown",(0,d.createCustomEvent)("shown"))}return this}},{key:"hide",value:function(){if(this.shown){var e=(0,d.createCustomEvent)("hide",{cancelable:!0});if(this.emit("hide",e),e.defaultPrevented)return this;this.el.style.display="none",this.shown=!1,this.emit("hidden",(0,d.createCustomEvent)("hidden"))}return this}},{key:"clear",value:function(){return this.el.innerHTML="",this.items.forEach(function(e){return e.destroy()}),this.items=[],this}},{key:"moveActiveItem",value:function(e,t){var n=this.getActiveItem(),r=void 0;return r=n?n[e]:"next"===e?this.items[0]:this.items[this.items.length-1],r&&(r.activate(),t.preventDefault()),this}},{key:"setStrategyId",value:function(e){var t=e&&e.strategy.props.id;return t?this.el.setAttribute("data-strategy",t):this.el.removeAttribute("data-strategy"),this}},{key:"renderEdge",value:function(e,t){var n=("header"===t?this.header:this.footer)||"",r="function"==typeof n?n(e):n,i=document.createElement("li");return i.classList.add("textcomplete-"+t),i.innerHTML=r,this.el.appendChild(i),this}},{key:"isPlacementTop",value:function(){return"top"===this.placement}},{key:"el",get:function(){return this._el||(this._el=t.createElement()),this._el}}]),t}(l.default);t.default=v},function(e,t,n){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var r=n(8),i=t(r),o=n(12),s=t(o),u=void 0;u=e.Textcomplete&&e.Textcomplete.editors?e.Textcomplete.editors:{},u.Textarea=s.default,e.Textcomplete=i.default,e.Textcomplete.editors=u}).call(t,n(7))},function(e){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(9),l=r(a),c=n(4),h=(r(c),n(5)),f=r(h),d=n(2),p=r(d),v=n(0),y=(r(v),n(1)),m=r(y),g=["handleChange","handleEnter","handleEsc","handleHit","handleMove","handleSelect"],b=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.completer=new l.default,r.isQueryInFlight=!1,r.nextPendingQuery=null,r.dropdown=new f.default(n.dropdown||{}),r.editor=e,r.options=n,g.forEach(function(e){r[e]=r[e].bind(r)}),r.startListening(),r}return s(t,e),u(t,[{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.completer.destroy(),this.dropdown.destroy(),e&&this.editor.destroy(),this.stopListening(),this}},{key:"register",value:function(e){var t=this;return e.forEach(function(e){t.completer.registerStrategy(new p.default(e))}),this}},{key:"trigger",value:function(e){return this.isQueryInFlight?this.nextPendingQuery=e:(this.isQueryInFlight=!0,this.nextPendingQuery=null,this.completer.run(e)),this}},{key:"handleHit",value:function(e){var t=e.searchResults;t.length?this.dropdown.render(t,this.editor.getCursorOffset()):this.dropdown.deactivate(),this.isQueryInFlight=!1,null!==this.nextPendingQuery&&this.trigger(this.nextPendingQuery)}},{key:"handleMove",value:function(e){"UP"===e.detail.code?this.dropdown.up(e):this.dropdown.down(e)}},{key:"handleEnter",value:function(e){var t=this.dropdown.getActiveItem();t?(this.dropdown.select(t),e.preventDefault()):this.dropdown.deactivate()}},{key:"handleEsc",value:function(e){this.dropdown.shown&&(this.dropdown.deactivate(),e.preventDefault())}},{key:"handleChange",value:function(e){null!=e.detail.beforeCursor?this.trigger(e.detail.beforeCursor):this.dropdown.deactivate()}},{key:"handleSelect",value:function(e){this.emit("select",e),e.defaultPrevented||this.editor.applySearchResult(e.detail.searchResult)}},{key:"startListening",value:function(){var e=this;this.editor.on("move",this.handleMove).on("enter",this.handleEnter).on("esc",this.handleEsc).on("change",this.handleChange),this.dropdown.on("select",this.handleSelect),["show","shown","render","rendered","selected","hidden","hide"].forEach(function(t){e.dropdown.on(t,function(){return e.emit(t)})}),this.completer.on("hit",this.handleHit)}},{key:"stopListening",value:function(){this.completer.removeAllListeners(),this.dropdown.removeAllListeners(),this.editor.removeListener("move",this.handleMove).removeListener("enter",this.handleEnter).removeListener("esc",this.handleEsc).removeListener("change",this.handleChange)}}]),t}(m.default);t.default=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(2),h=(r(c),n(0)),f=(r(h),["handleQueryResult"]),d=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.strategies=[],f.forEach(function(t){e[t]=e[t].bind(e)}),e}return s(t,e),u(t,[{key:"destroy",value:function(){return this.strategies.forEach(function(e){return e.destroy()}),this}},{key:"registerStrategy",value:function(e){return this.strategies.push(e),this}},{key:"run",value:function(e){var t=this.extractQuery(e);t?t.execute(this.handleQueryResult):this.handleQueryResult([])}},{key:"extractQuery",value:function(e){for(var t=0;t<this.strategies.length;t++){var n=this.strategies[t].buildQuery(e);if(n)return n}return null}},{key:"handleQueryResult",value:function(e){this.emit("hit",{searchResults:e})}}]),t}(l.default);t.default=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(0),u=r(s),a=n(2),l=(r(a),function(){function e(t,n,r){i(this,e),this.strategy=t,this.term=n,this.match=r}return o(e,[{key:"execute",value:function(e){var t=this;this.strategy.search(this.term,function(n){e(n.map(function(e){return new u.default(e,t.term,t.strategy)}))},this.match)}}]),e}());t.default=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.CLASS_NAME=void 0;var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(5),u=(r(s),n(0)),a=(r(u),t.CLASS_NAME="textcomplete-item"),l=a+" active",c=["onClick","onMouseover"],h=function(){function e(t){var n=this;i(this,e),this.searchResult=t,this.active=!1,c.forEach(function(e){n[e]=n[e].bind(n)})}return o(e,[{key:"destroy",value:function(){this.el.removeEventListener("mousedown",this.onClick,!1),this.el.removeEventListener("mouseover",this.onMouseover,!1),this.el.removeEventListener("touchstart",this.onClick,!1),this._el=null}},{key:"appended",value:function(e){this.dropdown=e,this.siblings=e.items,this.index=this.siblings.length-1}},{key:"activate",value:function(){if(!this.active){var e=this.dropdown.getActiveItem();e&&e.deactivate(),this.active=!0,this.el.className=l}return this}},{key:"deactivate",value:function(){return this.active&&(this.active=!1,this.el.className=a),this}},{key:"onClick",value:function(e){e.preventDefault(),this.dropdown.select(this)}},{key:"onMouseover",value:function(){this.activate()}},{key:"el",get:function(){if(this._el)return this._el;var e=document.createElement("li");e.className=this.active?l:a;var t=document.createElement("a");return t.innerHTML=this.searchResult.render(),e.appendChild(t),this._el=e,e.addEventListener("mousedown",this.onClick),e.addEventListener("mouseover",this.onMouseover),e.addEventListener("touchstart",this.onClick),e}},{key:"next",get:function(){var e=void 0;if(this.index===this.siblings.length-1){if(!this.dropdown.rotate)return null;e=0}else e=this.index+1;return this.siblings[e]}},{key:"prev",get:function(){var e=void 0;if(0===this.index){if(!this.dropdown.rotate)return null;e=this.siblings.length-1}else e=this.index-1;return this.siblings[e]}}]),e}();t.default=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(r)},l=n(13),c=r(l),h=n(4),f=r(h),d=n(3),p=n(0),v=(r(p),n(14)),y=["onInput","onKeydown"],m=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.el=e,y.forEach(function(e){n[e]=n[e].bind(n)}),n.startListening(),n}return s(t,e),u(t,[{key:"destroy",value:function(){return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this),this.stopListening(),this.el=null,this}},{key:"applySearchResult",value:function(e){var t=this.getBeforeCursor();if(null!=t){var n=e.replace(t,this.getAfterCursor());this.el.focus(),Array.isArray(n)&&((0,c.default)(this.el,n[0],n[1]),this.el.dispatchEvent(new Event("input")))}}},{key:"getCursorOffset",value:function(){var e=(0,d.calculateElementOffset)(this.el),t=this.getElScroll(),n=this.getCursorPosition(),r=(0,d.getLineHeightPx)(this.el),i=e.top-t.top+n.top+r,o=e.left-t.left+n.left;return"rtl"!==this.el.dir?{top:i,left:o,lineHeight:r}:{top:i,right:document.documentElement?document.documentElement.clientWidth-o:0,lineHeight:r}}},{key:"getBeforeCursor",value:function(){return this.el.selectionStart!==this.el.selectionEnd?null:this.el.value.substring(0,this.el.selectionEnd)}},{key:"getAfterCursor",value:function(){return this.el.value.substring(this.el.selectionEnd)}},{key:"getElScroll",value:function(){return{top:this.el.scrollTop,left:this.el.scrollLeft}}},{key:"getCursorPosition",value:function(){return v(this.el,this.el.selectionEnd)}},{key:"onInput",value:function(){this.emitChangeEvent()}},{key:"onKeydown",value:function(e){var t=this.getCode(e),n=void 0;"UP"===t||"DOWN"===t?n=this.emitMoveEvent(t):"ENTER"===t?n=this.emitEnterEvent():"ESC"===t&&(n=this.emitEscEvent()),n&&n.defaultPrevented&&e.preventDefault()}},{key:"startListening",value:function(){this.el.addEventListener("input",this.onInput),this.el.addEventListener("keydown",this.onKeydown)}},{key:"stopListening",value:function(){this.el.removeEventListener("input",this.onInput),this.el.removeEventListener("keydown",this.onKeydown)}}]),t}(f.default);t.default=m},function(e,t){"use strict";function n(){if("undefined"!=typeof Event)return new Event("input",{bubbles:!0,cancelable:!0});var e=document.createEvent("Event");return e.initEvent("input",!0,!0),e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){for(var i=e.value,o=t+(r||""),s=document.activeElement,u=0,a=0;i[u]===o[u];)u++;for(;i[i.length-a-1]===o[o.length-a-1];)a++;u=Math.min(u,Math.min(i.length,o.length)-a),e.setSelectionRange(u,i.length-a);var l=o.substring(u,o.length-a);return e.focus(),document.execCommand("insertText",!1,l)||(e.value=o,e.dispatchEvent(n())),e.setSelectionRange(t.length,t.length),s&&s.focus(),e}},function(e){!function(){function t(e,t,o){if(!r)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");var s=o&&o.debug||!1;if(s){var u=document.querySelector("#input-textarea-caret-position-mirror-div");u&&u.parentNode.removeChild(u)}var a=document.createElement("div");a.id="input-textarea-caret-position-mirror-div",document.body.appendChild(a);var l=a.style,c=window.getComputedStyle?getComputedStyle(e):e.currentStyle;l.whiteSpace="pre-wrap","INPUT"!==e.nodeName&&(l.wordWrap="break-word"),l.position="absolute",s||(l.visibility="hidden"),n.forEach(function(e){l[e]=c[e]}),i?e.scrollHeight>parseInt(c.height)&&(l.overflowY="scroll"):l.overflow="hidden",a.textContent=e.value.substring(0,t),"INPUT"===e.nodeName&&(a.textContent=a.textContent.replace(/\s/g," "));var h=document.createElement("span");h.textContent=e.value.substring(t)||".",a.appendChild(h);var f={top:h.offsetTop+parseInt(c.borderTopWidth),left:h.offsetLeft+parseInt(c.borderLeftWidth)};return s?h.style.backgroundColor="#aaa":document.body.removeChild(a),f}var n=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r="undefined"!=typeof window,i=r&&null!=window.mozInnerScreenX;void 0!==e&&void 0!==e.exports?e.exports=t:r&&(window.getCaretCoordinates=t)}()}]);
|
1
|
+
/** https://unpkg.com/textcomplete@0.14.5/dist/textcomplete.min.js **/
|
2
|
+
!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(2),s=(function(e){e&&e.__esModule}(o),function(){function e(t,n,i){r(this,e),this.data=t,this.term=n,this.strategy=i}return i(e,[{key:"replace",value:function(e,t){var n=this.strategy.replace(this.data);if(null!==n){Array.isArray(n)&&(t=n[1]+t,n=n[0]);var r=this.strategy.matchText(e);if(r)return n=n.replace(/\$&/g,r[0]).replace(/\$(\d)/g,function(e,t){return r[parseInt(t,10)]}),[[e.slice(0,r.index),n,e.slice(r.index+r[0].length)].join(""),t]}}},{key:"render",value:function(){return this.strategy.template(this.data,this.term)}}]),e}());t.default=s},function(e){"use strict";function t(){}function n(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function r(){this._events=new t,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,o="~";Object.create&&(t.prototype=Object.create(null),(new t).__proto__||(o=!1)),r.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)i.call(e,t)&&n.push(o?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},r.prototype.listeners=function(e,t){var n=o?o+e:e,r=this._events[n];if(t)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,u=new Array(s);i<s;i++)u[i]=r[i].fn;return u},r.prototype.emit=function(e,t,n,r,i,s){var u=o?o+e:e;if(!this._events[u])return!1;var a,l,c=this._events[u],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,r),!0;case 5:return c.fn.call(c.context,t,n,r,i),!0;case 6:return c.fn.call(c.context,t,n,r,i,s),!0}for(l=1,a=new Array(h-1);l<h;l++)a[l-1]=arguments[l];c.fn.apply(c.context,a)}else{var f,d=c.length;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),h){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,n);break;case 4:c[l].fn.call(c[l].context,t,n,r);break;default:if(!a)for(f=1,a=new Array(h-1);f<h;f++)a[f-1]=arguments[f];c[l].fn.apply(c[l].context,a)}}return!0},r.prototype.on=function(e,t,r){var i=new n(t,r||this),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.once=function(e,t,r){var i=new n(t,r||this,!0),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.removeListener=function(e,n,r,i){var s=o?o+e:e;if(!this._events[s])return this;if(!n)return 0==--this._eventsCount?this._events=new t:delete this._events[s],this;var u=this._events[s];if(u.fn)u.fn!==n||i&&!u.once||r&&u.context!==r||(0==--this._eventsCount?this._events=new t:delete this._events[s]);else{for(var a=0,l=[],c=u.length;a<c;a++)(u[a].fn!==n||i&&!u[a].once||r&&u[a].context!==r)&&l.push(u[a]);l.length?this._events[s]=1===l.length?l[0]:l:0==--this._eventsCount?this._events=new t:delete this._events[s]}return this},r.prototype.removeAllListeners=function(e){var n;return e?(n=o?o+e:e,this._events[n]&&(0==--this._eventsCount?this._events=new t:delete this._events[n])):(this._events=new t,this._eventsCount=0),this},r.prototype.off=r.prototype.removeListener,r.prototype.addListener=r.prototype.on,r.prototype.setMaxListeners=function(){return this},r.prefixed=o,r.EventEmitter=r,e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e){return e}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(10),u=function(e){return e&&e.__esModule?e:{default:e}}(s),a=function(){function e(t){r(this,e),this.props=t,this.cache=t.cache?{}:null}return o(e,[{key:"destroy",value:function(){return this.cache=null,this}},{key:"buildQuery",value:function(e){if("function"==typeof this.props.context){var t=this.props.context(e);if("string"==typeof t)e=t;else if(!t)return null}var n=this.matchText(e);return n?new u.default(this,n[this.index],n):null}},{key:"search",value:function(e,t,n){this.cache?this.searchWithCache(e,t,n):this.props.search(e,t,n)}},{key:"replace",value:function(e){return this.props.replace(e)}},{key:"searchWithCache",value:function(e,t,n){var r=this;this.cache&&this.cache[e]?t(this.cache[e]):this.props.search(e,function(n){r.cache&&(r.cache[e]=n),t(n)},n)}},{key:"matchText",value:function(e){return"function"==typeof this.match?this.match(e):e.match(this.match)}},{key:"match",get:function(){return this.props.match}},{key:"index",get:function(){return"number"==typeof this.props.index?this.props.index:2}},{key:"template",get:function(){return this.props.template||i}}]),e}();t.default=a},function(e,t){"use strict";function n(e){var t=e.getBoundingClientRect(),n=e.ownerDocument,r=n.defaultView,i=n.documentElement,o={top:t.top+r.pageYOffset,left:t.left+r.pageXOffset};return i&&(o.top-=i.clientTop,o.left-=i.clientLeft),o}function r(e){return e>=o&&e<=s}function i(e){var t=window.getComputedStyle(e);if(r(t.lineHeight.charCodeAt(0)))return r(t.lineHeight.charCodeAt(t.lineHeight.length-1))?parseFloat(t.lineHeight)*parseFloat(t.fontSize):parseFloat(t.lineHeight);var n=document.body;if(!n)return 0;var i=document.createElement(e.nodeName);i.innerHTML=" ",i.style.fontSize=t.fontSize,i.style.fontFamily=t.fontFamily,n.appendChild(i);var o=i.offsetHeight;return n.removeChild(i),o}Object.defineProperty(t,"__esModule",{value:!0}),t.calculateElementOffset=n,t.getLineHeightPx=i;var o=(t.createCustomEvent=function(){return"function"==typeof window.CustomEvent?function(e,t){return new document.defaultView.CustomEvent(e,{cancelable:t&&t.cancelable||!1,detail:t&&t.detail||void 0})}:function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,!1,t&&t.cancelable||!1,t&&t.detail||void 0),n}}(),"0".charCodeAt(0)),s="9".charCodeAt(0)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(3),h=n(0),f=(r(h),function(e){function t(){return i(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return s(t,e),u(t,[{key:"destroy",value:function(){return this}},{key:"applySearchResult",value:function(){throw new Error("Not implemented.")}},{key:"getCursorOffset",value:function(){throw new Error("Not implemented.")}},{key:"getBeforeCursor",value:function(){throw new Error("Not implemented.")}},{key:"emitMoveEvent",value:function(e){var t=(0,c.createCustomEvent)("move",{cancelable:!0,detail:{code:e}});return this.emit("move",t),t}},{key:"emitEnterEvent",value:function(){var e=(0,c.createCustomEvent)("enter",{cancelable:!0});return this.emit("enter",e),e}},{key:"emitChangeEvent",value:function(){var e=(0,c.createCustomEvent)("change",{detail:{beforeCursor:this.getBeforeCursor()}});return this.emit("change",e),e}},{key:"emitEscEvent",value:function(){var e=(0,c.createCustomEvent)("esc",{cancelable:!0});return this.emit("esc",e),e}},{key:"getCode",value:function(e){return 9===e.keyCode?"ENTER":13===e.keyCode?"ENTER":27===e.keyCode?"ESC":38===e.keyCode?"UP":40===e.keyCode?"DOWN":78===e.keyCode&&e.ctrlKey?"DOWN":80===e.keyCode&&e.ctrlKey?"UP":"OTHER"}}]),t}(l.default));t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(11),h=r(c),f=n(0),d=(r(f),n(3)),p="dropdown-menu textcomplete-dropdown",v=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));n.shown=!1,n.items=[],n.activeItem=null,n.footer=e.footer,n.header=e.header,n.maxCount=e.maxCount||10,n.el.className=e.className||p,n.rotate=!e.hasOwnProperty("rotate")||e.rotate,n.placement=e.placement;var r=e.style;return r&&Object.keys(r).forEach(function(e){n.el.style[e]=r[e]}),n}return s(t,e),u(t,null,[{key:"createElement",value:function(){var e=document.createElement("ul"),t=e.style;t.display="none",t.position="absolute",t.zIndex="10000";var n=document.body;return n&&n.appendChild(e),e}}]),u(t,[{key:"destroy",value:function(){var e=this.el.parentNode;return e&&e.removeChild(this.el),this.clear()._el=null,this}},{key:"render",value:function(e,t){var n=(0,d.createCustomEvent)("render",{cancelable:!0});if(this.emit("render",n),n.defaultPrevented)return this;var r=e.map(function(e){return e.data}),i=e.slice(0,this.maxCount||e.length).map(function(e){return new h.default(e)});return this.clear().setStrategyId(e[0]).renderEdge(r,"header").append(i).renderEdge(r,"footer").setOffset(t).show(),this.emit("rendered",(0,d.createCustomEvent)("rendered")),this}},{key:"deactivate",value:function(){return this.hide().clear()}},{key:"select",value:function(e){var t={searchResult:e.searchResult},n=(0,d.createCustomEvent)("select",{cancelable:!0,detail:t});return this.emit("select",n),n.defaultPrevented?this:(this.deactivate(),this.emit("selected",(0,d.createCustomEvent)("selected",{detail:t})),this)}},{key:"up",value:function(e){return this.shown?this.moveActiveItem("prev",e):this}},{key:"down",value:function(e){return this.shown?this.moveActiveItem("next",e):this}},{key:"getActiveItem",value:function(){return this.activeItem}},{key:"append",value:function(e){var t=this,n=document.createDocumentFragment();return e.forEach(function(e){t.items.push(e),e.appended(t),n.appendChild(e.el)}),this.el.appendChild(n),this}},{key:"setOffset",value:function(e){if(e.left?this.el.style.left=e.left+"px":e.right&&(this.el.style.right=e.right+"px"),this.isPlacementTop()){var t=document.documentElement;t&&(this.el.style.bottom=t.clientHeight-e.top+e.lineHeight+"px")}else this.el.style.top=e.top+"px";return this}},{key:"show",value:function(){if(!this.shown){var e=(0,d.createCustomEvent)("show",{cancelable:!0});if(this.emit("show",e),e.defaultPrevented)return this;this.el.style.display="block",this.shown=!0,this.emit("shown",(0,d.createCustomEvent)("shown"))}return this}},{key:"hide",value:function(){if(this.shown){var e=(0,d.createCustomEvent)("hide",{cancelable:!0});if(this.emit("hide",e),e.defaultPrevented)return this;this.el.style.display="none",this.shown=!1,this.emit("hidden",(0,d.createCustomEvent)("hidden"))}return this}},{key:"clear",value:function(){return this.el.innerHTML="",this.items.forEach(function(e){return e.destroy()}),this.items=[],this}},{key:"moveActiveItem",value:function(e,t){var n="next"===e?this.activeItem?this.activeItem.next:this.items[0]:this.activeItem?this.activeItem.prev:this.items[this.items.length-1];return n&&(n.activate(),t.preventDefault()),this}},{key:"setStrategyId",value:function(e){var t=e&&e.strategy.props.id;return t?this.el.setAttribute("data-strategy",t):this.el.removeAttribute("data-strategy"),this}},{key:"renderEdge",value:function(e,t){var n=("header"===t?this.header:this.footer)||"",r="function"==typeof n?n(e):n,i=document.createElement("li");return i.classList.add("textcomplete-"+t),i.innerHTML=r,this.el.appendChild(i),this}},{key:"isPlacementTop",value:function(){return"top"===this.placement}},{key:"el",get:function(){return this._el||(this._el=t.createElement()),this._el}}]),t}(l.default);t.default=v},function(e,t,n){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var r=n(8),i=t(r),o=n(12),s=t(o),u=void 0;u=e.Textcomplete&&e.Textcomplete.editors?e.Textcomplete.editors:{},u.Textarea=s.default,e.Textcomplete=i.default,e.Textcomplete.editors=u}).call(t,n(7))},function(e){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(9),l=r(a),c=n(4),h=(r(c),n(5)),f=r(h),d=n(2),p=r(d),v=n(0),y=(r(v),n(1)),m=r(y),g=["handleChange","handleEnter","handleEsc","handleHit","handleMove","handleSelect"],b=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.completer=new l.default,r.isQueryInFlight=!1,r.nextPendingQuery=null,r.dropdown=new f.default(n.dropdown||{}),r.editor=e,r.options=n,g.forEach(function(e){r[e]=r[e].bind(r)}),r.startListening(),r}return s(t,e),u(t,[{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.completer.destroy(),this.dropdown.destroy(),e&&this.editor.destroy(),this.stopListening(),this}},{key:"register",value:function(e){var t=this;return e.forEach(function(e){t.completer.registerStrategy(new p.default(e))}),this}},{key:"trigger",value:function(e){return this.isQueryInFlight?this.nextPendingQuery=e:(this.isQueryInFlight=!0,this.nextPendingQuery=null,this.completer.run(e)),this}},{key:"handleHit",value:function(e){var t=e.searchResults;t.length?this.dropdown.render(t,this.editor.getCursorOffset()):this.dropdown.deactivate(),this.isQueryInFlight=!1,null!==this.nextPendingQuery&&this.trigger(this.nextPendingQuery)}},{key:"handleMove",value:function(e){"UP"===e.detail.code?this.dropdown.up(e):this.dropdown.down(e)}},{key:"handleEnter",value:function(e){var t=this.dropdown.getActiveItem();t?(this.dropdown.select(t),e.preventDefault()):this.dropdown.deactivate()}},{key:"handleEsc",value:function(e){this.dropdown.shown&&(this.dropdown.deactivate(),e.preventDefault())}},{key:"handleChange",value:function(e){null!=e.detail.beforeCursor?this.trigger(e.detail.beforeCursor):this.dropdown.deactivate()}},{key:"handleSelect",value:function(e){this.emit("select",e),e.defaultPrevented||this.editor.applySearchResult(e.detail.searchResult)}},{key:"startListening",value:function(){var e=this;this.editor.on("move",this.handleMove).on("enter",this.handleEnter).on("esc",this.handleEsc).on("change",this.handleChange),this.dropdown.on("select",this.handleSelect),["show","shown","render","rendered","selected","hidden","hide"].forEach(function(t){e.dropdown.on(t,function(){return e.emit(t)})}),this.completer.on("hit",this.handleHit)}},{key:"stopListening",value:function(){this.completer.removeAllListeners(),this.dropdown.removeAllListeners(),this.editor.removeListener("move",this.handleMove).removeListener("enter",this.handleEnter).removeListener("esc",this.handleEsc).removeListener("change",this.handleChange)}}]),t}(m.default);t.default=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(2),h=(r(c),n(0)),f=(r(h),["handleQueryResult"]),d=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.strategies=[],f.forEach(function(t){e[t]=e[t].bind(e)}),e}return s(t,e),u(t,[{key:"destroy",value:function(){return this.strategies.forEach(function(e){return e.destroy()}),this}},{key:"registerStrategy",value:function(e){return this.strategies.push(e),this}},{key:"run",value:function(e){var t=this.extractQuery(e);t?t.execute(this.handleQueryResult):this.handleQueryResult([])}},{key:"extractQuery",value:function(e){for(var t=0;t<this.strategies.length;t++){var n=this.strategies[t].buildQuery(e);if(n)return n}return null}},{key:"handleQueryResult",value:function(e){this.emit("hit",{searchResults:e})}}]),t}(l.default);t.default=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(0),u=r(s),a=n(2),l=(r(a),function(){function e(t,n,r){i(this,e),this.strategy=t,this.term=n,this.match=r}return o(e,[{key:"execute",value:function(e){var t=this;this.strategy.search(this.term,function(n){e(n.map(function(e){return new u.default(e,t.term,t.strategy)}))},this.match)}}]),e}());t.default=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.CLASS_NAME=void 0;var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(5),u=(r(s),n(0)),a=(r(u),t.CLASS_NAME="textcomplete-item"),l=a+" active",c=["onClick","onMouseover"],h=function(){function e(t){var n=this;i(this,e),this.searchResult=t,this.active=!1,c.forEach(function(e){n[e]=n[e].bind(n)})}return o(e,[{key:"destroy",value:function(){this.el.removeEventListener("mousedown",this.onClick,!1),this.el.removeEventListener("mouseover",this.onMouseover,!1),this.el.removeEventListener("touchstart",this.onClick,!1),this.active&&(this.dropdown.activeItem=null),this._el=null}},{key:"appended",value:function(e){this.dropdown=e,this.siblings=e.items,this.index=this.siblings.length-1}},{key:"activate",value:function(){if(!this.active){var e=this.dropdown.getActiveItem();e&&e.deactivate(),this.dropdown.activeItem=this,this.active=!0,this.el.className=l}return this}},{key:"deactivate",value:function(){return this.active&&(this.active=!1,this.el.className=a,this.dropdown.activeItem=null),this}},{key:"onClick",value:function(e){e.preventDefault(),this.dropdown.select(this)}},{key:"onMouseover",value:function(){this.activate()}},{key:"el",get:function(){if(this._el)return this._el;var e=document.createElement("li");e.className=this.active?l:a;var t=document.createElement("a");return t.innerHTML=this.searchResult.render(),e.appendChild(t),this._el=e,e.addEventListener("mousedown",this.onClick),e.addEventListener("mouseover",this.onMouseover),e.addEventListener("touchstart",this.onClick),e}},{key:"next",get:function(){var e=void 0;if(this.index===this.siblings.length-1){if(!this.dropdown.rotate)return null;e=0}else e=this.index+1;return this.siblings[e]}},{key:"prev",get:function(){var e=void 0;if(0===this.index){if(!this.dropdown.rotate)return null;e=this.siblings.length-1}else e=this.index-1;return this.siblings[e]}}]),e}();t.default=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(r)},l=n(13),c=r(l),h=n(4),f=r(h),d=n(3),p=n(0),v=(r(p),n(14)),y=["onInput","onKeydown"],m=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.el=e,y.forEach(function(e){n[e]=n[e].bind(n)}),n.startListening(),n}return s(t,e),u(t,[{key:"destroy",value:function(){return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this),this.stopListening(),this.el=null,this}},{key:"applySearchResult",value:function(e){var t=this.getBeforeCursor();if(null!=t){var n=e.replace(t,this.getAfterCursor());this.el.focus(),Array.isArray(n)&&((0,c.default)(this.el,n[0],n[1]),this.el.dispatchEvent(new Event("input")))}}},{key:"getCursorOffset",value:function(){var e=(0,d.calculateElementOffset)(this.el),t=this.getElScroll(),n=this.getCursorPosition(),r=(0,d.getLineHeightPx)(this.el),i=e.top-t.top+n.top+r,o=e.left-t.left+n.left;return"rtl"!==this.el.dir?{top:i,left:o,lineHeight:r}:{top:i,right:document.documentElement?document.documentElement.clientWidth-o:0,lineHeight:r}}},{key:"getBeforeCursor",value:function(){return this.el.selectionStart!==this.el.selectionEnd?null:this.el.value.substring(0,this.el.selectionEnd)}},{key:"getAfterCursor",value:function(){return this.el.value.substring(this.el.selectionEnd)}},{key:"getElScroll",value:function(){return{top:this.el.scrollTop,left:this.el.scrollLeft}}},{key:"getCursorPosition",value:function(){return v(this.el,this.el.selectionEnd)}},{key:"onInput",value:function(){this.emitChangeEvent()}},{key:"onKeydown",value:function(e){var t=this.getCode(e),n=void 0;"UP"===t||"DOWN"===t?n=this.emitMoveEvent(t):"ENTER"===t?n=this.emitEnterEvent():"ESC"===t&&(n=this.emitEscEvent()),n&&n.defaultPrevented&&e.preventDefault()}},{key:"startListening",value:function(){this.el.addEventListener("input",this.onInput),this.el.addEventListener("keydown",this.onKeydown)}},{key:"stopListening",value:function(){this.el.removeEventListener("input",this.onInput),this.el.removeEventListener("keydown",this.onKeydown)}}]),t}(f.default);t.default=m},function(e,t){"use strict";function n(){if("undefined"!=typeof Event)return new Event("input",{bubbles:!0,cancelable:!0});var e=document.createEvent("Event");return e.initEvent("input",!0,!0),e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){for(var i=e.value,o=t+(r||""),s=document.activeElement,u=0,a=0;u<i.length&&u<o.length&&i[u]===o[u];)u++;for(;i.length-a-1>=0&&o.length-a-1>=0&&i[i.length-a-1]===o[o.length-a-1];)a++;u=Math.min(u,Math.min(i.length,o.length)-a),e.setSelectionRange(u,i.length-a);var l=o.substring(u,o.length-a);return e.focus(),document.execCommand("insertText",!1,l)||(e.value=o,e.dispatchEvent(n())),e.setSelectionRange(t.length,t.length),s&&s.focus(),e}},function(e){!function(){function t(e,t,o){if(!r)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");var s=o&&o.debug||!1;if(s){var u=document.querySelector("#input-textarea-caret-position-mirror-div");u&&u.parentNode.removeChild(u)}var a=document.createElement("div");a.id="input-textarea-caret-position-mirror-div",document.body.appendChild(a);var l=a.style,c=window.getComputedStyle?getComputedStyle(e):e.currentStyle;l.whiteSpace="pre-wrap","INPUT"!==e.nodeName&&(l.wordWrap="break-word"),l.position="absolute",s||(l.visibility="hidden"),n.forEach(function(e){l[e]=c[e]}),i?e.scrollHeight>parseInt(c.height)&&(l.overflowY="scroll"):l.overflow="hidden",a.textContent=e.value.substring(0,t),"INPUT"===e.nodeName&&(a.textContent=a.textContent.replace(/\s/g," "));var h=document.createElement("span");h.textContent=e.value.substring(t)||".",a.appendChild(h);var f={top:h.offsetTop+parseInt(c.borderTopWidth),left:h.offsetLeft+parseInt(c.borderLeftWidth)};return s?h.style.backgroundColor="#aaa":document.body.removeChild(a),f}var n=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r="undefined"!=typeof window,i=r&&null!=window.mozInnerScreenX;void 0!==e&&void 0!==e.exports?e.exports=t:r&&(window.getCaretCoordinates=t)}()}]);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thredded
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Oliveira
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-12-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pundit
|
@@ -673,6 +673,7 @@ files:
|
|
673
673
|
- app/assets/images/favicons/wikipedia.png
|
674
674
|
- app/assets/images/thredded/breadcrumb-chevron.svg
|
675
675
|
- app/assets/images/thredded/follow.svg
|
676
|
+
- app/assets/images/thredded/lock.svg
|
676
677
|
- app/assets/images/thredded/moderation.svg
|
677
678
|
- app/assets/images/thredded/private-messages.svg
|
678
679
|
- app/assets/images/thredded/settings.svg
|
@@ -872,6 +873,7 @@ files:
|
|
872
873
|
- app/views/thredded/messageboard_groups/new.html.erb
|
873
874
|
- app/views/thredded/messageboards/_form.html.erb
|
874
875
|
- app/views/thredded/messageboards/_messageboard.html.erb
|
876
|
+
- app/views/thredded/messageboards/_messageboard_meta.html.erb
|
875
877
|
- app/views/thredded/messageboards/edit.html.erb
|
876
878
|
- app/views/thredded/messageboards/index.html.erb
|
877
879
|
- app/views/thredded/messageboards/new.html.erb
|
@@ -968,9 +970,10 @@ files:
|
|
968
970
|
- app/views/thredded/users/_link.html.erb
|
969
971
|
- app/views/thredded/users/_post.html.erb
|
970
972
|
- app/views/thredded/users/_posts.html.erb
|
971
|
-
- bin/create_migration_fixture
|
972
973
|
- bin/rails
|
974
|
+
- bin/rubocop
|
973
975
|
- config/i18n-tasks.yml
|
976
|
+
- config/locales/de.yml
|
974
977
|
- config/locales/en.yml
|
975
978
|
- config/locales/es.yml
|
976
979
|
- config/locales/fr.yml
|
@@ -988,6 +991,7 @@ files:
|
|
988
991
|
- db/upgrade_migrations/20170125033319_upgrade_v0_9_to_v0_10.rb
|
989
992
|
- db/upgrade_migrations/20170312131417_upgrade_thredded_v0_10_to_v0_11.rb
|
990
993
|
- db/upgrade_migrations/20170420163138_upgrade_thredded_v0_11_to_v0_12.rb
|
994
|
+
- db/upgrade_migrations/20170811090735_upgrade_thredded_v0_13_to_v_014.rb
|
991
995
|
- lib/generators/thredded/install/USAGE
|
992
996
|
- lib/generators/thredded/install/install_generator.rb
|
993
997
|
- lib/generators/thredded/install/templates/initializer.rb
|
@@ -1035,7 +1039,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1035
1039
|
version: '0'
|
1036
1040
|
requirements: []
|
1037
1041
|
rubyforge_project:
|
1038
|
-
rubygems_version: 2.6.
|
1042
|
+
rubygems_version: 2.6.12
|
1039
1043
|
signing_key:
|
1040
1044
|
specification_version: 4
|
1041
1045
|
summary: The best Rails forums engine ever.
|
@@ -1,23 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
# edit constants in lib/thredded/db_tools.rb
|
4
|
-
# git checkout v0.x.0 -b create-0.x-migration-fixture
|
5
|
-
# bundle
|
6
|
-
|
7
|
-
DIR=$(pwd)
|
8
|
-
|
9
|
-
cd spec/dummy && DB=sqlite3 rails db:environment:set RAILS_ENV=development
|
10
|
-
cd $DIR
|
11
|
-
DB=sqlite3 rake db:drop db:create db:migrate db:miniseed_dump
|
12
|
-
|
13
|
-
cd spec/dummy && DB=postgresql rails db:environment:set RAILS_ENV=development
|
14
|
-
cd $DIR
|
15
|
-
DB=postgresql rake db:drop db:create db:migrate db:miniseed_dump
|
16
|
-
|
17
|
-
cd spec/dummy && DB=mysql2 rails db:environment:set RAILS_ENV=development
|
18
|
-
cd $DIR
|
19
|
-
DB=mysql2 rake db:drop db:create db:migrate db:miniseed_dump
|
20
|
-
|
21
|
-
git add `pwd`/spec/migration/*.dump
|
22
|
-
|
23
|
-
git commit -em "add sample data for 0.8 base for migration spec"
|