FEATURE: remove the featured link by editing the topic

This commit is contained in:
Neil Lalonde 2017-11-22 14:53:35 -05:00
parent d32c95b6e8
commit 6c86e0c94a
10 changed files with 63 additions and 8 deletions

View File

@ -12,6 +12,7 @@ import debounce from 'discourse/lib/debounce';
import isElementInViewport from "discourse/lib/is-element-in-viewport"; import isElementInViewport from "discourse/lib/is-element-in-viewport";
import QuoteState from 'discourse/lib/quote-state'; import QuoteState from 'discourse/lib/quote-state';
import { userPath } from 'discourse/lib/url'; import { userPath } from 'discourse/lib/url';
import { extractLinkMeta } from 'discourse/lib/render-topic-featured-link';
export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, { export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
composer: Ember.inject.controller(), composer: Ember.inject.controller(),
@ -32,6 +33,7 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
username_filters: null, username_filters: null,
filter: null, filter: null,
quoteState: null, quoteState: null,
canRemoveTopicFeaturedLink: Ember.computed.and('canEditTopicFeaturedLink', 'buffered.featured_link'),
updateQueryParams() { updateQueryParams() {
const postStream = this.get('model.postStream'); const postStream = this.get('model.postStream');
@ -99,6 +101,12 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
return categoryIds === undefined || !categoryIds.length || categoryIds.indexOf(categoryId) !== -1; return categoryIds === undefined || !categoryIds.length || categoryIds.indexOf(categoryId) !== -1;
}, },
@computed('model')
featuredLinkDomain(topic) {
const meta = extractLinkMeta(topic);
return meta.domain;
},
@computed('model.isPrivateMessage') @computed('model.isPrivateMessage')
canEditTags(isPrivateMessage) { canEditTags(isPrivateMessage) {
return !isPrivateMessage && this.site.get('can_tag_topics'); return !isPrivateMessage && this.site.get('can_tag_topics');
@ -694,6 +702,10 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
convertToPrivateMessage() { convertToPrivateMessage() {
this.get('content').convertTopic("private"); this.get('content').convertTopic("private");
},
removeFeaturedLink() {
this.set('buffered.featured_link', null);
} }
}, },

View File

@ -7,7 +7,7 @@ export function addFeaturedLinkMetaDecorator(decorator) {
_decorators.push(decorator); _decorators.push(decorator);
} }
function extractLinkMeta(topic) { export function extractLinkMeta(topic) {
const href = topic.featured_link, const href = topic.featured_link,
target = Discourse.User.currentProp('external_links_in_new_tab') ? '_blank' : ''; target = Discourse.User.currentProp('external_links_in_new_tab') ? '_blank' : '';

View File

@ -30,8 +30,17 @@
{{plugin-outlet name="edit-topic" args=(hash model=model buffered=buffered)}} {{plugin-outlet name="edit-topic" args=(hash model=model buffered=buffered)}}
<br> <br>
<div class="edit-controls">
{{d-button action="finishedEditingTopic" class="btn-primary btn-small submit-edit" icon="check"}} {{d-button action="finishedEditingTopic" class="btn-primary btn-small submit-edit" icon="check"}}
{{d-button action="cancelEditingTopic" class="btn-small cancel-edit" icon="times"}} {{d-button action="cancelEditingTopic" class="btn-small cancel-edit" icon="times"}}
{{#if canRemoveTopicFeaturedLink}}
<a href {{action "removeFeaturedLink"}} class="remove-featured-link" title="{{i18n "composer.remove_featured_link"}}">
{{d-icon "times-circle"}}
{{featuredLinkDomain}}
</a>
{{/if}}
</div>
{{else}} {{else}}
<h1> <h1>
{{#unless model.is_warning}} {{#unless model.is_warning}}

View File

@ -196,7 +196,7 @@
a.topic-featured-link { a.topic-featured-link {
display: inline-block; display: inline-block;
text-transform: lowercase; text-transform: lowercase;
color: #858585; color: dark-light-choose($primary-medium, $secondary-medium);
font-size: 0.875rem; font-size: 0.875rem;
&::before { &::before {

View File

@ -26,7 +26,7 @@
margin-top: 6px; margin-top: 6px;
margin-right: 6px; margin-right: 6px;
} }
#edit-title, .category-chooser { #edit-title, .category-chooser, .edit-controls {
width: 500px; width: 500px;
} }
h1 { h1 {
@ -42,6 +42,12 @@
vertical-align: middle; vertical-align: middle;
} }
.private-message-glyph { display: none; } .private-message-glyph { display: none; }
.remove-featured-link {
float: right;
text-transform: lowercase;
color: dark-light-choose($primary-medium, $secondary-medium);
font-size: 0.875rem;
}
} }
.private-message-glyph { .private-message-glyph {

View File

@ -96,7 +96,7 @@ class Topic < ActiveRecord::Base
before_validation do before_validation do
self.title = TextCleaner.clean_title(TextSentinel.title_sentinel(title).text) if errors[:title].empty? self.title = TextCleaner.clean_title(TextSentinel.title_sentinel(title).text) if errors[:title].empty?
self.featured_link.strip! if self.featured_link self.featured_link = self.featured_link.strip.presence if self.featured_link
end end
belongs_to :category belongs_to :category

View File

@ -1240,6 +1240,7 @@ en:
edit_reason_placeholder: "why are you editing?" edit_reason_placeholder: "why are you editing?"
show_edit_reason: "(add edit reason)" show_edit_reason: "(add edit reason)"
topic_featured_link_placeholder: "Enter link shown with title." topic_featured_link_placeholder: "Enter link shown with title."
remove_featured_link: "Remove link from topic."
reply_placeholder: "Type here. Use Markdown, BBCode, or HTML to format. Drag or paste images." reply_placeholder: "Type here. Use Markdown, BBCode, or HTML to format. Drag or paste images."
view_new_post: "View your new post." view_new_post: "View your new post."
saving: "Saving" saving: "Saving"

View File

@ -97,7 +97,6 @@ class PostRevisor
track_topic_field(:featured_link) do |topic_changes, featured_link| track_topic_field(:featured_link) do |topic_changes, featured_link|
if SiteSetting.topic_featured_link_enabled && if SiteSetting.topic_featured_link_enabled &&
featured_link.present? &&
topic_changes.guardian.can_edit_featured_link?(topic_changes.topic.category_id) topic_changes.guardian.can_edit_featured_link?(topic_changes.topic.category_id)
topic_changes.record_change('featured_link', topic_changes.topic.featured_link, featured_link) topic_changes.record_change('featured_link', topic_changes.topic.featured_link, featured_link)

View File

@ -37,6 +37,7 @@ QUnit.test("Showing and hiding the edit controls", assert => {
andThen(() => { andThen(() => {
assert.ok(exists('#edit-title'), 'it shows the editing controls'); assert.ok(exists('#edit-title'), 'it shows the editing controls');
assert.ok(!exists('.title-wrapper .remove-featured-link'), 'link to remove featured link is not shown');
}); });
fillIn('#edit-title', 'this is the new title'); fillIn('#edit-title', 'this is the new title');
@ -174,3 +175,29 @@ QUnit.test("Updating the topic title with emojis", assert => {
assert.equal(find('.fancy-title').html().trim(), 'emojis title <img src=\"/images/emoji/emoji_one/bike.png?v=5\" title=\"bike\" alt=\"bike\" class=\"emoji\"> <img src=\"/images/emoji/emoji_one/blonde_woman/6.png?v=5\" title=\"blonde_woman:t6\" alt=\"blonde_woman:t6\" class=\"emoji\">', 'it displays the new title with emojis'); assert.equal(find('.fancy-title').html().trim(), 'emojis title <img src=\"/images/emoji/emoji_one/bike.png?v=5\" title=\"bike\" alt=\"bike\" class=\"emoji\"> <img src=\"/images/emoji/emoji_one/blonde_woman/6.png?v=5\" title=\"blonde_woman:t6\" alt=\"blonde_woman:t6\" class=\"emoji\">', 'it displays the new title with emojis');
}); });
}); });
acceptance("Topic featured links", {
loggedIn: true,
settings: {
topic_featured_link_enabled: true,
max_topic_title_length: 80
}
});
QUnit.test("remove featured link", assert => {
visit("/t/299/1");
andThen(() => {
assert.ok(exists('.title-wrapper .topic-featured-link'), 'link is shown with topic title');
});
click('.title-wrapper .edit-topic');
andThen(() => {
assert.ok(exists('.title-wrapper .remove-featured-link'), 'link to remove featured link');
});
click('.title-wrapper .remove-featured-link');
click('.title-wrapper .submit-edit');
andThen(() => {
assert.ok(!exists('.title-wrapper .topic-featured-link'), 'link is gone');
});
});

File diff suppressed because one or more lines are too long