Merge pull request #5667 from svbergerem/help-section-routing

Add routes for help sections
This commit is contained in:
Jonne Haß 2015-02-14 22:18:42 +01:00
commit e05ae411eb
6 changed files with 82 additions and 11 deletions

View file

@ -165,6 +165,7 @@ diaspora.yml file**. The existing settings from 0.4.x and before will not work a
* Added keyboard shortcuts r(reshare), m(expand Post), o(open first link in post) [#5602](https://github.com/diaspora/diaspora/pull/5602)
* Dynamically compute minimum and maximum valid year for birthday field [#5639](https://github.com/diaspora/diaspora/pull/5639)
* Show hovercard on mentions [#5652](https://github.com/diaspora/diaspora/pull/5652)
* Make help sections linkable [#5667](https://github.com/diaspora/diaspora/pull/5667)
# 0.4.1.2

View file

@ -2,6 +2,8 @@
app.Router = Backbone.Router.extend({
routes: {
"help/:section": "help",
"help/": "help",
"help": "help",
"contacts": "contacts",
"conversations": "conversations",
@ -36,10 +38,10 @@ app.Router = Backbone.Router.extend({
this.route(/^bookmarklet(?:\?(.*))?/, "bookmarklet");
},
help: function() {
help: function(section) {
app.help = new app.views.Help();
$("#help").prepend(app.help.el);
app.help.render();
app.help.render(section);
},
contacts: function() {

View file

@ -9,7 +9,7 @@ app.views.Help = app.views.StaticContentView.extend({
"click .faq-link-sharing" : "sharing",
"click .faq-link-posts-and-posting" : "postsAndPosting",
"click .faq-link-tags": "tags",
"click .faq-link-keyboard-shortcuts" : "keyboardShortcuts",
"click .faq-link-keyboard-shortcuts" : "keyboardShortcuts"
},
initialize : function() {
@ -19,19 +19,19 @@ app.views.Help = app.views.StaticContentView.extend({
get_support_a_tutorials: { tutorials: this.linkHtml("https://diasporafoundation.org/tutorials", Diaspora.I18n.t( 'tutorials' ))},
get_support_a_wiki: { link: this.linkHtml("https://wiki.diasporafoundation.org/Special:Search", Diaspora.I18n.t( 'wiki' ))},
get_support_a_irc: { irc: this.linkHtml("https://wiki.diasporafoundation.org/How_We_Communicate#IRC", Diaspora.I18n.t( 'irc' ))},
get_support_a_hashtag: { question: this.linkHtml("/tags/question", "#question")},
get_support_a_hashtag: { question: this.linkHtml("/tags/question", "#question")}
};
this.POSTS_AND_POSTING_SUBS = {
format_text_a: {
markdown: this.linkHtml("http://diasporafoundation.org/formatting", Diaspora.I18n.t( 'markdown' )),
here: this.linkHtml("http://daringfireball.net/projects/markdown/syntax", Diaspora.I18n.t( 'here' )),
here: this.linkHtml("http://daringfireball.net/projects/markdown/syntax", Diaspora.I18n.t( 'here' ))
}
};
this.TAGS_SUBS = {
filter_tags_a: {
third_party_tools: this.linkHtml("https://wiki.diasporafoundation.org/Tools_to_use_with_Diaspora", Diaspora.I18n.t( 'third_party_tools' )),
third_party_tools: this.linkHtml("https://wiki.diasporafoundation.org/Tools_to_use_with_Diaspora", Diaspora.I18n.t( 'third_party_tools' ))
}
};
@ -51,20 +51,23 @@ app.views.Help = app.views.StaticContentView.extend({
title_sharing: Diaspora.I18n.t( 'sharing.title' ),
title_tags: Diaspora.I18n.t( 'tags.title' ),
title_keyboard_shortcuts: Diaspora.I18n.t( 'keyboard_shortcuts.title' ),
title_miscellaneous: Diaspora.I18n.t( 'miscellaneous.title' ),
title_miscellaneous: Diaspora.I18n.t( 'miscellaneous.title' )
};
return this;
},
render: function(){
var section = app.views.Base.prototype.render.apply(this, arguments);
render: function(section){
var html = app.views.Base.prototype.render.apply(this, arguments);
// After render actions
this.resetMenu(true);
this.renderStaticSection("getting_help", "faq_getting_help", this.GETTING_HELP_SUBS);
return section;
var elTarget = this.findSection(section);
if(elTarget !== null){ $(elTarget).click(); }
return html;
},
showItems: function(el) {
@ -107,8 +110,12 @@ app.views.Help = app.views.StaticContentView.extend({
menuClicked: function(e) {
this.resetMenu();
$(e.target).hide();
$(e.target).next().show();
var data = $(e.target).data('section');
app.router.navigate('help/' + data);
},
clearItems: function() {
@ -133,6 +140,18 @@ app.views.Help = app.views.StaticContentView.extend({
this.$('#faq').append(help_section.render().el);
},
/**
* Returns The section title whose data-section property equals the given query
* Returns null if nothing found
* @param dataValue Value for the data-section to find
* @returns {jQuery}
*/
findSection: function(data){
var res = this.$('a[data-section=' + data + ']');
if(res.length === 0){ return null; }
return res;
},
gettingHelp: function(e) {
this.renderStaticSection("getting_help", "faq_getting_help", this.GETTING_HELP_SUBS);
this.menuClicked(e);
@ -170,6 +189,6 @@ app.views.Help = app.views.StaticContentView.extend({
linkHtml: function(url, text) {
return "<a href=\"" + url + "\" target=\"_blank\">" + text + "</a>";
},
}
});
// @license-end

View file

@ -58,6 +58,7 @@
"factory",
"stubView",
"exports",
"spyOn",
"app",
"Diaspora",

View file

@ -223,6 +223,7 @@ Diaspora::Application.routes.draw do
# Help
get 'help' => 'help#faq', :as => 'help'
get 'help/:topic' => 'help#faq'
#Protocol Url
get 'protocol' => redirect("http://wiki.diasporafoundation.org/Federation_Protocol_Overview")

View file

@ -87,4 +87,51 @@ describe("app.views.Help", function(){
expect(this.view.$el.find('#faq').children().first().hasClass('faq_question_miscellaneous')).toBeTruthy();
});
});
describe("findSection", function() {
beforeEach(function() {
this.view.render();
});
it('should return null for an unknown section', function() {
expect(this.view.findSection('you_shall_not_pass')).toBeNull();
});
it('should return the correct section link for existing sections', function() {
var sections = [
'account_and_data_management',
'aspects',
'pods',
'keyboard_shortcuts',
'tags',
'miscellaneous'
];
var self = this;
_.each(sections, function(section) {
var el = self.view.$el.find('a[data-section=' + section + ']');
expect(self.view.findSection(section).html()).toBe(el.html());
});
});
});
describe("menuClicked", function() {
beforeEach(function() {
this.view.render();
});
it('should rewrite the location', function(){
var sections = [
'account_and_data_management',
'miscellaneous'
];
spyOn(app.router, 'navigate');
var self = this;
_.each(sections, function(section) {
self.view.$el.find('a[data-section=' + section + ']').trigger('click');
expect(app.router.navigate).toHaveBeenCalledWith('help/' + section);
});
});
});
});