aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/shared
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2019-06-07 15:04:41 +0200
committerChocobozzz <me@florianbigard.com>2019-06-07 15:04:41 +0200
commitb91bc1d1f3591c35ab4426f6ab594b4bd9f1ef62 (patch)
tree754bb49026d4df8086030e28a8a7c16e3f0338b6 /client/src/app/shared
parent851f5daa1eec66e1faa3c45238ec9ab91be05b00 (diff)
parent03371ad9d049bab79445a1b35da44cb1272f6c28 (diff)
downloadPeerTube-b91bc1d1f3591c35ab4426f6ab594b4bd9f1ef62.tar.gz
PeerTube-b91bc1d1f3591c35ab4426f6ab594b4bd9f1ef62.tar.zst
PeerTube-b91bc1d1f3591c35ab4426f6ab594b4bd9f1ef62.zip
Merge branch 'release/v1.3.0' into develop
Diffstat (limited to 'client/src/app/shared')
-rw-r--r--client/src/app/shared/buttons/action-dropdown.component.scss4
-rw-r--r--client/src/app/shared/buttons/action-dropdown.component.ts6
-rw-r--r--client/src/app/shared/forms/form-reactive.ts2
-rw-r--r--client/src/app/shared/instance/instance-features-table.component.scss3
-rw-r--r--client/src/app/shared/user-subscription/remote-subscribe.component.ts15
-rw-r--r--client/src/app/shared/user-subscription/subscribe-button.component.html4
-rw-r--r--client/src/app/shared/user-subscription/subscribe-button.component.ts14
-rw-r--r--client/src/app/shared/video/video-actions-dropdown.component.ts32
8 files changed, 38 insertions, 42 deletions
diff --git a/client/src/app/shared/buttons/action-dropdown.component.scss b/client/src/app/shared/buttons/action-dropdown.component.scss
index 5073190b0..7c2b0db71 100644
--- a/client/src/app/shared/buttons/action-dropdown.component.scss
+++ b/client/src/app/shared/buttons/action-dropdown.component.scss
@@ -32,6 +32,10 @@
32 32
33 .more-icon { 33 .more-icon {
34 width: 21px; 34 width: 21px;
35
36 /deep/ {
37 @include apply-svg-color(var(--mainForegroundColor));
38 }
35 } 39 }
36 40
37 &.small { 41 &.small {
diff --git a/client/src/app/shared/buttons/action-dropdown.component.ts b/client/src/app/shared/buttons/action-dropdown.component.ts
index f5345831b..c9dbbfda2 100644
--- a/client/src/app/shared/buttons/action-dropdown.component.ts
+++ b/client/src/app/shared/buttons/action-dropdown.component.ts
@@ -41,10 +41,4 @@ export class ActionDropdownComponent<T> {
41 areActionsDisplayed (actions: DropdownAction<T>[], entry: T) { 41 areActionsDisplayed (actions: DropdownAction<T>[], entry: T) {
42 return actions.some(a => a.isDisplayed === undefined || a.isDisplayed(entry)) 42 return actions.some(a => a.isDisplayed === undefined || a.isDisplayed(entry))
43 } 43 }
44
45 handleClick (event: Event, action: DropdownAction<T>) {
46 event.preventDefault()
47
48 // action.handler(entry)
49 }
50} 44}
diff --git a/client/src/app/shared/forms/form-reactive.ts b/client/src/app/shared/forms/form-reactive.ts
index 0d40b6f4a..6aec2937d 100644
--- a/client/src/app/shared/forms/form-reactive.ts
+++ b/client/src/app/shared/forms/form-reactive.ts
@@ -57,7 +57,7 @@ export abstract class FormReactive {
57 57
58 // Don't care if dirty on force check 58 // Don't care if dirty on force check
59 const isDirty = control.dirty || forceCheck === true 59 const isDirty = control.dirty || forceCheck === true
60 if (control && isDirty && !control.valid) { 60 if (control && isDirty && control.enabled && !control.valid) {
61 const messages = validationMessages[ field ] 61 const messages = validationMessages[ field ]
62 for (const key of Object.keys(control.errors)) { 62 for (const key of Object.keys(control.errors)) {
63 formErrors[ field ] += messages[ key ] + ' ' 63 formErrors[ field ] += messages[ key ] + ' '
diff --git a/client/src/app/shared/instance/instance-features-table.component.scss b/client/src/app/shared/instance/instance-features-table.component.scss
index 90fbb5c94..f9bec038d 100644
--- a/client/src/app/shared/instance/instance-features-table.component.scss
+++ b/client/src/app/shared/instance/instance-features-table.component.scss
@@ -3,6 +3,7 @@
3 3
4table { 4table {
5 font-size: 14px; 5 font-size: 14px;
6 color: var(--mainForegroundColor);
6 7
7 .label { 8 .label {
8 font-weight: $font-semibold; 9 font-weight: $font-semibold;
@@ -16,4 +17,4 @@ table {
16 .glyphicon-remove { 17 .glyphicon-remove {
17 color: $red; 18 color: $red;
18 } 19 }
19} \ No newline at end of file 20}
diff --git a/client/src/app/shared/user-subscription/remote-subscribe.component.ts b/client/src/app/shared/user-subscription/remote-subscribe.component.ts
index ba2a45df1..63e7cd5d9 100644
--- a/client/src/app/shared/user-subscription/remote-subscribe.component.ts
+++ b/client/src/app/shared/user-subscription/remote-subscribe.component.ts
@@ -11,7 +11,7 @@ import {
11 styleUrls: ['./remote-subscribe.component.scss'] 11 styleUrls: ['./remote-subscribe.component.scss']
12}) 12})
13export class RemoteSubscribeComponent extends FormReactive implements OnInit { 13export class RemoteSubscribeComponent extends FormReactive implements OnInit {
14 @Input() account: string 14 @Input() uri: string
15 @Input() interact = false 15 @Input() interact = false
16 @Input() showHelp = false 16 @Input() showHelp = false
17 17
@@ -42,19 +42,20 @@ export class RemoteSubscribeComponent extends FormReactive implements OnInit {
42 fetch(`https://${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`) 42 fetch(`https://${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`)
43 .then(response => response.json()) 43 .then(response => response.json())
44 .then(data => new Promise((resolve, reject) => { 44 .then(data => new Promise((resolve, reject) => {
45 console.log(data)
46
45 if (data && Array.isArray(data.links)) { 47 if (data && Array.isArray(data.links)) {
46 const link: { 48 const link: { template: string } = data.links.find((link: any) => {
47 template: string 49 return link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe'
48 } = data.links.find((link: any) => 50 })
49 link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe')
50 51
51 if (link && link.template.includes('{uri}')) { 52 if (link && link.template.includes('{uri}')) {
52 resolve(link.template.replace('{uri}', `acct:${this.account}`)) 53 resolve(link.template.replace('{uri}', encodeURIComponent(this.uri)))
53 } 54 }
54 } 55 }
55 reject() 56 reject()
56 })) 57 }))
57 .then(window.open) 58 .then(window.open)
58 .catch(() => window.open(`https://${hostname}/authorize_interaction?acct=${this.account}`)) 59 .catch(err => console.error(err))
59 } 60 }
60} 61}
diff --git a/client/src/app/shared/user-subscription/subscribe-button.component.html b/client/src/app/shared/user-subscription/subscribe-button.component.html
index dbf6a34f0..d32647b42 100644
--- a/client/src/app/shared/user-subscription/subscribe-button.component.html
+++ b/client/src/app/shared/user-subscription/subscribe-button.component.html
@@ -41,7 +41,7 @@
41 </button> 41 </button>
42 42
43 <button class="dropdown-item" i18n>Subscribe with a Mastodon account:</button> 43 <button class="dropdown-item" i18n>Subscribe with a Mastodon account:</button>
44 <my-remote-subscribe showHelp="true" account="{{ uriAccount }}"></my-remote-subscribe> 44 <my-remote-subscribe showHelp="true" [uri]="channelUri"></my-remote-subscribe>
45 45
46 <div class="dropdown-divider"></div> 46 <div class="dropdown-divider"></div>
47 47
@@ -50,4 +50,4 @@
50 50
51 </div> 51 </div>
52 </div> 52 </div>
53</div> \ No newline at end of file 53</div>
diff --git a/client/src/app/shared/user-subscription/subscribe-button.component.ts b/client/src/app/shared/user-subscription/subscribe-button.component.ts
index ef470ee44..25515f6ea 100644
--- a/client/src/app/shared/user-subscription/subscribe-button.component.ts
+++ b/client/src/app/shared/user-subscription/subscribe-button.component.ts
@@ -28,19 +28,19 @@ export class SubscribeButtonComponent implements OnInit {
28 private videoService: VideoService 28 private videoService: VideoService
29 ) { } 29 ) { }
30 30
31 get uri () { 31 get channelHandle () {
32 return this.videoChannel.name + '@' + this.videoChannel.host 32 return this.videoChannel.name + '@' + this.videoChannel.host
33 } 33 }
34 34
35 get uriAccount () { 35 get channelUri () {
36 return this.videoChannel.ownerAccount.name + '@' + this.videoChannel.host 36 return this.videoChannel.url
37 } 37 }
38 38
39 ngOnInit () { 39 ngOnInit () {
40 if (this.isUserLoggedIn()) { 40 if (this.isUserLoggedIn()) {
41 this.userSubscriptionService.doesSubscriptionExist(this.uri) 41 this.userSubscriptionService.doesSubscriptionExist(this.channelHandle)
42 .subscribe( 42 .subscribe(
43 res => this.subscribed = res[this.uri], 43 res => this.subscribed = res[this.channelHandle],
44 44
45 err => this.notifier.error(err.message) 45 err => this.notifier.error(err.message)
46 ) 46 )
@@ -56,7 +56,7 @@ export class SubscribeButtonComponent implements OnInit {
56 } 56 }
57 57
58 localSubscribe () { 58 localSubscribe () {
59 this.userSubscriptionService.addSubscription(this.uri) 59 this.userSubscriptionService.addSubscription(this.channelHandle)
60 .subscribe( 60 .subscribe(
61 () => { 61 () => {
62 this.subscribed = true 62 this.subscribed = true
@@ -78,7 +78,7 @@ export class SubscribeButtonComponent implements OnInit {
78 } 78 }
79 79
80 localUnsubscribe () { 80 localUnsubscribe () {
81 this.userSubscriptionService.deleteSubscription(this.uri) 81 this.userSubscriptionService.deleteSubscription(this.channelHandle)
82 .subscribe( 82 .subscribe(
83 () => { 83 () => {
84 this.subscribed = false 84 this.subscribed = false
diff --git a/client/src/app/shared/video/video-actions-dropdown.component.ts b/client/src/app/shared/video/video-actions-dropdown.component.ts
index 0bbc783c1..8d4e33697 100644
--- a/client/src/app/shared/video/video-actions-dropdown.component.ts
+++ b/client/src/app/shared/video/video-actions-dropdown.component.ts
@@ -188,19 +188,16 @@ export class VideoActionsDropdownComponent implements OnChanges {
188 } 188 }
189 189
190 private buildActions () { 190 private buildActions () {
191 this.videoActions = [] 191 this.videoActions = [
192 192 [
193 if (this.authService.isLoggedIn()) {
194 this.videoActions.push([
195 { 193 {
196 label: this.i18n('Save to playlist'), 194 label: this.i18n('Save to playlist'),
197 handler: () => this.playlistDropdown.toggle(), 195 handler: () => this.playlistDropdown.toggle(),
198 isDisplayed: () => this.displayOptions.playlist, 196 isDisplayed: () => this.authService.isLoggedIn() && this.displayOptions.playlist,
199 iconName: 'playlist-add' 197 iconName: 'playlist-add'
200 } 198 }
201 ]) 199 ],
202 200 [
203 this.videoActions.push([
204 { 201 {
205 label: this.i18n('Download'), 202 label: this.i18n('Download'),
206 handler: () => this.showDownloadModal(), 203 handler: () => this.showDownloadModal(),
@@ -211,36 +208,35 @@ export class VideoActionsDropdownComponent implements OnChanges {
211 label: this.i18n('Update'), 208 label: this.i18n('Update'),
212 linkBuilder: ({ video }) => [ '/videos/update', video.uuid ], 209 linkBuilder: ({ video }) => [ '/videos/update', video.uuid ],
213 iconName: 'edit', 210 iconName: 'edit',
214 isDisplayed: () => this.displayOptions.update && this.isVideoUpdatable() 211 isDisplayed: () => this.authService.isLoggedIn() && this.displayOptions.update && this.isVideoUpdatable()
215 }, 212 },
216 { 213 {
217 label: this.i18n('Blacklist'), 214 label: this.i18n('Blacklist'),
218 handler: () => this.showBlacklistModal(), 215 handler: () => this.showBlacklistModal(),
219 iconName: 'no', 216 iconName: 'no',
220 isDisplayed: () => this.displayOptions.blacklist && this.isVideoBlacklistable() 217 isDisplayed: () => this.authService.isLoggedIn() && this.displayOptions.blacklist && this.isVideoBlacklistable()
221 }, 218 },
222 { 219 {
223 label: this.i18n('Unblacklist'), 220 label: this.i18n('Unblacklist'),
224 handler: () => this.unblacklistVideo(), 221 handler: () => this.unblacklistVideo(),
225 iconName: 'undo', 222 iconName: 'undo',
226 isDisplayed: () => this.displayOptions.blacklist && this.isVideoUnblacklistable() 223 isDisplayed: () => this.authService.isLoggedIn() && this.displayOptions.blacklist && this.isVideoUnblacklistable()
227 }, 224 },
228 { 225 {
229 label: this.i18n('Delete'), 226 label: this.i18n('Delete'),
230 handler: () => this.removeVideo(), 227 handler: () => this.removeVideo(),
231 isDisplayed: () => this.displayOptions.delete && this.isVideoRemovable(), 228 isDisplayed: () => this.authService.isLoggedIn() && this.displayOptions.delete && this.isVideoRemovable(),
232 iconName: 'delete' 229 iconName: 'delete'
233 } 230 }
234 ]) 231 ],
235 232 [
236 this.videoActions.push([
237 { 233 {
238 label: this.i18n('Report'), 234 label: this.i18n('Report'),
239 handler: () => this.showReportModal(), 235 handler: () => this.showReportModal(),
240 isDisplayed: () => this.displayOptions.report, 236 isDisplayed: () => this.authService.isLoggedIn() && this.displayOptions.report,
241 iconName: 'alert' 237 iconName: 'alert'
242 } 238 }
243 ]) 239 ]
244 } 240 ]
245 } 241 }
246} 242}