mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 03:40:00 +08:00
Broken WIP
This commit is contained in:
parent
48f4589c6f
commit
b3b4fd21ed
|
@ -18,10 +18,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if showHtml}}
|
||||
{{{html_content}}}
|
||||
{{else}}
|
||||
<pre>{{{text_content}}}</pre>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
{{loading-spinner condition=view.loading}}
|
||||
{{conditional-loading-spinner condition=view.loading}}
|
||||
{{else}}
|
||||
<p>{{i18n 'admin.flags.no_results'}}</p>
|
||||
{{/if}}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
</p>
|
||||
<br>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if model.length}}
|
||||
|
||||
<div class='table screened-emails'>
|
||||
|
@ -25,4 +25,4 @@
|
|||
{{else}}
|
||||
{{i18n 'search.no_results'}}
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
{{screened-ip-address-form action="recordAdded"}}
|
||||
<br/>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if model.length}}
|
||||
|
||||
<div class='table admin-logs-table screened-ip-addresses'>
|
||||
|
@ -27,4 +27,4 @@
|
|||
{{else}}
|
||||
{{i18n 'search.no_results'}}
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
</p>
|
||||
<br>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if model.length}}
|
||||
<div class='table screened-urls'>
|
||||
<div class="heading-container">
|
||||
|
@ -21,4 +21,4 @@
|
|||
{{else}}
|
||||
{{i18n 'search.no_results'}}
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -48,11 +48,11 @@
|
|||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if model.length}}
|
||||
{{view "staff-action-logs-list" content=controller}}
|
||||
{{else}}
|
||||
{{i18n 'search.no_results'}}
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</div>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#loading-spinner condition=refreshing}}
|
||||
{{#conditional-loading-spinner condition=refreshing}}
|
||||
<table class='table report'>
|
||||
<tr>
|
||||
<th>{{xaxis}}</th>
|
||||
|
@ -43,4 +43,4 @@
|
|||
</tr>
|
||||
{{/each}}
|
||||
</table>
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
<div class='admin-container user-badges'>
|
||||
<h2>{{i18n 'admin.badges.grant_badge'}}</h2>
|
||||
<br>
|
||||
|
@ -67,4 +67,4 @@
|
|||
{{/each}}
|
||||
</table>
|
||||
</div>
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{{#if hasSelection}}
|
||||
<div id='selected-controls'>
|
||||
<button {{action "approveUsers"}} class='btn'>{{countI18n admin.users.approved_selected count=selectedCount}}</button>
|
||||
<button {{action "rejectUsers"}} class='btn btn-danger'>{{countI18n admin.users.reject_selected count=selectedCount}}</button>
|
||||
<button {{action "approveUsers"}} class='btn'>{{count-i18n key=admin.users.approved_selected count=selectedCount}}</button>
|
||||
<button {{action "rejectUsers"}} class='btn btn-danger'>{{count-i18n key=admin.users.reject_selected count=selectedCount}}</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
|||
{{/unless}}
|
||||
</div>
|
||||
|
||||
{{#loading-spinner condition=refreshing}}
|
||||
{{#conditional-loading-spinner condition=refreshing}}
|
||||
{{#if model}}
|
||||
<table class='table'>
|
||||
<tr>
|
||||
|
@ -81,4 +81,4 @@
|
|||
{{else}}
|
||||
<p>{{i18n 'search.no_results'}}</p>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import ComboboxView from 'discourse/views/combo-box';
|
||||
import ComboboxView from 'discourse/components/combo-box';
|
||||
import { categoryBadgeHTML } from 'discourse/helpers/category-link';
|
||||
|
||||
export default ComboboxView.extend({
|
||||
|
@ -41,7 +41,7 @@ export default ComboboxView.extend({
|
|||
}
|
||||
}.property(),
|
||||
|
||||
template(item) {
|
||||
comboTemplate(item) {
|
||||
|
||||
let category;
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
// This view handles rendering of a combobox
|
||||
export default Discourse.View.extend({
|
||||
export default Ember.Component.extend({
|
||||
tagName: 'select',
|
||||
attributeBindings: ['tabindex'],
|
||||
classNames: ['combobox'],
|
||||
|
@ -65,7 +64,7 @@ export default Discourse.View.extend({
|
|||
o.selected = !!$(o).attr('selected');
|
||||
});
|
||||
|
||||
$elem.select2({formatResult: this.template, minimumResultsForSearch: 5, width: 'resolve'});
|
||||
$elem.select2({formatResult: this.comboTemplate, minimumResultsForSearch: 5, width: 'resolve'});
|
||||
|
||||
const castInteger = this.get('castInteger');
|
||||
$elem.on("change", function (e) {
|
|
@ -9,7 +9,7 @@ export default Ember.Component.extend({
|
|||
if (this.get('condition')) {
|
||||
buffer.push('<div class="spinner ' + this.get('size') + '"}}></div>');
|
||||
} else {
|
||||
return this._super();
|
||||
return this._super(buffer);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
export default Ember.Component.extend(Discourse.StringBuffer, {
|
||||
tagName: 'span',
|
||||
rerenderTriggers: ['count', 'suffix'],
|
||||
|
||||
renderString: function(buffer) {
|
||||
buffer.push(I18n.t(this.get('key') + (this.get('suffix') || ''), { count: this.get('count') }));
|
||||
}
|
||||
});
|
|
@ -26,7 +26,7 @@ export default Ember.Component.extend({
|
|||
if (label) { buffer.push(label); }
|
||||
} else {
|
||||
// If no label or icon is present, yield
|
||||
return this._super();
|
||||
return this._super(buffer);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
17
app/assets/javascripts/discourse/components/input-tip.js.es6
Normal file
17
app/assets/javascripts/discourse/components/input-tip.js.es6
Normal file
|
@ -0,0 +1,17 @@
|
|||
import StringBuffer from 'discourse/mixins/string-buffer';
|
||||
import { iconHTML } from 'discourse/helpers/fa-icon';
|
||||
|
||||
export default Ember.Component.extend(StringBuffer, {
|
||||
classNameBindings: [':tip', 'good', 'bad'],
|
||||
rerenderTriggers: ['validation'],
|
||||
|
||||
bad: Em.computed.alias('validation.failed'),
|
||||
good: Em.computed.not('bad'),
|
||||
|
||||
renderString(buffer) {
|
||||
const reason = this.get('validation.reason');
|
||||
if (reason) {
|
||||
buffer.push(iconHTML(this.get('good') ? 'check' : 'times') + ' ' + reason);
|
||||
}
|
||||
}
|
||||
});
|
|
@ -1,23 +1,12 @@
|
|||
/**
|
||||
This view extends the functionality of InputTipView with these extra features:
|
||||
* it can be dismissed
|
||||
* it bounces when it's shown
|
||||
* it's absolutely positioned beside the input element, with the help of
|
||||
extra css you'll need to write to line it up correctly.
|
||||
import { iconHTML } from 'discourse/helpers/fa-icon';
|
||||
|
||||
@class PopupInputTipView
|
||||
@extends Discourse.View
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.PopupInputTipView = Discourse.View.extend({
|
||||
templateName: 'popup_input_tip',
|
||||
export default Ember.Component.extend({
|
||||
classNameBindings: [':popup-tip', 'good', 'bad', 'shownAt::hide'],
|
||||
animateAttribute: null,
|
||||
bouncePixels: 6,
|
||||
bounceDelay: 100,
|
||||
|
||||
click: function() {
|
||||
click() {
|
||||
this.set('shownAt', false);
|
||||
},
|
||||
|
||||
|
@ -43,17 +32,23 @@ Discourse.PopupInputTipView = Discourse.View.extend({
|
|||
}
|
||||
}.observes('shownAt'),
|
||||
|
||||
bounceLeft: function($elem) {
|
||||
render(buffer) {
|
||||
const reason = this.get('validation.reason');
|
||||
if (!reason) { return; }
|
||||
|
||||
buffer.push("<span class='close'>" + iconHTML('times-circle') + "</span>");
|
||||
buffer.push(reason);
|
||||
},
|
||||
|
||||
bounceLeft($elem) {
|
||||
for( var i = 0; i < 5; i++ ) {
|
||||
$elem.animate({ left: '+=' + this.bouncePixels }, this.bounceDelay).animate({ left: '-=' + this.bouncePixels }, this.bounceDelay);
|
||||
}
|
||||
},
|
||||
|
||||
bounceRight: function($elem) {
|
||||
bounceRight($elem) {
|
||||
for( var i = 0; i < 5; i++ ) {
|
||||
$elem.animate({ right: '-=' + this.bouncePixels }, this.bounceDelay).animate({ right: '+=' + this.bouncePixels }, this.bounceDelay);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Discourse.View.registerHelper('popupInputTip', Discourse.PopupInputTipView);
|
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
Set up an i18n binding that will update as a count changes, complete with pluralization.
|
||||
|
||||
@method countI18n
|
||||
@for Handlebars
|
||||
**/
|
||||
Ember.Handlebars.registerHelper('countI18n', function(key, options) {
|
||||
var view = Discourse.View.extend(Discourse.StringBuffer, {
|
||||
tagName: 'span',
|
||||
rerenderTriggers: ['count', 'suffix'],
|
||||
|
||||
renderString: function(buffer) {
|
||||
buffer.push(I18n.t(key + (this.get('suffix') || ''), { count: this.get('count') }));
|
||||
}
|
||||
});
|
||||
return Ember.Handlebars.helpers.view.call(this, view, options);
|
||||
});
|
|
@ -1,4 +1,4 @@
|
|||
Handlebars.registerHelper('custom-html', function(name, contextString, options) {
|
||||
Ember.Handlebars.registerHelper('custom-html', function(name, contextString, options) {
|
||||
var html = Discourse.HTML.getCustomHTML(name);
|
||||
if (html) { return html; }
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import ConditionalLoadingSpinner from 'discourse/components/conditional-loading-spinner';
|
||||
|
||||
function renderSpinner(cssClass) {
|
||||
var html = "<div class='spinner";
|
||||
if (cssClass) { html += ' ' + cssClass; }
|
||||
|
@ -7,25 +5,9 @@ function renderSpinner(cssClass) {
|
|||
}
|
||||
var spinnerHTML = renderSpinner();
|
||||
|
||||
/**
|
||||
If you use it as a regular helper {{loading-spinner}} you'll just get the
|
||||
HTML for a spinner.
|
||||
|
||||
If you provide an `condition=xyz` parameter, it will be bound to that property
|
||||
and only show when it's truthy.
|
||||
|
||||
If you use the block form `{{#loading-spinner}} ... {{/loading-spinner}`,
|
||||
the contents will shown when the loading condition finishes.
|
||||
**/
|
||||
Handlebars.registerHelper('loading-spinner', function(options) {
|
||||
var hash = options.hash;
|
||||
if (hash && hash.condition) {
|
||||
var types = options.hashTypes;
|
||||
Discourse.Utilities.normalizeHash(hash, types);
|
||||
return Ember.Handlebars.helpers.view.call(this, ConditionalLoadingSpinner, options);
|
||||
} else {
|
||||
return new Handlebars.SafeString(renderSpinner((hash && hash.size) ? hash.size : undefined));
|
||||
}
|
||||
Ember.Handlebars.registerHelper('loading-spinner', function(params) {
|
||||
const hash = params.hash;
|
||||
return new Handlebars.SafeString(renderSpinner((hash && hash.size) ? hash.size : undefined));
|
||||
});
|
||||
|
||||
export { spinnerHTML, renderSpinner };
|
||||
|
|
|
@ -102,6 +102,9 @@ function buildConnectorCache() {
|
|||
export default function(connectionName, options) {
|
||||
if (!_connectorCache) { buildConnectorCache(); }
|
||||
|
||||
console.warn('plugin outlets are disabled');
|
||||
return;
|
||||
|
||||
if (_connectorCache[connectionName]) {
|
||||
const childViews = _connectorCache[connectionName];
|
||||
|
||||
|
|
|
@ -22,11 +22,14 @@ function resolveParams(ctx, options) {
|
|||
}
|
||||
|
||||
export default function registerUnbound(name, fn) {
|
||||
Handlebars.registerHelper(name, function(property, options) {
|
||||
const func = function(property, options) {
|
||||
if (options.types && options.types[0] === "ID") {
|
||||
property = get(this, property, options);
|
||||
}
|
||||
|
||||
return fn.call(this, property, resolveParams(this, options));
|
||||
});
|
||||
};
|
||||
|
||||
Handlebars.registerHelper(name, func);
|
||||
Ember.Handlebars.registerHelper(name, func);
|
||||
}
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
var helpers = ['input-tip',
|
||||
'category-chooser',
|
||||
'combo-box',
|
||||
'choose-topic',
|
||||
'activity-filter'];
|
||||
|
||||
/**
|
||||
Creates view helpers for some views. Many of these should probably be converted
|
||||
into components in the long term as it's a better fit.
|
||||
**/
|
||||
export default {
|
||||
name: 'view-hlpers',
|
||||
initialize: function(container) {
|
||||
helpers.forEach(function(h) {
|
||||
Ember.Handlebars.registerHelper(h, function(options) {
|
||||
var helper = container.lookupFactory('view:' + h),
|
||||
hash = options.hash,
|
||||
types = options.hashTypes;
|
||||
|
||||
Discourse.Utilities.normalizeHash(hash, types);
|
||||
return Ember.Handlebars.helpers.view.call(this, helper, options);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
|
@ -42,6 +42,6 @@
|
|||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{loading-spinner condition=canLoadMore}}
|
||||
{{conditional-loading-spinner condition=canLoadMore}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if topics}}
|
||||
{{topic-list
|
||||
showParticipants=showParticipants
|
||||
|
@ -9,4 +9,4 @@
|
|||
{{i18n 'choose_topic.none_found'}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
{{#if categories}}
|
||||
<a href {{action "expand"}} {{bind-attr class="dropdownButtonClass" style="badgeStyle"}}><i {{bind-attr class="iconClass"}}></i></a>
|
||||
<section {{bind-attr class="expanded::hidden :category-dropdown-menu"}} class='chooser'>
|
||||
<section {{bind-attr class="expanded::hidden :category-dropdown-menu :chooser"}}>
|
||||
<div class='cat'><a {{bind-attr href=allCategoriesUrl}} data-drop-close="true" class='badge-category home'>{{allCategoriesLabel}}</a></div>
|
||||
{{#if subCategory}}
|
||||
<div class='cat'><a {{bind-attr href=noCategoriesUrl}} data-drop-close="true" class='badge-category home'>{{i18n 'categories.no_subcategory'}}</a></div>
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
</button>
|
||||
{{/if}}
|
||||
</dt>
|
||||
{{#loading-spinner size="small" condition=otherAccountsLoading}}
|
||||
{{#conditional-loading-spinner size="small" condition=otherAccountsLoading}}
|
||||
{{#if other_accounts.length}}
|
||||
<dd class="other-accounts">
|
||||
<table class="table table-condensed table-hover">
|
||||
|
@ -73,7 +73,7 @@
|
|||
</table>
|
||||
</dd>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</dl>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
|
|
@ -57,13 +57,13 @@ so I'm going to stop rendering it until we figure out what's up
|
|||
|
||||
<div class="title-input">
|
||||
{{text-field value=model.title tabindex="2" id="reply-title" maxLength=maxTitleLength placeholderKey="composer.title_placeholder"}}
|
||||
{{popupInputTip validation=view.titleValidation shownAt=view.showTitleTip}}
|
||||
{{popup-input-tip validation=view.titleValidation shownAt=view.showTitleTip}}
|
||||
</div>
|
||||
|
||||
{{#unless model.privateMessage}}
|
||||
<div class="category-input">
|
||||
{{category-chooser valueAttribute="id" value=model.categoryId scopedCategoryId=scopedCategoryId tabindex="3"}}
|
||||
{{popupInputTip validation=view.categoryValidation shownAt=view.showCategoryTip}}
|
||||
{{popup-input-tip validation=view.categoryValidation shownAt=view.showCategoryTip}}
|
||||
</div>
|
||||
{{#if model.archetype.hasOptions}}
|
||||
<button class='btn' {{action "showOptions"}}>{{i18n 'topic.options'}}</button>
|
||||
|
@ -80,7 +80,7 @@ so I'm going to stop rendering it until we figure out what's up
|
|||
<div class='wmd-button-bar' id='wmd-button-bar'></div>
|
||||
<div id='wmd-preview-scroller'></div>
|
||||
{{composer-text-area tabindex="4" value=model.reply}}
|
||||
{{popupInputTip validation=view.replyValidation shownAt=view.showReplyTip}}
|
||||
{{popup-input-tip validation=view.replyValidation shownAt=view.showReplyTip}}
|
||||
</div>
|
||||
<!-- keep the classes here in sync with post.hbs -->
|
||||
<div class='preview-wrapper regular'>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{{loading-spinner condition=loading}}
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
|
||||
<div {{bind-attr class=":container :list-container loading:hidden"}}>
|
||||
<div class="row">
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
{{#if topicTrackingState.hasIncoming}}
|
||||
<div class="show-more">
|
||||
<div class='alert alert-info clickable' {{action "showInserted"}}>
|
||||
{{countI18n topic_count_ suffix=topicTrackingState.filter count=topicTrackingState.incomingCount}}
|
||||
{{count-i18n key=topic_count_ suffix=topicTrackingState.filter count=topicTrackingState.incomingCount}}
|
||||
{{i18n 'click_to_show'}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -51,7 +51,7 @@
|
|||
</div>
|
||||
|
||||
<footer class='topic-list-bottom'>
|
||||
{{loading-spinner condition=loadingMore}}
|
||||
{{conditional-loading-spinner condition=loadingMore}}
|
||||
{{#if allLoaded}}
|
||||
{{#if showDismissRead}}
|
||||
<button title="{{i18n 'topics.bulk.dismiss_topics_tooltip'}}" id='dismiss-topics' class='btn dismiss-read' {{action "dismissRead" "topics"}}>{{i18n 'topics.bulk.dismiss_topics'}}</button>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
{{#each buttonData in enabledButtons}}
|
||||
<button class="btn {{unbound buttonData.classes}}" {{action buttonData.action}}>{{boundI18n buttonData.key}}</button>
|
||||
{{/each}}
|
||||
{{loading-spinner condition=loading}}
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if topics}}
|
||||
<table class="topic-list">
|
||||
<tbody>
|
||||
|
@ -54,4 +54,4 @@
|
|||
{{i18n 'choose_topic.none_found'}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
{{#if topicTrackingState.hasIncoming}}
|
||||
<div class='alert alert-info' {{action "showInserted"}}>
|
||||
{{countI18n topic_count_ suffix=topicTrackingState.filter count=topicTrackingState.incomingCount}}
|
||||
{{count-i18n key=topic_count_ suffix=topicTrackingState.filter count=topicTrackingState.incomingCount}}
|
||||
{{i18n 'click_to_show'}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -22,7 +22,7 @@
|
|||
</div>
|
||||
|
||||
<footer class='topic-list-bottom'>
|
||||
{{loading-spinner condition=loadingMore}}
|
||||
{{conditional-loading-spinner condition=loadingMore}}
|
||||
{{#if allLoaded}}
|
||||
{{#if showDismissRead}}
|
||||
<button title="{{i18n 'topics.bulk.dismiss_topics_tooltip'}}" id='dismiss-topics' class='btn dismiss-read' {{action "dismissRead" "topics"}}>{{i18n 'topics.bulk.dismiss_topics'}}</button>
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
<p>{{category-chooser value=newCategoryId}}</p>
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{d-button action="changeCategory" label="topics.bulk.change_category"}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -88,11 +88,11 @@
|
|||
{{#if showCreateForm}}
|
||||
<div class="modal-footer">
|
||||
<button class='btn btn-large btn-primary' {{bind-attr disabled="submitDisabled"}} {{action "createAccount"}}>{{i18n 'create_account.title'}}</button>
|
||||
{{#loading-spinner condition=formSubmitted size="small"}}
|
||||
{{#conditional-loading-spinner condition=formSubmitted size="small"}}
|
||||
<button class="btn btn-large" id="login-link" {{action "showLogin"}}>
|
||||
{{i18n 'log_in'}}
|
||||
</button>
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
|
|
|
@ -9,16 +9,16 @@
|
|||
{{#if pinned_globally}}
|
||||
<p>{{i18n "topic.feature_topic.global_pin_note"}}</p>
|
||||
<p>
|
||||
{{#loading-spinner size="small" condition=loading}}
|
||||
{{#conditional-loading-spinner size="small" condition=loading}}
|
||||
{{{i18n "topic.feature_topic.already_pinned_globally" count=pinnedGloballyCount}}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</p>
|
||||
{{else}}
|
||||
<p>{{i18n "topic.feature_topic.pin_note"}}</p>
|
||||
<p>
|
||||
{{#loading-spinner size="small" condition=loading}}
|
||||
{{#conditional-loading-spinner size="small" condition=loading}}
|
||||
{{{alreadyPinnedMessage}}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
@ -32,9 +32,9 @@
|
|||
<p>{{{pinMessage}}}</p>
|
||||
<p>{{i18n "topic.feature_topic.pin_note"}}</p>
|
||||
<p>
|
||||
{{#loading-spinner size="small" condition=loading}}
|
||||
{{#conditional-loading-spinner size="small" condition=loading}}
|
||||
{{{alreadyPinnedMessage}}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -47,9 +47,9 @@
|
|||
<p>{{i18n "topic.feature_topic.pin_globally"}}</p>
|
||||
<p>{{i18n "topic.feature_topic.global_pin_note"}}</p>
|
||||
<p>
|
||||
{{#loading-spinner size="small" condition=loading}}
|
||||
{{#conditional-loading-spinner size="small" condition=loading}}
|
||||
{{{i18n "topic.feature_topic.already_pinned_globally" count=pinnedGloballyCount}}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -71,9 +71,9 @@
|
|||
{{/if}}
|
||||
<p>{{i18n "topic.feature_topic.banner_note"}}</p>
|
||||
<p>
|
||||
{{#loading-spinner size="small" condition=loading}}
|
||||
{{#conditional-loading-spinner size="small" condition=loading}}
|
||||
{{{i18n "topic.feature_topic.already_banner" count=bannerCount}}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
<button title="{{i18n 'post.revisions.controls.first'}}" {{bind-attr class=":btn :standard :no-text displayGoToFirst::invisible" disabled=loading}} {{action "loadFirstVersion"}}><i class="fa fa-fast-backward"></i></button>
|
||||
<button title="{{i18n 'post.revisions.controls.previous'}}" {{bind-attr class=":btn :standard :no-text displayGoToPrevious::invisible" disabled=loading}} {{action "loadPreviousVersion"}}><i class="fa fa-backward"></i></button>
|
||||
<div id="revision-numbers" {{bind-attr class="displayRevisions::invisible"}}>
|
||||
{{#loading-spinner condition=loading size="small"}}
|
||||
{{#conditional-loading-spinner condition=loading size="small"}}
|
||||
{{boundI18n revisionsTextKey previousBinding="previousVersion" currentBinding="current_version" totalBinding="version_count"}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</div>
|
||||
<button title="{{i18n 'post.revisions.controls.next'}}" {{bind-attr class=":btn :standard :no-text displayGoToNext::invisible" disabled=loading}} {{action "loadNextVersion"}}><i class="fa fa-forward"></i></button>
|
||||
<button title="{{i18n 'post.revisions.controls.last'}}" {{bind-attr class=":btn :standard :no-text displayGoToLast::invisible" disabled=loading}} {{action "loadLastVersion"}}><i class="fa fa-fast-forward"></i></button>
|
||||
|
|
|
@ -56,5 +56,5 @@
|
|||
{{i18n 'login.authenticating'}}
|
||||
{{/if}}
|
||||
|
||||
{{loading-spinner condition=showSpinner size="small"}}
|
||||
{{conditional-loading-spinner condition=showSpinner size="small"}}
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="modal-body">
|
||||
<p>{{{description}}}</p>
|
||||
|
||||
<p>{{{i18n "queue.approval.pending_posts" count=model.pending_count}}}
|
||||
<p>{{{i18n "queue.approval.pending_posts" count=model.pending_count}}}</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
{{d-button action="closeModal" class="btn-primary" label="queue.approval.ok"}}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<section class="d-dropdown" id="notifications-dropdown">
|
||||
{{#loading-spinner condition=loadingNotifications}}
|
||||
{{#conditional-loading-spinner condition=loadingNotifications}}
|
||||
{{#if content}}
|
||||
<ul>
|
||||
{{#each n in model itemController="notification"}}
|
||||
|
@ -12,5 +12,5 @@
|
|||
{{else}}
|
||||
<div class="none">{{i18n 'notifications.none'}}</div>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</section>
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
<span class="close"><i class="fa fa-times-circle"></i></span>
|
||||
{{{view.validation.reason}}}
|
|
@ -1,8 +1,2 @@
|
|||
<aside class='quote' {{#params}}data-{{key}}="{{value}}" {{/params}}>
|
||||
<div class='title'>
|
||||
<div class='quote-controls'></div>
|
||||
{{{avatarImg}}}
|
||||
{{username}}
|
||||
</div>
|
||||
<blockquote>{{{quote}}}</blockquote>
|
||||
</aside>
|
||||
NEEDS FIXING
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<p>{{countI18n topic.multi_select.description countBinding="selectedPostsCount"}}</p>
|
||||
<p>{{count-i18n key=topic.multi_select.description countBinding="selectedPostsCount"}}</p>
|
||||
|
||||
{{#if canSelectAll}}
|
||||
<p><a href='#' {{action "selectAll"}}>{{i18n 'topic.multi_select.select_all'}}</a></p>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
|
||||
{{render 'topic-progress'}}
|
||||
|
||||
{{loading-spinner condition=postStream.loadingAbove}}
|
||||
{{conditional-loading-spinner condition=postStream.loadingAbove}}
|
||||
|
||||
{{#unless postStream.loadingFilter}}
|
||||
{{cloaked-collection itemViewClass="post"
|
||||
|
@ -79,11 +79,11 @@
|
|||
offsetFixedBottom="#reply-control"}}
|
||||
{{/unless}}
|
||||
|
||||
{{loading-spinner condition=postStream.loadingBelow}}
|
||||
{{conditional-loading-spinner condition=postStream.loadingBelow}}
|
||||
</div>
|
||||
<div id='topic-bottom'></div>
|
||||
|
||||
{{#loading-spinner condition=postStream.loadingFilter}}
|
||||
{{#conditional-loading-spinner condition=postStream.loadingFilter}}
|
||||
{{#if loadedAllPosts}}
|
||||
|
||||
{{view 'topic-closing' topic=model}}
|
||||
|
@ -113,7 +113,7 @@
|
|||
{{/if}}
|
||||
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
||||
</section>
|
||||
</div>
|
||||
|
@ -121,7 +121,7 @@
|
|||
</div>
|
||||
{{else}}
|
||||
<div class='container'>
|
||||
{{#loading-spinner condition=noErrorYet}}
|
||||
{{#conditional-loading-spinner condition=noErrorYet}}
|
||||
{{#if notFoundHtml}}
|
||||
{{{notFoundHtml}}}
|
||||
{{else}}
|
||||
|
@ -135,9 +135,9 @@
|
|||
{{d-button action="retryLoading" class="btn-primary topic-retry" icon="refresh" label="errors.buttons.again"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{loading-spinner condition=retrying}}
|
||||
{{conditional-loading-spinner condition=retrying}}
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
</tr>
|
||||
{{/each}}
|
||||
</table>
|
||||
{{loading-spinner condition=invitesLoading}}
|
||||
{{conditional-loading-spinner condition=invitesLoading}}
|
||||
|
||||
{{else}}
|
||||
{{#if canBulkInvite}}
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
</div>
|
||||
{{/each}}
|
||||
|
||||
{{#loading-spinner condition=loading}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#unless canLoadMore}}
|
||||
{{#if showDismissButton}}
|
||||
<div class='notification-buttons'>
|
||||
|
@ -31,4 +31,4 @@
|
|||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
{{text-field value=nameInput placeholderKey="directory.filter_name" class="filter-name"}}
|
||||
</div>
|
||||
|
||||
{{#loading-spinner condition=model.loading}}
|
||||
{{#conditional-loading-spinner condition=model.loading}}
|
||||
{{#if model.length}}
|
||||
<div class='total-rows'>{{i18n "directory.total_rows" count=model.totalRows}}</div>
|
||||
|
||||
|
@ -43,12 +43,12 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
{{loading-spinner condition=model.loadingMore}}
|
||||
{{conditional-loading-spinner condition=model.loadingMore}}
|
||||
{{else}}
|
||||
<div class='clearfix'></div>
|
||||
<p>{{i18n "directory.no_results"}}</p>
|
||||
{{/if}}
|
||||
{{/loading-spinner}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
import StringBuffer from 'discourse/mixins/string-buffer';
|
||||
|
||||
export default Discourse.View.extend(StringBuffer, {
|
||||
classNameBindings: [':tip', 'good', 'bad'],
|
||||
rerenderTriggers: ['validation'],
|
||||
|
||||
bad: Em.computed.alias('validation.failed'),
|
||||
good: Em.computed.not('bad'),
|
||||
|
||||
renderString: function(buffer) {
|
||||
var reason = this.get('validation.reason');
|
||||
if (reason) {
|
||||
var icon = this.get('good') ? 'fa-check' : 'fa-times';
|
||||
return buffer.push("<i class=\"fa " + icon + "\"></i> " + reason);
|
||||
}
|
||||
}
|
||||
});
|
|
@ -1,17 +1,3 @@
|
|||
import Presence from 'discourse/mixins/presence';
|
||||
|
||||
const View = Ember.View.extend(Presence, {});
|
||||
|
||||
View.reopenClass({
|
||||
registerHelper(helperName, helperClass) {
|
||||
Ember.Handlebars.registerHelper(helperName, function(options) {
|
||||
var hash = options.hash,
|
||||
types = options.hashTypes;
|
||||
|
||||
Discourse.Utilities.normalizeHash(hash, types);
|
||||
return Ember.Handlebars.helpers.view.call(this, helperClass, options);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default View;
|
||||
export default Ember.View.extend(Presence);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<%
|
||||
if Rails.env.development? || Rails.env.test?
|
||||
require_asset ("ember-template-compiler.js")
|
||||
require_asset ("development/ember.js")
|
||||
else
|
||||
require_asset ("production/ember.js")
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
//= require ./discourse/views/container
|
||||
//= require ./discourse/views/modal-body
|
||||
//= require ./discourse/views/flag
|
||||
//= require ./discourse/views/combo-box
|
||||
//= require ./discourse/components/combo-box
|
||||
//= require ./discourse/views/button
|
||||
//= require ./discourse/components/dropdown-button
|
||||
//= require ./discourse/components/notifications-button
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
import Presence from 'discourse/mixins/presence';
|
||||
|
||||
var oldHelpers;
|
||||
|
||||
module("Discourse.View", {
|
||||
setup: function() {
|
||||
oldHelpers = Ember.Handlebars.helpers;
|
||||
},
|
||||
|
||||
teardown: function() {
|
||||
Ember.Handlebars.helpers = oldHelpers;
|
||||
}
|
||||
});
|
||||
|
||||
test("mixes in Presence", function() {
|
||||
ok(Presence.detect(Discourse.View.create()));
|
||||
});
|
||||
|
||||
test("registerHelper: enables embedding a child view in a parent view via dedicated, named helper instead of generic 'view' helper", function() {
|
||||
Discourse.View.registerHelper("childViewHelper", Ember.View.extend({
|
||||
template: Ember.Handlebars.compile('{{view.text}}')
|
||||
}));
|
||||
|
||||
var parentView = Ember.View.extend({
|
||||
template: Ember.Handlebars.compile('{{childViewHelper id="child" text="foo"}}')
|
||||
}).create();
|
||||
|
||||
Ember.run(function() {
|
||||
parentView.appendTo("#qunit-fixture");
|
||||
});
|
||||
|
||||
equal(parentView.$("#child").length, 1, "child view registered as helper is appended to the parent view");
|
||||
equal(parentView.$("#child").text(), "foo", "child view registered as helper gets parameters provided during helper invocation in parent's template");
|
||||
});
|
14386
vendor/assets/javascripts/development/ember.js
vendored
14386
vendor/assets/javascripts/development/ember.js
vendored
File diff suppressed because it is too large
Load Diff
7193
vendor/assets/javascripts/ember-template-compiler.js
vendored
Normal file
7193
vendor/assets/javascripts/ember-template-compiler.js
vendored
Normal file
File diff suppressed because one or more lines are too long
13948
vendor/assets/javascripts/production/ember.js
vendored
13948
vendor/assets/javascripts/production/ember.js
vendored
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user