mirror of
https://github.com/discourse/discourse.git
synced 2025-04-01 16:25:42 +08:00
FEATURE: allow searching in title in advanced search
Add UI for matching in title only in advanced search options
This commit is contained in:
parent
11b544ef4e
commit
ed08545d1f
@ -18,6 +18,7 @@ const REGEXP_TAGS_REPLACE = /(^(tags?:|#(?=[a-z0-9\-]+::tag))|::tag\s?$
|
|||||||
|
|
||||||
const REGEXP_IN_MATCH = /^(in|with):(posted|watching|tracking|bookmarks|first|pinned|unpinned|wiki|unseen|image)/ig;
|
const REGEXP_IN_MATCH = /^(in|with):(posted|watching|tracking|bookmarks|first|pinned|unpinned|wiki|unseen|image)/ig;
|
||||||
const REGEXP_SPECIAL_IN_LIKES_MATCH = /^in:likes/ig;
|
const REGEXP_SPECIAL_IN_LIKES_MATCH = /^in:likes/ig;
|
||||||
|
const REGEXP_SPECIAL_IN_TITLE_MATCH = /^in:title/ig;
|
||||||
const REGEXP_SPECIAL_IN_PRIVATE_MATCH = /^in:private/ig;
|
const REGEXP_SPECIAL_IN_PRIVATE_MATCH = /^in:private/ig;
|
||||||
const REGEXP_SPECIAL_IN_SEEN_MATCH = /^in:seen/ig;
|
const REGEXP_SPECIAL_IN_SEEN_MATCH = /^in:seen/ig;
|
||||||
|
|
||||||
@ -81,6 +82,7 @@ export default Em.Component.extend({
|
|||||||
in: '',
|
in: '',
|
||||||
special: {
|
special: {
|
||||||
in: {
|
in: {
|
||||||
|
title: false,
|
||||||
likes: false,
|
likes: false,
|
||||||
private: false,
|
private: false,
|
||||||
seen: false
|
seen: false
|
||||||
@ -111,6 +113,7 @@ export default Em.Component.extend({
|
|||||||
this.setSearchedTermValueForTags();
|
this.setSearchedTermValueForTags();
|
||||||
this.setSearchedTermValue('searchedTerms.in', REGEXP_IN_PREFIX, REGEXP_IN_MATCH);
|
this.setSearchedTermValue('searchedTerms.in', REGEXP_IN_PREFIX, REGEXP_IN_MATCH);
|
||||||
this.setSearchedTermSpecialInValue('searchedTerms.special.in.likes', REGEXP_SPECIAL_IN_LIKES_MATCH);
|
this.setSearchedTermSpecialInValue('searchedTerms.special.in.likes', REGEXP_SPECIAL_IN_LIKES_MATCH);
|
||||||
|
this.setSearchedTermSpecialInValue('searchedTerms.special.in.title', REGEXP_SPECIAL_IN_TITLE_MATCH);
|
||||||
this.setSearchedTermSpecialInValue('searchedTerms.special.in.private', REGEXP_SPECIAL_IN_PRIVATE_MATCH);
|
this.setSearchedTermSpecialInValue('searchedTerms.special.in.private', REGEXP_SPECIAL_IN_PRIVATE_MATCH);
|
||||||
this.setSearchedTermSpecialInValue('searchedTerms.special.in.seen', REGEXP_SPECIAL_IN_SEEN_MATCH);
|
this.setSearchedTermSpecialInValue('searchedTerms.special.in.seen', REGEXP_SPECIAL_IN_SEEN_MATCH);
|
||||||
this.setSearchedTermValue('searchedTerms.status', REGEXP_STATUS_PREFIX);
|
this.setSearchedTermValue('searchedTerms.status', REGEXP_STATUS_PREFIX);
|
||||||
@ -424,15 +427,14 @@ export default Em.Component.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@observes('searchedTerms.special.in.likes')
|
updateInRegex(regex, filter) {
|
||||||
updateSearchTermForSpecialInLikes() {
|
const match = this.filterBlocks(regex);
|
||||||
const match = this.filterBlocks(REGEXP_SPECIAL_IN_LIKES_MATCH);
|
const inFilter = this.get('searchedTerms.special.in.' + filter);
|
||||||
const inFilter = this.get('searchedTerms.special.in.likes');
|
|
||||||
let searchTerm = this.get('searchTerm') || '';
|
let searchTerm = this.get('searchTerm') || '';
|
||||||
|
|
||||||
if (inFilter) {
|
if (inFilter) {
|
||||||
if (match.length === 0) {
|
if (match.length === 0) {
|
||||||
searchTerm += ` in:likes`;
|
searchTerm += ` in:${filter}`;
|
||||||
this.set('searchTerm', searchTerm.trim());
|
this.set('searchTerm', searchTerm.trim());
|
||||||
}
|
}
|
||||||
} else if (match.length !== 0) {
|
} else if (match.length !== 0) {
|
||||||
@ -441,38 +443,24 @@ export default Em.Component.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@observes('searchedTerms.special.in.likes')
|
||||||
|
updateSearchTermForSpecialInLikes() {
|
||||||
|
this.updateInRegex(REGEXP_SPECIAL_IN_LIKES_MATCH, 'likes');
|
||||||
|
},
|
||||||
|
|
||||||
@observes('searchedTerms.special.in.private')
|
@observes('searchedTerms.special.in.private')
|
||||||
updateSearchTermForSpecialInPrivate() {
|
updateSearchTermForSpecialInPrivate() {
|
||||||
const match = this.filterBlocks(REGEXP_SPECIAL_IN_PRIVATE_MATCH);
|
this.updateInRegex(REGEXP_SPECIAL_IN_PRIVATE_MATCH, 'private');
|
||||||
const inFilter = this.get('searchedTerms.special.in.private');
|
|
||||||
let searchTerm = this.get('searchTerm') || '';
|
|
||||||
|
|
||||||
if (inFilter) {
|
|
||||||
if (match.length === 0) {
|
|
||||||
searchTerm += ` in:private`;
|
|
||||||
this.set('searchTerm', searchTerm.trim());
|
|
||||||
}
|
|
||||||
} else if (match.length !== 0) {
|
|
||||||
searchTerm = searchTerm.replace(match, '');
|
|
||||||
this.set('searchTerm', searchTerm.trim());
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
@observes('searchedTerms.special.in.seen')
|
@observes('searchedTerms.special.in.seen')
|
||||||
updateSearchTermForSpecialInSeen() {
|
updateSearchTermForSpecialInSeen() {
|
||||||
const match = this.filterBlocks(REGEXP_SPECIAL_IN_SEEN_MATCH);
|
this.updateInRegex(REGEXP_SPECIAL_IN_SEEN_MATCH, 'seen');
|
||||||
const inFilter = this.get('searchedTerms.special.in.seen');
|
},
|
||||||
let searchTerm = this.get('searchTerm') || '';
|
|
||||||
|
|
||||||
if (inFilter) {
|
@observes('searchedTerms.special.in.title')
|
||||||
if (match.length === 0) {
|
updateSearchTermForSpecialInTitle() {
|
||||||
searchTerm += ` in:seen`;
|
this.updateInRegex(REGEXP_SPECIAL_IN_TITLE_MATCH, 'title');
|
||||||
this.set('searchTerm', searchTerm.trim());
|
|
||||||
}
|
|
||||||
} else if (match.length !== 0) {
|
|
||||||
searchTerm = searchTerm.replace(match, '');
|
|
||||||
this.set('searchTerm', searchTerm.trim());
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
@observes('searchedTerms.status')
|
@observes('searchedTerms.status')
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
<div class="controls">
|
<div class="controls">
|
||||||
{{#if currentUser}}
|
{{#if currentUser}}
|
||||||
<section class='field'>
|
<section class='field'>
|
||||||
|
<label>{{input type="checkbox" class="in-likes" checked=searchedTerms.special.in.title}} {{i18n "search.advanced.filters.title"}}</label>
|
||||||
<label>{{input type="checkbox" class="in-likes" checked=searchedTerms.special.in.likes}} {{i18n "search.advanced.filters.likes"}}</label>
|
<label>{{input type="checkbox" class="in-likes" checked=searchedTerms.special.in.likes}} {{i18n "search.advanced.filters.likes"}}</label>
|
||||||
<label>{{input type="checkbox" class="in-private" checked=searchedTerms.special.in.private}} {{i18n "search.advanced.filters.private"}}</label>
|
<label>{{input type="checkbox" class="in-private" checked=searchedTerms.special.in.private}} {{i18n "search.advanced.filters.private"}}</label>
|
||||||
<label>{{input type="checkbox" class="in-seen" checked=searchedTerms.special.in.seen}} {{i18n "search.advanced.filters.seen"}}</label>
|
<label>{{input type="checkbox" class="in-seen" checked=searchedTerms.special.in.seen}} {{i18n "search.advanced.filters.seen"}}</label>
|
||||||
|
@ -1508,6 +1508,7 @@ en:
|
|||||||
label: Tagged
|
label: Tagged
|
||||||
filters:
|
filters:
|
||||||
label: Only return topics/posts...
|
label: Only return topics/posts...
|
||||||
|
title: Matching in title only
|
||||||
likes: I liked
|
likes: I liked
|
||||||
posted: I posted in
|
posted: I posted in
|
||||||
watching: I'm watching
|
watching: I'm watching
|
||||||
|
Loading…
x
Reference in New Issue
Block a user