DEV: upgrades from Ember 2.13 to Ember 3.5.1 (#6808)

Co-Authored-By: Bianca Nenciu <nbianca@users.noreply.github.com>
Co-Authored-By: David Taylor <david@taylorhq.com>
This commit is contained in:
Joffrey JAFFEUX
2019-01-10 11:06:01 +01:00
committed by GitHub
parent 7896c74c2b
commit f9648de897
318 changed files with 1684 additions and 1462 deletions

View File

@ -41,8 +41,8 @@ gem 'onebox', '1.8.76'
gem 'http_accept_language', '~>2.0.5', require: false gem 'http_accept_language', '~>2.0.5', require: false
gem 'ember-rails', '0.18.5' gem 'ember-rails', '0.18.5'
gem 'ember-source', '2.13.3' gem 'discourse-ember-source', '~> 3.5.1'
gem 'ember-handlebars-template', '0.7.5' gem 'ember-handlebars-template', '0.8.0'
gem 'barber' gem 'barber'
# message bus 2.2.0 should be very stable # message bus 2.2.0 should be very stable

View File

@ -83,7 +83,7 @@ GEM
open4 (~> 1.3) open4 (~> 1.3)
coderay (1.1.2) coderay (1.1.2)
colored2 (3.1.2) colored2 (3.1.2)
concurrent-ruby (1.1.3) concurrent-ruby (1.1.4)
connection_pool (2.2.2) connection_pool (2.2.2)
cork (0.3.0) cork (0.3.0)
colored2 (~> 3.1) colored2 (~> 3.1)
@ -105,6 +105,7 @@ GEM
terminal-table (~> 1) terminal-table (~> 1)
debug_inspector (0.0.3) debug_inspector (0.0.3)
diff-lcs (1.3) diff-lcs (1.3)
discourse-ember-source (3.5.1.3)
discourse_image_optim (0.26.2) discourse_image_optim (0.26.2)
exifr (~> 1.2, >= 1.2.2) exifr (~> 1.2, >= 1.2.2)
fspath (~> 3.0) fspath (~> 3.0)
@ -114,9 +115,9 @@ GEM
email_reply_trimmer (0.1.12) email_reply_trimmer (0.1.12)
ember-data-source (3.0.2) ember-data-source (3.0.2)
ember-source (>= 2, < 3.0) ember-source (>= 2, < 3.0)
ember-handlebars-template (0.7.5) ember-handlebars-template (0.8.0)
barber (>= 0.11.0) barber (>= 0.11.0)
sprockets (>= 3.3, < 4) sprockets (>= 3.3, < 4.1)
ember-rails (0.18.5) ember-rails (0.18.5)
active_model_serializers active_model_serializers
ember-data-source (>= 1.0.0.beta.5) ember-data-source (>= 1.0.0.beta.5)
@ -124,7 +125,7 @@ GEM
ember-source (>= 1.1.0) ember-source (>= 1.1.0)
jquery-rails (>= 1.0.17) jquery-rails (>= 1.0.17)
railties (>= 3.1) railties (>= 3.1)
ember-source (2.13.3) ember-source (2.18.2)
erubi (1.7.1) erubi (1.7.1)
excon (0.62.0) excon (0.62.0)
execjs (2.7.0) execjs (2.7.0)
@ -462,11 +463,11 @@ DEPENDENCIES
colored2 colored2
cppjieba_rb cppjieba_rb
danger danger
discourse-ember-source (~> 3.5.1)
discourse_image_optim discourse_image_optim
email_reply_trimmer (~> 0.1) email_reply_trimmer (~> 0.1)
ember-handlebars-template (= 0.7.5) ember-handlebars-template (= 0.8.0)
ember-rails (= 0.18.5) ember-rails (= 0.18.5)
ember-source (= 2.13.3)
excon excon
execjs execjs
fabrication fabrication

View File

@ -83,26 +83,14 @@ export default Ember.Component.extend(bufferedProperty("userField"), {
.catch(popupAjaxError); .catch(popupAjaxError);
}, },
moveUp() {
this.sendAction("moveUpAction", this.get("userField"));
},
moveDown() {
this.sendAction("moveDownAction", this.get("userField"));
},
edit() { edit() {
this.set("editing", true); this.set("editing", true);
}, },
destroy() {
this.sendAction("destroyAction", this.get("userField"));
},
cancel() { cancel() {
const id = this.get("userField.id"); const id = this.get("userField.id");
if (Ember.isEmpty(id)) { if (Ember.isEmpty(id)) {
this.sendAction("destroyAction", this.get("userField")); this.destroyAction(this.get("userField"));
} else { } else {
this.rollbackBuffer(); this.rollbackBuffer();
this.set("editing", false); this.set("editing", false);

View File

@ -14,7 +14,7 @@ export default Ember.Component.extend(
this.get("word") this.get("word")
.destroy() .destroy()
.then(() => { .then(() => {
this.sendAction("action", this.get("word")); this.action(this.get("word"));
}) })
.catch(e => { .catch(e => {
bootbox.alert( bootbox.alert(

View File

@ -61,7 +61,7 @@ export default Ember.Component.extend(bufferedProperty("host"), {
this.get("host") this.get("host")
.destroyRecord() .destroyRecord()
.then(() => { .then(() => {
this.sendAction("deleteHost", this.get("host")); this.deleteHost(this.get("host"));
}); });
} }
}); });
@ -70,7 +70,7 @@ export default Ember.Component.extend(bufferedProperty("host"), {
cancel() { cancel() {
const host = this.get("host"); const host = this.get("host");
if (host.get("isNew")) { if (host.get("isNew")) {
this.sendAction("deleteHost", host); this.deleteHost(host);
} else { } else {
this.rollbackBuffer(); this.rollbackBuffer();
this.set("editToggled", false); this.set("editToggled", false);

View File

@ -4,13 +4,17 @@ import {
} from "ember-addons/ember-computed-decorators"; } from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({ export default Ember.Component.extend({
classNames: ["inline-edit"],
checked: null,
checkedInternal: null,
init() { init() {
this._super(); this._super(...arguments);
this.set("checkedInternal", this.get("checked")); this.set("checkedInternal", this.get("checked"));
}, },
classNames: ["inline-edit"],
@observes("checked") @observes("checked")
checkedChanged() { checkedChanged() {
this.set("checkedInternal", this.get("checked")); this.set("checkedInternal", this.get("checked"));
@ -33,7 +37,7 @@ export default Ember.Component.extend({
finished() { finished() {
this.set("checked", this.get("checkedInternal")); this.set("checked", this.get("checkedInternal"));
this.sendAction(); this.action();
} }
} }
}); });

View File

@ -33,7 +33,7 @@ export default Ember.Component.extend({
self.set("url", ""); self.set("url", "");
self.set("permalink_type_value", ""); self.set("permalink_type_value", "");
self.set("formSubmitted", false); self.set("formSubmitted", false);
self.sendAction("action", Permalink.create(result.permalink)); self.action(Permalink.create(result.permalink));
Em.run.schedule("afterRender", function() { Em.run.schedule("afterRender", function() {
self.$(".permalink-url").focus(); self.$(".permalink-url").focus();
}); });

View File

@ -8,8 +8,8 @@ import { bufferedRender } from "discourse-common/lib/buffered-render";
{{resumable-upload {{resumable-upload
target="/admin/backups/upload" target="/admin/backups/upload"
success="successAction" success=(action "successAction")
error="errorAction" error=(action "errorAction")
uploadText="UPLOAD" uploadText="UPLOAD"
}} }}
**/ **/
@ -100,7 +100,7 @@ export default Ember.Component.extend(
// mark as not uploading anymore // mark as not uploading anymore
self._reset(); self._reset();
// fire an event to allow the parent route to reload its model // fire an event to allow the parent route to reload its model
self.sendAction("success", file.fileName); self.success(file.fileName);
}); });
}); });
@ -109,7 +109,7 @@ export default Ember.Component.extend(
// mark as not uploading anymore // mark as not uploading anymore
self._reset(); self._reset();
// fire an event to allow the parent route to display the error message // fire an event to allow the parent route to display the error message
self.sendAction("error", file.fileName, message); self.error(file.fileName, message);
}); });
}); });
}.on("init"), }.on("init"),

View File

@ -8,11 +8,5 @@ export default Ember.Component.extend({
@computed("model.isSaving") @computed("model.isSaving")
savingText(saving) { savingText(saving) {
return saving ? "saving" : "save"; return saving ? "saving" : "save";
},
actions: {
saveChanges() {
this.sendAction();
}
} }
}); });

View File

@ -2,7 +2,7 @@
A form to create an IP address that will be blocked or whitelisted. A form to create an IP address that will be blocked or whitelisted.
Example usage: Example usage:
{{screened-ip-address-form action="recordAdded"}} {{screened-ip-address-form action=(action "recordAdded")}}
where action is a callback on the controller or route that will get called after where action is a callback on the controller or route that will get called after
the new record is successfully saved. It is called with the new ScreenedIpAddress record the new record is successfully saved. It is called with the new ScreenedIpAddress record
@ -60,10 +60,7 @@ export default Ember.Component.extend({
.save() .save()
.then(result => { .then(result => {
this.setProperties({ ip_address: "", formSubmitted: false }); this.setProperties({ ip_address: "", formSubmitted: false });
this.sendAction( this.action(ScreenedIpAddress.create(result.screened_ip_address));
"action",
ScreenedIpAddress.create(result.screened_ip_address)
);
Ember.run.schedule("afterRender", () => Ember.run.schedule("afterRender", () =>
this.$(".ip-address-input").focus() this.$(".ip-address-input").focus()
); );

View File

@ -30,11 +30,5 @@ export default Ember.Component.extend({
} }
return this.get("term"); return this.get("term");
},
actions: {
edit() {
this.sendAction("editAction", this.get("siteText"));
}
} }
}); });

View File

@ -12,8 +12,8 @@ export default Em.Component.extend(UploadMixin, {
uploadDone() { uploadDone() {
bootbox.alert(I18n.t("tagging.upload_successful"), () => { bootbox.alert(I18n.t("tagging.upload_successful"), () => {
this.sendAction("refresh"); this.refresh();
this.sendAction("closeModal"); this.closeModal();
}); });
} }
}); });

View File

@ -64,7 +64,7 @@ export default Ember.Component.extend({
showMessage: true, showMessage: true,
message: I18n.t("admin.watched_words.form.success") message: I18n.t("admin.watched_words.form.success")
}); });
this.sendAction("action", WatchedWord.create(result)); this.action(WatchedWord.create(result));
Ember.run.schedule("afterRender", () => Ember.run.schedule("afterRender", () =>
this.$(".watched-word-input").focus() this.$(".watched-word-input").focus()
); );

View File

@ -19,7 +19,7 @@ export default Em.Component.extend(UploadMixin, {
uploadDone() { uploadDone() {
if (this) { if (this) {
bootbox.alert(I18n.t("admin.watched_words.form.upload_successful")); bootbox.alert(I18n.t("admin.watched_words.form.upload_successful"));
this.sendAction("done"); this.done();
} }
} }
}); });

View File

@ -48,7 +48,7 @@ export default Ember.Controller.extend({
return colorSchemeId !== existingId; return colorSchemeId !== existingId;
}, },
@computed("availableChildThemes", "model.childThemes.@each", "model") @computed("availableChildThemes", "model.childThemes.[]", "model")
selectableChildThemes(available, childThemes) { selectableChildThemes(available, childThemes) {
if (available) { if (available) {
const themes = !childThemes const themes = !childThemes

View File

@ -62,9 +62,21 @@ export default Ember.Controller.extend({
} }
}, },
@computed("model.isSaving", "secretValidation", "eventTypeValidation") @computed(
saveButtonDisabled(isSaving, secretValidation, eventTypeValidation) { "model.isSaving",
return isSaving ? false : secretValidation || eventTypeValidation; "secretValidation",
"eventTypeValidation",
"model.payload_url"
)
saveButtonDisabled(
isSaving,
secretValidation,
eventTypeValidation,
payloadUrl
) {
return isSaving
? false
: secretValidation || eventTypeValidation || Ember.isEmpty(payloadUrl);
}, },
actions: { actions: {

View File

@ -30,7 +30,7 @@ const Theme = RestModel.extend({
return hash; return hash;
}, },
@computed("theme_fields", "theme_fields.@each") @computed("theme_fields", "theme_fields.[]")
uploads(fields) { uploads(fields) {
if (!fields) { if (!fields) {
return []; return [];
@ -47,7 +47,7 @@ const Theme = RestModel.extend({
); );
}, },
@computed("theme_fields.@each") @computed("theme_fields.[]")
editedFields(fields) { editedFields(fields) {
return fields.filter( return fields.filter(
field => !Em.isBlank(field.value) && field.type_id !== SETTINGS_TYPE_ID field => !Em.isBlank(field.value) && field.type_id !== SETTINGS_TYPE_ID
@ -130,7 +130,7 @@ const Theme = RestModel.extend({
} }
}, },
@computed("childThemes.@each") @computed("childThemes.[]")
child_theme_ids(childThemes) { child_theme_ids(childThemes) {
if (childThemes) { if (childThemes) {
return childThemes.map(theme => Ember.get(theme, "id")); return childThemes.map(theme => Ember.get(theme, "id"));

View File

@ -21,7 +21,7 @@ const WatchedWord = Discourse.Model.extend({
WatchedWord.reopenClass({ WatchedWord.reopenClass({
findAll() { findAll() {
return ajax("/admin/logs/watched_words").then(list => { return ajax("/admin/logs/watched_words.json").then(list => {
const actions = {}; const actions = {};
list.words.forEach(s => { list.words.forEach(s => {
if (!actions[s.action]) { if (!actions[s.action]) {

View File

@ -19,8 +19,8 @@
{{/if}} {{/if}}
</td> </td>
<td class="key-controls"> <td class="key-controls">
{{d-button class="btn-default" action="regenerateKey" actionParam=k icon="undo" label='admin.api.regenerate'}} {{d-button class="btn-default" action=(action "regenerateKey") actionParam=k icon="undo" label='admin.api.regenerate'}}
{{d-button class="btn-default" action="revokeKey" actionParam=k icon="times" label='admin.api.revoke'}} {{d-button class="btn-default" action=(action "revokeKey") actionParam=k icon="times" label='admin.api.revoke'}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}

View File

@ -1,14 +1,14 @@
<div class="backup-options"> <div class="backup-options">
{{#if localBackupStorage}} {{#if localBackupStorage}}
{{resumable-upload target="/admin/backups/upload" success="uploadSuccess" error="uploadError" uploadText=uploadLabel title="admin.backups.upload.title" class="btn-default"}} {{resumable-upload target="/admin/backups/upload" success=(route-action "uploadSuccess") error=(route-action "uploadError") uploadText=uploadLabel title="admin.backups.upload.title" class="btn-default"}}
{{else}} {{else}}
{{backup-uploader done="remoteUploadSuccess"}} {{backup-uploader done=(route-action "remoteUploadSuccess")}}
{{/if}} {{/if}}
{{#if site.isReadOnly}} {{#if site.isReadOnly}}
{{d-button class="btn-default" icon="far-eye" action="toggleReadOnlyMode" disabled=status.isOperationRunning title="admin.backups.read_only.disable.title" label="admin.backups.read_only.disable.label"}} {{d-button class="btn-default" icon="far-eye" action=(action "toggleReadOnlyMode") disabled=status.isOperationRunning title="admin.backups.read_only.disable.title" label="admin.backups.read_only.disable.label"}}
{{else}} {{else}}
{{d-button class="btn-default" icon="far-eye" action="toggleReadOnlyMode" disabled=status.isOperationRunning title="admin.backups.read_only.enable.title" label="admin.backups.read_only.enable.label"}} {{d-button class="btn-default" icon="far-eye" action=(action "toggleReadOnlyMode") disabled=status.isOperationRunning title="admin.backups.read_only.enable.title" label="admin.backups.read_only.enable.label"}}
{{/if}} {{/if}}
</div> </div>
<table class="grid"> <table class="grid">
@ -25,17 +25,17 @@
<td class="backup-controls"> <td class="backup-controls">
<div> <div>
{{d-button class="btn-default download" {{d-button class="btn-default download"
action="download" action=(action "download")
actionParam=backup actionParam=backup
icon="download" icon="download"
title="admin.backups.operations.download.title" title="admin.backups.operations.download.title"
label="admin.backups.operations.download.label"}} label="admin.backups.operations.download.label"}}
{{#if status.isOperationRunning}} {{#if status.isOperationRunning}}
{{d-button icon="far-trash-alt" action="destroyBackup" actionParam=backup class="btn-danger" disabled="true" title="admin.backups.operations.is_running"}} {{d-button icon="far-trash-alt" action=(route-action "destroyBackup") actionParam=backup class="btn-danger" disabled="true" title="admin.backups.operations.is_running"}}
{{d-button icon="play" action="startRestore" actionParam=backup disabled=status.restoreDisabled class="btn-default" title=restoreTitle label="admin.backups.operations.restore.label"}} {{d-button icon="play" action=(route-action "startRestore") actionParam=backup disabled=status.restoreDisabled class="btn-default" title=restoreTitle label="admin.backups.operations.restore.label"}}
{{else}} {{else}}
{{d-button icon="far-trash-alt" action="destroyBackup" actionParam=backup class="btn-danger" title="admin.backups.operations.destroy.title"}} {{d-button icon="far-trash-alt" action=(route-action "destroyBackup") actionParam=backup class="btn-danger" title="admin.backups.operations.destroy.title"}}
{{d-button icon="play" action="startRestore" actionParam=backup disabled=status.restoreDisabled class="btn-default" title=restoreTitle label="admin.backups.operations.restore.label"}} {{d-button icon="play" action=(route-action "startRestore") actionParam=backup disabled=status.restoreDisabled class="btn-default" title=restoreTitle label="admin.backups.operations.restore.label"}}
{{/if}} {{/if}}
</div> </div>
</td> </td>

View File

@ -7,7 +7,7 @@
{{plugin-outlet name="downloader" tagName=""}} {{plugin-outlet name="downloader" tagName=""}}
<div class="admin-actions"> <div class="admin-actions">
{{#if model.canRollback}} {{#if model.canRollback}}
{{d-button action="rollback" {{d-button action=(route-action "rollback")
class="btn-default btn-rollback" class="btn-default btn-rollback"
label="admin.backups.operations.rollback.label" label="admin.backups.operations.rollback.label"
title="admin.backups.operations.rollback.title" title="admin.backups.operations.rollback.title"
@ -15,13 +15,13 @@
disabled=rollbackDisabled}} disabled=rollbackDisabled}}
{{/if}} {{/if}}
{{#if model.isOperationRunning}} {{#if model.isOperationRunning}}
{{d-button action="cancelOperation" {{d-button action=(route-action "cancelOperation")
class="btn-danger" class="btn-danger"
title="admin.backups.operations.cancel.title" title="admin.backups.operations.cancel.title"
label="admin.backups.operations.cancel.label" label="admin.backups.operations.cancel.label"
icon="times"}} icon="times"}}
{{else}} {{else}}
{{d-button action="showStartBackupModal" {{d-button action=(route-action "showStartBackupModal")
class="btn-primary" class="btn-primary"
title="admin.backups.operations.backup.title" title="admin.backups.operations.backup.title"
label="admin.backups.operations.backup.label" label="admin.backups.operations.backup.label"

View File

@ -55,7 +55,7 @@
{{#each pages as |pageState|}} {{#each pages as |pageState|}}
{{d-button {{d-button
translatedLabel=pageState.page translatedLabel=pageState.page
action="changePage" action=(action "changePage")
actionParam=pageState.index actionParam=pageState.index
class=pageState.class}} class=pageState.class}}
{{/each}} {{/each}}

View File

@ -115,7 +115,7 @@
<div class="modes"> <div class="modes">
{{#each displayedModes as |displayedMode|}} {{#each displayedModes as |displayedMode|}}
{{d-button {{d-button
action="changeMode" action=(action "changeMode")
actionParam=displayedMode.mode actionParam=displayedMode.mode
class=displayedMode.cssClass class=displayedMode.cssClass
icon=displayedMode.icon}} icon=displayedMode.icon}}
@ -178,7 +178,7 @@
<div class="input"> <div class="input">
{{d-button {{d-button
class="btn-default export-csv-btn" class="btn-default export-csv-btn"
action="exportCsv" action=(action "exportCsv")
label="admin.export_csv.button_text" label="admin.export_csv.button_text"
icon="download"}} icon="download"}}
</div> </div>
@ -190,7 +190,7 @@
<div class="input"> <div class="input">
{{d-button {{d-button
class="refresh-report-btn btn-primary" class="refresh-report-btn btn-primary"
action="refreshReport" action=(action "refreshReport")
label="admin.dashboard.reports.refresh_report" label="admin.dashboard.reports.refresh_report"
icon="refresh"}} icon="refresh"}}
</div> </div>

View File

@ -34,8 +34,8 @@
{{/admin-form-row}} {{/admin-form-row}}
{{#admin-form-row}} {{#admin-form-row}}
{{d-button action="save" class="btn-primary" icon="check" label="admin.user_fields.save"}} {{d-button action=(action "save") class="btn-primary" icon="check" label="admin.user_fields.save"}}
{{d-button action="cancel" class="btn-danger" icon="times" label="admin.user_fields.cancel"}} {{d-button action=(action "cancel") class="btn-danger" icon="times" label="admin.user_fields.cancel"}}
{{/admin-form-row}} {{/admin-form-row}}
{{else}} {{else}}
<div class="row"> <div class="row">
@ -46,10 +46,11 @@
</div> </div>
<div class='form-display'>{{fieldName}}</div> <div class='form-display'>{{fieldName}}</div>
<div class='form-element controls'> <div class='form-element controls'>
{{d-button action="edit" class="btn-default" icon="pencil" label="admin.user_fields.edit"}} {{d-button action=(action "edit") class="btn-default" icon="pencil" label="admin.user_fields.edit"}}
{{d-button action="destroy" class="btn-danger" icon="trash-o" label="admin.user_fields.delete"}}
{{d-button action="moveUp" class="btn-default" icon="arrow-up" disabled=cantMoveUp}} {{d-button action=destroyAction actionParam=userField class="btn-danger" icon="trash-o" label="admin.user_fields.delete"}}
{{d-button action="moveDown" class="btn-default" icon="arrow-down" disabled=cantMoveDown}} {{d-button action=moveUpAction actionParam=userField class="btn-default" icon="arrow-up" disabled=cantMoveUp}}
{{d-button action=moveDownAction actionParam=userField class="btn-default" icon="arrow-down" disabled=cantMoveDown}}
</div> </div>
</div> </div>
<div class="row">{{flags}}</div> <div class="row">{{flags}}</div>

View File

@ -5,13 +5,13 @@
<div class="col timestamp">{{createdAt}}</div> <div class="col timestamp">{{createdAt}}</div>
<div class="col completion">{{completion}}</div> <div class="col completion">{{completion}}</div>
<div class="col actions"> <div class="col actions">
{{d-button icon='ellipsis-v' action='toggleRequest' label='admin.web_hooks.events.request'}} {{d-button icon="ellipsis-v" action=(action "toggleRequest") label="admin.web_hooks.events.request"}}
{{d-button icon='ellipsis-v' action='toggleResponse' label='admin.web_hooks.events.response'}} {{d-button icon="ellipsis-v" action=(action "toggleResponse") label="admin.web_hooks.events.response"}}
{{d-button icon='refresh' action='redeliver' label='admin.web_hooks.events.redeliver'}} {{d-button icon="refresh" action=(action "redeliver") label="admin.web_hooks.events.redeliver"}}
</div> </div>
{{#if expandDetails}} {{#if expandDetails}}
<div class="details"> <div class="details">
<h3>{{i18n 'admin.web_hooks.events.headers'}}</h3> <h3>{{i18n "admin.web_hooks.events.headers"}}</h3>
<pre><code>{{headers}}</code></pre> <pre><code>{{headers}}</code></pre>
<h3>{{bodyLabel}}</h3> <h3>{{bodyLabel}}</h3>
<pre><code>{{body}}</code></pre> <pre><code>{{body}}</code></pre>

View File

@ -1,23 +1,23 @@
{{#if editing}} {{#if editing}}
<td class="editing-input"> <td class="editing-input">
<div class="label">{{i18n "admin.embedding.host"}}</div> <div class="label">{{i18n "admin.embedding.host"}}</div>
{{input value=buffered.host placeholder="example.com" enter="save" class="host-name"}} {{input value=buffered.host placeholder="example.com" enter=(action "save") class="host-name"}}
</td> </td>
<td class="editing-input"> <td class="editing-input">
<div class="label">{{i18n "admin.embedding.class_name"}}</div> <div class="label">{{i18n "admin.embedding.class_name"}}</div>
{{input value=buffered.class_name placeholder="class" enter="save" class="class-name"}} {{input value=buffered.class_name placeholder="class" enter=(action "save") class="class-name"}}
</td> </td>
<td class="editing-input"> <td class="editing-input">
<div class="label">{{i18n "admin.embedding.path_whitelist"}}</div> <div class="label">{{i18n "admin.embedding.path_whitelist"}}</div>
{{input value=buffered.path_whitelist placeholder="/blog/.*" enter="save" class="path-whitelist"}} {{input value=buffered.path_whitelist placeholder="/blog/.*" enter=(action "save") class="path-whitelist"}}
</td> </td>
<td class="editing-input"> <td class="editing-input">
<div class="label">{{i18n "admin.embedding.category"}}</div> <div class="label">{{i18n "admin.embedding.category"}}</div>
{{category-chooser value=categoryId class="small"}} {{category-chooser value=categoryId class="small"}}
</td> </td>
<td class="editing-controls"> <td class="editing-controls">
{{d-button icon="check" action="save" class="btn-primary" disabled=cantSave}} {{d-button icon="check" action=(action "save") class="btn-primary" disabled=cantSave}}
{{d-button icon="times" action="cancel" class="btn-danger" disabled=host.isSaving}} {{d-button icon="times" action=(action "cancel") class="btn-danger" disabled=host.isSaving}}
</td> </td>
{{else}} {{else}}
<td><div class="label">{{i18n "admin.embedding.host"}}</div>{{host.host}}</td> <td><div class="label">{{i18n "admin.embedding.host"}}</div>{{host.host}}</td>
@ -25,7 +25,7 @@
<td><div class="label">{{i18n "admin.embedding.path_whitelist"}}</div>{{host.path_whitelist}}</td> <td><div class="label">{{i18n "admin.embedding.path_whitelist"}}</div>{{host.path_whitelist}}</td>
<td><div class="label">{{i18n "admin.embedding.category"}}</div>{{category-badge host.category}}</td> <td><div class="label">{{i18n "admin.embedding.category"}}</div>{{category-badge host.category}}</td>
<td class="controls"> <td class="controls">
{{d-button icon="pencil" action="edit"}} {{d-button icon="pencil" action=(action "edit")}}
{{d-button icon="trash-o" action="delete" class='btn-danger'}} {{d-button icon="trash-o" action=(action "delete") class='btn-danger'}}
</td> </td>
{{/if}} {{/if}}

View File

@ -78,14 +78,14 @@
{{d-button {{d-button
title="admin.flags.disagree_flag_unhide_post_title" title="admin.flags.disagree_flag_unhide_post_title"
class="btn-default disagree-flag" class="btn-default disagree-flag"
action="disagree" action=(action "disagree")
icon="thumbs-o-down" icon="thumbs-o-down"
label="admin.flags.disagree_flag_unhide_post"}} label="admin.flags.disagree_flag_unhide_post"}}
{{else}} {{else}}
{{d-button {{d-button
title="admin.flags.disagree_flag_title" title="admin.flags.disagree_flag_title"
class="btn-default disagree-flag" class="btn-default disagree-flag"
action="disagree" action=(action "disagree")
icon="thumbs-o-down" icon="thumbs-o-down"
label="admin.flags.disagree_flag"}} label="admin.flags.disagree_flag"}}
{{/if}} {{/if}}
@ -93,7 +93,7 @@
{{d-button {{d-button
class="btn-default defer-flag" class="btn-default defer-flag"
title="admin.flags.ignore_flag_title" title="admin.flags.ignore_flag_title"
action="defer" action=(action "defer")
icon="external-link" icon="external-link"
label="admin.flags.ignore_flag"}} label="admin.flags.ignore_flag"}}

View File

@ -3,6 +3,6 @@
{{label}} {{label}}
</label> </label>
{{#if changed}} {{#if changed}}
{{d-button action="finished" class="btn-primary btn-small submit-edit" icon="check"}} {{d-button action=(action "finished") class="btn-primary btn-small submit-edit" icon="check"}}
{{d-button action="cancelled" class="btn-small cancel-edit" icon="times"}} {{d-button action=(action "cancelled") class="btn-small cancel-edit" icon="times"}}
{{/if}} {{/if}}

View File

@ -2,4 +2,4 @@
{{text-field value=url disabled=formSubmitted class="permalink-url" placeholderKey="admin.permalink.url" autocorrect="off" autocapitalize="off"}} {{text-field value=url disabled=formSubmitted class="permalink-url" placeholderKey="admin.permalink.url" autocorrect="off" autocapitalize="off"}}
{{combo-box content=permalinkTypes value=permalinkType}} {{combo-box content=permalinkTypes value=permalinkType}}
{{text-field value=permalink_type_value disabled=formSubmitted class="external-url" placeholderKey=permalinkTypePlaceholder autocorrect="off" autocapitalize="off"}} {{text-field value=permalink_type_value disabled=formSubmitted class="external-url" placeholderKey=permalinkTypePlaceholder autocorrect="off" autocapitalize="off"}}
{{d-button class="btn-default" action="submit" disabled=formSubmitted label="admin.permalink.form.add"}} {{d-button class="btn-default" action=(action "submit") disabled=formSubmitted label="admin.permalink.form.add"}}

View File

@ -1,4 +1,4 @@
{{d-button action="saveChanges" disabled=buttonDisabled label=savingText class="btn-primary save-changes"}} {{d-button action=action disabled=buttonDisabled label=savingText class="btn-primary save-changes"}}
{{yield}} {{yield}}
<div class='save-messages'> <div class='save-messages'>
{{#if saved}} {{#if saved}}

View File

@ -1,4 +1,4 @@
<b>{{i18n 'admin.logs.screened_ips.form.label'}}</b> <b>{{i18n 'admin.logs.screened_ips.form.label'}}</b>
{{text-field value=ip_address disabled=formSubmitted class="ip-address-input" placeholderKey="admin.logs.screened_ips.form.ip_address" autocorrect="off" autocapitalize="off"}} {{text-field value=ip_address disabled=formSubmitted class="ip-address-input" placeholderKey="admin.logs.screened_ips.form.ip_address" autocorrect="off" autocapitalize="off"}}
{{combo-box content=actionNames value=actionName}} {{combo-box content=actionNames value=actionName}}
{{d-button class="btn-default" action="submit" disabled=formSubmitted label="admin.logs.screened_ips.form.add"}} {{d-button class="btn-default" action=(action "submit") disabled=formSubmitted label="admin.logs.screened_ips.form.add"}}

View File

@ -2,7 +2,7 @@
<div class="values"> <div class="values">
{{#each collection as |value index|}} {{#each collection as |value index|}}
<div class="value" data-index={{index}}> <div class="value" data-index={{index}}>
{{d-button action="removeValue" {{d-button action=(action "removeValue")
actionParam=value actionParam=value
icon="times" icon="times"
class="remove-value-btn btn-small"}} class="remove-value-btn btn-small"}}
@ -16,7 +16,7 @@
<div class="value"> <div class="value">
{{text-field value=newKey class="new-value-input key" placeholder=setting.placeholder.key}} {{text-field value=newKey class="new-value-input key" placeholder=setting.placeholder.key}}
{{input type="password" value=newSecret class="new-value-input secret" placeholder=setting.placeholder.value}} {{input type="password" value=newSecret class="new-value-input secret" placeholder=setting.placeholder.value}}
{{d-button action="addValue" {{d-button action=(action "addValue")
icon="plus" icon="plus"
class="add-value-btn btn-small"}} class="add-value-btn btn-small"}}
</div> </div>

View File

@ -6,12 +6,12 @@
</div> </div>
{{#if dirty}} {{#if dirty}}
<div class='setting-controls'> <div class='setting-controls'>
{{d-button class="ok" action="save" icon="check"}} {{d-button class="ok" action=(action "save") icon="check"}}
{{d-button class="cancel" action="cancel" icon="times"}} {{d-button class="cancel" action=(action "cancel") icon="times"}}
</div> </div>
{{else if setting.overridden}} {{else if setting.overridden}}
{{#if setting.secret}} {{#if setting.secret}}
{{d-button action="toggleSecret" icon="eye-slash"}} {{d-button action=(action "toggleSecret") icon="eye-slash"}}
{{/if}} {{/if}}
{{d-button class="btn-default undo" action="resetDefault" icon="undo" label="admin.settings.reset"}} {{d-button class="btn-default undo" action=(action "resetDefault") icon="undo" label="admin.settings.reset"}}
{{/if}} {{/if}}

View File

@ -1,2 +1,2 @@
{{d-button label="admin.site_settings.uploaded_image_list.label" action="showUploadModal" actionParam=(hash value=value setting=setting)}} {{d-button label="admin.site_settings.uploaded_image_list.label" action=(action "showUploadModal") actionParam=(hash value=value setting=setting)}}
<div class='desc'>{{{unbound setting.description}}}</div> <div class='desc'>{{{unbound setting.description}}}</div>

View File

@ -1,4 +1,4 @@
{{d-button label="admin.site_text.edit" class='btn-default edit' action="edit"}} {{d-button label="admin.site_text.edit" class='btn-default edit' action=editAction actionParam=siteText}}
<h3 class='site-text-id'>{{siteText.id}}</h3> <h3 class='site-text-id'>{{siteText.id}}</h3>
<div class='site-text-value'>{{siteText.value}}</div> <div class='site-text-value'>{{siteText.value}}</div>

View File

@ -1,6 +1,6 @@
<label class="btn {{if addDisabled 'disabled'}}"> <label class="btn {{if addDisabled 'disabled'}}">
{{d-icon "upload"}} {{d-icon "upload"}}
{{i18n 'admin.watched_words.form.upload'}} {{i18n 'admin.watched_words.form.upload'}}
<input class="hidden-upload-field" disabled={{addDisabled}} type="file" accept="text/plain,text/csv" /> <input class="hidden-upload-field" disabled={{addDisabled}} type="file" accept="text/plain,text/csv" />
</label> </label>
<span class="instructions">{{i18n 'tagging.upload_instructions'}}</span> <span class="instructions">{{i18n 'tagging.upload_instructions'}}</span>

View File

@ -2,7 +2,7 @@
<div class='values'> <div class='values'>
{{#each collection as |value index|}} {{#each collection as |value index|}}
<div class='value' data-index={{index}}> <div class='value' data-index={{index}}>
{{d-button action="removeValue" {{d-button action=(action "removeValue")
actionParam=value actionParam=value
icon="times" icon="times"
class="btn-default remove-value-btn btn-small"}} class="btn-default remove-value-btn btn-small"}}

View File

@ -1,6 +1,6 @@
<b>{{i18n 'admin.watched_words.form.label'}}</b> <b>{{i18n 'admin.watched_words.form.label'}}</b>
{{text-field value=word disabled=formSubmitted class="watched-word-input" autocorrect="off" autocapitalize="off" placeholderKey=placeholderKey}} {{text-field value=word disabled=formSubmitted class="watched-word-input" autocorrect="off" autocapitalize="off" placeholderKey=placeholderKey}}
{{d-button class="btn-default" action="submit" disabled=formSubmitted label="admin.watched_words.form.add"}} {{d-button class="btn-default" action=(action "submit") disabled=formSubmitted label="admin.watched_words.form.add"}}
{{#if showMessage}} {{#if showMessage}}
<span class="success-message">{{message}}</span> <span class="success-message">{{message}}</span>

View File

@ -10,9 +10,9 @@
<label>{{i18n "admin.customize.email_templates.body"}}</label> <label>{{i18n "admin.customize.email_templates.body"}}</label>
{{d-editor value=buffered.body}} {{d-editor value=buffered.body}}
{{#save-controls model=emailTemplate action="saveChanges" saved=saved}} {{#save-controls model=emailTemplate action=(action "saveChanges") saved=saved}}
{{#if emailTemplate.can_revert}} {{#if emailTemplate.can_revert}}
{{d-button action="revertChanges" label="admin.customize.email_templates.revert"}} {{d-button action=(action "revertChanges") label="admin.customize.email_templates.revert"}}
{{/if}} {{/if}}
{{/save-controls}} {{/save-controls}}
</div> </div>

View File

@ -69,7 +69,7 @@
</div> </div>
<div class='buttons'> <div class='buttons'>
{{#d-button action="save" disabled=saveDisabled class='btn-primary'}} {{#d-button action=(action "save") disabled=saveDisabled class='btn-primary'}}
{{saveButtonText}} {{saveButtonText}}
{{/d-button}} {{/d-button}}
</div> </div>

View File

@ -2,8 +2,8 @@
<div class="title"> <div class="title">
{{#if editingName}} {{#if editingName}}
{{text-field value=model.name autofocus="true"}} {{text-field value=model.name autofocus="true"}}
{{d-button action="finishedEditingName" class="btn-primary btn-small submit-edit" icon="check"}} {{d-button action=(action "finishedEditingName") class="btn-primary btn-small submit-edit" icon="check"}}
{{d-button action="cancelEditingName" class="btn-small cancel-edit" icon="times"}} {{d-button action=(action "cancelEditingName") class="btn-small cancel-edit" icon="times"}}
{{else}} {{else}}
{{model.name}} <a {{action "startEditingName"}}>{{d-icon "pencil"}}</a> {{model.name}} <a {{action "startEditingName"}}>{{d-icon "pencil"}}</a>
{{/if}} {{/if}}
@ -36,8 +36,8 @@
{{#unless model.component}} {{#unless model.component}}
<div class="control-unit"> <div class="control-unit">
{{inline-edit-checkbox action="applyDefault" labelKey="admin.customize.theme.is_default" checked=model.default}} {{inline-edit-checkbox action=(action "applyDefault") labelKey="admin.customize.theme.is_default" checked=model.default}}
{{inline-edit-checkbox action="applyUserSelectable" labelKey="admin.customize.theme.user_selectable" checked=model.user_selectable}} {{inline-edit-checkbox action=(action "applyUserSelectable") labelKey="admin.customize.theme.user_selectable" checked=model.user_selectable}}
</div> </div>
<div class="control-unit"> <div class="control-unit">
@ -49,8 +49,8 @@
value=colorSchemeId value=colorSchemeId
icon="paint-brush"}} icon="paint-brush"}}
{{#if colorSchemeChanged}} {{#if colorSchemeChanged}}
{{d-button action="changeScheme" class="btn-primary btn-small submit-edit" icon="check"}} {{d-button action=(action "changeScheme") class="btn-primary btn-small submit-edit" icon="check"}}
{{d-button action="cancelChangeScheme" class="btn-default btn-small cancel-edit" icon="times"}} {{d-button action=(action "cancelChangeScheme") class="btn-default btn-small cancel-edit" icon="times"}}
{{/if}} {{/if}}
</div> </div>
{{#link-to 'adminCustomize.colors' class="btn btn-default edit"}}{{i18n 'admin.customize.colors.edit'}}{{/link-to}} {{#link-to 'adminCustomize.colors' class="btn btn-default edit"}}{{i18n 'admin.customize.colors.edit'}}{{/link-to}}
@ -74,13 +74,13 @@
{{#if model.remote_theme}} {{#if model.remote_theme}}
{{#if model.remote_theme.commits_behind}} {{#if model.remote_theme.commits_behind}}
{{#d-button action="updateToLatest" icon="download" class='btn-primary'}}{{i18n "admin.customize.theme.update_to_latest"}}{{/d-button}} {{#d-button action=(action "updateToLatest") icon="download" class='btn-primary'}}{{i18n "admin.customize.theme.update_to_latest"}}{{/d-button}}
{{else}} {{else}}
{{#d-button action="checkForThemeUpdates" icon="refresh" class="btn-default"}}{{i18n "admin.customize.theme.check_for_updates"}}{{/d-button}} {{#d-button action=(action "checkForThemeUpdates") icon="refresh" class="btn-default"}}{{i18n "admin.customize.theme.check_for_updates"}}{{/d-button}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#d-button action="editTheme" class="btn btn-default edit"}}{{i18n 'admin.customize.theme.edit_css_html'}}{{/d-button}} {{#d-button action=(action "editTheme") class="btn btn-default edit"}}{{i18n 'admin.customize.theme.edit_css_html'}}{{/d-button}}
{{#if model.remote_theme}} {{#if model.remote_theme}}
<span class='status-message'> <span class='status-message'>
{{#if updatingRemote}} {{#if updatingRemote}}
@ -119,7 +119,7 @@
<li> <li>
<span class='col'>${{upload.name}}: <a href={{upload.url}} target='_blank'>{{upload.filename}}</a></span> <span class='col'>${{upload.name}}: <a href={{upload.url}} target='_blank'>{{upload.filename}}</a></span>
<span class='col'> <span class='col'>
{{d-button action="removeUpload" actionParam=upload class="second btn-default btn-small cancel-edit" icon="times"}} {{d-button action=(action "removeUpload") actionParam=upload class="second btn-default btn-small cancel-edit" icon="times"}}
</span> </span>
</li> </li>
{{/each}} {{/each}}
@ -127,7 +127,7 @@
{{else}} {{else}}
<div class="description">{{i18n "admin.customize.theme.no_uploads"}}</div> <div class="description">{{i18n "admin.customize.theme.no_uploads"}}</div>
{{/if}} {{/if}}
{{#d-button action="addUploadModal" class="btn-default" icon="plus"}}{{i18n "admin.customize.theme.add"}}{{/d-button}} {{#d-button action=(action "addUploadModal") class="btn-default" icon="plus"}}{{i18n "admin.customize.theme.add"}}{{/d-button}}
</div> </div>
{{#if hasSettings}} {{#if hasSettings}}
@ -147,14 +147,14 @@
{{#if model.childThemes.length}} {{#if model.childThemes.length}}
<ul class='removable-list'> <ul class='removable-list'>
{{#each model.childThemes as |child|}} {{#each model.childThemes as |child|}}
<li>{{#link-to 'adminCustomizeThemes.show' child replace=true class='col'}}{{child.name}}{{/link-to}} {{d-button action="removeChildTheme" actionParam=child class="btn-default btn-small cancel-edit col" icon="times"}}</li> <li>{{#link-to 'adminCustomizeThemes.show' child replace=true class='col'}}{{child.name}}{{/link-to}} {{d-button action=(action "removeChildTheme") actionParam=child class="btn-default btn-small cancel-edit col" icon="times"}}</li>
{{/each}} {{/each}}
</ul> </ul>
{{/if}} {{/if}}
{{#if selectableChildThemes}} {{#if selectableChildThemes}}
<div class="description"> <div class="description">
{{combo-box forceEscape=true filterable=true content=selectableChildThemes value=selectedChildThemeId none="admin.customize.theme.select_component"}} {{combo-box forceEscape=true filterable=true content=selectableChildThemes value=selectedChildThemeId none="admin.customize.theme.select_component"}}
{{#d-button action="addChildTheme" icon="plus" disabled=addButtonDisabled class="btn-default add-component-button"}}{{i18n "admin.customize.theme.add"}}{{/d-button}} {{#d-button action=(action "addChildTheme") icon="plus" disabled=addButtonDisabled class="btn-default add-component-button"}}{{i18n "admin.customize.theme.add"}}{{/d-button}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
@ -163,6 +163,6 @@
<a href='{{previewUrl}}' title="{{i18n 'admin.customize.explain_preview'}}" target='_blank' class='btn btn-default'>{{d-icon 'desktop'}}{{i18n 'admin.customize.theme.preview'}}</a> <a href='{{previewUrl}}' title="{{i18n 'admin.customize.explain_preview'}}" target='_blank' class='btn btn-default'>{{d-icon 'desktop'}}{{i18n 'admin.customize.theme.preview'}}</a>
<a class="btn btn-default export" target="_blank" href={{downloadUrl}}>{{d-icon "download"}} {{i18n 'admin.export_json.button_text'}}</a> <a class="btn btn-default export" target="_blank" href={{downloadUrl}}>{{d-icon "download"}} {{i18n 'admin.export_json.button_text'}}</a>
{{d-button action="switchType" label="admin.customize.theme.convert" icon=convertIcon class="btn-default btn-normal" title=convertTooltip}} {{d-button action=(action "switchType") label="admin.customize.theme.convert" icon=convertIcon class="btn-default btn-normal" title=convertTooltip}}
{{d-button action="destroy" label="admin.customize.delete" icon="trash" class="btn-danger"}} {{d-button action=(action "destroy") label="admin.customize.delete" icon="trash" class="btn-danger"}}
</div> </div>

View File

@ -3,8 +3,8 @@
<div class="create-actions"> <div class="create-actions">
{{d-button label="admin.customize.new" icon="plus" action="showCreateModal" class="btn-primary"}} {{d-button label="admin.customize.new" icon="plus" action=(route-action "showCreateModal") class="btn-primary"}}
{{d-button action="importModal" icon="upload" label="admin.customize.import" class="btn-default"}} {{d-button action=(route-action "importModal") icon="upload" label="admin.customize.import" class="btn-default"}}
</div> </div>
</div> </div>
{{themes-list themes=fullThemes components=childThemes currentTab=currentTab}} {{themes-list themes=fullThemes components=childThemes currentTab=currentTab}}

View File

@ -19,7 +19,7 @@
<p class="actions"> <p class="actions">
<small>{{i18n 'admin.dashboard.last_checked'}}: {{problemsTimestamp}}</small> <small>{{i18n 'admin.dashboard.last_checked'}}: {{problemsTimestamp}}</small>
{{d-button action="refreshProblems" class="btn-default btn-small" icon="refresh" label="admin.dashboard.refresh_problems"}} {{d-button action=(action "refreshProblems") class="btn-default btn-small" icon="refresh" label="admin.dashboard.refresh_problems"}}
</p> </p>
{{/conditional-loading-section}} {{/conditional-loading-section}}
</div> </div>

View File

@ -9,7 +9,7 @@
{{i18n "admin.dashboard.community_health"}} {{i18n "admin.dashboard.community_health"}}
</a> </a>
</h2> </h2>
{{period-chooser period=period action="changePeriod" content=availablePeriods fullDay=true}} {{period-chooser period=period action=(action "changePeriod") content=availablePeriods fullDay=true}}
</div> </div>
<div class="section-body"> <div class="section-body">

View File

@ -10,7 +10,7 @@
</h2> </h2>
{{period-chooser {{period-chooser
period=period period=period
action="changePeriod" action=(action "changePeriod")
content=availablePeriods content=availablePeriods
fullDay=true}} fullDay=true}}
</div> </div>

View File

@ -1,4 +1,4 @@
{{#load-more selector=".email-list tr" action="loadMore"}} {{#load-more selector=".email-list tr" action=(action "loadMore")}}
<table class='table email-list'> <table class='table email-list'>
<thead> <thead>
<tr> <tr>

View File

@ -1,4 +1,4 @@
{{#load-more selector=".email-list tr" action="loadMore"}} {{#load-more selector=".email-list tr" action=(action "loadMore")}}
<table class='table email-list'> <table class='table email-list'>
<thead> <thead>
<tr> <tr>

View File

@ -1,4 +1,4 @@
{{#load-more selector=".email-list tr" action="loadMore"}} {{#load-more selector=".email-list tr" action=(action "loadMore")}}
<table class='table email-list'> <table class='table email-list'>
<thead> <thead>
<tr> <tr>

View File

@ -1,4 +1,4 @@
{{#load-more selector=".email-list tr" action="loadMore"}} {{#load-more selector=".email-list tr" action=(action "loadMore")}}
<table class='table email-list'> <table class='table email-list'>
<thead> <thead>
<tr> <tr>

View File

@ -1,4 +1,4 @@
{{#load-more selector=".email-list tr" action="loadMore"}} {{#load-more selector=".email-list tr" action=(action "loadMore")}}
<table class='table email-list'> <table class='table email-list'>
<thead> <thead>
<tr> <tr>

View File

@ -10,7 +10,7 @@
</thead> </thead>
<tbody> <tbody>
{{#each embedding.embeddable_hosts as |host|}} {{#each embedding.embeddable_hosts as |host|}}
{{embeddable-host host=host deleteHost="deleteHost"}} {{embeddable-host host=host deleteHost=(action "deleteHost")}}
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
@ -18,7 +18,7 @@
<p>{{i18n "admin.embedding.get_started"}}</p> <p>{{i18n "admin.embedding.get_started"}}</p>
{{/if}} {{/if}}
{{d-button label="admin.embedding.add_host" action="addHost" icon="plus" class="btn-primary add-host"}} {{d-button label="admin.embedding.add_host" action=(action "addHost") icon="plus" class="btn-primary add-host"}}
</div> </div>
{{#if showSecondary}} {{#if showSecondary}}
@ -69,7 +69,7 @@
<div class='embedding-secondary'> <div class='embedding-secondary'>
{{d-button label="admin.embedding.save" {{d-button label="admin.embedding.save"
action="saveChanges" action=(action "saveChanges")
class="btn-primary embed-save" class="btn-primary embed-save"
disabled=embedding.isSaving}} disabled=embedding.isSaving}}

View File

@ -3,7 +3,7 @@
<p class="desc">{{i18n 'admin.emoji.help'}}</p> <p class="desc">{{i18n 'admin.emoji.help'}}</p>
<p>{{emoji-uploader done="emojiUploaded"}}</p> <p>{{emoji-uploader done=(action "emojiUploaded")}}</p>
{{#if sortedEmojis}} {{#if sortedEmojis}}
<div> <div>

View File

@ -30,7 +30,7 @@
<td class="created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip item.created_at}}</td> <td class="created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip item.created_at}}</td>
<td class="ip_address">{{item.ip_address}}</td> <td class="ip_address">{{item.ip_address}}</td>
<td class="action"> <td class="action">
{{d-button action="clearBlock" actionParam=item icon="check" label="admin.logs.screened_emails.actions.allow"}} {{d-button action=(action "clearBlock") actionParam=item icon="check" label="admin.logs.screened_emails.actions.allow"}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}

View File

@ -3,10 +3,10 @@
<div class="screened-ip-controls"> <div class="screened-ip-controls">
<div class="filter-screened-ip-address"> <div class="filter-screened-ip-address">
{{text-field value=filter class="ip-address-input" placeholderKey="admin.logs.screened_ips.form.filter" autocorrect="off" autocapitalize="off"}} {{text-field value=filter class="ip-address-input" placeholderKey="admin.logs.screened_ips.form.filter" autocorrect="off" autocapitalize="off"}}
{{d-button class="btn-default" action="rollUp" title="admin.logs.screened_ips.roll_up.title" label="admin.logs.screened_ips.roll_up.text"}} {{d-button class="btn-default" action=(action "rollUp") title="admin.logs.screened_ips.roll_up.title" label="admin.logs.screened_ips.roll_up.text"}}
{{d-button class="btn-default" action="exportScreenedIpList" icon="download" title="admin.export_csv.button_title.screened_ip" label="admin.export_csv.button_text"}} {{d-button class="btn-default" action=(action "exportScreenedIpList") icon="download" title="admin.export_csv.button_title.screened_ip" label="admin.export_csv.button_text"}}
</div> </div>
{{screened-ip-address-form action="recordAdded"}} {{screened-ip-address-form action=(action "recordAdded")}}
</div> </div>
@ -57,15 +57,15 @@
</td> </td>
<td class="col actions"> <td class="col actions">
{{#unless item.editing}} {{#unless item.editing}}
{{d-button class="btn-default" action="destroy" actionParam=item icon="trash-o" class="btn-danger"}} {{d-button class="btn-default" action=(action "destroy") actionParam=item icon="trash-o" class="btn-danger"}}
{{d-button class="btn-default"action="edit" actionParam=item icon="pencil"}} {{d-button class="btn-default"action=(action "edit") actionParam=item icon="pencil"}}
{{#if item.isBlocked}} {{#if item.isBlocked}}
{{d-button class="btn-default" action="allow" actionParam=item icon="check" label="admin.logs.screened_ips.actions.do_nothing"}} {{d-button class="btn-default" action=(action "allow") actionParam=item icon="check" label="admin.logs.screened_ips.actions.do_nothing"}}
{{else}} {{else}}
{{d-button class="btn-default" action="block" actionParam=item icon="ban" label="admin.logs.screened_ips.actions.block"}} {{d-button class="btn-default" action=(action "block") actionParam=item icon="ban" label="admin.logs.screened_ips.actions.block"}}
{{/if}} {{/if}}
{{else}} {{else}}
{{d-button class="btn-default" action="save" actionParam=item label="admin.logs.save"}} {{d-button class="btn-default" action=(action "save") actionParam=item label="admin.logs.save"}}
<a {{action "cancel" item}}>{{i18n 'cancel'}}</a> <a {{action "cancel" item}}>{{i18n 'cancel'}}</a>
{{/unless}} {{/unless}}
</td> </td>

View File

@ -33,7 +33,7 @@
{{i18n "admin.logs.staff_actions.filter"}} {{combo-box content=userHistoryActions value=filterActionId none="admin.logs.staff_actions.all"}} {{i18n "admin.logs.staff_actions.filter"}} {{combo-box content=userHistoryActions value=filterActionId none="admin.logs.staff_actions.all"}}
{{/if}} {{/if}}
{{d-button class="btn-default" action="exportStaffActionLogs" label="admin.export_csv.button_text" icon="download"}} {{d-button class="btn-default" action=(action "exportStaffActionLogs") label="admin.export_csv.button_text" icon="download"}}
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -17,6 +17,6 @@
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
{{d-button action="upload" disabled=disabled class='btn btn-primary' icon='upload' label='admin.customize.theme.upload'}} {{d-button action=(action "upload") disabled=disabled class='btn btn-primary' icon='upload' label='admin.customize.theme.upload'}}
{{d-modal-cancel close=(action "closeModal")}} {{d-modal-cancel close=(route-action "closeModal")}}
</div> </div>

View File

@ -25,6 +25,6 @@
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
{{d-button class="btn btn-primary" label="admin.customize.theme.create" action="createTheme" disabled=saving}} {{d-button class="btn btn-primary" label="admin.customize.theme.create" action=(action "createTheme") disabled=saving}}
{{d-modal-cancel close=(action "closeModal")}} {{d-modal-cancel close=(route-action "closeModal")}}
</div> </div>

View File

@ -26,5 +26,5 @@
<div class="modal-footer"> <div class="modal-footer">
<button class='btn btn-primary' {{action "saveAll"}} disabled={{submitDisabled}}>{{i18n 'admin.badges.save'}}</button> <button class='btn btn-primary' {{action "saveAll"}} disabled={{submitDisabled}}>{{i18n 'admin.badges.save'}}</button>
{{d-modal-cancel close=(action "closeModal")}} {{d-modal-cancel close=(route-action "closeModal")}}
</div> </div>

View File

@ -44,6 +44,6 @@
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
{{d-button action="importTheme" disabled=importDisabled class='btn btn-primary' icon='upload' label='admin.customize.import'}} {{d-button action=(action "importTheme") disabled=importDisabled class='btn btn-primary' icon='upload' label='admin.customize.import'}}
{{d-modal-cancel close=(action "closeModal")}} {{d-modal-cancel close=(route-action "closeModal")}}
</div> </div>

View File

@ -19,5 +19,5 @@
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
{{d-button action=(action "closeModal") label="close"}} {{d-button action=(route-action "closeModal") label="close"}}
</div> </div>

View File

@ -27,10 +27,10 @@
<div class="modal-footer"> <div class="modal-footer">
{{d-button {{d-button
class="btn-danger perform-silence" class="btn-danger perform-silence"
action="silence" action=(action "silence")
disabled=submitDisabled disabled=submitDisabled
icon="microphone-slash" icon="microphone-slash"
label="admin.user.silence"}} label="admin.user.silence"}}
{{d-modal-cancel close=(action "closeModal")}} {{d-modal-cancel close=(route-action "closeModal")}}
{{conditional-loading-spinner condition=loading size="small"}} {{conditional-loading-spinner condition=loading size="small"}}
</div> </div>

View File

@ -2,5 +2,5 @@
<pre>{{model.details}}</pre> <pre>{{model.details}}</pre>
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
{{d-button action=(action "closeModal") label="close"}} {{d-button action=(route-action "closeModal") label="close"}}
</div> </div>

View File

@ -34,10 +34,10 @@
<div class="modal-footer"> <div class="modal-footer">
{{d-button {{d-button
class="btn-danger perform-suspend" class="btn-danger perform-suspend"
action="suspend" action=(action "suspend")
disabled=submitDisabled disabled=submitDisabled
icon="ban" icon="ban"
label="admin.user.suspend"}} label="admin.user.suspend"}}
{{d-modal-cancel close=(action "closeModal")}} {{d-modal-cancel close=(route-action "closeModal")}}
{{conditional-loading-spinner condition=loading size="small"}} {{conditional-loading-spinner condition=loading size="small"}}
</div> </div>

View File

@ -3,6 +3,6 @@
{{{diff}}} {{{diff}}}
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
<button class='btn btn-primary' {{action "closeModal"}}>{{i18n 'close'}}</button> {{d-button class="btn btn-primary" action=(route-action "closeModal") label="close"}}
</div> </div>
</div> </div>

View File

@ -11,5 +11,5 @@
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">
{{d-button action=(action "close") label="close"}} {{d-button action=(action "close") label="close"}}
{{images-uploader uploading=uploading done="uploadDone" class="pull-right"}} {{images-uploader uploading=uploading done=(action "uploadDone") class="pull-right"}}
</div> </div>

View File

@ -4,7 +4,7 @@
<div class="permalink-search"> <div class="permalink-search">
{{text-field value=filter class="url-input" placeholderKey="admin.permalink.form.filter" autocorrect="off" autocapitalize="off"}} {{text-field value=filter class="url-input" placeholderKey="admin.permalink.form.filter" autocorrect="off" autocapitalize="off"}}
</div> </div>
{{permalink-form action="recordAdded"}} {{permalink-form action=(action "recordAdded")}}
<br/> <br/>
{{#conditional-loading-spinner condition=loading}} {{#conditional-loading-spinner condition=loading}}
@ -42,7 +42,7 @@
{{/if}} {{/if}}
</td> </td>
<td class="col action"> <td class="col action">
{{d-button action="destroy" actionParam=pl icon="trash-o" class="btn-danger"}} {{d-button action=(action "destroy") actionParam=pl icon="trash-o" class="btn-danger"}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}

View File

@ -49,7 +49,7 @@
<td class="settings"> <td class="settings">
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{#if plugin.enabled_setting}} {{#if plugin.enabled_setting}}
{{d-button class="btn-default" action="showSettings" actionParam=plugin icon="gear" label="admin.plugins.change_settings_short"}} {{d-button class="btn-default" action=(route-action "showSettings") actionParam=plugin icon="gear" label="admin.plugins.change_settings_short"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
</td> </td>

View File

@ -1,16 +1,16 @@
<div class='admin-controls'> <div class='admin-controls'>
<div class='controls'> <div class='controls'>
{{d-button action="toggleMenu" class="menu-toggle" icon="bars"}} {{d-button action=(action "toggleMenu") class="menu-toggle" icon="bars"}}
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{d-button label="admin.plugins.change_settings" {{d-button label="admin.plugins.change_settings"
icon="gear" icon="gear"
class="btn-default settings-button" class="btn-default settings-button"
action="showSettings"}} action=(route-action "showSettings")}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
<div class="admin-nav pull-left"> <div class="admin-nav pull-left">

View File

@ -1,9 +1,9 @@
<div class='admin-controls'> <div class='admin-controls'>
<div class='controls'> <div class='controls'>
{{d-button action="toggleMenu" class="menu-toggle" icon="bars"}} {{d-button action=(action "toggleMenu") class="menu-toggle" icon="bars"}}
{{text-field id="setting-filter" value=filter placeholderKey="type_to_filter" class="no-blur"}} {{text-field id="setting-filter" value=filter placeholderKey="type_to_filter" class="no-blur"}}
{{d-button class="btn-default" id="clear-filter" action="clearFilter" label="admin.site_settings.clear_filter"}} {{d-button class="btn-default" id="clear-filter" action=(action "clearFilter") label="admin.site_settings.clear_filter"}}
</div> </div>
<div class='search controls'> <div class='search controls'>
<label> <label>

View File

@ -6,9 +6,9 @@
{{expanding-text-area value=buffered.value rows="1" class="site-text-value"}} {{expanding-text-area value=buffered.value rows="1" class="site-text-value"}}
{{#save-controls model=siteText action="saveChanges" saved=saved}} {{#save-controls model=siteText action=(action "saveChanges") saved=saved}}
{{#if siteText.can_revert}} {{#if siteText.can_revert}}
{{d-button action="revertChanges" label="admin.site_text.revert" class="revert-site-text"}} {{d-button action=(action "revertChanges") label="admin.site_text.revert" class="revert-site-text"}}
{{/if}} {{/if}}
{{/save-controls}} {{/save-controls}}

View File

@ -5,10 +5,10 @@
placeholderKey="admin.site_text.search" placeholderKey="admin.site_text.search"
class="no-blur site-text-search" class="no-blur site-text-search"
autofocus="true" autofocus="true"
key-up="search"}} key-up=(action "search")}}
<div class='extra-options'> <div class='extra-options'>
{{d-checkbox label="admin.site_text.show_overriden" checked=overridden change="search"}} {{d-checkbox label="admin.site_text.show_overriden" checked=overridden change=(action "search")}}
</div> </div>
</div> </div>
@ -18,6 +18,6 @@
{{/if}} {{/if}}
{{#each siteTexts as |siteText|}} {{#each siteTexts as |siteText|}}
{{site-text-summary siteText=siteText editAction="edit" term=q searchRegex=siteTexts.extras.regex}} {{site-text-summary siteText=siteText editAction=(action "edit") term=q searchRegex=siteTexts.extras.regex}}
{{/each}} {{/each}}
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}

View File

@ -9,15 +9,15 @@
fieldTypes=fieldTypes fieldTypes=fieldTypes
firstField=sortedFields.firstObject firstField=sortedFields.firstObject
lastField=sortedFields.lastObject lastField=sortedFields.lastObject
destroyAction="destroy" destroyAction=(action "destroy")
moveUpAction="moveUp" moveUpAction=(action "moveUp")
moveDownAction="moveDown"}} moveDownAction=(action "moveDown")}}
{{/each}} {{/each}}
{{/if}} {{/if}}
{{d-button disabled=createDisabled {{d-button disabled=createDisabled
class="btn-primary" class="btn-primary"
action="createField" action=(action "createField")
label="admin.user_fields.create" label="admin.user_fields.create"
icon="plus"}} icon="plus"}}

View File

@ -8,11 +8,11 @@
{{/if}} {{/if}}
{{#if model.can_view_action_logs}} {{#if model.can_view_action_logs}}
{{d-button action="viewActionLogs" class="btn-default" actionParam=model.username icon="list-alt" label="admin.user.action_logs"}} {{d-button action=(action "viewActionLogs") class="btn-default" actionParam=model.username icon="list-alt" label="admin.user.action_logs"}}
{{/if}} {{/if}}
{{#if model.active}} {{#if model.active}}
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{d-button class="btn-default" action="logOut" icon="power-off" label="admin.user.log_out"}} {{d-button class="btn-default" action=(action "logOut") icon="power-off" label="admin.user.log_out"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{plugin-outlet name="admin-user-controls-after" args=(hash model=model) tagName="" connectorTagName=""}} {{plugin-outlet name="admin-user-controls-after" args=(hash model=model) tagName="" connectorTagName=""}}
@ -44,7 +44,7 @@
{{#if model.email}} {{#if model.email}}
<a href="mailto:{{unbound model.email}}">{{model.email}}</a> <a href="mailto:{{unbound model.email}}">{{model.email}}</a>
{{else}} {{else}}
{{d-button class="btn-default" action="checkEmail" actionParam=model icon="envelope-o" label="admin.users.check_email.text" title="admin.users.check_email.title"}} {{d-button class="btn-default" action=(route-action "checkEmail") actionParam=model icon="envelope-o" label="admin.users.check_email.text" title="admin.users.check_email.title"}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@ -64,7 +64,7 @@
{{i18n 'user.email.no_secondary'}} {{i18n 'user.email.no_secondary'}}
{{/if}} {{/if}}
{{else}} {{else}}
{{d-button action="checkEmail" {{d-button action=(route-action "checkEmail")
class="btn-default" class="btn-default"
actionParam=model actionParam=model
icon="envelope-o" icon="envelope-o"
@ -79,7 +79,7 @@
<div class='value'>{{model.bounceScore}}</div> <div class='value'>{{model.bounceScore}}</div>
<div class='controls'> <div class='controls'>
{{#if model.canResetBounceScore}} {{#if model.canResetBounceScore}}
{{d-button class="btn-default" action="resetBounceScore" label="admin.user.reset_bounce_score.label" title="admin.user.reset_bounce_score.title"}} {{d-button class="btn-default" action=(action "resetBounceScore") label="admin.user.reset_bounce_score.label" title="admin.user.reset_bounce_score.title"}}
{{/if}} {{/if}}
{{model.bounceScoreExplanation}} {{model.bounceScoreExplanation}}
</div> </div>
@ -91,7 +91,7 @@
{{#if associatedAccountsLoaded}} {{#if associatedAccountsLoaded}}
{{associatedAccounts}} {{associatedAccounts}}
{{else}} {{else}}
{{d-button class="btn-default" action="checkEmail" actionParam=model icon="envelope-o" label="admin.users.check_email.text" title="admin.users.check_email.title"}} {{d-button class="btn-default" action=(route-action "checkEmail") actionParam=model icon="envelope-o" label="admin.users.check_email.text" title="admin.users.check_email.title"}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@ -117,7 +117,7 @@
<div class='value'>{{model.ip_address}}</div> <div class='value'>{{model.ip_address}}</div>
<div class='controls'> <div class='controls'>
{{#if currentUser.staff}} {{#if currentUser.staff}}
{{d-button class="btn-default" action="refreshBrowsers" label="admin.user.refresh_browsers"}} {{d-button class="btn-default" action=(action "refreshBrowsers") label="admin.user.refresh_browsers"}}
{{ip-lookup ip=model.ip_address userId=model.id}} {{ip-lookup ip=model.ip_address userId=model.id}}
{{/if}} {{/if}}
</div> </div>
@ -156,7 +156,7 @@
</div> </div>
<div class='controls'> <div class='controls'>
{{#if canDisableSecondFactor}} {{#if canDisableSecondFactor}}
{{d-button class="btn-default" action="disableSecondFactor" icon="unlock-alt" label="user.second_factor.disable"}} {{d-button class="btn-default" action=(action "disableSecondFactor") icon="unlock-alt" label="user.second_factor.disable"}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@ -201,7 +201,7 @@
{{i18n 'admin.user.approve_success'}} {{i18n 'admin.user.approve_success'}}
{{else}} {{else}}
{{#if model.can_approve}} {{#if model.can_approve}}
{{d-button class="btn-default" action="approve" icon="check" label="admin.user.approve"}} {{d-button class="btn-default" action=(action "approve") icon="check" label="admin.user.approve"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
@ -214,15 +214,15 @@
<div class='controls'> <div class='controls'>
{{#if model.active}} {{#if model.active}}
{{#if model.can_deactivate}} {{#if model.can_deactivate}}
{{d-button class="btn-default" action="deactivate" label="admin.user.deactivate_account"}} {{d-button class="btn-default" action=(action "deactivate") label="admin.user.deactivate_account"}}
{{i18n 'admin.user.deactivate_explanation'}} {{i18n 'admin.user.deactivate_explanation'}}
{{/if}} {{/if}}
{{else}} {{else}}
{{#if model.can_send_activation_email}} {{#if model.can_send_activation_email}}
{{d-button class="btn-default" action="sendActivationEmail" icon="envelope" label="admin.user.send_activation_email"}} {{d-button class="btn-default" action=(action "sendActivationEmail") icon="envelope" label="admin.user.send_activation_email"}}
{{/if}} {{/if}}
{{#if model.can_activate}} {{#if model.can_activate}}
{{d-button class="btn-default" action="activate" icon="check" label="admin.user.activate"}} {{d-button class="btn-default" action=(action "activate") icon="check" label="admin.user.activate"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
@ -240,15 +240,15 @@
{{#if model.api_key}} {{#if model.api_key}}
<div class='long-value'> <div class='long-value'>
{{model.api_key.key}} {{model.api_key.key}}
{{d-button class="btn-default" action="regenerateApiKey" icon="undo" label="admin.api.regenerate"}} {{d-button class="btn-default" action=(action "regenerateApiKey") icon="undo" label="admin.api.regenerate"}}
{{d-button class="btn-default" action="revokeApiKey" icon="times" label="admin.api.revoke"}} {{d-button class="btn-default" action=(action "revokeApiKey") icon="times" label="admin.api.revoke"}}
</div> </div>
{{else}} {{else}}
<div class='value'> <div class='value'>
&mdash; &mdash;
</div> </div>
<div class='controls'> <div class='controls'>
{{d-button class="btn-default" action="generateApiKey" icon="key" label="admin.api.generate"}} {{d-button class="btn-default" action=(action "generateApiKey") icon="key" label="admin.api.generate"}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
@ -259,10 +259,10 @@
<div class='value'>{{i18n-yes-no model.admin}}</div> <div class='value'>{{i18n-yes-no model.admin}}</div>
<div class='controls'> <div class='controls'>
{{#if model.can_revoke_admin}} {{#if model.can_revoke_admin}}
{{d-button class="btn-default" action="revokeAdmin" icon="shield" label="admin.user.revoke_admin"}} {{d-button class="btn-default" action=(action "revokeAdmin") icon="shield" label="admin.user.revoke_admin"}}
{{/if}} {{/if}}
{{#if model.can_grant_admin}} {{#if model.can_grant_admin}}
{{d-button class="btn-default" action="grantAdmin" icon="shield" label="admin.user.grant_admin"}} {{d-button class="btn-default" action=(action "grantAdmin") icon="shield" label="admin.user.grant_admin"}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@ -272,10 +272,10 @@
<div class='value'>{{i18n-yes-no model.moderator}}</div> <div class='value'>{{i18n-yes-no model.moderator}}</div>
<div class='controls'> <div class='controls'>
{{#if model.can_revoke_moderation}} {{#if model.can_revoke_moderation}}
{{d-button class="btn-default" action="revokeModeration" icon="shield" label="admin.user.revoke_moderation"}} {{d-button class="btn-default" action=(action "revokeModeration") icon="shield" label="admin.user.revoke_moderation"}}
{{/if}} {{/if}}
{{#if model.can_grant_moderation}} {{#if model.can_grant_moderation}}
{{d-button class="btn-default" action="grantModeration" icon="shield" label="admin.user.grant_moderation"}} {{d-button class="btn-default" action=(action "grantModeration") icon="shield" label="admin.user.grant_moderation"}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@ -286,8 +286,8 @@
{{combo-box content=site.trustLevels value=model.trust_level nameProperty="detailedName"}} {{combo-box content=site.trustLevels value=model.trust_level nameProperty="detailedName"}}
{{#if model.dirty}} {{#if model.dirty}}
<div> <div>
{{d-button class="ok no-text" action="saveTrustLevel" icon="check"}} {{d-button class="ok no-text" action=(action "saveTrustLevel") icon="check"}}
{{d-button class="cancel no-text" action="restoreTrustLevel" icon="times"}} {{d-button class="cancel no-text" action=(action "restoreTrustLevel") icon="times"}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
@ -295,10 +295,10 @@
{{#if model.canLockTrustLevel}} {{#if model.canLockTrustLevel}}
{{#if hasLockedTrustLevel}} {{#if hasLockedTrustLevel}}
{{d-icon "lock" title="admin.user.trust_level_locked_tip"}} {{d-icon "lock" title="admin.user.trust_level_locked_tip"}}
{{d-button class="btn-default" action="lockTrustLevel" actionParam=false label="admin.user.unlock_trust_level"}} {{d-button class="btn-default" action=(action "lockTrustLevel") actionParam=false label="admin.user.unlock_trust_level"}}
{{else}} {{else}}
{{d-icon "unlock" title="admin.user.trust_level_unlocked_tip"}} {{d-icon "unlock" title="admin.user.trust_level_unlocked_tip"}}
{{d-button class="btn-default" action="lockTrustLevel" actionParam=true label="admin.user.lock_trust_level"}} {{d-button class="btn-default" action=(action "lockTrustLevel") actionParam=true label="admin.user.lock_trust_level"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#if model.tl3Requirements}} {{#if model.tl3Requirements}}
@ -367,7 +367,7 @@
{{#if model.silenced}} {{#if model.silenced}}
{{d-button {{d-button
class="btn-danger unsilence-user" class="btn-danger unsilence-user"
action="unsilence" action=(action "unsilence")
icon="microphone-slash" icon="microphone-slash"
label="admin.user.unsilence"}} label="admin.user.unsilence"}}
{{i18n 'admin.user.silence_explanation'}} {{i18n 'admin.user.silence_explanation'}}
@ -429,8 +429,8 @@
</div> </div>
{{#if customGroupsDirty}} {{#if customGroupsDirty}}
<div class='controls'> <div class='controls'>
{{d-button icon="check" class="ok" action="saveCustomGroups"}} {{d-button icon="check" class="ok" action=(action "saveCustomGroups")}}
{{d-button icon="times" class="cancel" action="resetCustomGroups"}} {{d-button icon="times" class="cancel" action=(action "resetCustomGroups")}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
@ -442,8 +442,8 @@
</div> </div>
{{#if primaryGroupDirty}} {{#if primaryGroupDirty}}
<div class='controls'> <div class='controls'>
{{d-button icon="check" class="ok" action="savePrimaryGroup"}} {{d-button icon="check" class="ok" action=(action "savePrimaryGroup")}}
{{d-button icon="times" class="cancel" action="resetPrimaryGroup"}} {{d-button icon="times" class="cancel" action=(action "resetPrimaryGroup")}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
@ -480,7 +480,7 @@
<div class='controls'> <div class='controls'>
{{#if model.can_delete_all_posts}} {{#if model.can_delete_all_posts}}
{{#if model.post_count}} {{#if model.post_count}}
{{d-button class="btn-danger" action="deleteAllPosts" icon="trash-o" label="admin.user.delete_all_posts"}} {{d-button class="btn-danger" action=(action "deleteAllPosts") icon="trash-o" label="admin.user.delete_all_posts"}}
{{/if}} {{/if}}
{{else}} {{else}}
{{deleteAllPostsExplanation}} {{deleteAllPostsExplanation}}
@ -563,7 +563,7 @@
<div class="pull-right"> <div class="pull-right">
{{#if model.active}} {{#if model.active}}
{{#if model.can_impersonate}} {{#if model.can_impersonate}}
{{d-button class="btn-danger" action="impersonate" icon="crosshairs" label="admin.impersonate.title" title="admin.impersonate.help"}} {{d-button class="btn-danger" action=(action "impersonate") icon="crosshairs" label="admin.impersonate.title" title="admin.impersonate.help"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
@ -571,14 +571,14 @@
{{d-button label="admin.user.anonymize" {{d-button label="admin.user.anonymize"
icon="exclamation-triangle" icon="exclamation-triangle"
class="btn-danger" class="btn-danger"
action="anonymize"}} action=(action "anonymize")}}
{{/if}} {{/if}}
{{#if model.canBeDeleted}} {{#if model.canBeDeleted}}
{{d-button label="admin.user.delete" {{d-button label="admin.user.delete"
icon="exclamation-triangle" icon="exclamation-triangle"
class="btn-danger" class="btn-danger"
action="destroy"}} action=(action "destroy")}}
{{/if}} {{/if}}
</div> </div>

View File

@ -14,10 +14,10 @@
{{nav-item route='groups' label='groups.index.title'}} {{nav-item route='groups' label='groups.index.title'}}
<div class="admin-actions"> <div class="admin-actions">
{{#unless siteSettings.enable_sso}} {{#unless siteSettings.enable_sso}}
{{d-button class="btn-default" action="sendInvites" title="admin.invite.button_title" icon="user-plus" label="admin.invite.button_text"}} {{d-button class="btn-default" action=(route-action "sendInvites") title="admin.invite.button_title" icon="user-plus" label="admin.invite.button_text"}}
{{/unless}} {{/unless}}
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{d-button class="btn-default" action="exportUsers" title="admin.export_csv.button_title.user" icon="download" label="admin.export_csv.button_text"}} {{d-button class="btn-default" action=(route-action "exportUsers") title="admin.export_csv.button_title.user" icon="download" label="admin.export_csv.button_text"}}
{{/if}} {{/if}}
</div> </div>
</ul> </ul>

View File

@ -5,11 +5,11 @@
<div class="watched-word-controls"> <div class="watched-word-controls">
{{watched-word-form {{watched-word-form
actionKey=actionNameKey actionKey=actionNameKey
action="recordAdded" action=(action "recordAdded")
filteredContent=filteredContent filteredContent=filteredContent
regularExpressions=adminWatchedWords.regularExpressions}} regularExpressions=adminWatchedWords.regularExpressions}}
{{watched-word-uploader uploading=uploading actionKey=actionNameKey done="uploadComplete"}} {{watched-word-uploader uploading=uploading actionKey=actionNameKey done=(action "uploadComplete")}}
</div> </div>
<div> <div>
<label class="show-words-checkbox"> <label class="show-words-checkbox">
@ -20,7 +20,7 @@
<div class="watched-words-list"> <div class="watched-words-list">
{{#if showWordsList}} {{#if showWordsList}}
{{#each filteredContent as |word| }} {{#each filteredContent as |word| }}
<div class="watched-word-box">{{admin-watched-word word=word action="recordRemoved"}}</div> <div class="watched-word-box">{{admin-watched-word word=word action=(action "recordRemoved")}}</div>
{{/each}} {{/each}}
{{else}} {{else}}
{{i18n 'admin.watched_words.word_count' count=wordCount}} {{i18n 'admin.watched_words.word_count' count=wordCount}}

View File

@ -1,8 +1,8 @@
<div class='admin-controls'> <div class='admin-controls'>
<div class='controls'> <div class='controls'>
{{d-button action="toggleMenu" class="menu-toggle" icon="bars"}} {{d-button action=(action "toggleMenu") class="menu-toggle" icon="bars"}}
{{text-field value=filter placeholderKey="admin.watched_words.search" class="no-blur"}} {{text-field value=filter placeholderKey="admin.watched_words.search" class="no-blur"}}
{{d-button action="clearFilter" label="admin.watched_words.clear_filter"}} {{d-button action=(action "clearFilter") label="admin.watched_words.clear_filter"}}
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
{{#link-to 'adminWebHooks' tagName='button' classNames='btn'}} {{#link-to 'adminWebHooks' tagName='button' classNames='btn'}}
{{d-icon 'list'}} {{i18n 'admin.web_hooks.events.go_list'}} {{d-icon 'list'}} {{i18n 'admin.web_hooks.events.go_list'}}
{{/link-to}} {{/link-to}}
{{d-button icon="paper-plane" label="admin.web_hooks.events.ping" action="ping" disabled=pingDisabled}} {{d-button icon="paper-plane" label="admin.web_hooks.events.ping" action=(action "ping") disabled=pingDisabled}}
{{#link-to 'adminWebHooks.show' model.extras.web_hook_id tagName='button' classNames='btn'}} {{#link-to 'adminWebHooks.show' model.extras.web_hook_id tagName='button' classNames='btn'}}
{{d-icon 'far-edit'}} {{i18n 'admin.web_hooks.events.go_details'}} {{d-icon 'far-edit'}} {{i18n 'admin.web_hooks.events.go_details'}}
{{/link-to}} {{/link-to}}
@ -10,7 +10,7 @@
<div class='web-hook-events-listing'> <div class='web-hook-events-listing'>
{{#if model}} {{#if model}}
{{#load-more selector=".web-hook-events li" action="loadMore"}} {{#load-more selector=".web-hook-events li" action=(action "loadMore")}}
<div class='web-hook-events content-list'> <div class='web-hook-events content-list'>
<div class='heading-container'> <div class='heading-container'>
<div class='col heading first status'>{{i18n 'admin.web_hooks.events.status'}}</div> <div class='col heading first status'>{{i18n 'admin.web_hooks.events.status'}}</div>

View File

@ -81,9 +81,10 @@
</form> </form>
<div class='controls'> <div class='controls'>
<button class='btn btn-default' {{action 'save'}} disabled={{saveButtonDisabled}}>{{saveButtonText}}</button> {{d-button class="btn-default" translatedLabel=saveButtonText action=(action "save") disabled=saveButtonDisabled}}
{{#unless model.isNew}} {{#unless model.isNew}}
{{d-button class="btn-danger" label="admin.web_hooks.destroy" action="destroy"}} {{d-button class="btn-danger" label="admin.web_hooks.destroy" action=(action "destroy")}}
{{#link-to 'adminWebHooks.showEvents' model.id class="btn"}} {{#link-to 'adminWebHooks.showEvents' model.id class="btn"}}
{{i18n 'admin.web_hooks.events.go_events'}} {{i18n 'admin.web_hooks.events.go_events'}}
{{/link-to}} {{/link-to}}

View File

@ -7,7 +7,7 @@
{{/link-to}} {{/link-to}}
</div> </div>
{{#if model}} {{#if model}}
{{#load-more selector=".web-hooks tr" action="loadMore"}} {{#load-more selector=".web-hooks tr" action=(action "loadMore")}}
<table class='web-hooks grid'> <table class='web-hooks grid'>
<thead> <thead>
<tr> <tr>
@ -25,7 +25,7 @@
<td class='description'>{{webHook.description}}</td> <td class='description'>{{webHook.description}}</td>
<td class='controls'> <td class='controls'>
{{#link-to 'adminWebHooks.show' webHook tagName='button' classNames='btn btn-default no-text'}}{{d-icon 'far-edit'}}{{/link-to}} {{#link-to 'adminWebHooks.show' webHook tagName='button' classNames='btn btn-default no-text'}}{{d-icon 'far-edit'}}{{/link-to}}
{{d-button class="destroy btn-danger" action='destroy' actionParam=webHook icon="remove"}} {{d-button class="destroy btn-danger" action=(action "destroy") actionParam=webHook icon="remove"}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}

View File

@ -24,10 +24,6 @@ RawHandlebars.helpers["get"] = function(context, options) {
context = context.slice(context.indexOf(".") + 1); context = context.slice(context.indexOf(".") + 1);
} }
if (val && val.isDescriptor) {
return Em.get(firstContext, context);
}
return val === undefined ? Em.get(firstContext, context) : val; return val === undefined ? Em.get(firstContext, context) : val;
}; };

View File

@ -29,10 +29,10 @@ export default DropdownSelectBoxComponent.extend({
onSelect(id) { onSelect(id) {
switch (id) { switch (id) {
case "notYou": case "notYou":
this.sendAction("showToken", this.get("token")); this.showToken(this.get("token"));
break; break;
case "logOut": case "logOut":
this.sendAction("revokeAuthToken", this.get("token")); this.revokeAuthToken(this.get("token"));
break; break;
} }
} }

View File

@ -24,7 +24,7 @@ export default Em.Component.extend(UploadMixin, {
uploadedAvatarId: upload.id uploadedAvatarId: upload.id
}); });
this.sendAction("done"); this.done();
}, },
@computed("user_id") @computed("user_id")

View File

@ -17,7 +17,7 @@ export default Em.Component.extend(UploadMixin, {
}, },
uploadDone() { uploadDone() {
this.sendAction("done"); this.done();
}, },
calculateUploadUrl() { calculateUploadUrl() {

View File

@ -66,11 +66,5 @@ export default Ember.Component.extend({
} }
return false; return false;
} }
},
actions: {
showInserted() {
this.sendAction("showInserted");
}
} }
}); });

View File

@ -12,7 +12,11 @@ export default Ember.Component.extend({
}, },
title: "topics.bulk.actions" title: "topics.bulk.actions"
}); });
controller.set("refreshClosure", () => this.sendAction());
const action = this.get("action");
if (action) {
controller.set("refreshClosure", () => action());
}
} }
} }
}); });

View File

@ -22,6 +22,6 @@ export default Ember.Component.extend({
click(e) { click(e) {
e.preventDefault(); e.preventDefault();
this.sendAction("selectColor", this.get("color")); this.selectColor(this.get("color"));
} }
}); });

View File

@ -58,7 +58,7 @@ export default Ember.Component.extend(KeyEnterEscape, {
}, },
keyUp() { keyUp() {
this.sendAction("typed"); this.typed();
const lastKeyUp = new Date(); const lastKeyUp = new Date();
this._lastKeyUp = lastKeyUp; this._lastKeyUp = lastKeyUp;
@ -117,6 +117,6 @@ export default Ember.Component.extend(KeyEnterEscape, {
}, },
click() { click() {
this.sendAction("openIfDraft"); this.openIfDraft();
} }
}); });

View File

@ -546,7 +546,7 @@ export default Ember.Component.extend({
const $e = $(e); const $e = $(e);
var name = $e.data("name"); var name = $e.data("name");
if (found.indexOf(name) === -1) { if (found.indexOf(name) === -1) {
this.sendAction("groupsMentioned", [ this.groupsMentioned([
{ {
name: name, name: name,
user_count: $e.data("mentionable-user-count"), user_count: $e.data("mentionable-user-count"),
@ -590,7 +590,7 @@ export default Ember.Component.extend({
$preview.find('.mention.cannot-see[data-name="' + name + '"]') $preview.find('.mention.cannot-see[data-name="' + name + '"]')
.length > 0 .length > 0
) { ) {
this.sendAction("cannotSeeMention", [{ name: name }]); this.cannotSeeMention([{ name }]);
found.push(name); found.push(name);
} }
}, },
@ -789,23 +789,27 @@ export default Ember.Component.extend({
this._teardownInputPreviewSync(); this._teardownInputPreviewSync();
}, },
showUploadSelector(toolbarEvent) {
this.send("showUploadSelector", toolbarEvent);
},
onExpandPopupMenuOptions(toolbarEvent) {
const selected = toolbarEvent.selected;
toolbarEvent.selectText(selected.start, selected.end - selected.start);
this.storeToolbarState(toolbarEvent);
},
actions: { actions: {
importQuote(toolbarEvent) { importQuote(toolbarEvent) {
this.sendAction("importQuote", toolbarEvent); this.importQuote(toolbarEvent);
}, },
onExpandPopupMenuOptions(toolbarEvent) { onExpandPopupMenuOptions(toolbarEvent) {
const selected = toolbarEvent.selected; this.onExpandPopupMenuOptions(toolbarEvent);
toolbarEvent.selectText(selected.start, selected.end - selected.start);
this.sendAction("storeToolbarState", toolbarEvent);
}, },
togglePreview() { togglePreview() {
this.sendAction("togglePreview"); this.togglePreview();
},
showUploadModal(toolbarEvent) {
this.sendAction("showUploadSelector", toolbarEvent);
}, },
extraButtons(toolbar) { extraButtons(toolbar) {
@ -813,7 +817,7 @@ export default Ember.Component.extend({
id: "quote", id: "quote",
group: "fontStyles", group: "fontStyles",
icon: "comment-o", icon: "comment-o",
sendAction: "importQuote", sendAction: this.get("importQuote"),
title: "composer.quote_post_title", title: "composer.quote_post_title",
unshift: true unshift: true
}); });
@ -824,7 +828,7 @@ export default Ember.Component.extend({
group: "insertions", group: "insertions",
icon: this.get("uploadIcon"), icon: this.get("uploadIcon"),
title: "upload", title: "upload",
sendAction: "showUploadModal" sendAction: this.get("showUploadModal")
}); });
} }
@ -833,7 +837,7 @@ export default Ember.Component.extend({
group: "extras", group: "extras",
icon: "gear", icon: "gear",
title: "composer.options", title: "composer.options",
sendAction: "onExpandPopupMenuOptions", sendAction: this.onExpandPopupMenuOptions.bind(this),
popupMenu: true popupMenu: true
}); });
@ -843,7 +847,7 @@ export default Ember.Component.extend({
group: "mobileExtras", group: "mobileExtras",
icon: "television", icon: "television",
title: "composer.show_preview", title: "composer.show_preview",
sendAction: "togglePreview" sendAction: this.get("togglePreview")
}); });
} }
}, },
@ -952,7 +956,7 @@ export default Ember.Component.extend({
} }
this.trigger("previewRefreshed", $preview); this.trigger("previewRefreshed", $preview);
this.sendAction("afterRefresh", $preview); this.afterRefresh($preview);
} }
} }
}); });

View File

@ -16,7 +16,7 @@ export default Ember.Component.extend({
actions: { actions: {
closeMessage() { closeMessage() {
this.sendAction("closeMessage", this.get("message")); this.closeMessage(this.get("message"));
} }
} }
}); });

View File

@ -166,7 +166,7 @@ export default Ember.Component.extend({
if (similarTopics.get("length") > 0) { if (similarTopics.get("length") > 0) {
message.set("similarTopics", similarTopics); message.set("similarTopics", similarTopics);
this.send("popup", message); this.send("popup", message);
} else if (message) { } else if (message && !(this.isDestroyed || this.isDestroying)) {
this.send("hideMessage", message); this.send("hideMessage", message);
} }
}); });
@ -200,10 +200,7 @@ export default Ember.Component.extend({
// Checking composer messages on replies can give us a list of links to check for // Checking composer messages on replies can give us a list of links to check for
// duplicates // duplicates
if (messages.extras && messages.extras.duplicate_lookup) { if (messages.extras && messages.extras.duplicate_lookup) {
this.sendAction( this.addLinkLookup(new LinkLookup(messages.extras.duplicate_lookup));
"addLinkLookup",
new LinkLookup(messages.extras.duplicate_lookup)
);
} }
this.set("checkedMessages", true); this.set("checkedMessages", true);

View File

@ -12,7 +12,7 @@ export default Ember.Component.extend({
if (!this.get("disabled") && e.keyCode === 13) { if (!this.get("disabled") && e.keyCode === 13) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.sendAction(); this.action();
return false; return false;
} }
}); });

View File

@ -37,7 +37,12 @@ export default Ember.Component.extend({
}, },
click() { click() {
this.sendAction("action", this.get("actionParam")); if (typeof this.get("action") === "string") {
this.sendAction("action", this.get("actionParam"));
} else {
this.get("action")(this.get("actionParam"));
}
return false; return false;
} }
}); });

View File

@ -13,7 +13,7 @@ export default Ember.Component.extend({
// In Ember 13.3 we can use action on the checkbox `{{input}}` but not in 1.11 // In Ember 13.3 we can use action on the checkbox `{{input}}` but not in 1.11
this.$("input").on("click.d-checkbox", () => { this.$("input").on("click.d-checkbox", () => {
Ember.run.scheduleOnce("afterRender", () => Ember.run.scheduleOnce("afterRender", () =>
this.sendAction("change", this.$("input").prop("checked")) this.change(this.$("input").prop("checked"))
); );
}); });
}, },

View File

@ -51,7 +51,7 @@ export default Ember.Component.extend({
actions: { actions: {
ok() { ok() {
this.set("hidden", true); this.set("hidden", true);
this.sendAction("okAction"); this.okAction();
}, },
cancel() { cancel() {

View File

@ -7,9 +7,6 @@ import {
import { categoryHashtagTriggerRule } from "discourse/lib/category-hashtags"; import { categoryHashtagTriggerRule } from "discourse/lib/category-hashtags";
import { search as searchCategoryTag } from "discourse/lib/category-tag-search"; import { search as searchCategoryTag } from "discourse/lib/category-tag-search";
import { cookAsync } from "discourse/lib/text"; import { cookAsync } from "discourse/lib/text";
import { translations } from "pretty-text/emoji/data";
import { emojiSearch, isSkinTonableEmoji } from "pretty-text/emoji";
import { emojiUrlFor } from "discourse/lib/text";
import { getRegister } from "discourse-common/lib/get-owner"; import { getRegister } from "discourse-common/lib/get-owner";
import { findRawTemplate } from "discourse/lib/raw-templates"; import { findRawTemplate } from "discourse/lib/raw-templates";
import { siteDir } from "discourse/lib/text-direction"; import { siteDir } from "discourse/lib/text-direction";
@ -20,6 +17,9 @@ import {
import toMarkdown from "discourse/lib/to-markdown"; import toMarkdown from "discourse/lib/to-markdown";
import deprecated from "discourse-common/lib/deprecated"; import deprecated from "discourse-common/lib/deprecated";
import { wantsNewWindow } from "discourse/lib/intercept-click"; import { wantsNewWindow } from "discourse/lib/intercept-click";
import { translations } from "pretty-text/emoji/data";
import { emojiSearch, isSkinTonableEmoji } from "pretty-text/emoji";
import { emojiUrlFor } from "discourse/lib/text";
// Our head can be a static string or a function that returns a string // Our head can be a static string or a function that returns a string
// based on input (like for numbered lists). // based on input (like for numbered lists).
@ -55,6 +55,7 @@ class Toolbar {
constructor(opts) { constructor(opts) {
const { site, siteSettings } = opts; const { site, siteSettings } = opts;
this.shortcuts = {}; this.shortcuts = {};
this.context = null;
this.groups = [ this.groups = [
{ group: "fontStyles", buttons: [] }, { group: "fontStyles", buttons: [] },
@ -87,7 +88,7 @@ class Toolbar {
id: "link", id: "link",
group: "insertions", group: "insertions",
shortcut: "K", shortcut: "K",
action: "showLinkModal" action: (...args) => this.context.send("showLinkModal", args)
}); });
} }
@ -107,7 +108,7 @@ class Toolbar {
id: "code", id: "code",
group: "insertions", group: "insertions",
shortcut: "Shift+C", shortcut: "Shift+C",
action: "formatCode" action: (...args) => this.context.send("formatCode", args)
}); });
this.addButton({ this.addButton({
@ -158,7 +159,7 @@ class Toolbar {
className: button.className || button.id, className: button.className || button.id,
label: button.label, label: button.label,
icon: button.label ? null : button.icon || button.id, icon: button.label ? null : button.icon || button.id,
action: button.action || "toolbarButton", action: button.action || (a => this.context.send("toolbarButton", a)),
perform: button.perform || function() {}, perform: button.perform || function() {},
trimLeading: button.trimLeading, trimLeading: button.trimLeading,
popupMenu: button.popupMenu || false popupMenu: button.popupMenu || false
@ -220,8 +221,8 @@ export default Ember.Component.extend({
linkText: "", linkText: "",
lastSel: null, lastSel: null,
_mouseTrap: null, _mouseTrap: null,
emojiPickerIsActive: false,
showLink: true, showLink: true,
emojiPickerIsActive: false,
@computed("placeholder") @computed("placeholder")
placeholderTranslated(placeholder) { placeholderTranslated(placeholder) {
@ -238,15 +239,15 @@ export default Ember.Component.extend({
}, },
init() { init() {
this._super(); this._super(...arguments);
this.register = getRegister(this); this.register = getRegister(this);
}, },
didInsertElement() { didInsertElement() {
this._super(); this._super(...arguments);
const $editorInput = this.$(".d-editor-input"); const $editorInput = this.$(".d-editor-input");
this._applyEmojiAutocomplete($editorInput); this._applyEmojiAutocomplete($editorInput);
this._applyCategoryHashtagAutocomplete($editorInput); this._applyCategoryHashtagAutocomplete($editorInput);
@ -267,7 +268,7 @@ export default Ember.Component.extend({
Object.keys(shortcuts).forEach(sc => { Object.keys(shortcuts).forEach(sc => {
const button = shortcuts[sc]; const button = shortcuts[sc];
mouseTrap.bind(sc, () => { mouseTrap.bind(sc, () => {
this.send(button.action, button); button.action(button);
return false; return false;
}); });
}); });
@ -331,8 +332,13 @@ export default Ember.Component.extend({
const toolbar = new Toolbar( const toolbar = new Toolbar(
this.getProperties("site", "siteSettings", "showLink") this.getProperties("site", "siteSettings", "showLink")
); );
toolbar.context = this;
_createCallbacks.forEach(cb => cb(toolbar)); _createCallbacks.forEach(cb => cb(toolbar));
this.sendAction("extraButtons", toolbar);
if (this.extraButtons) {
this.extraButtons(toolbar);
}
return toolbar; return toolbar;
}, },
@ -355,7 +361,10 @@ export default Ember.Component.extend({
} }
const $preview = this.$(".d-editor-preview"); const $preview = this.$(".d-editor-preview");
if ($preview.length === 0) return; if ($preview.length === 0) return;
this.sendAction("previewUpdated", $preview);
if (this.previewUpdated) {
this.previewUpdated($preview);
}
}); });
}); });
}, },
@ -410,17 +419,10 @@ export default Ember.Component.extend({
}, },
onKeyUp(text, cp) { onKeyUp(text, cp) {
// Regular expressions used to extract emoji name from text. const matches = /(?:^|[^a-z])(:(?!:).?[\w-]*:?(?!:)(?:t\d?)?:?) ?$/gi.exec(
// The space version requires a ' ' (space) before the emoji name text.substring(0, cp)
// (i.e. ' :smile'), while the other one does not and is used );
// when enable_inline_emoji_translation is true.
const noSpaceColonEmoji = /(:(?!:).?[\w-]*:?(?!:)(?:t\d?)?:?) ?$/gi;
const spaceColonEmoji = /(?:^|[^a-z])(:(?!:).?[\w-]*:?(?!:)(?:t\d?)?:?) ?$/gi;
const regex = self.siteSettings.enable_inline_emoji_translation
? noSpaceColonEmoji
: spaceColonEmoji;
const matches = regex.exec(text.substring(0, cp));
if (matches && matches[1]) { if (matches && matches[1]) {
return [matches[1]]; return [matches[1]];
} }
@ -455,8 +457,8 @@ export default Ember.Component.extend({
const match = term.match(/^:?(.*?):t([2-6])?$/); const match = term.match(/^:?(.*?):t([2-6])?$/);
if (match) { if (match) {
let name = match[1]; const name = match[1];
let scale = match[2]; const scale = match[2];
if (isSkinTonableEmoji(name)) { if (isSkinTonableEmoji(name)) {
if (scale) { if (scale) {
@ -837,10 +839,17 @@ export default Ember.Component.extend({
}, },
actions: { actions: {
emoji() {
if (this.get("disabled")) {
return;
}
this.set("emojiPickerIsActive", !this.get("emojiPickerIsActive"));
},
emojiSelected(code) { emojiSelected(code) {
let selected = this._getSelected(); let selected = this._getSelected();
const captures = selected.pre.match(/\B:(\w*)$/); const captures = selected.pre.match(/\B:(\w*)$/);
if (_.isEmpty(captures)) { if (_.isEmpty(captures)) {
this._addText(selected, `:${code}:`); this._addText(selected, `:${code}:`);
} else { } else {
@ -875,7 +884,7 @@ export default Ember.Component.extend({
}; };
if (button.sendAction) { if (button.sendAction) {
return this.sendAction(button.sendAction, toolbarEvent); return button.sendAction(toolbarEvent);
} else { } else {
button.perform(toolbarEvent); button.perform(toolbarEvent);
} }
@ -962,13 +971,6 @@ export default Ember.Component.extend({
this._selectText(sel.start + 1, origLink.length); this._selectText(sel.start + 1, origLink.length);
} }
} }
},
emoji() {
if (this.get("disabled")) {
return;
}
this.set("emojiPickerIsActive", !this.get("emojiPickerIsActive"));
} }
} }
}); });

View File

@ -89,13 +89,13 @@ export default Ember.Component.extend({
actions: { actions: {
recheckPermission() { recheckPermission() {
this.propertyDidChange("notificationsPermission"); this.notifyPropertyChange("notificationsPermission");
}, },
turnoff() { turnoff() {
if (this.get("isEnabledDesktop")) { if (this.get("isEnabledDesktop")) {
this.set("notificationsDisabled", "disabled"); this.set("notificationsDisabled", "disabled");
this.propertyDidChange("notificationsPermission"); this.notifyPropertyChange("notificationsPermission");
} }
if (this.get("isEnabledPush")) { if (this.get("isEnabledPush")) {
unsubscribePushNotification(this.currentUser, () => { unsubscribePushNotification(this.currentUser, () => {
@ -113,7 +113,7 @@ export default Ember.Component.extend({
this.set("notificationsDisabled", ""); this.set("notificationsDisabled", "");
Notification.requestPermission(() => { Notification.requestPermission(() => {
confirmNotification(); confirmNotification();
this.propertyDidChange("notificationsPermission"); this.notifyPropertyChange("notificationsPermission");
}); });
} }
} }

View File

@ -10,7 +10,7 @@ export default Ember.Component.extend({
click(event) { click(event) {
if (event.target.tagName.toUpperCase() === "A") { if (event.target.tagName.toUpperCase() === "A") {
this.sendAction("action", this.get("actionParam")); this.action(this.get("actionParam"));
} }
return false; return false;

View File

@ -1,8 +1,5 @@
import { buildCategoryPanel } from "discourse/components/edit-category-panel"; import { buildCategoryPanel } from "discourse/components/edit-category-panel";
import { import { default as computed } from "ember-addons/ember-computed-decorators";
default as computed,
observes
} from "ember-addons/ember-computed-decorators";
export default buildCategoryPanel("images").extend({ export default buildCategoryPanel("images").extend({
@computed("category.uploaded_background.url") @computed("category.uploaded_background.url")
@ -10,39 +7,45 @@ export default buildCategoryPanel("images").extend({
return uploadedBackgroundUrl || ""; return uploadedBackgroundUrl || "";
}, },
@computed("category.uploaded_background.id")
backgroundImageId(uploadedBackgroundId) {
return uploadedBackgroundId || null;
},
@computed("category.uploaded_logo.url") @computed("category.uploaded_logo.url")
logoImageUrl(uploadedLogoUrl) { logoImageUrl(uploadedLogoUrl) {
return uploadedLogoUrl || ""; return uploadedLogoUrl || "";
}, },
@computed("category.uploaded_logo.id") actions: {
logoImageId(uploadedLogoId) { logoUploadDone(upload) {
return uploadedLogoId || null; this._setFromUpload("category.uploaded_logo", upload);
},
logoUploadDeleted() {
this._deleteUpload("category.uploaded_logo");
},
backgroundUploadDone(upload) {
this._setFromUpload("category.uploaded_background", upload);
},
backgroundUploadDeleted() {
this._deleteUpload("category.uploaded_background");
}
}, },
@observes("backgroundImageUrl", "backgroundImageId") _deleteUpload(path) {
_setBackgroundUpload() {
this.set( this.set(
"category.uploaded_background", path,
Ember.Object.create({ Ember.Object.create({
id: this.get("backgroundImageId"), id: null,
url: this.get("backgroundImageUrl") url: null
}) })
); );
}, },
@observes("logoImageUrl", "logoImageId") _setFromUpload(path, upload) {
_setLogoUpload() {
this.set( this.set(
"category.uploaded_logo", path,
Ember.Object.create({ Ember.Object.create({
id: this.get("logoImageId"), url: upload.url,
url: this.get("logoImageUrl") id: upload.id
}) })
); );
} }

View File

@ -72,7 +72,9 @@ export default Ember.Component.extend({
@observes("selection") @observes("selection")
_updateBasedOnLastPost() { _updateBasedOnLastPost() {
if (!this.get("autoClose")) { if (!this.get("autoClose")) {
this.set("topicTimer.based_on_last_post", false); Ember.run.schedule("afterRender", () => {
this.set("topicTimer.based_on_last_post", false);
});
} }
} }
}); });

View File

@ -333,7 +333,7 @@ export default Ember.Component.extend({
this._trackEmojiUsage(code); this._trackEmojiUsage(code);
} }
this.sendAction("emojiSelected", code); this.emojiSelected(code);
if (this.$modal.hasClass("fadeIn")) { if (this.$modal.hasClass("fadeIn")) {
this.set("active", false); this.set("active", false);

Some files were not shown because too many files have changed in this diff Show More