mirror of
https://github.com/discourse/discourse.git
synced 2025-02-11 05:01:46 +08:00
81 lines
2.3 KiB
JavaScript
81 lines
2.3 KiB
JavaScript
/**
|
|
A data model representing a navigation item on the list views
|
|
|
|
@class InviteList
|
|
@extends Discourse.Model
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
var validNavNames = ['latest', 'hot', 'categories', 'category', 'favorited', 'unread', 'new', 'read', 'posted'];
|
|
var validAnon = ['latest', 'hot', 'categories', 'category'];
|
|
|
|
Discourse.NavItem = Discourse.Model.extend({
|
|
|
|
topicTrackingState: function() {
|
|
return Discourse.TopicTrackingState.current();
|
|
}.property(),
|
|
|
|
categoryName: function() {
|
|
var split = this.get('name').split('/');
|
|
return split[0] === 'category' ? split[1] : null;
|
|
}.property('name'),
|
|
|
|
categorySlug: function() {
|
|
var split = this.get('name').split('/');
|
|
if (split[0] === 'category' && split[1]) {
|
|
var cat = Discourse.Site.current().categories.findProperty('name', split[1]);
|
|
return cat ? Discourse.Category.slugFor(cat) : null;
|
|
}
|
|
return null;
|
|
}.property('name'),
|
|
|
|
// href from this item
|
|
href: function() {
|
|
var name = this.get('name');
|
|
if( name.split('/')[0] === 'category' ) {
|
|
return Discourse.getURL("/") + 'category/' + this.get('categorySlug');
|
|
} else {
|
|
return Discourse.getURL("/") + name.replace(' ', '-');
|
|
}
|
|
}.property('name'),
|
|
|
|
count: function() {
|
|
var state = this.get('topicTrackingState');
|
|
if (state) {
|
|
return state.lookupCount(this.get('name'));
|
|
}
|
|
}.property('topicTrackingState.messageCount'),
|
|
|
|
excludeCategory: function() {
|
|
if (parseInt(this.get('filters.length'), 10) > 0) {
|
|
return this.get('filters')[0].substring(1);
|
|
}
|
|
}.property('filters.length')
|
|
|
|
|
|
});
|
|
|
|
Discourse.NavItem.reopenClass({
|
|
|
|
// create a nav item from the text, will return null if there is not valid nav item for this particular text
|
|
fromText: function(text, opts) {
|
|
var countSummary = opts.countSummary,
|
|
split = text.split(","),
|
|
name = split[0],
|
|
testName = name.split("/")[0];
|
|
|
|
if (!opts.loggedOn && !validAnon.contains(testName)) return null;
|
|
if (!Discourse.Category.list() && testName === "categories") return null;
|
|
if (!validNavNames.contains(testName)) return null;
|
|
|
|
opts = {
|
|
name: name,
|
|
hasIcon: name === "unread" || name === "favorited",
|
|
filters: split.splice(1)
|
|
};
|
|
|
|
return Discourse.NavItem.create(opts);
|
|
}
|
|
|
|
});
|