mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
UX: Show translated badge names and badge groupings
FIX: Disallow renaming of system badges FIX: Disallow renaming/deleting of system badge groupings UX: Use "modern" button style in badge groupings dialog
This commit is contained in:
parent
f0694d491a
commit
8517674a32
8 changed files with 45 additions and 42 deletions
|
@ -2,15 +2,13 @@ export default Ember.Controller.extend({
|
|||
needs: ['modal'],
|
||||
|
||||
modelChanged: function(){
|
||||
|
||||
var grouping = Em.Object.extend({});
|
||||
|
||||
var model = this.get('model');
|
||||
var copy = Em.A();
|
||||
const model = this.get('model');
|
||||
const copy = Em.A();
|
||||
const store = this.store;
|
||||
|
||||
if(model){
|
||||
model.forEach(function(o){
|
||||
copy.pushObject(grouping.create(o));
|
||||
copy.pushObject(store.createRecord('badge-grouping', o));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -18,8 +16,8 @@ export default Ember.Controller.extend({
|
|||
}.observes('model'),
|
||||
|
||||
moveItem: function(item, delta){
|
||||
var copy = this.get('workingCopy');
|
||||
var index = copy.indexOf(item);
|
||||
const copy = this.get('workingCopy');
|
||||
const index = copy.indexOf(item);
|
||||
if (index + delta < 0 || index + delta >= copy.length){
|
||||
return;
|
||||
}
|
||||
|
@ -50,14 +48,14 @@ export default Ember.Controller.extend({
|
|||
item.set("editing", false);
|
||||
},
|
||||
add: function(){
|
||||
var obj = Em.Object.create({editing: true, name: "Enter Name"});
|
||||
const obj = this.store.createRecord('badge-grouping', {editing: true, name: I18n.t('admin.badges.badge_grouping')});
|
||||
this.get('workingCopy').pushObject(obj);
|
||||
},
|
||||
saveAll: function(){
|
||||
var self = this;
|
||||
const self = this;
|
||||
var items = this.get('workingCopy');
|
||||
var groupIds = items.map(function(i){return i.get("id") || -1;});
|
||||
var names = items.map(function(i){return i.get("name");});
|
||||
const groupIds = items.map(function(i){return i.get("id") || -1;});
|
||||
const names = items.map(function(i){return i.get("name");});
|
||||
|
||||
Discourse.ajax('/admin/badges/badge_groupings',{
|
||||
data: {ids: groupIds, names: names},
|
||||
|
@ -66,14 +64,13 @@ export default Ember.Controller.extend({
|
|||
items = self.get("model");
|
||||
items.clear();
|
||||
data.badge_groupings.forEach(function(g){
|
||||
items.pushObject(Em.Object.create(g));
|
||||
items.pushObject(self.store.createRecord('badge-grouping', g));
|
||||
});
|
||||
self.set('model', null);
|
||||
self.set('workingCopy', null);
|
||||
self.send('closeModal');
|
||||
},function(){
|
||||
// TODO we can do better
|
||||
bootbox.alert("Something went wrong");
|
||||
bootbox.alert(I18n.t('generic_error'));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import Badge from 'discourse/models/badge';
|
||||
import BadgeGrouping from 'discourse/models/badge-grouping';
|
||||
|
||||
export default Discourse.Route.extend({
|
||||
_json: null,
|
||||
|
@ -13,14 +14,19 @@ export default Discourse.Route.extend({
|
|||
|
||||
setupController: function(controller, model) {
|
||||
var json = this._json,
|
||||
triggers = [];
|
||||
triggers = [],
|
||||
badgeGroupings = [];
|
||||
|
||||
_.each(json.admin_badges.triggers,function(v,k){
|
||||
triggers.push({id: v, name: I18n.t('admin.badges.trigger_type.'+k)});
|
||||
});
|
||||
|
||||
json.badge_groupings.forEach(function(badgeGroupingJson) {
|
||||
badgeGroupings.push(BadgeGrouping.create(badgeGroupingJson));
|
||||
});
|
||||
|
||||
controller.setProperties({
|
||||
badgeGroupings: json.badge_groupings,
|
||||
badgeGroupings: badgeGroupings,
|
||||
badgeTypes: json.badge_types,
|
||||
protectedSystemFields: json.admin_badges.protected_system_fields,
|
||||
badgeTriggers: triggers,
|
||||
|
|
|
@ -2,25 +2,22 @@
|
|||
<form class="form-horizontal">
|
||||
<div>
|
||||
<label for="name">{{i18n 'admin.badges.name'}}</label>
|
||||
{{input type="text" name="name" value=buffered.name}}
|
||||
{{#if readOnly}}
|
||||
{{input type="text" name="name" value=buffered.displayName disabled=true}}
|
||||
{{else}}
|
||||
{{input type="text" name="name" value=buffered.name}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if showDisplayName}}
|
||||
<div>
|
||||
<strong>{{i18n 'admin.badges.display_name'}}</strong>
|
||||
{{buffered.displayName}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div>
|
||||
<label for="name">{{i18n 'admin.badges.icon'}}</label>
|
||||
{{input type="text" name="name" value=buffered.icon}}
|
||||
<label for="icon">{{i18n 'admin.badges.icon'}}</label>
|
||||
{{input type="text" name="icon" value=buffered.icon}}
|
||||
<p class='help'>{{i18n 'admin.badges.icon_help'}}</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="name">{{i18n 'admin.badges.image'}}</label>
|
||||
{{input type="text" name="name" value=buffered.image}}
|
||||
<label for="image">{{i18n 'admin.badges.image'}}</label>
|
||||
{{input type="text" name="image" value=buffered.image}}
|
||||
<p class='help'>{{i18n 'admin.badges.icon_help'}}</p>
|
||||
</div>
|
||||
|
||||
|
@ -40,7 +37,7 @@
|
|||
value=buffered.badge_grouping_id
|
||||
content=badgeGroupings
|
||||
optionValuePath="content.id"
|
||||
optionLabelPath="content.name"}}
|
||||
optionLabelPath="content.displayName"}}
|
||||
<button {{action "editGroupings"}} class='btn'>{{fa-icon 'pencil'}}</button>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -5,15 +5,15 @@
|
|||
<li>
|
||||
{{#if wc.editing}}
|
||||
{{input value=wc.name}}
|
||||
<button {{action "save" wc}}><i class="fa fa-check"></i></button>
|
||||
<button {{action "save" wc}} class="btn no-text">{{fa-icon 'check'}}</button>
|
||||
{{else}}
|
||||
{{wc.name}}
|
||||
{{wc.displayName}}
|
||||
{{/if}}
|
||||
<div class='actions'>
|
||||
<button {{action "edit" wc}}><i class="fa fa-pencil"></i></button>
|
||||
<button {{action "up" wc}}><i class="fa fa-toggle-up"></i></button>
|
||||
<button {{action "down" wc}}><i class="fa fa-toggle-down"></i></button>
|
||||
<button {{action "delete" wc}}><i class="fa fa-times"></i></button>
|
||||
<button {{action "edit" wc}} class="btn no-text" {{bind-attr disabled="wc.system"}}>{{fa-icon 'pencil'}}</button>
|
||||
<button {{action "up" wc}} class="btn no-text">{{fa-icon 'toggle-up'}}</button>
|
||||
<button {{action "down" wc}} class="btn no-text">{{fa-icon 'toggle-down'}}</button>
|
||||
<button {{action "delete" wc}} class="btn no-text btn-danger" {{bind-attr disabled="wc.system"}}>{{fa-icon 'times'}}</button>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
|
|
|
@ -8,7 +8,7 @@ export default RestModel.extend({
|
|||
return this.get('name').toLowerCase().replace(/\s/g, '_');
|
||||
},
|
||||
|
||||
@computed
|
||||
@computed('name')
|
||||
displayName() {
|
||||
const i18nKey = `badges.badge_grouping.${this.get('i18nNameKey')}.name`;
|
||||
return I18n.t(i18nKey, {defaultValue: this.get('name')});
|
||||
|
|
|
@ -1606,10 +1606,9 @@ and (max-width : 500px) {
|
|||
border-bottom: 1px solid #dfdfdf;
|
||||
}
|
||||
.actions {
|
||||
font-size: 1.214em;
|
||||
float: right;
|
||||
a {
|
||||
margin-left: 5px;
|
||||
.btn {
|
||||
padding: 3px 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ class BadgeGrouping < ActiveRecord::Base
|
|||
has_many :badges
|
||||
|
||||
def system?
|
||||
id && id < 5
|
||||
id && id <= 5
|
||||
end
|
||||
|
||||
def default_position=(pos)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
class BadgeGroupingSerializer < ApplicationSerializer
|
||||
attributes :id, :name, :description, :position
|
||||
attributes :id, :name, :description, :position, :system
|
||||
|
||||
def system
|
||||
object.system?
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue