aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/search
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/app/search')
-rw-r--r--client/src/app/search/advanced-search.model.ts14
-rw-r--r--client/src/app/search/search-filters.component.html23
-rw-r--r--client/src/app/search/search-filters.component.ts42
3 files changed, 78 insertions, 1 deletions
diff --git a/client/src/app/search/advanced-search.model.ts b/client/src/app/search/advanced-search.model.ts
index 033fa9bba..5b713e145 100644
--- a/client/src/app/search/advanced-search.model.ts
+++ b/client/src/app/search/advanced-search.model.ts
@@ -4,6 +4,9 @@ export class AdvancedSearch {
4 startDate: string // ISO 8601 4 startDate: string // ISO 8601
5 endDate: string // ISO 8601 5 endDate: string // ISO 8601
6 6
7 originallyPublishedStartDate: string // ISO 8601
8 originallyPublishedEndDate: string // ISO 8601
9
7 nsfw: NSFWQuery 10 nsfw: NSFWQuery
8 11
9 categoryOneOf: string 12 categoryOneOf: string
@@ -23,6 +26,8 @@ export class AdvancedSearch {
23 constructor (options?: { 26 constructor (options?: {
24 startDate?: string 27 startDate?: string
25 endDate?: string 28 endDate?: string
29 originallyPublishedStartDate?: string
30 originallyPublishedEndDate?: string
26 nsfw?: NSFWQuery 31 nsfw?: NSFWQuery
27 categoryOneOf?: string 32 categoryOneOf?: string
28 licenceOneOf?: string 33 licenceOneOf?: string
@@ -37,6 +42,9 @@ export class AdvancedSearch {
37 42
38 this.startDate = options.startDate || undefined 43 this.startDate = options.startDate || undefined
39 this.endDate = options.endDate || undefined 44 this.endDate = options.endDate || undefined
45 this.originallyPublishedStartDate = options.originallyPublishedStartDate || undefined
46 this.originallyPublishedEndDate = options.originallyPublishedEndDate || undefined
47
40 this.nsfw = options.nsfw || undefined 48 this.nsfw = options.nsfw || undefined
41 this.categoryOneOf = options.categoryOneOf || undefined 49 this.categoryOneOf = options.categoryOneOf || undefined
42 this.licenceOneOf = options.licenceOneOf || undefined 50 this.licenceOneOf = options.licenceOneOf || undefined
@@ -66,6 +74,8 @@ export class AdvancedSearch {
66 reset () { 74 reset () {
67 this.startDate = undefined 75 this.startDate = undefined
68 this.endDate = undefined 76 this.endDate = undefined
77 this.originallyPublishedStartDate = undefined
78 this.originallyPublishedEndDate = undefined
69 this.nsfw = undefined 79 this.nsfw = undefined
70 this.categoryOneOf = undefined 80 this.categoryOneOf = undefined
71 this.licenceOneOf = undefined 81 this.licenceOneOf = undefined
@@ -82,6 +92,8 @@ export class AdvancedSearch {
82 return { 92 return {
83 startDate: this.startDate, 93 startDate: this.startDate,
84 endDate: this.endDate, 94 endDate: this.endDate,
95 originallyPublishedStartDate: this.originallyPublishedStartDate,
96 originallyPublishedEndDate: this.originallyPublishedEndDate,
85 nsfw: this.nsfw, 97 nsfw: this.nsfw,
86 categoryOneOf: this.categoryOneOf, 98 categoryOneOf: this.categoryOneOf,
87 licenceOneOf: this.licenceOneOf, 99 licenceOneOf: this.licenceOneOf,
@@ -98,6 +110,8 @@ export class AdvancedSearch {
98 return { 110 return {
99 startDate: this.startDate, 111 startDate: this.startDate,
100 endDate: this.endDate, 112 endDate: this.endDate,
113 originallyPublishedStartDate: this.originallyPublishedStartDate,
114 originallyPublishedEndDate: this.originallyPublishedEndDate,
101 nsfw: this.nsfw, 115 nsfw: this.nsfw,
102 categoryOneOf: this.intoArray(this.categoryOneOf), 116 categoryOneOf: this.intoArray(this.categoryOneOf),
103 licenceOneOf: this.intoArray(this.licenceOneOf), 117 licenceOneOf: this.intoArray(this.licenceOneOf),
diff --git a/client/src/app/search/search-filters.component.html b/client/src/app/search/search-filters.component.html
index 74bb781f4..8220a990b 100644
--- a/client/src/app/search/search-filters.component.html
+++ b/client/src/app/search/search-filters.component.html
@@ -21,6 +21,27 @@
21 </div> 21 </div>
22 22
23 <div class="form-group"> 23 <div class="form-group">
24 <label i18n for="original-publication-after">Original publication year</label>
25
26 <div class="row">
27 <div class="col-sm-6">
28 <input
29 type="text" id="original-publication-after" name="original-publication-after"
30 i18n-placeholder placeholder="After..."
31 [(ngModel)]="originallyPublishedStartYear"
32 >
33 </div>
34 <div class="col-sm-6">
35 <input
36 type="text" id="original-publication-before" name="original-publication-before"
37 i18n-placeholder placeholder="Before..."
38 [(ngModel)]="originallyPublishedEndYear"
39 >
40 </div>
41 </div>
42 </div>
43
44 <div class="form-group">
24 <div i18n class="radio-label">Duration</div> 45 <div i18n class="radio-label">Duration</div>
25 46
26 <div class="peertube-radio-container" *ngFor="let duration of durationRanges"> 47 <div class="peertube-radio-container" *ngFor="let duration of durationRanges">
@@ -93,4 +114,4 @@
93 <div class="submit-button"> 114 <div class="submit-button">
94 <input type="submit" i18n-value value="Filter"> 115 <input type="submit" i18n-value value="Filter">
95 </div> 116 </div>
96</form> \ No newline at end of file 117</form>
diff --git a/client/src/app/search/search-filters.component.ts b/client/src/app/search/search-filters.component.ts
index 3fdc6df35..762a6b7f2 100644
--- a/client/src/app/search/search-filters.component.ts
+++ b/client/src/app/search/search-filters.component.ts
@@ -25,6 +25,9 @@ export class SearchFiltersComponent implements OnInit {
25 publishedDateRange: string 25 publishedDateRange: string
26 durationRange: string 26 durationRange: string
27 27
28 originallyPublishedStartYear: string
29 originallyPublishedEndYear: string
30
28 constructor ( 31 constructor (
29 private i18n: I18n, 32 private i18n: I18n,
30 private serverService: ServerService 33 private serverService: ServerService
@@ -86,15 +89,27 @@ export class SearchFiltersComponent implements OnInit {
86 89
87 this.loadFromDurationRange() 90 this.loadFromDurationRange()
88 this.loadFromPublishedRange() 91 this.loadFromPublishedRange()
92 this.loadOriginallyPublishedAtYears()
89 } 93 }
90 94
91 formUpdated () { 95 formUpdated () {
92 this.updateModelFromDurationRange() 96 this.updateModelFromDurationRange()
93 this.updateModelFromPublishedRange() 97 this.updateModelFromPublishedRange()
98 this.updateModelFromOriginallyPublishedAtYears()
94 99
95 this.filtered.emit(this.advancedSearch) 100 this.filtered.emit(this.advancedSearch)
96 } 101 }
97 102
103 private loadOriginallyPublishedAtYears () {
104 this.originallyPublishedStartYear = this.advancedSearch.originallyPublishedStartDate
105 ? new Date(this.advancedSearch.originallyPublishedStartDate).getFullYear().toString()
106 : null
107
108 this.originallyPublishedEndYear = this.advancedSearch.originallyPublishedEndDate
109 ? new Date(this.advancedSearch.originallyPublishedEndDate).getFullYear().toString()
110 : null
111 }
112
98 private loadFromDurationRange () { 113 private loadFromDurationRange () {
99 if (this.advancedSearch.durationMin || this.advancedSearch.durationMax) { 114 if (this.advancedSearch.durationMin || this.advancedSearch.durationMax) {
100 const fourMinutes = 60 * 4 115 const fourMinutes = 60 * 4
@@ -127,6 +142,32 @@ export class SearchFiltersComponent implements OnInit {
127 } 142 }
128 } 143 }
129 144
145 private updateModelFromOriginallyPublishedAtYears () {
146 const baseDate = new Date()
147 baseDate.setHours(0, 0, 0, 0)
148 baseDate.setMonth(0, 1)
149
150 if (this.originallyPublishedStartYear) {
151 const year = parseInt(this.originallyPublishedStartYear, 10)
152 const start = new Date(baseDate)
153 start.setFullYear(year)
154
155 this.advancedSearch.originallyPublishedStartDate = start.toISOString()
156 } else {
157 this.advancedSearch.originallyPublishedStartDate = null
158 }
159
160 if (this.originallyPublishedEndYear) {
161 const year = parseInt(this.originallyPublishedEndYear, 10)
162 const end = new Date(baseDate)
163 end.setFullYear(year)
164
165 this.advancedSearch.originallyPublishedEndDate = end.toISOString()
166 } else {
167 this.advancedSearch.originallyPublishedEndDate = null
168 }
169 }
170
130 private updateModelFromDurationRange () { 171 private updateModelFromDurationRange () {
131 if (!this.durationRange) return 172 if (!this.durationRange) return
132 173
@@ -174,4 +215,5 @@ export class SearchFiltersComponent implements OnInit {
174 215
175 this.advancedSearch.startDate = date.toISOString() 216 this.advancedSearch.startDate = date.toISOString()
176 } 217 }
218
177} 219}