mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 13:39:42 +08:00
Rename 'popular' to 'latest'. First stab at 'Hot' tab.
This commit is contained in:
parent
d1945057fd
commit
36269cfbaa
|
@ -98,7 +98,7 @@ Discourse.ListController = Discourse.Controller.extend({
|
|||
});
|
||||
|
||||
Discourse.ListController.reopenClass({
|
||||
filters: ['popular', 'favorited', 'read', 'unread', 'new', 'posted']
|
||||
filters: ['latest', 'hot', 'favorited', 'read', 'unread', 'new', 'posted']
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/**
|
||||
This controller supports actions when listing topics or categories
|
||||
|
||||
@class ListTopicsController
|
||||
@class ListTopicsController
|
||||
@extends Discourse.ObjectController
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
|
@ -11,31 +11,30 @@ Discourse.ListTopicsController = Discourse.ObjectController.extend({
|
|||
// If we're changing our channel
|
||||
previousChannel: null,
|
||||
|
||||
popular: (function() {
|
||||
return this.get('content.filter') === 'popular';
|
||||
}).property('content.filter'),
|
||||
latest: Ember.computed.equal('content.filter', 'latest'),
|
||||
|
||||
filterModeChanged: function() {
|
||||
|
||||
filterModeChanged: (function() {
|
||||
// Unsubscribe from a previous channel if necessary
|
||||
var channel, filterMode, previousChannel,
|
||||
_this = this;
|
||||
if (previousChannel = this.get('previousChannel')) {
|
||||
var previousChannel = this.get('previousChannel');
|
||||
if (previousChannel) {
|
||||
Discourse.MessageBus.unsubscribe("/" + previousChannel);
|
||||
this.set('previousChannel', null);
|
||||
}
|
||||
filterMode = this.get('controllers.list.filterMode');
|
||||
if (!filterMode) {
|
||||
return;
|
||||
}
|
||||
channel = filterMode;
|
||||
Discourse.MessageBus.subscribe("/" + channel, function(data) {
|
||||
return _this.get('content').insert(data);
|
||||
|
||||
var filterMode = this.get('controllers.list.filterMode');
|
||||
if (!filterMode) return;
|
||||
|
||||
var lsitTopicsController = this;
|
||||
Discourse.MessageBus.subscribe("/" + filterMode, function(data) {
|
||||
return lsitTopicsController.get('content').insert(data);
|
||||
});
|
||||
return this.set('previousChannel', channel);
|
||||
}).observes('controllers.list.filterMode'),
|
||||
draftLoaded: (function() {
|
||||
var draft;
|
||||
draft = this.get('content.draft');
|
||||
this.set('previousChannel', filterMode);
|
||||
|
||||
}.observes('controllers.list.filterMode'),
|
||||
|
||||
draftLoaded: function() {
|
||||
var draft = this.get('content.draft');
|
||||
if (draft) {
|
||||
return this.get('controllers.composer').open({
|
||||
draft: draft,
|
||||
|
@ -44,7 +43,7 @@ Discourse.ListTopicsController = Discourse.ObjectController.extend({
|
|||
ignoreIfChanged: true
|
||||
});
|
||||
}
|
||||
}).observes('content.draft'),
|
||||
}.observes('content.draft'),
|
||||
|
||||
// Star a topic
|
||||
toggleStar: function(topic) {
|
||||
|
|
|
@ -6,9 +6,8 @@
|
|||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
var validAnon, validNavNames;
|
||||
validNavNames = ['read', 'popular', 'categories', 'favorited', 'category', 'unread', 'new', 'posted'];
|
||||
validAnon = ['popular', 'category', 'categories'];
|
||||
var validNavNames = ['read', 'latest', 'hot', 'categories', 'favorited', 'category', 'unread', 'new', 'posted'];
|
||||
var validAnon = ['latest', 'hot', 'category', 'categories'];
|
||||
|
||||
Discourse.NavItem = Discourse.Model.extend({
|
||||
categoryName: (function() {
|
||||
|
|
|
@ -33,7 +33,8 @@ Discourse.Route.buildRoutes(function() {
|
|||
router.route(r, { path: "/" + r + "/more" });
|
||||
});
|
||||
|
||||
this.route('popular', { path: '/' });
|
||||
this.route('latest', { path: '/' });
|
||||
this.route('hot', { path: '/hot' });
|
||||
this.route('categories', { path: '/categories' });
|
||||
this.route('category', { path: '/category/:slug/more' });
|
||||
this.route('category', { path: '/category/:slug' });
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
A class used to handle filtering routes such as popular, read, etc.
|
||||
A class used to handle filtering routes such as latest, hot, read, etc.
|
||||
|
||||
@class FilteredListRoute
|
||||
@extends Discourse.Route
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
<li><a href="/admin/flags/active"><i class='icon-flag'></i>{{i18n flags_title}}</a></li>
|
||||
{{/if}}
|
||||
<li>
|
||||
{{#titledLinkTo "list.popular" titleKey="filters.popular.help"}}{{i18n filters.popular.title}}{{/titledLinkTo}}
|
||||
{{#titledLinkTo "list.latest" titleKey="filters.latest.help"}}{{i18n filters.latest.title}}{{/titledLinkTo}}
|
||||
</li>
|
||||
<li>{{#linkTo 'faq'}}{{i18n faq}}{{/linkTo}}</li>
|
||||
{{#if Discourse.currentUser.admin}}
|
||||
|
|
|
@ -54,12 +54,12 @@
|
|||
<h3>
|
||||
{{view.footerMessage}}
|
||||
{{#if view.allLoaded}}
|
||||
{{#if controller.popular}}
|
||||
{{#if controller.latest}}
|
||||
{{#if view.canCreateTopic}}
|
||||
<a href='#' {{action createTopic}}>{{i18n topic.suggest_create_topic}}</a>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{#linkTo list.categories}}{{i18n topic.browse_all_categories}}{{/linkTo}} {{i18n or}} {{#linkTo list.popular}}{{i18n topic.view_popular_topics}}{{/linkTo}}
|
||||
{{#linkTo list.categories}}{{i18n topic.browse_all_categories}}{{/linkTo}} {{i18n or}} {{#linkTo list.latest}}{{i18n topic.view_latest_topics}}{{/linkTo}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</h3>
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<h2>{{message}}</h2>
|
||||
|
||||
<p>
|
||||
{{#linkTo list.popular}}{{i18n topic.back_to_list}}{{/linkTo}}
|
||||
{{#linkTo list.latest}}{{i18n topic.back_to_list}}{{/linkTo}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
|
|
|
@ -437,7 +437,7 @@ Discourse.TopicView = Discourse.View.extend(Discourse.Scrolling, {
|
|||
var category, opts;
|
||||
|
||||
opts = {
|
||||
popularLink: "<a href=\"/\">" + (Em.String.i18n("topic.view_popular_topics")) + "</a>"
|
||||
latestLink: "<a href=\"/\">" + (Em.String.i18n("topic.view_latest_topics")) + "</a>"
|
||||
};
|
||||
if (category = this.get('controller.content.category')) {
|
||||
opts.catLink = Discourse.Utilities.categoryLink(category);
|
||||
|
|
443
app/assets/javascripts/external/ember.js
vendored
443
app/assets/javascripts/external/ember.js
vendored
|
@ -1,5 +1,5 @@
|
|||
// Version: v1.0.0-pre.2-892-g1283274
|
||||
// Last commit: 1283274 (2013-03-21 14:18:06 -0700)
|
||||
// Version: v1.0.0-pre.2-924-g9e5ec3b
|
||||
// Last commit: 9e5ec3b (2013-03-26 21:49:38 -0700)
|
||||
|
||||
|
||||
(function() {
|
||||
|
@ -151,8 +151,8 @@ Ember.deprecateFunc = function(message, func) {
|
|||
|
||||
})();
|
||||
|
||||
// Version: v1.0.0-pre.2-892-g1283274
|
||||
// Last commit: 1283274 (2013-03-21 14:18:06 -0700)
|
||||
// Version: v1.0.0-pre.2-924-g9e5ec3b
|
||||
// Last commit: 9e5ec3b (2013-03-26 21:49:38 -0700)
|
||||
|
||||
|
||||
(function() {
|
||||
|
@ -3679,59 +3679,238 @@ Ember.cacheFor = function cacheFor(obj, key) {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@method computed.not
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which negate the original value for property
|
||||
*/
|
||||
Ember.computed.not = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
return !get(this, dependentKey);
|
||||
});
|
||||
};
|
||||
function getProperties(self, propertyNames) {
|
||||
var ret = {};
|
||||
for(var i = 0; i < propertyNames.length; i++) {
|
||||
ret[propertyNames[i]] = get(self, propertyNames[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@method computed.none
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
*/
|
||||
Ember.computed.none = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
var val = get(this, dependentKey);
|
||||
return Ember.isNone(val);
|
||||
});
|
||||
};
|
||||
function registerComputed(name, macro) {
|
||||
Ember.computed[name] = function(dependentKey) {
|
||||
var args = a_slice.call(arguments);
|
||||
return Ember.computed(dependentKey, function() {
|
||||
return macro.apply(this, args);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function registerComputedWithProperties(name, macro) {
|
||||
Ember.computed[name] = function() {
|
||||
var properties = a_slice.call(arguments);
|
||||
|
||||
var computed = Ember.computed(function() {
|
||||
return macro.apply(this, [getProperties(this, properties)]);
|
||||
});
|
||||
|
||||
return computed.property.apply(computed, properties);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@method computed.empty
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which negate
|
||||
the original value for property
|
||||
*/
|
||||
Ember.computed.empty = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
var val = get(this, dependentKey);
|
||||
return Ember.isEmpty(val);
|
||||
});
|
||||
};
|
||||
registerComputed('empty', function(dependentKey) {
|
||||
return Ember.isEmpty(get(this, dependentKey));
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.notEmpty
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
original value for property is not empty.
|
||||
*/
|
||||
registerComputed('notEmpty', function(dependentKey) {
|
||||
return !Ember.isEmpty(get(this, dependentKey));
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.none
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which
|
||||
rturns true if original value for property is null or undefined.
|
||||
*/
|
||||
registerComputed('none', function(dependentKey) {
|
||||
return Ember.isNone(get(this, dependentKey));
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.not
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which returns
|
||||
inverse of the original value for property
|
||||
*/
|
||||
registerComputed('not', function(dependentKey) {
|
||||
return !get(this, dependentKey);
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.bool
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which convert to boolean the original value for property
|
||||
@return {Ember.ComputedProperty} computed property which convert
|
||||
to boolean the original value for property
|
||||
*/
|
||||
Ember.computed.bool = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
return !!get(this, dependentKey);
|
||||
});
|
||||
};
|
||||
registerComputed('bool', function(dependentKey) {
|
||||
return !!get(this, dependentKey);
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.match
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {RegExp} regexp
|
||||
@return {Ember.ComputedProperty} computed property which match
|
||||
the original value for property against a given RegExp
|
||||
*/
|
||||
registerComputed('match', function(dependentKey, regexp) {
|
||||
var value = get(this, dependentKey);
|
||||
return typeof value === 'string' ? !!value.match(regexp) : false;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.equal
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {String|Number|Object} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is equal to the given value.
|
||||
*/
|
||||
registerComputed('equal', function(dependentKey, value) {
|
||||
return get(this, dependentKey) === value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.gt
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is greater then given value.
|
||||
*/
|
||||
registerComputed('gt', function(dependentKey, value) {
|
||||
return get(this, dependentKey) > value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.gte
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is greater or equal then given value.
|
||||
*/
|
||||
registerComputed('gte', function(dependentKey, value) {
|
||||
return get(this, dependentKey) >= value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.lt
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is less then given value.
|
||||
*/
|
||||
registerComputed('lt', function(dependentKey, value) {
|
||||
return get(this, dependentKey) < value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.lte
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is less or equal then given value.
|
||||
*/
|
||||
registerComputed('lte', function(dependentKey, value) {
|
||||
return get(this, dependentKey) <= value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.and
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which peforms
|
||||
a logical `and` on the values of all the original values for properties.
|
||||
*/
|
||||
registerComputedWithProperties('and', function(properties) {
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key) && !properties[key]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.or
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which peforms
|
||||
a logical `or` on the values of all the original values for properties.
|
||||
*/
|
||||
registerComputedWithProperties('or', function(properties) {
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key) && properties[key]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.any
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which returns
|
||||
the first trouthy value of given list of properties.
|
||||
*/
|
||||
registerComputedWithProperties('any', function(properties) {
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key) && properties[key]) {
|
||||
return properties[key];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.map
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which maps
|
||||
values of all passed properties in to an array.
|
||||
*/
|
||||
registerComputedWithProperties('map', function(properties) {
|
||||
var res = [];
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key)) {
|
||||
if (Ember.isNone(properties[key])) {
|
||||
res.push(null);
|
||||
} else {
|
||||
res.push(properties[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.alias
|
||||
@for Ember
|
||||
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which creates an
|
||||
alias to the original value for property.
|
||||
*/
|
||||
Ember.computed.alias = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key, value){
|
||||
|
@ -3744,6 +3923,23 @@ Ember.computed.alias = function(dependentKey) {
|
|||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@method computed.defaultTo
|
||||
@for Ember
|
||||
@param {String} defaultPath
|
||||
@return {Ember.ComputedProperty} computed property which acts like
|
||||
a standard getter and setter, but defaults to the value from `defaultPath`.
|
||||
*/
|
||||
Ember.computed.defaultTo = function(defaultPath) {
|
||||
return Ember.computed(function(key, newValue, cachedValue) {
|
||||
var result;
|
||||
if (arguments.length === 1) {
|
||||
return cachedValue != null ? cachedValue : get(this, defaultPath);
|
||||
}
|
||||
return newValue != null ? newValue : get(this, defaultPath);
|
||||
});
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
|
||||
|
@ -4576,8 +4772,7 @@ function invokeLaterTimers() {
|
|||
If you pass a string it will be resolved on the
|
||||
target at the time the method is invoked.
|
||||
@param {Object} [args*] Optional arguments to pass to the timeout.
|
||||
@param {Number} wait
|
||||
Number of milliseconds to wait.
|
||||
@param {Number} wait Number of milliseconds to wait.
|
||||
@return {String} a string you can use to cancel the timer in
|
||||
{{#crossLink "Ember/run.cancel"}}{{/crossLink}} later.
|
||||
*/
|
||||
|
@ -4699,15 +4894,54 @@ Ember.run.scheduleOnce = function(queue, target, method, args) {
|
|||
};
|
||||
|
||||
/**
|
||||
Schedules an item to run after control has been returned to the system.
|
||||
This is equivalent to calling `Ember.run.later` with a wait time of 1ms.
|
||||
Schedules an item to run from within a separate run loop, after
|
||||
control has been returned to the system. This is equivalent to calling
|
||||
`Ember.run.later` with a wait time of 1ms.
|
||||
|
||||
```javascript
|
||||
Ember.run.next(myContext, function(){
|
||||
// code to be executed in the next RunLoop, which will be scheduled after the current one
|
||||
// code to be executed in the next run loop, which will be scheduled after the current one
|
||||
});
|
||||
```
|
||||
|
||||
Multiple operations scheduled with `Ember.run.next` will coalesce
|
||||
into the same later run loop, along with any other operations
|
||||
scheduled by `Ember.run.later` that expire right around the same
|
||||
time that `Ember.run.next` operations will fire.
|
||||
|
||||
Note that there are often alternatives to using `Ember.run.next`.
|
||||
For instance, if you'd like to schedule an operation to happen
|
||||
after all DOM element operations have completed within the current
|
||||
run loop, you can make use of the `afterRender` run loop queue (added
|
||||
by the `ember-views` package, along with the preceding `render` queue
|
||||
where all the DOM element operations happen). Example:
|
||||
|
||||
```javascript
|
||||
App.MyCollectionView = Ember.CollectionView.extend({
|
||||
didInsertElement: function() {
|
||||
Ember.run.scheduleOnce('afterRender', this, 'processChildElements');
|
||||
},
|
||||
processChildElements: function() {
|
||||
// ... do something with collectionView's child view
|
||||
// elements after they've finished rendering, which
|
||||
// can't be done within the CollectionView's
|
||||
// `didInsertElement` hook because that gets run
|
||||
// before the child elements have been added to the DOM.
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
One benefit of the above approach compared to using `Ember.run.next` is
|
||||
that you will be able to perform DOM/CSS operations before unprocessed
|
||||
elements are rendered to the screen, which may prevent flickering or
|
||||
other artifacts caused by delaying processing until after rendering.
|
||||
|
||||
The other major benefit to the above approach is that `Ember.run.next`
|
||||
introduces an element of non-determinism, which can make things much
|
||||
harder to test, due to its reliance on `setTimeout`; it's much harder
|
||||
to guarantee the order of scheduled operations when they are scheduled
|
||||
outside of the current run loop, i.e. with `Ember.run.next`.
|
||||
|
||||
@method next
|
||||
@param {Object} [target] target of method to invoke
|
||||
@param {Function|String} method The method to invoke.
|
||||
|
@ -6266,7 +6500,7 @@ define("container",
|
|||
factory = name;
|
||||
fullName = type;
|
||||
} else {
|
||||
Ember.deprecate('register("'+type +'", "'+ name+'") is now deprecated in-favour of register("'+type+':'+name+'");', true);
|
||||
Ember.deprecate('register("'+type +'", "'+ name+'") is now deprecated in-favour of register("'+type+':'+name+'");', false);
|
||||
fullName = type + ":" + name;
|
||||
}
|
||||
|
||||
|
@ -12825,7 +13059,7 @@ Ember Runtime
|
|||
*/
|
||||
|
||||
var jQuery = Ember.imports.jQuery;
|
||||
Ember.assert("Ember Views require jQuery 1.8 or 1.9", jQuery && (jQuery().jquery.match(/^1\.(8|9)(\.\d+)?(pre|rc\d?)?/) || Ember.ENV.FORCE_JQUERY));
|
||||
Ember.assert("Ember Views require jQuery 1.8, 1.9 or 2.0", jQuery && (jQuery().jquery.match(/^((1\.(8|9))|2.0)(\.\d+)?(pre|rc\d?)?/) || Ember.ENV.FORCE_JQUERY));
|
||||
|
||||
/**
|
||||
Alias for jQuery
|
||||
|
@ -12967,9 +13201,11 @@ var setInnerHTML = function(element, html) {
|
|||
if (canSetInnerHTML(tagName)) {
|
||||
setInnerHTMLWithoutFix(element, html);
|
||||
} else {
|
||||
Ember.assert("Can't set innerHTML on "+element.tagName+" in this browser", element.outerHTML);
|
||||
// Firefox versions < 11 do not have support for element.outerHTML.
|
||||
var outerHTML = element.outerHTML || new XMLSerializer().serializeToString(element);
|
||||
Ember.assert("Can't set innerHTML on "+element.tagName+" in this browser", outerHTML);
|
||||
|
||||
var startTag = element.outerHTML.match(new RegExp("<"+tagName+"([^>]*)>", 'i'))[0],
|
||||
var startTag = outerHTML.match(new RegExp("<"+tagName+"([^>]*)>", 'i'))[0],
|
||||
endTag = '</'+tagName+'>';
|
||||
|
||||
var wrapper = document.createElement('div');
|
||||
|
@ -13452,7 +13688,9 @@ Ember._RenderBuffer.prototype =
|
|||
*/
|
||||
string: function() {
|
||||
if (this._element) {
|
||||
return this.element().outerHTML;
|
||||
// Firefox versions < 11 do not have support for element.outerHTML.
|
||||
return this.element().outerHTML ||
|
||||
new XMLSerializer().serializeToString(this.element());
|
||||
} else {
|
||||
return this.innerString();
|
||||
}
|
||||
|
@ -15324,9 +15562,9 @@ Ember.View = Ember.CoreView.extend(
|
|||
willInsertElement: Ember.K,
|
||||
|
||||
/**
|
||||
Called when the element of the view has been inserted into the DOM.
|
||||
Override this function to do any set up that requires an element in the
|
||||
document body.
|
||||
Called when the element of the view has been inserted into the DOM
|
||||
or after the view was re-rendered. Override this function to do any
|
||||
set up that requires an element in the document body.
|
||||
|
||||
@event didInsertElement
|
||||
*/
|
||||
|
@ -17774,7 +18012,7 @@ if(!Handlebars && typeof require === 'function') {
|
|||
Handlebars = require('handlebars');
|
||||
}
|
||||
|
||||
Ember.assert("Ember Handlebars requires Handlebars 1.0.0-rc.3 or greater", Handlebars && Handlebars.VERSION.match(/^1\.0\.[0-9](\.rc\.[23456789]+)?/));
|
||||
Ember.assert("Ember Handlebars requires Handlebars 1.0.0-rc.3 or greater. Include a SCRIPT tag in the HTML HEAD linking to the Handlebars file before you link to Ember.", Handlebars && Handlebars.VERSION.match(/^1\.0\.[0-9](\.rc\.[23456789]+)?/));
|
||||
|
||||
/**
|
||||
Prepares the Handlebars templating library for use inside Ember's view
|
||||
|
@ -20531,11 +20769,12 @@ Ember.Handlebars.registerHelper('each', function(path, options) {
|
|||
*/
|
||||
|
||||
Ember.Handlebars.registerHelper('template', function(name, options) {
|
||||
var template = Ember.TEMPLATES[name];
|
||||
var view = options.data.view,
|
||||
template = view.templateForName(name);
|
||||
|
||||
Ember.assert("Unable to find template with name '"+name+"'.", !!template);
|
||||
|
||||
Ember.TEMPLATES[name](this, { data: options.data });
|
||||
template(this, { data: options.data });
|
||||
});
|
||||
|
||||
})();
|
||||
|
@ -20550,7 +20789,7 @@ Ember.Handlebars.registerHelper('template', function(name, options) {
|
|||
|
||||
/**
|
||||
`partial` renders a template directly using the current context.
|
||||
If needed the context can be set using the `{{#with foo}}` helper.
|
||||
If needed the context can be set using the `{{#with foo}}` helper.
|
||||
|
||||
```html
|
||||
<script type="text/x-handlebars" data-template-name="header_bar">
|
||||
|
@ -20579,10 +20818,10 @@ Ember.Handlebars.registerHelper('partial', function(name, options) {
|
|||
|
||||
nameParts[nameParts.length - 1] = "_" + lastPart;
|
||||
|
||||
var underscoredName = nameParts.join("/");
|
||||
|
||||
var template = Ember.TEMPLATES[underscoredName],
|
||||
deprecatedTemplate = Ember.TEMPLATES[name];
|
||||
var view = options.data.view,
|
||||
underscoredName = nameParts.join("/"),
|
||||
template = view.templateForName(underscoredName),
|
||||
deprecatedTemplate = view.templateForName(name);
|
||||
|
||||
Ember.deprecate("You tried to render the partial " + name + ", which should be at '" + underscoredName + "', but Ember found '" + name + "'. Please use a leading underscore in your partials", template);
|
||||
Ember.assert("Unable to find partial with name '"+name+"'.", template || deprecatedTemplate);
|
||||
|
@ -21426,7 +21665,7 @@ helpers = helpers || Ember.Handlebars.helpers; data = data || {};
|
|||
var buffer = '', stack1, hashTypes, escapeExpression=this.escapeExpression, self=this;
|
||||
|
||||
function program1(depth0,data) {
|
||||
|
||||
|
||||
var buffer = '', hashTypes;
|
||||
data.buffer.push("<option value=\"\">");
|
||||
hashTypes = {};
|
||||
|
@ -21436,7 +21675,7 @@ function program1(depth0,data) {
|
|||
}
|
||||
|
||||
function program3(depth0,data) {
|
||||
|
||||
|
||||
var hashTypes;
|
||||
hashTypes = {'contentBinding': "STRING"};
|
||||
data.buffer.push(escapeExpression(helpers.view.call(depth0, "Ember.SelectOption", {hash:{
|
||||
|
@ -21451,7 +21690,7 @@ function program3(depth0,data) {
|
|||
stack1 = helpers.each.call(depth0, "view.content", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:["ID"],hashTypes:hashTypes,data:data});
|
||||
if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
|
||||
return buffer;
|
||||
|
||||
|
||||
}),
|
||||
attributeBindings: ['multiple', 'disabled', 'tabindex', 'name'],
|
||||
|
||||
|
@ -23051,7 +23290,7 @@ Ember.controllerFor = function(container, controllerName, context, lookupOptions
|
|||
`App.ObjectController` and `App.ArrayController`
|
||||
*/
|
||||
Ember.generateController = function(container, controllerName, context) {
|
||||
var controller, DefaultController;
|
||||
var controller, DefaultController, fullName;
|
||||
|
||||
if (context && Ember.isArray(context)) {
|
||||
DefaultController = container.resolve('controller:array');
|
||||
|
@ -23072,8 +23311,10 @@ Ember.generateController = function(container, controllerName, context) {
|
|||
return "(generated " + controllerName + " controller)";
|
||||
};
|
||||
|
||||
container.register('controller', controllerName, controller);
|
||||
return container.lookup('controller:' + controllerName);
|
||||
|
||||
fullName = 'controller:' + controllerName;
|
||||
container.register(fullName, controller);
|
||||
return container.lookup(fullName);
|
||||
};
|
||||
|
||||
})();
|
||||
|
@ -23136,8 +23377,8 @@ Ember.Router = Ember.Object.extend({
|
|||
|
||||
setupRouter(this, router, location);
|
||||
|
||||
container.register('view', 'default', DefaultView);
|
||||
container.register('view', 'toplevel', Ember.View.extend());
|
||||
container.register('view:default', DefaultView);
|
||||
container.register('view:toplevel', Ember.View.extend());
|
||||
|
||||
location.onUpdateURL(function(url) {
|
||||
self.handleURL(url);
|
||||
|
@ -23233,7 +23474,9 @@ function getHandlerFunction(router) {
|
|||
DefaultRoute = container.resolve('route:basic');
|
||||
|
||||
return function(name) {
|
||||
var handler = container.lookup('route:' + name);
|
||||
var routeName = 'route:' + name,
|
||||
handler = container.lookup(routeName);
|
||||
|
||||
if (seen[name]) { return handler; }
|
||||
|
||||
seen[name] = true;
|
||||
|
@ -23242,8 +23485,8 @@ function getHandlerFunction(router) {
|
|||
if (name === 'loading') { return {}; }
|
||||
if (name === 'failure') { return router.constructor.defaultFailureHandler; }
|
||||
|
||||
container.register('route', name, DefaultRoute.extend());
|
||||
handler = container.lookup('route:' + name);
|
||||
container.register(routeName, DefaultRoute.extend());
|
||||
handler = container.lookup(routeName);
|
||||
}
|
||||
|
||||
handler.routeName = name;
|
||||
|
@ -23252,7 +23495,8 @@ function getHandlerFunction(router) {
|
|||
}
|
||||
|
||||
function handlerIsActive(router, handlerName) {
|
||||
var handler = router.container.lookup('route:' + handlerName),
|
||||
var routeName = 'route:' + handlerName,
|
||||
handler = router.container.lookup(routeName),
|
||||
currentHandlerInfos = router.router.currentHandlerInfos,
|
||||
handlerInfo;
|
||||
|
||||
|
@ -23962,7 +24206,25 @@ Ember.onLoad('Ember.Handlebars', function(Handlebars) {
|
|||
return ret.concat(resolvedPaths(linkView.parameters));
|
||||
}
|
||||
|
||||
var LinkView = Ember.View.extend({
|
||||
/**
|
||||
Renders a link to the supplied route.
|
||||
|
||||
When the rendered link matches the current route, and the same object instance is passed into the helper,
|
||||
then the link is given class="active" by default.
|
||||
|
||||
You may re-open LinkView in order to change the default active class:
|
||||
|
||||
``` javascript
|
||||
Ember.LinkView.reopen({
|
||||
activeClass: "is-active"
|
||||
})
|
||||
```
|
||||
|
||||
@class LinkView
|
||||
@namespace Ember
|
||||
@extends Ember.View
|
||||
**/
|
||||
var LinkView = Ember.LinkView = Ember.View.extend({
|
||||
tagName: 'a',
|
||||
namedRoute: null,
|
||||
currentWhen: null,
|
||||
|
@ -25554,7 +25816,7 @@ var get = Ember.get, set = Ember.set,
|
|||
name: "store",
|
||||
|
||||
initialize: function(container, application) {
|
||||
container.register('store', 'main', application.Store);
|
||||
container.register('store:main', application.Store);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
@ -25596,7 +25858,8 @@ var get = Ember.get, set = Ember.set,
|
|||
@namespace Ember
|
||||
@extends Ember.Namespace
|
||||
*/
|
||||
var Application = Ember.Application = Ember.Namespace.extend({
|
||||
|
||||
var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin, {
|
||||
|
||||
/**
|
||||
The root DOM element of the Application. This can be specified as an
|
||||
|
@ -25750,10 +26013,17 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
*/
|
||||
scheduleInitialize: function() {
|
||||
var self = this;
|
||||
this.$().ready(function() {
|
||||
if (self.isDestroyed || self.isInitialized) { return; }
|
||||
|
||||
function initialize(){
|
||||
if (self.isDestroyed) { return; }
|
||||
Ember.run.schedule('actions', self, 'initialize');
|
||||
});
|
||||
}
|
||||
|
||||
if (!this.$ || this.$.isReady) {
|
||||
initialize();
|
||||
} else {
|
||||
this.$().ready(initialize);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -25861,7 +26131,7 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
this.isInitialized = true;
|
||||
|
||||
// At this point, the App.Router must already be assigned
|
||||
this.register('router', 'main', this.Router);
|
||||
this.register('router:main', this.Router);
|
||||
|
||||
this.runInitializers();
|
||||
Ember.runLoadHooks('application', this);
|
||||
|
@ -25879,8 +26149,11 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
this.buildContainer();
|
||||
|
||||
this.isInitialized = false;
|
||||
this.initialize();
|
||||
this.startRouting();
|
||||
|
||||
Ember.run.schedule('actions', this, function(){
|
||||
this.initialize();
|
||||
this.startRouting();
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -25920,6 +26193,8 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
Ember.Namespace.processAll();
|
||||
Ember.BOOTED = true;
|
||||
}
|
||||
|
||||
this.resolve(this);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -26054,7 +26329,7 @@ Ember.Application.reopenClass({
|
|||
container.resolver = resolverFor(namespace);
|
||||
container.optionsForType('view', { singleton: false });
|
||||
container.optionsForType('template', { instantiate: false });
|
||||
container.register('application', 'main', namespace, { instantiate: false });
|
||||
container.register('application:main', namespace, { instantiate: false });
|
||||
|
||||
container.register('controller:basic', Ember.Controller, { instantiate: false });
|
||||
container.register('controller:object', Ember.ObjectController, { instantiate: false });
|
||||
|
@ -27468,8 +27743,8 @@ Ember States
|
|||
|
||||
|
||||
})();
|
||||
// Version: v1.0.0-pre.2-892-g1283274
|
||||
// Last commit: 1283274 (2013-03-21 14:18:06 -0700)
|
||||
// Version: v1.0.0-pre.2-924-g9e5ec3b
|
||||
// Last commit: 9e5ec3b (2013-03-26 21:49:38 -0700)
|
||||
|
||||
|
||||
(function() {
|
||||
|
|
|
@ -3518,59 +3518,238 @@ Ember.cacheFor = function cacheFor(obj, key) {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@method computed.not
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which negate the original value for property
|
||||
*/
|
||||
Ember.computed.not = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
return !get(this, dependentKey);
|
||||
});
|
||||
};
|
||||
function getProperties(self, propertyNames) {
|
||||
var ret = {};
|
||||
for(var i = 0; i < propertyNames.length; i++) {
|
||||
ret[propertyNames[i]] = get(self, propertyNames[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@method computed.none
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
*/
|
||||
Ember.computed.none = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
var val = get(this, dependentKey);
|
||||
return Ember.isNone(val);
|
||||
});
|
||||
};
|
||||
function registerComputed(name, macro) {
|
||||
Ember.computed[name] = function(dependentKey) {
|
||||
var args = a_slice.call(arguments);
|
||||
return Ember.computed(dependentKey, function() {
|
||||
return macro.apply(this, args);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function registerComputedWithProperties(name, macro) {
|
||||
Ember.computed[name] = function() {
|
||||
var properties = a_slice.call(arguments);
|
||||
|
||||
var computed = Ember.computed(function() {
|
||||
return macro.apply(this, [getProperties(this, properties)]);
|
||||
});
|
||||
|
||||
return computed.property.apply(computed, properties);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@method computed.empty
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which negate
|
||||
the original value for property
|
||||
*/
|
||||
Ember.computed.empty = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
var val = get(this, dependentKey);
|
||||
return Ember.isEmpty(val);
|
||||
});
|
||||
};
|
||||
registerComputed('empty', function(dependentKey) {
|
||||
return Ember.isEmpty(get(this, dependentKey));
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.notEmpty
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
original value for property is not empty.
|
||||
*/
|
||||
registerComputed('notEmpty', function(dependentKey) {
|
||||
return !Ember.isEmpty(get(this, dependentKey));
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.none
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which
|
||||
rturns true if original value for property is null or undefined.
|
||||
*/
|
||||
registerComputed('none', function(dependentKey) {
|
||||
return Ember.isNone(get(this, dependentKey));
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.not
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which returns
|
||||
inverse of the original value for property
|
||||
*/
|
||||
registerComputed('not', function(dependentKey) {
|
||||
return !get(this, dependentKey);
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.bool
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which convert to boolean the original value for property
|
||||
@return {Ember.ComputedProperty} computed property which convert
|
||||
to boolean the original value for property
|
||||
*/
|
||||
Ember.computed.bool = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key) {
|
||||
return !!get(this, dependentKey);
|
||||
});
|
||||
};
|
||||
registerComputed('bool', function(dependentKey) {
|
||||
return !!get(this, dependentKey);
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.match
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {RegExp} regexp
|
||||
@return {Ember.ComputedProperty} computed property which match
|
||||
the original value for property against a given RegExp
|
||||
*/
|
||||
registerComputed('match', function(dependentKey, regexp) {
|
||||
var value = get(this, dependentKey);
|
||||
return typeof value === 'string' ? !!value.match(regexp) : false;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.equal
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {String|Number|Object} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is equal to the given value.
|
||||
*/
|
||||
registerComputed('equal', function(dependentKey, value) {
|
||||
return get(this, dependentKey) === value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.gt
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is greater then given value.
|
||||
*/
|
||||
registerComputed('gt', function(dependentKey, value) {
|
||||
return get(this, dependentKey) > value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.gte
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is greater or equal then given value.
|
||||
*/
|
||||
registerComputed('gte', function(dependentKey, value) {
|
||||
return get(this, dependentKey) >= value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.lt
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is less then given value.
|
||||
*/
|
||||
registerComputed('lt', function(dependentKey, value) {
|
||||
return get(this, dependentKey) < value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.lte
|
||||
@for Ember
|
||||
@param {String} dependentKey
|
||||
@param {Number} value
|
||||
@return {Ember.ComputedProperty} computed property which returns true if
|
||||
the original value for property is less or equal then given value.
|
||||
*/
|
||||
registerComputed('lte', function(dependentKey, value) {
|
||||
return get(this, dependentKey) <= value;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.and
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which peforms
|
||||
a logical `and` on the values of all the original values for properties.
|
||||
*/
|
||||
registerComputedWithProperties('and', function(properties) {
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key) && !properties[key]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.or
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which peforms
|
||||
a logical `or` on the values of all the original values for properties.
|
||||
*/
|
||||
registerComputedWithProperties('or', function(properties) {
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key) && properties[key]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.any
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which returns
|
||||
the first trouthy value of given list of properties.
|
||||
*/
|
||||
registerComputedWithProperties('any', function(properties) {
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key) && properties[key]) {
|
||||
return properties[key];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.map
|
||||
@for Ember
|
||||
@param {String} dependentKey, [dependentKey...]
|
||||
@return {Ember.ComputedProperty} computed property which maps
|
||||
values of all passed properties in to an array.
|
||||
*/
|
||||
registerComputedWithProperties('map', function(properties) {
|
||||
var res = [];
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key)) {
|
||||
if (Ember.isNone(properties[key])) {
|
||||
res.push(null);
|
||||
} else {
|
||||
res.push(properties[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
});
|
||||
|
||||
/**
|
||||
@method computed.alias
|
||||
@for Ember
|
||||
|
||||
@param {String} dependentKey
|
||||
@return {Ember.ComputedProperty} computed property which creates an
|
||||
alias to the original value for property.
|
||||
*/
|
||||
Ember.computed.alias = function(dependentKey) {
|
||||
return Ember.computed(dependentKey, function(key, value){
|
||||
|
@ -3583,6 +3762,23 @@ Ember.computed.alias = function(dependentKey) {
|
|||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@method computed.defaultTo
|
||||
@for Ember
|
||||
@param {String} defaultPath
|
||||
@return {Ember.ComputedProperty} computed property which acts like
|
||||
a standard getter and setter, but defaults to the value from `defaultPath`.
|
||||
*/
|
||||
Ember.computed.defaultTo = function(defaultPath) {
|
||||
return Ember.computed(function(key, newValue, cachedValue) {
|
||||
var result;
|
||||
if (arguments.length === 1) {
|
||||
return cachedValue != null ? cachedValue : get(this, defaultPath);
|
||||
}
|
||||
return newValue != null ? newValue : get(this, defaultPath);
|
||||
});
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
|
||||
|
@ -4415,8 +4611,7 @@ function invokeLaterTimers() {
|
|||
If you pass a string it will be resolved on the
|
||||
target at the time the method is invoked.
|
||||
@param {Object} [args*] Optional arguments to pass to the timeout.
|
||||
@param {Number} wait
|
||||
Number of milliseconds to wait.
|
||||
@param {Number} wait Number of milliseconds to wait.
|
||||
@return {String} a string you can use to cancel the timer in
|
||||
{{#crossLink "Ember/run.cancel"}}{{/crossLink}} later.
|
||||
*/
|
||||
|
@ -4538,15 +4733,54 @@ Ember.run.scheduleOnce = function(queue, target, method, args) {
|
|||
};
|
||||
|
||||
/**
|
||||
Schedules an item to run after control has been returned to the system.
|
||||
This is equivalent to calling `Ember.run.later` with a wait time of 1ms.
|
||||
Schedules an item to run from within a separate run loop, after
|
||||
control has been returned to the system. This is equivalent to calling
|
||||
`Ember.run.later` with a wait time of 1ms.
|
||||
|
||||
```javascript
|
||||
Ember.run.next(myContext, function(){
|
||||
// code to be executed in the next RunLoop, which will be scheduled after the current one
|
||||
// code to be executed in the next run loop, which will be scheduled after the current one
|
||||
});
|
||||
```
|
||||
|
||||
Multiple operations scheduled with `Ember.run.next` will coalesce
|
||||
into the same later run loop, along with any other operations
|
||||
scheduled by `Ember.run.later` that expire right around the same
|
||||
time that `Ember.run.next` operations will fire.
|
||||
|
||||
Note that there are often alternatives to using `Ember.run.next`.
|
||||
For instance, if you'd like to schedule an operation to happen
|
||||
after all DOM element operations have completed within the current
|
||||
run loop, you can make use of the `afterRender` run loop queue (added
|
||||
by the `ember-views` package, along with the preceding `render` queue
|
||||
where all the DOM element operations happen). Example:
|
||||
|
||||
```javascript
|
||||
App.MyCollectionView = Ember.CollectionView.extend({
|
||||
didInsertElement: function() {
|
||||
Ember.run.scheduleOnce('afterRender', this, 'processChildElements');
|
||||
},
|
||||
processChildElements: function() {
|
||||
// ... do something with collectionView's child view
|
||||
// elements after they've finished rendering, which
|
||||
// can't be done within the CollectionView's
|
||||
// `didInsertElement` hook because that gets run
|
||||
// before the child elements have been added to the DOM.
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
One benefit of the above approach compared to using `Ember.run.next` is
|
||||
that you will be able to perform DOM/CSS operations before unprocessed
|
||||
elements are rendered to the screen, which may prevent flickering or
|
||||
other artifacts caused by delaying processing until after rendering.
|
||||
|
||||
The other major benefit to the above approach is that `Ember.run.next`
|
||||
introduces an element of non-determinism, which can make things much
|
||||
harder to test, due to its reliance on `setTimeout`; it's much harder
|
||||
to guarantee the order of scheduled operations when they are scheduled
|
||||
outside of the current run loop, i.e. with `Ember.run.next`.
|
||||
|
||||
@method next
|
||||
@param {Object} [target] target of method to invoke
|
||||
@param {Function|String} method The method to invoke.
|
||||
|
@ -12800,9 +13034,11 @@ var setInnerHTML = function(element, html) {
|
|||
if (canSetInnerHTML(tagName)) {
|
||||
setInnerHTMLWithoutFix(element, html);
|
||||
} else {
|
||||
// Firefox versions < 11 do not have support for element.outerHTML.
|
||||
var outerHTML = element.outerHTML || new XMLSerializer().serializeToString(element);
|
||||
|
||||
|
||||
var startTag = element.outerHTML.match(new RegExp("<"+tagName+"([^>]*)>", 'i'))[0],
|
||||
var startTag = outerHTML.match(new RegExp("<"+tagName+"([^>]*)>", 'i'))[0],
|
||||
endTag = '</'+tagName+'>';
|
||||
|
||||
var wrapper = document.createElement('div');
|
||||
|
@ -13285,7 +13521,9 @@ Ember._RenderBuffer.prototype =
|
|||
*/
|
||||
string: function() {
|
||||
if (this._element) {
|
||||
return this.element().outerHTML;
|
||||
// Firefox versions < 11 do not have support for element.outerHTML.
|
||||
return this.element().outerHTML ||
|
||||
new XMLSerializer().serializeToString(this.element());
|
||||
} else {
|
||||
return this.innerString();
|
||||
}
|
||||
|
@ -15150,9 +15388,9 @@ Ember.View = Ember.CoreView.extend(
|
|||
willInsertElement: Ember.K,
|
||||
|
||||
/**
|
||||
Called when the element of the view has been inserted into the DOM.
|
||||
Override this function to do any set up that requires an element in the
|
||||
document body.
|
||||
Called when the element of the view has been inserted into the DOM
|
||||
or after the view was re-rendered. Override this function to do any
|
||||
set up that requires an element in the document body.
|
||||
|
||||
@event didInsertElement
|
||||
*/
|
||||
|
@ -20345,10 +20583,11 @@ Ember.Handlebars.registerHelper('each', function(path, options) {
|
|||
*/
|
||||
|
||||
Ember.Handlebars.registerHelper('template', function(name, options) {
|
||||
var template = Ember.TEMPLATES[name];
|
||||
var view = options.data.view,
|
||||
template = view.templateForName(name);
|
||||
|
||||
|
||||
Ember.TEMPLATES[name](this, { data: options.data });
|
||||
template(this, { data: options.data });
|
||||
});
|
||||
|
||||
})();
|
||||
|
@ -20363,7 +20602,7 @@ Ember.Handlebars.registerHelper('template', function(name, options) {
|
|||
|
||||
/**
|
||||
`partial` renders a template directly using the current context.
|
||||
If needed the context can be set using the `{{#with foo}}` helper.
|
||||
If needed the context can be set using the `{{#with foo}}` helper.
|
||||
|
||||
```html
|
||||
<script type="text/x-handlebars" data-template-name="header_bar">
|
||||
|
@ -20392,10 +20631,10 @@ Ember.Handlebars.registerHelper('partial', function(name, options) {
|
|||
|
||||
nameParts[nameParts.length - 1] = "_" + lastPart;
|
||||
|
||||
var underscoredName = nameParts.join("/");
|
||||
|
||||
var template = Ember.TEMPLATES[underscoredName],
|
||||
deprecatedTemplate = Ember.TEMPLATES[name];
|
||||
var view = options.data.view,
|
||||
underscoredName = nameParts.join("/"),
|
||||
template = view.templateForName(underscoredName),
|
||||
deprecatedTemplate = view.templateForName(name);
|
||||
|
||||
|
||||
|
||||
|
@ -22862,7 +23101,7 @@ Ember.controllerFor = function(container, controllerName, context, lookupOptions
|
|||
`App.ObjectController` and `App.ArrayController`
|
||||
*/
|
||||
Ember.generateController = function(container, controllerName, context) {
|
||||
var controller, DefaultController;
|
||||
var controller, DefaultController, fullName;
|
||||
|
||||
if (context && Ember.isArray(context)) {
|
||||
DefaultController = container.resolve('controller:array');
|
||||
|
@ -22883,8 +23122,10 @@ Ember.generateController = function(container, controllerName, context) {
|
|||
return "(generated " + controllerName + " controller)";
|
||||
};
|
||||
|
||||
container.register('controller', controllerName, controller);
|
||||
return container.lookup('controller:' + controllerName);
|
||||
|
||||
fullName = 'controller:' + controllerName;
|
||||
container.register(fullName, controller);
|
||||
return container.lookup(fullName);
|
||||
};
|
||||
|
||||
})();
|
||||
|
@ -22947,8 +23188,8 @@ Ember.Router = Ember.Object.extend({
|
|||
|
||||
setupRouter(this, router, location);
|
||||
|
||||
container.register('view', 'default', DefaultView);
|
||||
container.register('view', 'toplevel', Ember.View.extend());
|
||||
container.register('view:default', DefaultView);
|
||||
container.register('view:toplevel', Ember.View.extend());
|
||||
|
||||
location.onUpdateURL(function(url) {
|
||||
self.handleURL(url);
|
||||
|
@ -23044,7 +23285,9 @@ function getHandlerFunction(router) {
|
|||
DefaultRoute = container.resolve('route:basic');
|
||||
|
||||
return function(name) {
|
||||
var handler = container.lookup('route:' + name);
|
||||
var routeName = 'route:' + name,
|
||||
handler = container.lookup(routeName);
|
||||
|
||||
if (seen[name]) { return handler; }
|
||||
|
||||
seen[name] = true;
|
||||
|
@ -23053,8 +23296,8 @@ function getHandlerFunction(router) {
|
|||
if (name === 'loading') { return {}; }
|
||||
if (name === 'failure') { return router.constructor.defaultFailureHandler; }
|
||||
|
||||
container.register('route', name, DefaultRoute.extend());
|
||||
handler = container.lookup('route:' + name);
|
||||
container.register(routeName, DefaultRoute.extend());
|
||||
handler = container.lookup(routeName);
|
||||
}
|
||||
|
||||
handler.routeName = name;
|
||||
|
@ -23063,7 +23306,8 @@ function getHandlerFunction(router) {
|
|||
}
|
||||
|
||||
function handlerIsActive(router, handlerName) {
|
||||
var handler = router.container.lookup('route:' + handlerName),
|
||||
var routeName = 'route:' + handlerName,
|
||||
handler = router.container.lookup(routeName),
|
||||
currentHandlerInfos = router.router.currentHandlerInfos,
|
||||
handlerInfo;
|
||||
|
||||
|
@ -23767,7 +24011,25 @@ Ember.onLoad('Ember.Handlebars', function(Handlebars) {
|
|||
return ret.concat(resolvedPaths(linkView.parameters));
|
||||
}
|
||||
|
||||
var LinkView = Ember.View.extend({
|
||||
/**
|
||||
Renders a link to the supplied route.
|
||||
|
||||
When the rendered link matches the current route, and the same object instance is passed into the helper,
|
||||
then the link is given class="active" by default.
|
||||
|
||||
You may re-open LinkView in order to change the default active class:
|
||||
|
||||
``` javascript
|
||||
Ember.LinkView.reopen({
|
||||
activeClass: "is-active"
|
||||
})
|
||||
```
|
||||
|
||||
@class LinkView
|
||||
@namespace Ember
|
||||
@extends Ember.View
|
||||
**/
|
||||
var LinkView = Ember.LinkView = Ember.View.extend({
|
||||
tagName: 'a',
|
||||
namedRoute: null,
|
||||
currentWhen: null,
|
||||
|
@ -25356,7 +25618,7 @@ var get = Ember.get, set = Ember.set,
|
|||
name: "store",
|
||||
|
||||
initialize: function(container, application) {
|
||||
container.register('store', 'main', application.Store);
|
||||
container.register('store:main', application.Store);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
@ -25398,7 +25660,8 @@ var get = Ember.get, set = Ember.set,
|
|||
@namespace Ember
|
||||
@extends Ember.Namespace
|
||||
*/
|
||||
var Application = Ember.Application = Ember.Namespace.extend({
|
||||
|
||||
var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin, {
|
||||
|
||||
/**
|
||||
The root DOM element of the Application. This can be specified as an
|
||||
|
@ -25552,10 +25815,17 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
*/
|
||||
scheduleInitialize: function() {
|
||||
var self = this;
|
||||
this.$().ready(function() {
|
||||
if (self.isDestroyed || self.isInitialized) { return; }
|
||||
|
||||
function initialize(){
|
||||
if (self.isDestroyed) { return; }
|
||||
Ember.run.schedule('actions', self, 'initialize');
|
||||
});
|
||||
}
|
||||
|
||||
if (!this.$ || this.$.isReady) {
|
||||
initialize();
|
||||
} else {
|
||||
this.$().ready(initialize);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -25663,7 +25933,7 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
this.isInitialized = true;
|
||||
|
||||
// At this point, the App.Router must already be assigned
|
||||
this.register('router', 'main', this.Router);
|
||||
this.register('router:main', this.Router);
|
||||
|
||||
this.runInitializers();
|
||||
Ember.runLoadHooks('application', this);
|
||||
|
@ -25681,8 +25951,11 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
this.buildContainer();
|
||||
|
||||
this.isInitialized = false;
|
||||
this.initialize();
|
||||
this.startRouting();
|
||||
|
||||
Ember.run.schedule('actions', this, function(){
|
||||
this.initialize();
|
||||
this.startRouting();
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -25722,6 +25995,8 @@ var Application = Ember.Application = Ember.Namespace.extend({
|
|||
Ember.Namespace.processAll();
|
||||
Ember.BOOTED = true;
|
||||
}
|
||||
|
||||
this.resolve(this);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -25855,7 +26130,7 @@ Ember.Application.reopenClass({
|
|||
container.resolver = resolverFor(namespace);
|
||||
container.optionsForType('view', { singleton: false });
|
||||
container.optionsForType('template', { instantiate: false });
|
||||
container.register('application', 'main', namespace, { instantiate: false });
|
||||
container.register('application:main', namespace, { instantiate: false });
|
||||
|
||||
container.register('controller:basic', Ember.Controller, { instantiate: false });
|
||||
container.register('controller:object', Ember.ObjectController, { instantiate: false });
|
||||
|
|
|
@ -5,7 +5,7 @@ class ExceptionsController < ApplicationController
|
|||
def not_found
|
||||
f = Topic.where(deleted_at: nil, archetype: "regular")
|
||||
|
||||
@popular = f.order('views desc').take(10)
|
||||
@latest = f.order('views desc').take(10)
|
||||
@recent = f.order('created_at desc').take(10)
|
||||
@slug = params[:slug].class == String ? params[:slug] : ''
|
||||
@slug.gsub!('-',' ')
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
class ListController < ApplicationController
|
||||
|
||||
before_filter :ensure_logged_in, except: [:index, :category, :category_feed]
|
||||
before_filter :ensure_logged_in, except: [:index, :hot, :category, :category_feed]
|
||||
skip_before_filter :check_xhr
|
||||
|
||||
# Create our filters
|
||||
[:popular, :favorited, :read, :posted, :unread, :new].each do |filter|
|
||||
[:latest, :hot, :favorited, :read, :posted, :unread, :new].each do |filter|
|
||||
define_method(filter) do
|
||||
|
||||
list_opts = {page: params[:page]}
|
||||
|
@ -14,7 +14,7 @@ class ListController < ApplicationController
|
|||
#TODO objectify this stuff
|
||||
SiteSetting.top_menu.split('|').each do |f|
|
||||
s = f.split(",")
|
||||
if s[0] == action_name || (action_name == "index" && s[0] == "popular")
|
||||
if s[0] == action_name || (action_name == "index" && s[0] == "latest")
|
||||
list_opts[:exclude_category] = s[1][1..-1] if s.length == 2
|
||||
end
|
||||
end
|
||||
|
@ -27,7 +27,7 @@ class ListController < ApplicationController
|
|||
respond(list)
|
||||
end
|
||||
end
|
||||
alias_method :index, :popular
|
||||
alias_method :index, :latest
|
||||
|
||||
def category
|
||||
|
||||
|
@ -60,6 +60,12 @@ class ListController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def popular_redirect
|
||||
# We've renamed popular to latest. Use a redirect until we're sure we can
|
||||
# safely remove this.
|
||||
redirect_to latest_path, :status => 301
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def respond(list)
|
||||
|
|
|
@ -22,7 +22,7 @@ class Category < ActiveRecord::Base
|
|||
after_create :create_category_definition
|
||||
after_destroy :invalidate_site_cache
|
||||
|
||||
scope :popular, ->{ order('topic_count desc') }
|
||||
scope :latest, ->{ order('topic_count desc') }
|
||||
|
||||
delegate :post_template, to: 'self.class'
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ class MessageBusObserver < DiscourseObserver
|
|||
topic.posters = topic.posters_summary
|
||||
topic.posts_count = 1
|
||||
topic_json = TopicListItemSerializer.new(topic).as_json
|
||||
MessageBus.publish("/popular", topic_json)
|
||||
MessageBus.publish("/latest", topic_json)
|
||||
|
||||
# If it has a category, add it to the category views too
|
||||
if topic.category.present?
|
||||
|
|
|
@ -22,7 +22,7 @@ class Site
|
|||
end
|
||||
|
||||
def categories
|
||||
Category.popular.includes(:topic_only_relative_url)
|
||||
Category.latest.includes(:topic_only_relative_url)
|
||||
end
|
||||
|
||||
def archetypes
|
||||
|
|
|
@ -17,7 +17,7 @@ class SiteSetting < ActiveRecord::Base
|
|||
setting(:company_domain, 'www.example.com')
|
||||
setting(:api_key, '')
|
||||
client_setting(:traditional_markdown_linebreaks, false)
|
||||
client_setting(:top_menu, 'popular|new|unread|favorited|categories')
|
||||
client_setting(:top_menu, 'latest|hot|new|unread|favorited|categories')
|
||||
client_setting(:post_menu, 'like|edit|flag|delete|share|bookmark|reply')
|
||||
client_setting(:share_links, 'twitter|facebook|google+')
|
||||
client_setting(:track_external_right_clicks, false)
|
||||
|
@ -171,11 +171,11 @@ class SiteSetting < ActiveRecord::Base
|
|||
setting(:max_similar_results, 7)
|
||||
|
||||
def self.generate_api_key!
|
||||
self.api_key = SecureRandom.hex(32)
|
||||
self.api_key = SecureRandom.hex(32)
|
||||
end
|
||||
|
||||
def self.api_key_valid?(tested)
|
||||
t = tested.strip
|
||||
t = tested.strip
|
||||
t.length == 64 && t == self.api_key
|
||||
end
|
||||
|
||||
|
|
|
@ -40,5 +40,4 @@
|
|||
return Discourse.routeBuilder.call(this);
|
||||
});
|
||||
Discourse.start()
|
||||
Discourse.initialize()
|
||||
</script>
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
<table>
|
||||
<tr>
|
||||
<td style="vertical-align:top; padding:0 20px 20px 0;">
|
||||
<h2><%= t 'page_not_found.popular_topics' %></h2>
|
||||
<% @popular.each do |t| %>
|
||||
<h2><%= t 'page_not_found.latest_topics' %></h2>
|
||||
<% @latest.each do |t| %>
|
||||
<%= link_to t.title, t.relative_url %><br/>
|
||||
<% end %>
|
||||
<br/>
|
||||
<a href="/popular" class="btn"><%= t 'page_not_found.see_more' %>…</a>
|
||||
<a href="/latest" class="btn"><%= t 'page_not_found.see_more' %>…</a>
|
||||
</td>
|
||||
<td style="vertical-align:top; padding:0 0 20px 0;">
|
||||
<h2><%= t 'page_not_found.recent_topics' %></h2>
|
||||
|
|
|
@ -373,10 +373,10 @@ cs:
|
|||
new: "Nemáte žádná nová témata ke čtení."
|
||||
read: "Zatím jste nečetli žádná témata."
|
||||
posted: "Zatím jste nepřispěli do žádného tématu."
|
||||
popular: "Nejsou tu žádná populární témata. To je docela smutné."
|
||||
latest: "Nejsou tu žádná populární témata. To je docela smutné."
|
||||
category: "V kategorii {{category}} nejsou žádná témata."
|
||||
bottom:
|
||||
popular: "Nejsou tu žádná další populární témata k přečtení."
|
||||
latest: "Nejsou tu žádná další populární témata k přečtení."
|
||||
posted: "Nejsou tu žádná další zaslaná témata k přečtení."
|
||||
read: "Nejsou tu žádná další přečtená témata."
|
||||
new: "Nejsou tu žádná další nová témata k přečtení."
|
||||
|
@ -412,10 +412,11 @@ cs:
|
|||
options: "Možnosti"
|
||||
show_links: "zobrazit odkazy v tomto tématu"
|
||||
toggle_information: "zobrazit/skrýt detaily tématu"
|
||||
read_more_in_category: "Chcete si přečíst další informace? Projděte si témata v {{catLink}} nebo {{popularLink}}."
|
||||
read_more: "Chcete si přečíst další informace? {{catLink}} nebo {{popularLink}}."
|
||||
read_more_in_category: "Chcete si přečíst další informace? Projděte si témata v {{catLink}} nebo {{latestLink}}."
|
||||
read_more: "Chcete si přečíst další informace? {{catLink}} nebo {{latestLink}}."
|
||||
browse_all_categories: Procházet všechny kategorie
|
||||
view_popular_topics: zobrazit populární témata
|
||||
|
||||
view_latest_topics: zobrazit populární témata
|
||||
suggest_create_topic: Co takhle založit nové téma?
|
||||
read_position_reset: "Vaše pozice čtení byla zresetována."
|
||||
jump_reply_up: přejít na předchozí odpověď
|
||||
|
@ -652,7 +653,7 @@ cs:
|
|||
categories_list: "Seznam kategorií"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populární"
|
||||
help: "populární témata z poslední doby"
|
||||
favorited:
|
||||
|
|
|
@ -366,10 +366,10 @@ da:
|
|||
new: "Du har ingen nye emner."
|
||||
read: "Du har ikke læst nogen emner endnu."
|
||||
posted: "Du har ikke skrevet nogen indlæg endnu."
|
||||
popular: "Der er ikke nogen populære emner. Det er sørgeligt."
|
||||
latest: "Der er ikke nogen populære emner. Det er sørgeligt."
|
||||
category: "Der er ingen emner i kategorien {{category}}."
|
||||
bottom:
|
||||
popular: "Der er ikke flere populære emner."
|
||||
latest: "Der er ikke flere populære emner."
|
||||
posted: "Der er ikke flere emner."
|
||||
read: "Der er ikke flere læste emner."
|
||||
new: "Der er ikke flere nye emner."
|
||||
|
@ -405,10 +405,11 @@ da:
|
|||
options: "Emneindstillinger"
|
||||
show_links: "vis links i dette emne"
|
||||
toggle_information: "vis detaljer om emnet"
|
||||
read_more_in_category: "Mere læsestof? Se andre emner i {{catLink}} eller {{popularLink}}."
|
||||
read_more: "Mere læsestof? {{catLink}} else {{popularLink}}."
|
||||
read_more_in_category: "Mere læsestof? Se andre emner i {{catLink}} eller {{latestLink}}."
|
||||
read_more: "Mere læsestof? {{catLink}} else {{latestLink}}."
|
||||
browse_all_categories: Vis alle kategorier
|
||||
view_popular_topics: vis populære emner
|
||||
|
||||
view_latest_topics: vis populære emner
|
||||
suggest_create_topic: Hvorfor ikke oprette et emne?
|
||||
read_position_reset: "Din læseposition er blevet nulstillet."
|
||||
jump_reply_up: hop til tidligere svar
|
||||
|
@ -640,7 +641,7 @@ da:
|
|||
categories_list: "Kategorioversigt"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populære"
|
||||
help: "de mest populære nyere emner"
|
||||
favorited:
|
||||
|
|
|
@ -354,10 +354,10 @@ de:
|
|||
new: "Es sind keine für Dich neuen Themen da."
|
||||
read: "Du hast bislang keine Themen gelesen."
|
||||
posted: "Du hast bislang keine Beiträge gepostet."
|
||||
popular: "Es gibt keine populären Themen. Wie traurig."
|
||||
latest: "Es gibt keine populären Themen. Wie traurig."
|
||||
category: "Es gibt keine Themen in {{category}}."
|
||||
bottom:
|
||||
popular: "Das waren alle populären Themen."
|
||||
latest: "Das waren alle populären Themen."
|
||||
posted: "Das waren alle Themen."
|
||||
read: "Das waren alle gelesenen Themen."
|
||||
new: "Das waren alle neuen Themen."
|
||||
|
@ -393,10 +393,11 @@ de:
|
|||
options: "Themenoptionen"
|
||||
show_links: "Zeige Links in diesem Thema"
|
||||
toggle_information: "Themendetails ein-/ausblenden"
|
||||
read_more_in_category: "Möchtest Du mehr lesen? Finde andere Themen in {{catLink}} oder {{popularLink}}."
|
||||
read_more: "Möchtest Du mehr lesen? {{catLink}} oder {{popularLink}}."
|
||||
read_more_in_category: "Möchtest Du mehr lesen? Finde andere Themen in {{catLink}} oder {{latestLink}}."
|
||||
read_more: "Möchtest Du mehr lesen? {{catLink}} oder {{latestLink}}."
|
||||
browse_all_categories: Zeige alle Kategorien
|
||||
view_popular_topics: Zeige populäre Themen
|
||||
|
||||
view_latest_topics: Zeige populäre Themen
|
||||
suggest_create_topic: Fang ein neues Thema an?
|
||||
read_position_reset: "Deine Leseposition wurde zurückgesetzt."
|
||||
jump_reply_up: Springe zur vorigen Antwort
|
||||
|
@ -622,7 +623,7 @@ de:
|
|||
categories_list: "Liste der Kategorien"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populär"
|
||||
help: "Die populärsten unter den jüngsten Themen"
|
||||
favorited:
|
||||
|
|
|
@ -373,10 +373,12 @@ en:
|
|||
new: "You have no new topics to read."
|
||||
read: "You haven't read any topics yet."
|
||||
posted: "You haven't posted in any topics yet."
|
||||
popular: "There are no popular topics. That's sad."
|
||||
latest: "There are no latest topics. That's sad."
|
||||
hot: "There are no hot topics."
|
||||
category: "There are no {{category}} topics."
|
||||
bottom:
|
||||
popular: "There are no more popular topics to read."
|
||||
latest: "There are no more latest topics to read."
|
||||
hot: "There are no more hot topics to read."
|
||||
posted: "There are no more posted topics to read."
|
||||
read: "There are no more read topics to read."
|
||||
new: "There are no more new topics to read."
|
||||
|
@ -412,10 +414,11 @@ en:
|
|||
options: "Topic Options"
|
||||
show_links: "show links within this topic"
|
||||
toggle_information: "toggle topic details"
|
||||
read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{popularLink}}."
|
||||
read_more: "Want to read more? {{catLink}} or {{popularLink}}."
|
||||
read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{latestLink}}."
|
||||
read_more: "Want to read more? {{catLink}} or {{latestLink}}."
|
||||
browse_all_categories: Browse all categories
|
||||
view_popular_topics: view popular topics
|
||||
|
||||
view_latest_topics: view latest topics
|
||||
suggest_create_topic: Why not create a topic?
|
||||
read_position_reset: "Your read position has been reset."
|
||||
jump_reply_up: jump to earlier reply
|
||||
|
@ -652,9 +655,12 @@ en:
|
|||
categories_list: "Categories List"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
title: "Popular"
|
||||
help: "the most popular recent topics"
|
||||
latest:
|
||||
title: "Latest"
|
||||
help: "the most recent topics"
|
||||
hot:
|
||||
title: "Hot"
|
||||
help: "a seclection of the hottest topics"
|
||||
favorited:
|
||||
title: "Favorited"
|
||||
help: "topics you marked as favorites"
|
||||
|
@ -685,7 +691,7 @@ en:
|
|||
zero: "{{categoryName}}"
|
||||
one: "{{categoryName}} (1)"
|
||||
other: "{{categoryName}} ({{count}})"
|
||||
help: "popular topics in the {{categoryName}} category"
|
||||
help: "latest topics in the {{categoryName}} category"
|
||||
|
||||
# This section is exported to the javascript for i18n in the admin section
|
||||
admin_js:
|
||||
|
|
|
@ -367,10 +367,10 @@ es:
|
|||
new: "No tienes temas nuevos por leer."
|
||||
read: "Todavía no has leído ningún tema."
|
||||
posted: "Todavía no has publicado en ningún tema."
|
||||
popular: "No hay temas populares. Eso es triste."
|
||||
latest: "No hay temas populares. Eso es triste."
|
||||
category: "No hay temas en la categoría {{category}}."
|
||||
bottom:
|
||||
popular: "No hay más temas populares para leer."
|
||||
latest: "No hay más temas populares para leer."
|
||||
posted: "No hay más temas publicados para leer."
|
||||
read: "No hay más temas leídos."
|
||||
new: "No hay temas nuevos para leer."
|
||||
|
@ -407,10 +407,11 @@ es:
|
|||
options: "Opciones del Tema"
|
||||
show_links: "show links within this topic"
|
||||
toggle_information: "toggle topic details"
|
||||
read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{popularLink}}."
|
||||
read_more: "Want to read more? {{catLink}} or {{popularLink}}."
|
||||
read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{latestLink}}."
|
||||
read_more: "Want to read more? {{catLink}} or {{latestLink}}."
|
||||
browse_all_categories: Browse all categories
|
||||
view_popular_topics: view popular topics
|
||||
|
||||
view_latest_topics: view latest topics
|
||||
suggest_create_topic: Why not create a topic?
|
||||
read_position_reset: "Your read position has been reset."
|
||||
jump_reply_up: jump to earlier reply
|
||||
|
@ -639,7 +640,7 @@ es:
|
|||
categories_list: "Lista de Categorías"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populares"
|
||||
help: "los temas más recientes más populares"
|
||||
favorited:
|
||||
|
@ -672,7 +673,7 @@ es:
|
|||
zero: "{{categoryName}}"
|
||||
one: "{{categoryName}} (1)"
|
||||
other: "{{categoryName}} ({{count}})"
|
||||
help: "popular topics in the {{categoryName}} category"
|
||||
help: "latest topics in the {{categoryName}} category"
|
||||
|
||||
# This section is exported to the javascript for i18n in the admin section
|
||||
admin_js:
|
||||
|
|
|
@ -377,10 +377,10 @@ fr:
|
|||
new: "Vous n'avez aucune discussion non lue."
|
||||
read: "Vous n'avez lu aucune discussion pour le moment."
|
||||
posted: "Vous n'avez écrit aucun message pour le moment."
|
||||
popular: "Il n'y a aucune discussion populaire pour le moment. C'est triste..."
|
||||
latest: "Il n'y a aucune discussion populaire pour le moment. C'est triste..."
|
||||
category: "Il n'y a aucune discussion sur {{category}}."
|
||||
bottom:
|
||||
popular: "Il n'y a plus de discussion populaire à lire."
|
||||
latest: "Il n'y a plus de discussion populaire à lire."
|
||||
posted: "Il n'y a plus de discussion à lire."
|
||||
read: "Il n'y a plus de discussion à lire."
|
||||
new: "Il n'y a plus de discussion à lire."
|
||||
|
@ -416,10 +416,11 @@ fr:
|
|||
options: "options de la discussion"
|
||||
show_links: "afficher les liens de cette discussion"
|
||||
toggle_information: "afficher les détails de la discussion"
|
||||
read_more_in_category: "Vous voulez en lire plus ? Afficher d'autres discussions dans {{catLink}} ou {{popularLink}}."
|
||||
read_more: "Vous voulez en lire plus? {{catLink}} or {{popularLink}}."
|
||||
read_more_in_category: "Vous voulez en lire plus ? Afficher d'autres discussions dans {{catLink}} ou {{latestLink}}."
|
||||
read_more: "Vous voulez en lire plus? {{catLink}} or {{latestLink}}."
|
||||
browse_all_categories: 'Voir toutes les catégories'
|
||||
view_popular_topics: "voir la liste des discussions populaires"
|
||||
|
||||
view_latest_topics: "voir la liste des discussions populaires"
|
||||
suggest_create_topic: "pourquoi ne pas créer une nouvelle discussion ?"
|
||||
read_position_reset: "Votre position de lecture à été remise à zéro."
|
||||
jump_reply_up: "aller à des réponses précédentes"
|
||||
|
@ -656,7 +657,7 @@ fr:
|
|||
categories_list: "Liste des catégories"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populaires"
|
||||
help: "discussions récentes les plus populaires"
|
||||
favorited:
|
||||
|
|
|
@ -326,10 +326,10 @@ id:
|
|||
new: "You have no new topics to read."
|
||||
read: "You haven't read any topics yet."
|
||||
posted: "You haven't posted in any topics yet."
|
||||
popular: "There are no popular topics. That's sad."
|
||||
latest: "There are no latest topics. That's sad."
|
||||
category: "There are no {{category}} topics."
|
||||
bottom:
|
||||
popular: "There are no more popular topics to read."
|
||||
latest: "There are no more latest topics to read."
|
||||
posted: "There are no more posted topics to read."
|
||||
read: "There are no more read topics to read."
|
||||
new: "There are no more new topics to read."
|
||||
|
@ -365,10 +365,11 @@ id:
|
|||
options: "Topic Options"
|
||||
show_links: "show links within this topic"
|
||||
toggle_information: "toggle topic details"
|
||||
read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{popularLink}}."
|
||||
read_more: "Want to read more? {{catLink}} or {{popularLink}}."
|
||||
read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{latestLink}}."
|
||||
read_more: "Want to read more? {{catLink}} or {{latestLink}}."
|
||||
browse_all_categories: Browse all categories
|
||||
view_popular_topics: view popular topics
|
||||
|
||||
view_latest_topics: view latest topics
|
||||
suggest_create_topic: Why not create a topic?
|
||||
read_position_reset: "Your read position has been reset."
|
||||
jump_reply_up: jump to earlier reply
|
||||
|
@ -590,9 +591,9 @@ id:
|
|||
categories_list: "Categories List"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
title: "Popular"
|
||||
help: "the most popular recent topics"
|
||||
latest:
|
||||
title: "Latest"
|
||||
help: "the latest topics"
|
||||
favorited:
|
||||
title: "Favorited"
|
||||
help: "topics you marked as favorites"
|
||||
|
@ -623,7 +624,7 @@ id:
|
|||
zero: "{{categoryName}}"
|
||||
one: "{{categoryName}} (1)"
|
||||
other: "{{categoryName}} ({{count}})"
|
||||
help: "popular topics in the {{categoryName}} category"
|
||||
help: "latest topics in the {{categoryName}} category"
|
||||
|
||||
# This section is exported to the javascript for i18n in the admin section
|
||||
admin_js:
|
||||
|
|
|
@ -370,10 +370,10 @@ it:
|
|||
new: "Non hai nuovi topic da leggere."
|
||||
read: "Non hai ancora letto alcun topic."
|
||||
posted: "Non hai ancora postato in nessun topic."
|
||||
popular: "Non ci sono post popolari. È molto triste."
|
||||
latest: "Non ci sono post popolari. È molto triste."
|
||||
category: "Non ci sono topic nella categoria {{category}}."
|
||||
bottom:
|
||||
popular: "Non ci sono altri topic popolari topics da leggere."
|
||||
latest: "Non ci sono altri topic popolari topics da leggere."
|
||||
posted: "Non ci sono altri post da leggere."
|
||||
read: "Non ci sono altri topic da leggere."
|
||||
new: "Non ci sono altri nuovi topic da leggere."
|
||||
|
@ -409,10 +409,11 @@ it:
|
|||
options: "Opzioni Topic"
|
||||
show_links: "mostra i links in questo topic"
|
||||
toggle_information: "informazioni sul topic"
|
||||
read_more_in_category: "Vuoi leggere di più? Guarda altri topic nella categoria {{catLink}} o {{popularLink}}."
|
||||
read_more: "Vuoi leggere di più? {{catLink}} o {{popularLink}}."
|
||||
read_more_in_category: "Vuoi leggere di più? Guarda altri topic nella categoria {{catLink}} o {{latestLink}}."
|
||||
read_more: "Vuoi leggere di più? {{catLink}} o {{latestLink}}."
|
||||
browse_all_categories: Guarda tutte le categorie
|
||||
view_popular_topics: guarda i topic popolari
|
||||
|
||||
view_latest_topics: guarda i topic popolari
|
||||
suggest_create_topic: Perchè non creare un topic?
|
||||
read_position_reset: "La tua posizione di lettura è stata resettata (wtf?)."
|
||||
jump_reply_up: vai alla risposta precedente
|
||||
|
@ -648,7 +649,7 @@ it:
|
|||
categories_list: "Lista Categorie"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Popolari"
|
||||
help: "i topic recenti più popolari"
|
||||
favorited:
|
||||
|
|
|
@ -304,7 +304,7 @@ nl:
|
|||
no_new: "Je hebt geen nieuwe topics om te lezen."
|
||||
no_read: "Je hebt nog geen topics gelezen."
|
||||
no_posted: "Je hebt nog niet in een topic gepost."
|
||||
no_popular: "Er zijn geen populaire topics. Dat is best wel sneu."
|
||||
no_latest: "Er zijn geen populaire topics. Dat is best wel sneu."
|
||||
|
||||
topic:
|
||||
create_in: 'Maak een {{categoryName}} Topic'
|
||||
|
@ -327,10 +327,11 @@ nl:
|
|||
options: "Topic Opties"
|
||||
show_links: "laat links binnen dit topic zien"
|
||||
toggle_information: "Zet topic details Aan/Uit"
|
||||
read_more_in_category: "Wil je meer lezen? Kijk dan voor andere topics in {{catLink}} of {{popularLink}}."
|
||||
read_more: "Wil je meer lezen? {{catLink}} of {{popularLink}}."
|
||||
read_more_in_category: "Wil je meer lezen? Kijk dan voor andere topics in {{catLink}} of {{latestLink}}."
|
||||
read_more: "Wil je meer lezen? {{catLink}} of {{latestLink}}."
|
||||
browse_all_categories: Bekijk alle categorieën
|
||||
view_popular_topics: bekijk populaire topics
|
||||
|
||||
view_latest_topics: bekijk populaire topics
|
||||
|
||||
progress:
|
||||
title: topic voortgang
|
||||
|
@ -543,7 +544,7 @@ nl:
|
|||
categories_list: "Categorie-lijst"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populair"
|
||||
help: "de meest populaire recente topics"
|
||||
favorited:
|
||||
|
|
|
@ -371,10 +371,10 @@ pseudo:
|
|||
new: '[[ Ýóů ĥáνé ɳó ɳéŵ ťóƿíčš ťó řéáď. ]]'
|
||||
read: '[[ Ýóů ĥáνéɳ''ť řéáď áɳý ťóƿíčš ýéť. ]]'
|
||||
posted: '[[ Ýóů ĥáνéɳ''ť ƿóšťéď íɳ áɳý ťóƿíčš ýéť. ]]'
|
||||
popular: '[[ Ťĥéřé ářé ɳó ƿóƿůłář ťóƿíčš. Ťĥáť''š šáď. ]]'
|
||||
latest: '[[ Ťĥéřé ářé ɳó ƿóƿůłář ťóƿíčš. Ťĥáť''š šáď. ]]'
|
||||
category: '[[ Ťĥéřé ářé ɳó {{category}} ťóƿíčš. ]]'
|
||||
bottom:
|
||||
popular: '[[ Ťĥéřé ářé ɳó ɱóřé ƿóƿůłář ťóƿíčš ťó řéáď. ]]'
|
||||
latest: '[[ Ťĥéřé ářé ɳó ɱóřé ƿóƿůłář ťóƿíčš ťó řéáď. ]]'
|
||||
posted: '[[ Ťĥéřé ářé ɳó ɱóřé ƿóšťéď ťóƿíčš ťó řéáď. ]]'
|
||||
read: '[[ Ťĥéřé ářé ɳó ɱóřé řéáď ťóƿíčš ťó řéáď. ]]'
|
||||
new: '[[ Ťĥéřé ářé ɳó ɱóřé ɳéŵ ťóƿíčš ťó řéáď. ]]'
|
||||
|
@ -414,10 +414,11 @@ pseudo:
|
|||
show_links: '[[ šĥóŵ łíɳǩš ŵíťĥíɳ ťĥíš ťóƿíč ]]'
|
||||
toggle_information: '[[ ťóǧǧłé ťóƿíč ďéťáíłš ]]'
|
||||
read_more_in_category: '[[ Ŵáɳť ťó řéáď ɱóřé? Ɓřóŵšé óťĥéř ťóƿíčš íɳ {{catLink}}
|
||||
óř {{popularLink}}. ]]'
|
||||
read_more: '[[ Ŵáɳť ťó řéáď ɱóřé? {{catLink}} óř {{popularLink}}. ]]'
|
||||
óř {{latestLink}}. ]]'
|
||||
read_more: '[[ Ŵáɳť ťó řéáď ɱóřé? {{catLink}} óř {{latestLink}}. ]]'
|
||||
browse_all_categories: '[[ Ɓřóŵšé áłł čáťéǧóříéš ]]'
|
||||
view_popular_topics: '[[ νíéŵ ƿóƿůłář ťóƿíčš ]]'
|
||||
|
||||
view_latest_topics: '[[ νíéŵ ƿóƿůłář ťóƿíčš ]]'
|
||||
suggest_create_topic: '[[ Ŵĥý ɳóť čřéáťé á ťóƿíč? ]]'
|
||||
read_position_reset: '[[ Ýóůř řéáď ƿóšíťíóɳ ĥáš ƀééɳ řéšéť. ]]'
|
||||
jump_reply_up: '[[ ʲůɱƿ ťó éářłíéř řéƿłý ]]'
|
||||
|
@ -651,7 +652,7 @@ pseudo:
|
|||
changed_by: '[[ ƀý {{author}} ]]'
|
||||
categories_list: '[[ Čáťéǧóříéš Łíšť ]]'
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: '[[ Рóƿůłář ]]'
|
||||
help: '[[ ťĥé ɱóšť ƿóƿůłář řéčéɳť ťóƿíčš ]]'
|
||||
favorited:
|
||||
|
|
|
@ -315,7 +315,7 @@ pt:
|
|||
no_new: "Não tens novos tópicos para ler."
|
||||
no_read: "Ainda não leste nenhum tópico."
|
||||
no_posted: "Ainda não postaste em nenhum tópico."
|
||||
no_popular: "Não há tópicos populares. Isso é triste."
|
||||
no_latest: "Não há tópicos populares. Isso é triste."
|
||||
footer: "Não há mais tópicos neste categoria. <a href=\"/categories\">Procurar todas as categorias</a> ou <a href=\"/\">ver tópicos populares</a>"
|
||||
|
||||
topic:
|
||||
|
@ -339,10 +339,11 @@ pt:
|
|||
options: "Opções do Tópico"
|
||||
show_links: "mostrar links dentro deste post"
|
||||
toggle_information: "alternar detalhes do tópico"
|
||||
read_more_in_category: "Queres ler mais? Procura outros tópicos em {{catLink}} ou {{popularLink}}."
|
||||
read_more: "Queres ler mais? {{catLink}} ou {{popularLink}}."
|
||||
read_more_in_category: "Queres ler mais? Procura outros tópicos em {{catLink}} ou {{latestLink}}."
|
||||
read_more: "Queres ler mais? {{catLink}} ou {{latestLink}}."
|
||||
browse_all_categories: Procurar todas as categorias
|
||||
view_popular_topics: ver tópicos populares
|
||||
|
||||
view_latest_topics: ver tópicos populares
|
||||
|
||||
progress:
|
||||
title: progresso do tópico
|
||||
|
@ -555,7 +556,7 @@ pt:
|
|||
categories_list: "Lista de Categorias"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populares"
|
||||
help: "os tópicos recentes mais populares"
|
||||
favorited:
|
||||
|
|
|
@ -323,10 +323,10 @@ sv:
|
|||
new: "Du har inga nya trådar att läsa."
|
||||
read: "Du har inte läst några trådar än."
|
||||
posted: "Du har inte postat i några trådar än."
|
||||
popular: "Det finns inga populära trådar. Det är lite sorgligt."
|
||||
latest: "Det finns inga populära trådar. Det är lite sorgligt."
|
||||
category: "Det finns inga {{category}}-trådar."
|
||||
bottom:
|
||||
popular: "Det finns inga fler populära trådar att läsa."
|
||||
latest: "Det finns inga fler populära trådar att läsa."
|
||||
posted: "Det finns inga fler postade trådar att läsa"
|
||||
read: "Det finns inga fler lästa trådar att läsa."
|
||||
new: "Det finns inga fler nya trådar att läsa."
|
||||
|
@ -363,10 +363,11 @@ sv:
|
|||
options: "Trådinställningar"
|
||||
show_links: "visa länkar som finns i den här tråden"
|
||||
toggle_information: "slå på/av tråddetaljer"
|
||||
read_more_in_category: "Vill du läsa mer? Bläddra bland andra trådar i {{catLink}} eller {{popularLink}}."
|
||||
read_more: "Vill du läsa mer? {{catLink}} eller {{popularLink}}."
|
||||
read_more_in_category: "Vill du läsa mer? Bläddra bland andra trådar i {{catLink}} eller {{latestLink}}."
|
||||
read_more: "Vill du läsa mer? {{catLink}} eller {{latestLink}}."
|
||||
browse_all_categories: Bläddra bland alla kategorier
|
||||
view_popular_topics: visa populära trådar
|
||||
|
||||
view_latest_topics: visa populära trådar
|
||||
suggest_create_topic: Varför inte skapa en tråd?
|
||||
read_position_reset: "Din läsposition har blivit återställd."
|
||||
jump_reply_up: hoppa till tidigare svar
|
||||
|
@ -587,7 +588,7 @@ sv:
|
|||
categories_list: "Kategorilista"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "Populära"
|
||||
help: "det populäraste trådarna nyligen"
|
||||
favorited:
|
||||
|
|
|
@ -376,10 +376,10 @@ zh_CN:
|
|||
new: "你没有新主题可读。"
|
||||
read: "你尚未阅读任何主题。"
|
||||
posted: "你尚未在任何主题中发帖。"
|
||||
popular: "伤心啊,没有热门主题。"
|
||||
latest: "伤心啊,没有热门主题。"
|
||||
category: "没有 {{category}} 分类的主题。"
|
||||
bottom:
|
||||
popular: "没有更多热门主题可看了。"
|
||||
latest: "没有更多热门主题可看了。"
|
||||
posted: "没有更多已发布主题可看了。"
|
||||
read: "没有更多已阅主题可看了。"
|
||||
new: "没有更多新主题可看了。"
|
||||
|
@ -415,10 +415,11 @@ zh_CN:
|
|||
options: "主题选项"
|
||||
show_links: "显示此主题中的链接"
|
||||
toggle_information: "切换主题详细"
|
||||
read_more_in_category: "想阅读更多内容?浏览 {{catLink}} 或 {{popularLink}} 里的其它主题。"
|
||||
read_more: "想阅读更多内容?{{catLink}} 或 {{popularLink}}。"
|
||||
read_more_in_category: "想阅读更多内容?浏览 {{catLink}} 或 {{latestLink}} 里的其它主题。"
|
||||
read_more: "想阅读更多内容?{{catLink}} 或 {{latestLink}}。"
|
||||
browse_all_categories: 浏览所有分类
|
||||
view_popular_topics: 浏览热门主题
|
||||
|
||||
view_latest_topics: 浏览热门主题
|
||||
suggest_create_topic: 这就创建一个主题吧!
|
||||
read_position_reset: "你的阅读位置已经被重置。"
|
||||
jump_reply_up: 跳转至更早的回复
|
||||
|
@ -654,7 +655,7 @@ zh_CN:
|
|||
categories_list: "分类列表"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "热门"
|
||||
help: "最近最受欢迎的主题"
|
||||
favorited:
|
||||
|
|
|
@ -376,10 +376,10 @@ zh_TW:
|
|||
new: "你沒有新主題可讀。"
|
||||
read: "你尚未閱讀任何主題。"
|
||||
posted: "你尚未在任何主題中發帖。"
|
||||
popular: "傷心啊,沒有熱門主題。"
|
||||
latest: "傷心啊,沒有熱門主題。"
|
||||
category: "沒有 {{category}} 分類的主題。"
|
||||
bottom:
|
||||
popular: "沒有更多熱門主題可看了。"
|
||||
latest: "沒有更多熱門主題可看了。"
|
||||
posted: "沒有更多已發布主題可看了。"
|
||||
read: "沒有更多已閱主題可看了。"
|
||||
new: "沒有更多新主題可看了。"
|
||||
|
@ -415,10 +415,11 @@ zh_TW:
|
|||
options: "主題選項"
|
||||
show_links: "顯示此主題中的鏈接"
|
||||
toggle_information: "切換主題詳細"
|
||||
read_more_in_category: "想閱讀更多內容?浏覽 {{catLink}} 或 {{popularLink}} 裏的其它主題。"
|
||||
read_more: "想閱讀更多內容?{{catLink}} 或 {{popularLink}}。"
|
||||
read_more_in_category: "想閱讀更多內容?浏覽 {{catLink}} 或 {{latestLink}} 裏的其它主題。"
|
||||
read_more: "想閱讀更多內容?{{catLink}} 或 {{latestLink}}。"
|
||||
browse_all_categories: 浏覽所有分類
|
||||
view_popular_topics: 浏覽熱門主題
|
||||
|
||||
view_latest_topics: 浏覽熱門主題
|
||||
suggest_create_topic: 這就創建一個主題吧!
|
||||
read_position_reset: "你的閱讀位置已經被重置。"
|
||||
jump_reply_up: 跳轉至更早的回複
|
||||
|
@ -654,7 +655,7 @@ zh_TW:
|
|||
categories_list: "分類列表"
|
||||
|
||||
filters:
|
||||
popular:
|
||||
latest:
|
||||
title: "熱門"
|
||||
help: "最近最受歡迎的主題"
|
||||
favorited:
|
||||
|
|
|
@ -360,7 +360,7 @@ cs:
|
|||
post_undo_action_window_mins: "Počet sekund, během kterých smí uživatelé vrátit akce na příspěvcích (líbí se, nahlášení, atd.)"
|
||||
must_approve_users: "Administrátoři musí schválit všechny uživatele, než získají přístup"
|
||||
ga_tracking_code: "Kód pro sledování přes 'Google analytics', např. UA-12345678-9; viz http://google.com/analytics"
|
||||
top_menu: "Určuje, které položky se zobrazí v navigaci na hlavní stránce a v jakém pořadí. Příklad: popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Určuje, které položky se zobrazí v navigaci na hlavní stránce a v jakém pořadí. Příklad: latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Určuje, které položky se zobrazí v menu u příspěvku a v jakém pořadí. Příklad: like|edit|flag|delete|share|bookmark|reply"
|
||||
share_links: "Určuje, které položky se zobrazí ve sdílecím dialogu a v jakém pořadí. Příklad: twitter|facebook|google+"
|
||||
track_external_right_clicks: "Počítat kliknutí na externí odkazy pravým tlačítkem (např. otevření do nové záložky); defaultně zakázáno kvůli přepisu URL"
|
||||
|
@ -822,7 +822,7 @@ cs:
|
|||
|
||||
page_not_found:
|
||||
title: "Stránka, kterou žádáte, na tomto diskuzním fóru neexistuje. Možná vám můžeme pomoci ji najít, nebo poradit jiné téma, které se vám může líbit:"
|
||||
popular_topics: "Populární témata"
|
||||
latest_topics: "Populární témata"
|
||||
recent_topics: "Témata z poslední doby"
|
||||
see_more: "Více"
|
||||
search_title: "Hledat toto téma"
|
||||
|
|
|
@ -343,7 +343,7 @@ da:
|
|||
post_undo_action_window_mins: "Number of seconds users are allowed to reverse actions on a post (like, flag, etc)"
|
||||
must_approve_users: "Admins must approve all users before they gain access"
|
||||
ga_tracking_code: "Google analytics tracking code code, eg: UA-12345678-9; see http://google.com/analytics"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "Track external links that are right clicked (eg: open in new tab) disabled by default because it rewrites URLs"
|
||||
topics_per_page: "How many topics are loaded by default on the topics list page"
|
||||
|
@ -800,7 +800,7 @@ da:
|
|||
|
||||
page_not_found:
|
||||
title: "Den side du efterspurgte findes ikke. Måske kan vi hjælpe dig med at finde den, eller et andet lignende emne:"
|
||||
popular_topics: "Populære emner"
|
||||
latest_topics: "Populære emner"
|
||||
recent_topics: "Nyeste emner"
|
||||
see_more: "Se mere"
|
||||
search_title: "Søg efter dette emne"
|
||||
|
|
|
@ -312,7 +312,7 @@ de:
|
|||
post_undo_action_window_mins: "Sekunden, die ein Nutzer hat, um Aktionen auf Beiträgen rückgängig zu machen (Like, Meldung, etc.)."
|
||||
must_approve_users: "Administratoren müssen Nutzer freischalten, bevor sie Zugriff erlangen."
|
||||
ga_tracking_code: "Google Analytics Trackingcode, zum Beispiel: UA-12345678-9; siehe http://google.com/analytics"
|
||||
top_menu: "Bestimme, welche Navigationselemente in welcher Reihenfolge auftauchen. Beispiel: popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Bestimme, welche Navigationselemente in welcher Reihenfolge auftauchen. Beispiel: latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Bestimme, welche Funktionen in welcher Reihenfolge im Beitragsmenü auftauchen. Beispiel: like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "Verfolge, welche externen Links per Rechtsklick geöffnet werden (zum Beispiel in einem neuen Browser-Tab). Standardmäßig deaktiviert, da dies URL-Rewrites erfordert."
|
||||
topics_per_page: "Zahl der Themen, die standardmäßig auf die Themenübersichtsseite geladen werden."
|
||||
|
@ -763,7 +763,7 @@ de:
|
|||
|
||||
page_not_found:
|
||||
title: "Die angefragte Seite, gibt es in diesem Forum nicht. Vielleicht können wir aber dabei behilflich sein, sie oder ein ähnliches Thema zu finden:"
|
||||
popular_topics: "Populäre Themen"
|
||||
latest_topics: "Populäre Themen"
|
||||
recent_topics: "Kürzliche Themen"
|
||||
see_more: "Mehr ansehen"
|
||||
search_title: "Suche nach diesem Thema"
|
||||
|
|
|
@ -360,7 +360,7 @@ en:
|
|||
post_undo_action_window_mins: "Number of seconds users are allowed to reverse actions on a post (like, flag, etc)"
|
||||
must_approve_users: "Admins must approve all users before they gain access"
|
||||
ga_tracking_code: "Google analytics tracking code code, eg: UA-12345678-9; see http://google.com/analytics"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply"
|
||||
share_links: "Determine which items appear on the share dialog, and in what order. Example twitter|facebook|google+"
|
||||
track_external_right_clicks: "Track external links that are right clicked (eg: open in new tab) disabled by default because it rewrites URLs"
|
||||
|
@ -822,7 +822,7 @@ en:
|
|||
|
||||
page_not_found:
|
||||
title: "The page you requested doesn't exist on this discussion forum. Perhaps we can help find it, or another topic like it:"
|
||||
popular_topics: "Popular topics"
|
||||
latest_topics: "Latest topics"
|
||||
recent_topics: "Recent topics"
|
||||
see_more: "See More"
|
||||
search_title: "Search for this topic"
|
||||
|
|
|
@ -333,7 +333,7 @@ es:
|
|||
post_undo_action_window_mins: "Number of seconds users are allowed to reverse actions on a post (like, flag, etc)"
|
||||
must_approve_users: "Admins must approve all users before they gain access"
|
||||
ga_tracking_code: "Google analytics tracking code code, eg: UA-12345678-9; see http://google.com/analytics"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "Track external links that are right clicked (eg: open in new tab) disabled by default because it rewrites URLs"
|
||||
topics_per_page: "How many topics are loaded by default on the topics list page"
|
||||
|
@ -784,7 +784,7 @@ es:
|
|||
|
||||
page_not_found:
|
||||
title: "The page you requested doesn't exist on this discussion forum. Perhaps we can help find it, or another topic like it:"
|
||||
popular_topics: "Temas populares"
|
||||
latest_topics: "Temas populares"
|
||||
recent_topics: "Temas recientes"
|
||||
see_more: "Ver Más"
|
||||
search_title: "Buscar por este tema"
|
||||
|
|
|
@ -832,7 +832,7 @@ fr:
|
|||
|
||||
page_not_found:
|
||||
title: "La page que vous avez demandée n'existe pas dans ce forum de discussion.Peut-être nous pouvons vous aider à la trouver, ou une autre discussion similaire :"
|
||||
popular_topics: "Discussions populaires"
|
||||
latest_topics: "Discussions populaires"
|
||||
recent_topics: "Discussions récentes"
|
||||
see_more: "Voir plus"
|
||||
search_title: "Rechercher pour cette discussion"
|
||||
|
|
|
@ -348,7 +348,7 @@ id:
|
|||
post_undo_action_window_mins: "Number of seconds users are allowed to reverse actions on a post (like, flag, etc)"
|
||||
must_approve_users: "Admins must approve all users before they gain access"
|
||||
ga_tracking_code: "Google analytics tracking code code, eg: UA-12345678-9; see http://google.com/analytics"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "Track external links that are right clicked (eg: open in new tab) disabled by default because it rewrites URLs"
|
||||
topics_per_page: "How many topics are loaded by default on the topics list page"
|
||||
|
@ -804,7 +804,7 @@ id:
|
|||
|
||||
page_not_found:
|
||||
title: "The page you requested doesn't exist on this discussion forum. Perhaps we can help find it, or another topic like it:"
|
||||
popular_topics: "Popular topics"
|
||||
latest_topics: "Latest topics"
|
||||
recent_topics: "Recent topics"
|
||||
see_more: "See More"
|
||||
search_title: "Search for this topic"
|
||||
|
|
|
@ -348,7 +348,7 @@ it:
|
|||
post_undo_action_window_mins: "Numero di secondi durante i quali gli utenti sono autorizzati ad annullare le loro azioni su un post (segnalazioni, like, etc)"
|
||||
must_approve_users: "Gli amministratori devono autorizzare ogni utente prima che esso abbia accesso"
|
||||
ga_tracking_code: "Codice Google Analytics per il tracking, es: UA-12345678-9; per informazioni http://google.com/analytics"
|
||||
top_menu: "Determina quali elementi vengono mostrati nella navigazione in homepage, ed in quale ordine. Esempio popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Determina quali elementi vengono mostrati nella navigazione in homepage, ed in quale ordine. Esempio latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Determina quali elementi vengono mostrati nel menù del post, ed in quale ordine. Esempio like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "Traccia i link esterni sui quali viene fatto click destro (es: apri in una nuova tab). Disabilitato di default perchè viene fatto il rewrite delle URL"
|
||||
topics_per_page: "Quanti topic vengono caricati di default nella pagina di lista topic"
|
||||
|
@ -805,7 +805,7 @@ it:
|
|||
|
||||
page_not_found:
|
||||
title: "La pagina richiesta non esiste in questo forum. Forse possiamo aiutarti a trovarla, o un topic simile:"
|
||||
popular_topics: "Topic popolari"
|
||||
latest_topics: "Topic popolari"
|
||||
recent_topics: "Topic recenti"
|
||||
see_more: "Di più"
|
||||
search_title: "Cerca per questo topic"
|
||||
|
|
|
@ -879,7 +879,7 @@ pseudo:
|
|||
page_not_found:
|
||||
title: '[[ Ťĥé ƿáǧé ýóů řéƣůéšťéď ďóéšɳ''ť éхíšť óɳ ťĥíš ďíščůššíóɳ ƒóřůɱ. Рéřĥáƿš
|
||||
ŵé čáɳ ĥéłƿ ƒíɳď íť, óř áɳóťĥéř ťóƿíč łíǩé íť: ]]'
|
||||
popular_topics: '[[ Рóƿůłář ťóƿíčš ]]'
|
||||
latest_topics: '[[ Рóƿůłář ťóƿíčš ]]'
|
||||
recent_topics: '[[ Řéčéɳť ťóƿíčš ]]'
|
||||
see_more: '[[ Šéé Ϻóřé ]]'
|
||||
search_title: '[[ Šéářčĥ ƒóř ťĥíš ťóƿíč ]]'
|
||||
|
|
|
@ -284,7 +284,7 @@ pt:
|
|||
post_undo_action_window_mins: "The window in which someone can reverse an action on a post (such as liking)"
|
||||
must_approve_users: "The owners of the forum must approve users before they gain access."
|
||||
ga_tracking_code: "Google analytics tracking code, see: http://google.com/analytics"
|
||||
top_menu: "The order of the items in the top menu. Example popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "The order of the items in the top menu. Example latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "The order of the items on the post menu."
|
||||
max_length_show_reply: "Embedded replies to posts won't be shown if they directly below and are below this length."
|
||||
track_external_right_clicks: "Track external links that are right clicked (eg: open in new tab) disabled by default cause it has to re-write urls, hurting usability"
|
||||
|
|
|
@ -348,7 +348,7 @@ sv:
|
|||
post_undo_action_window_mins: "Number of seconds users are allowed to reverse actions on a post (like, flag, etc)"
|
||||
must_approve_users: "Admins must approve all users before they gain access"
|
||||
ga_tracking_code: "Google analytics tracking code code, eg: UA-12345678-9; see http://google.com/analytics"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "Track external links that are right clicked (eg: open in new tab) disabled by default because it rewrites URLs"
|
||||
topics_per_page: "How many topics are loaded by default on the topics list page"
|
||||
|
@ -804,7 +804,7 @@ sv:
|
|||
|
||||
page_not_found:
|
||||
title: "The page you requested doesn't exist on this discussion forum. Perhaps we can help find it, or another topic like it:"
|
||||
popular_topics: "Popular topics"
|
||||
latest_topics: "Latest topics"
|
||||
recent_topics: "Recent topics"
|
||||
see_more: "See More"
|
||||
search_title: "Search for this topic"
|
||||
|
|
|
@ -348,7 +348,7 @@ zh_CN:
|
|||
post_undo_action_window_mins: "允许用户在帖子上进行撤销操作(赞、投诉等)所需等待的间隔秒数"
|
||||
must_approve_users: "用户必须获得管理员批准方能访问"
|
||||
ga_tracking_code: "谷歌分析追踪代码,例如:UA-12345678-9。参考 http://google.com/analytics"
|
||||
top_menu: "确定在主页导航条包含哪些条目,以及排列顺序。例如:popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "确定在主页导航条包含哪些条目,以及排列顺序。例如:latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "确定在帖子菜单条包含哪些条目,以及排列顺序。例如:like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "追踪外部链接的右键点击(例如:在浏览器新标签打开),缺省是禁用的,因为它会重写URL"
|
||||
topics_per_page: "在主题列表页面,缺省载入多少个主题"
|
||||
|
@ -813,7 +813,7 @@ zh_CN:
|
|||
|
||||
page_not_found:
|
||||
title: "你请求的页面在本论坛不存在。可能我们能帮助你找到它,或者类似的其它主题:"
|
||||
popular_topics: "热门主题"
|
||||
latest_topics: "热门主题"
|
||||
recent_topics: "近期主题"
|
||||
see_more: "查看更多"
|
||||
search_title: "搜索该主题"
|
||||
|
|
|
@ -348,7 +348,7 @@ zh_TW:
|
|||
post_undo_action_window_mins: "允許用戶在帖子上進行撤銷操作(贊、投訴等)所需等待的間隔秒數"
|
||||
must_approve_users: "用戶必須獲得管理員批准方能訪問"
|
||||
ga_tracking_code: "谷歌分析追蹤代碼,例如:UA-12345678-9。參考 http://google.com/analytics"
|
||||
top_menu: "確定在主頁導航條包含哪些條目,以及排列順序。例如:popular|read|favorited|unread|new|posted|categories"
|
||||
top_menu: "確定在主頁導航條包含哪些條目,以及排列順序。例如:latest|hot|read|favorited|unread|new|posted|categories"
|
||||
post_menu: "確定在帖子菜單條包含哪些條目,以及排列順序。例如:like|edit|flag|delete|share|bookmark|reply"
|
||||
track_external_right_clicks: "追蹤外部鏈接的右鍵點擊(例如:在浏覽器新標簽打開),缺省是禁用的,因爲它會重寫URL"
|
||||
topics_per_page: "在主題列表頁面,缺省載入多少個主題"
|
||||
|
@ -813,7 +813,7 @@ zh_TW:
|
|||
|
||||
page_not_found:
|
||||
title: "你請求的頁面在本論壇不存在。可能我們能幫助你找到它,或者類似的其它主題:"
|
||||
popular_topics: "熱門主題"
|
||||
latest_topics: "熱門主題"
|
||||
recent_topics: "近期主題"
|
||||
see_more: "查看更多"
|
||||
search_title: "搜索該主題"
|
||||
|
|
|
@ -149,8 +149,15 @@ Discourse::Application.routes.draw do
|
|||
get 'category/:category' => 'list#category', as: 'category'
|
||||
get 'category/:category/more' => 'list#category', as: 'category'
|
||||
get 'categories' => 'categories#index'
|
||||
get 'popular' => 'list#index'
|
||||
get 'popular/more' => 'list#index'
|
||||
|
||||
# We've renamed popular to latest. If people access it we want a permanent redirect.
|
||||
get 'popular' => 'list#popular_redirect'
|
||||
get 'popular/more' => 'list#popular_redirect'
|
||||
|
||||
get 'latest' => 'list#index'
|
||||
get 'latest/more' => 'list#index'
|
||||
get 'hot' => 'list#hot'
|
||||
get 'hot/more' => 'list#hot'
|
||||
get 'favorited' => 'list#favorited'
|
||||
get 'favorited/more' => 'list#favorited'
|
||||
get 'read' => 'list#read'
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
class UpdateSiteSettingsForHot < ActiveRecord::Migration
|
||||
def up
|
||||
execute "UPDATE site_settings SET value = REPLACE(value, 'popular|', 'latest|hot|') where name = 'top_menu'"
|
||||
end
|
||||
|
||||
def down
|
||||
execute "UPDATE site_settings SET value = REPLACE(value, 'latest|hot', 'popular|') where name = 'top_menu'"
|
||||
end
|
||||
end
|
|
@ -103,8 +103,8 @@ class TopicQuery
|
|||
TopicList.new(@user, results)
|
||||
end
|
||||
|
||||
# The popular view of topics
|
||||
def list_popular
|
||||
# The latest view of topics
|
||||
def list_latest
|
||||
TopicList.new(@user, default_list)
|
||||
end
|
||||
|
||||
|
@ -121,6 +121,16 @@ class TopicQuery
|
|||
end
|
||||
end
|
||||
|
||||
def list_hot
|
||||
return_list(unordered: true) do |list|
|
||||
|
||||
# Let's not include topic categories on hot
|
||||
list = list.where("categories.topic_id <> topics.id")
|
||||
|
||||
list =list.order("coalesce(categories.hotness, 5) desc, topics.bumped_at desc")
|
||||
end
|
||||
end
|
||||
|
||||
def list_new
|
||||
TopicList.new(@user, new_results)
|
||||
end
|
||||
|
|
|
@ -16,19 +16,19 @@ describe TopicQuery do
|
|||
let!(:archived_topic) { Fabricate(:topic, title: 'this is an archived topic', user: creator, archived: true, bumped_at: 6.minutes.ago) }
|
||||
let!(:invisible_topic) { Fabricate(:topic, title: 'this is an invisible topic', user: creator, visible: false, bumped_at: 5.minutes.ago) }
|
||||
let!(:closed_topic) { Fabricate(:topic, title: 'this is a closed topic', user: creator, closed: true, bumped_at: 1.minute.ago) }
|
||||
let(:topics) { topic_query.list_popular.topics }
|
||||
let(:topics) { topic_query.list_latest.topics }
|
||||
|
||||
context 'list_popular' do
|
||||
context 'list_latest' do
|
||||
it "returns the topics in the correct order" do
|
||||
topics.should == [pinned_topic, closed_topic, archived_topic, regular_topic]
|
||||
end
|
||||
|
||||
it "includes the invisible topic if you're a moderator" do
|
||||
TopicQuery.new(moderator).list_popular.topics.include?(invisible_topic).should be_true
|
||||
TopicQuery.new(moderator).list_latest.topics.include?(invisible_topic).should be_true
|
||||
end
|
||||
|
||||
it "includes the invisible topic if you're an admin" do
|
||||
TopicQuery.new(admin).list_popular.topics.include?(invisible_topic).should be_true
|
||||
TopicQuery.new(admin).list_latest.topics.include?(invisible_topic).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -71,6 +71,21 @@ describe TopicQuery do
|
|||
end
|
||||
end
|
||||
|
||||
context 'hot' do
|
||||
let(:cold_category) { Fabricate(:category, name: 'brrrrrr', hotness: 5) }
|
||||
let(:hot_category) { Fabricate(:category, name: 'yeeouch', hotness: 10) }
|
||||
|
||||
let!(:t1) { Fabricate(:topic, category: cold_category)}
|
||||
let!(:t2) { Fabricate(:topic, category: hot_category)}
|
||||
let!(:t3) { Fabricate(:topic, category: hot_category)}
|
||||
let!(:t4) { Fabricate(:topic, category: cold_category)}
|
||||
|
||||
it "returns the hot categories first" do
|
||||
topic_query.list_hot.topics.should == [t3, t2, t4, t1]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'unread / read topics' do
|
||||
|
||||
context 'with no data' do
|
||||
|
|
|
@ -69,6 +69,14 @@ describe ListController do
|
|||
|
||||
end
|
||||
|
||||
context 'hot' do
|
||||
before do
|
||||
xhr :get, :hot
|
||||
end
|
||||
|
||||
it { should respond_with(:success) }
|
||||
end
|
||||
|
||||
context 'favorited' do
|
||||
it 'raises an error when not logged in' do
|
||||
lambda { xhr :get, :favorited }.should raise_error(Discourse::NotLoggedIn)
|
||||
|
@ -84,6 +92,7 @@ describe ListController do
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
context 'read' do
|
||||
it 'raises an error when not logged in' do
|
||||
lambda { xhr :get, :read }.should raise_error(Discourse::NotLoggedIn)
|
||||
|
|
|
@ -365,7 +365,7 @@ describe Topic do
|
|||
end
|
||||
|
||||
it "should be excluded from the list view" do
|
||||
TopicQuery.new(evil_trout).list_popular.topics.should_not include(topic)
|
||||
TopicQuery.new(evil_trout).list_latest.topics.should_not include(topic)
|
||||
end
|
||||
|
||||
context 'invite' do
|
||||
|
|
Loading…
Reference in New Issue
Block a user