diff --git a/src/app/components/floating-column/floating-column.component.html b/src/app/components/floating-column/floating-column.component.html
index bc8106b4..8ca112ed 100644
--- a/src/app/components/floating-column/floating-column.component.html
+++ b/src/app/components/floating-column/floating-column.component.html
@@ -1,5 +1,7 @@
-
+
\ No newline at end of file
diff --git a/src/app/components/floating-column/search/search.component.html b/src/app/components/floating-column/search/search.component.html
index 619fbd67..1e2089e8 100644
--- a/src/app/components/floating-column/search/search.component.html
+++ b/src/app/components/floating-column/search/search.component.html
@@ -12,7 +12,7 @@
\ No newline at end of file
diff --git a/src/app/components/floating-column/search/search.component.ts b/src/app/components/floating-column/search/search.component.ts
index 1ec03ecf..dea93cbe 100644
--- a/src/app/components/floating-column/search/search.component.ts
+++ b/src/app/components/floating-column/search/search.component.ts
@@ -23,12 +23,11 @@ export class SearchComponent implements OnInit {
isLoading: boolean;
- @Output() browseAccount = new EventEmitter();
- @Output() browseHashtag = new EventEmitter();
- @Output() browseThread = new EventEmitter();
+ @Output() browseAccountEvent = new EventEmitter();
+ @Output() browseHashtagEvent = new EventEmitter();
+ @Output() browseThreadEvent = new EventEmitter();
constructor(
- private readonly store: Store,
private readonly toolsService: ToolsService,
private readonly mastodonService: MastodonService) { }
@@ -41,9 +40,9 @@ export class SearchComponent implements OnInit {
return false;
}
- selectHashtag(hashtag: string): boolean {
+ browseHashtag(hashtag: string): boolean {
if (hashtag) {
- this.browseHashtag.next(hashtag);
+ this.browseHashtagEvent.next(hashtag);
}
return false;
}
@@ -57,10 +56,10 @@ export class SearchComponent implements OnInit {
// return false;
// }
- selectAccount(accountName: string): boolean {
+ browseAccount(accountName: string): boolean {
console.warn(accountName);
if (accountName) {
- this.browseAccount.next(accountName);
+ this.browseAccountEvent.next(accountName);
}
return false;
}
@@ -97,9 +96,4 @@ export class SearchComponent implements OnInit {
.then(() => { this.isLoading = false; });
}
}
-
- private getRegisteredAccounts(): AccountInfo[] {
- var regAccounts = this.store.snapshot().registeredaccounts.accounts;
- return regAccounts;
- }
}
diff --git a/src/app/components/stream/hashtag/hashtag.component.html b/src/app/components/stream/hashtag/hashtag.component.html
index 5945cffd..7f13a754 100644
--- a/src/app/components/stream/hashtag/hashtag.component.html
+++ b/src/app/components/stream/hashtag/hashtag.component.html
@@ -6,6 +6,10 @@
add column
-
+
\ No newline at end of file
diff --git a/src/app/components/stream/hashtag/hashtag.component.ts b/src/app/components/stream/hashtag/hashtag.component.ts
index f1f4835e..d6273593 100644
--- a/src/app/components/stream/hashtag/hashtag.component.ts
+++ b/src/app/components/stream/hashtag/hashtag.component.ts
@@ -10,8 +10,9 @@ import { StreamElement, StreamTypeEnum, AddStream } from '../../../states/stream
styleUrls: ['./hashtag.component.scss']
})
export class HashtagComponent implements OnInit {
- @Output() browseAccount = new EventEmitter();
- @Output() browseHashtag = new EventEmitter();
+ @Output() browseAccountEvent = new EventEmitter();
+ @Output() browseHashtagEvent = new EventEmitter();
+ @Output() browseThreadEvent = new EventEmitter();
@Input() hashtagElement: StreamElement;
@@ -38,11 +39,15 @@ export class HashtagComponent implements OnInit {
return false;
}
- selectAccount(account: string) {
- this.browseAccount.next(account);
+ browseAccount(account: string) {
+ this.browseAccountEvent.next(account);
}
- selectHashtag(hashtag: string) {
- this.browseHashtag.next(hashtag);
+ browseHashtag(hashtag: string) {
+ this.browseHashtagEvent.next(hashtag);
+ }
+
+ browseThread(statusUri: string): void {
+ this.browseThreadEvent.next(statusUri);
}
}
diff --git a/src/app/components/stream/status/status.component.ts b/src/app/components/stream/status/status.component.ts
index 47c99fc2..15a50e53 100644
--- a/src/app/components/stream/status/status.component.ts
+++ b/src/app/components/stream/status/status.component.ts
@@ -1,11 +1,7 @@
-import { Component, OnInit, Input, Output, Inject, LOCALE_ID, ElementRef, EventEmitter, Pipe, PipeTransform, ViewChild, Renderer2 } from "@angular/core";
+import { Component, OnInit, Input, Output, EventEmitter } from "@angular/core";
import { Status, Account } from "../../../services/models/mastodon.interfaces";
-import { formatDate } from '@angular/common';
-import { stateNameErrorMessage } from "@ngxs/store/src/decorators/state";
import { StatusWrapper } from "../stream.component";
-import { DomSanitizer } from '@angular/platform-browser'
-
@Component({
selector: "app-status",
templateUrl: "./status.component.html",
@@ -17,9 +13,9 @@ export class StatusComponent implements OnInit {
hasAttachments: boolean;
replyingToStatus: boolean;
- @Output() browseAccount = new EventEmitter();
- @Output() browseHashtag = new EventEmitter();
- @Output() browseThread = new EventEmitter();
+ @Output() browseAccountEvent = new EventEmitter();
+ @Output() browseHashtagEvent = new EventEmitter();
+ @Output() browseThreadEvent = new EventEmitter();
private _statusWrapper: StatusWrapper;
status: Status;
@@ -28,10 +24,6 @@ export class StatusComponent implements OnInit {
this._statusWrapper = value;
this.status = value.status;
- //TEST
- //this.status.content += 'TEST ';
-
-
if (this.status.reblog) {
this.reblog = true;
this.displayedStatus = this.status.reblog;
@@ -46,58 +38,25 @@ export class StatusComponent implements OnInit {
if (this.displayedStatus.media_attachments && this.displayedStatus.media_attachments.length > 0) {
this.hasAttachments = true;
}
-
-
}
get statusWrapper(): StatusWrapper {
return this._statusWrapper;
}
-
- constructor(@Inject(LOCALE_ID) private locale: string) { }
+ constructor() { }
ngOnInit() {
}
- // ngAfterViewInit() {
- // let el = this.contentElement.nativeElement.querySelector('.test');
- // console.log(this.contentElement.nativeElement);
- // console.log(el);
- // if (el)
- // this.renderer.listen(el, 'click', (el2) => {
- // console.log(el2);
- // console.warn('YOOOOO');
- // return false;
- // });
- // }
-
openAccount(account: Account): boolean {
- let accountName = account.acct;
- if(!accountName.includes('@'))
- accountName += `@${account.url.replace('https://', '').split('/')[0]}`;
+ let accountName = account.acct;
+ if (!accountName.includes('@'))
+ accountName += `@${account.url.replace('https://', '').split('/')[0]}`;
- this.browseAccount.next(accountName);
+ this.browseAccountEvent.next(accountName);
return false;
}
- // getCompactRelativeTime(d: string): string {
- // const date = (new Date(d)).getTime();
- // const now = Date.now();
- // const timeDelta = (now - date) / (1000);
-
- // if (timeDelta < 60) {
- // return `${timeDelta | 0}s`;
- // } else if (timeDelta < 60 * 60) {
- // return `${timeDelta / 60 | 0}m`;
- // } else if (timeDelta < 60 * 60 * 24) {
- // return `${timeDelta / (60 * 60) | 0}h`;
- // } else if (timeDelta < 60 * 60 * 24 * 31) {
- // return `${timeDelta / (60 * 60 * 24) | 0}d`;
- // }
-
- // return formatDate(date, 'MM/dd', this.locale);
- // }
-
openReply(): boolean {
this.replyingToStatus = !this.replyingToStatus;
@@ -109,22 +68,21 @@ export class StatusComponent implements OnInit {
return false;
}
- // test(): boolean {
- // console.warn('heeeeyaaa!');
- // return false;
- // }
-
accountSelected(accountName: string): void {
- console.warn(`status comp: accountSelected ${accountName}`);
- this.browseAccount.next(accountName);
+ this.browseAccountEvent.next(accountName);
}
hashtagSelected(hashtag: string): void {
- console.warn(`status comp: hashtagSelected ${hashtag}`);
- this.browseHashtag.next(hashtag);
+ this.browseHashtagEvent.next(hashtag);
}
textSelected(): void {
- console.warn(`status comp: textSelected`);
+ const status = this._statusWrapper.status;
+
+ if (status.reblog) {
+ this.browseThreadEvent.next(status.reblog.uri);
+ } else {
+ this.browseThreadEvent.next(this._statusWrapper.status.uri);
+ }
}
}
diff --git a/src/app/components/stream/stream-overlay/stream-overlay.component.html b/src/app/components/stream/stream-overlay/stream-overlay.component.html
index 77f68df8..9d06ac34 100644
--- a/src/app/components/stream/stream-overlay/stream-overlay.component.html
+++ b/src/app/components/stream/stream-overlay/stream-overlay.component.html
@@ -5,11 +5,17 @@
REFRESH
NEXT
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/src/app/components/stream/stream-overlay/stream-overlay.component.ts b/src/app/components/stream/stream-overlay/stream-overlay.component.ts
index f43bfbbe..f7eeafcc 100644
--- a/src/app/components/stream/stream-overlay/stream-overlay.component.ts
+++ b/src/app/components/stream/stream-overlay/stream-overlay.component.ts
@@ -10,6 +10,7 @@ import { StreamElement, StreamTypeEnum } from '../../../states/streams.state';
styleUrls: ['./stream-overlay.component.scss']
})
export class StreamOverlayComponent implements OnInit {
+
private previousElements: OverlayBrowsing[] = [];
private nextElements: OverlayBrowsing[] = [];
private currentElement: OverlayBrowsing;
@@ -24,21 +25,20 @@ export class StreamOverlayComponent implements OnInit {
@Output() closeOverlay = new EventEmitter();
- @Input('browseAccount')
- set browseAccount(accountName: string) {
- this.accountSelected(accountName);
+ @Input('browseAccountData')
+ set browseAccountData(accountName: string) {
+ this.browseAccount(accountName);
// this.accountName = accountName;
}
- @Input('browseThread')
- set browseThread(thread: string) {
- // this.thread = thread;
+ @Input('browseThreadData')
+ set browseThreadData(statusUri: string) {
+ this.browseThread(statusUri);
}
- @Input('browseHashtag')
- set browseHashtag(hashtag: string) {
- this.hashtagSelected(hashtag);
- // this.hashtag = hashtag;
+ @Input('browseHashtagData')
+ set browseHashtagData(hashtag: string) {
+ this.browseHashtag(hashtag);
}
constructor(private toolsService: ToolsService) { }
@@ -93,7 +93,7 @@ export class StreamOverlayComponent implements OnInit {
return false;
}
- accountSelected(accountName: string): void {
+ browseAccount(accountName: string): void {
if(!accountName) return;
console.log('accountSelected');
@@ -106,7 +106,7 @@ export class StreamOverlayComponent implements OnInit {
this.canGoForward = false;
}
- hashtagSelected(hashtag: string): void {
+ browseHashtag(hashtag: string): void {
if(!hashtag) return;
console.log('hashtagSelected');
@@ -122,6 +122,20 @@ export class StreamOverlayComponent implements OnInit {
this.canGoForward = false;
}
+ browseThread(statusUri: string): any {
+ if(!statusUri) return;
+
+ console.log('thread selected')
+ this.nextElements.length = 0;
+ if (this.currentElement) {
+ this.previousElements.push(this.currentElement);
+ }
+
+ const newElement = new OverlayBrowsing(null, null, statusUri);
+ this.loadElement(newElement);
+ this.canGoForward = false;
+ }
+
private loadElement(element: OverlayBrowsing) {
this.currentElement = element;
diff --git a/src/app/components/stream/stream-statuses/stream-statuses.component.html b/src/app/components/stream/stream-statuses/stream-statuses.component.html
index 43918a72..e9f6dec7 100644
--- a/src/app/components/stream/stream-statuses/stream-statuses.component.html
+++ b/src/app/components/stream/stream-statuses/stream-statuses.component.html
@@ -1,6 +1,9 @@
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/components/stream/stream-statuses/stream-statuses.component.ts b/src/app/components/stream/stream-statuses/stream-statuses.component.ts
index edb1dc5b..9c486025 100644
--- a/src/app/components/stream/stream-statuses/stream-statuses.component.ts
+++ b/src/app/components/stream/stream-statuses/stream-statuses.component.ts
@@ -16,6 +16,7 @@ import { StatusWrapper } from '../stream.component';
styleUrls: ['./stream-statuses.component.scss']
})
export class StreamStatusesComponent implements OnInit, OnDestroy {
+ isLoading = false; //TODO
private _streamElement: StreamElement;
private account: AccountInfo;
@@ -25,9 +26,9 @@ export class StreamStatusesComponent implements OnInit, OnDestroy {
private bufferStream: Status[] = [];
private bufferWasCleared: boolean;
- @Output() browseAccount = new EventEmitter();
- @Output() browseHashtag = new EventEmitter();
- @Output() browseThread = new EventEmitter();
+ @Output() browseAccountEvent = new EventEmitter();
+ @Output() browseHashtagEvent = new EventEmitter();
+ @Output() browseThreadEvent = new EventEmitter();
@Input()
set streamElement(streamElement: StreamElement) {
@@ -125,14 +126,16 @@ export class StreamStatusesComponent implements OnInit, OnDestroy {
}
}
- accountSelected(accountName: string): void {
- console.warn(`status comp: accountSelected ${accountName}`);
- this.browseAccount.next(accountName);
+ browseAccount(accountName: string): void {
+ this.browseAccountEvent.next(accountName);
}
- hashtagSelected(hashtag: string): void {
- console.warn(`status comp: hashtagSelected ${hashtag}`);
- this.browseHashtag.next(hashtag);
+ browseHashtag(hashtag: string): void {
+ this.browseHashtagEvent.next(hashtag);
+ }
+
+ browseThread(statusUri: string): void {
+ this.browseThreadEvent.next(statusUri);
}
textSelected(): void {
diff --git a/src/app/components/stream/stream.component.html b/src/app/components/stream/stream.component.html
index cd7b94dd..c47d64f2 100644
--- a/src/app/components/stream/stream.component.html
+++ b/src/app/components/stream/stream.component.html
@@ -2,15 +2,16 @@
+ [browseAccountData]="overlayAccountToBrowse"
+ [browseHashtagData]="overlayHashtagToBrowse"
+ [browseThreadData]="overlayThreadToBrowse">
-
+
@@ -24,7 +25,10 @@
diff --git a/src/app/components/stream/user-profile/user-profile.component.ts b/src/app/components/stream/user-profile/user-profile.component.ts
index 47debcb4..ec82cee9 100644
--- a/src/app/components/stream/user-profile/user-profile.component.ts
+++ b/src/app/components/stream/user-profile/user-profile.component.ts
@@ -21,8 +21,9 @@ export class UserProfileComponent implements OnInit {
private accountName: string;
- @Output() browseAccount = new EventEmitter();
- @Output() browseHashtag = new EventEmitter();
+ @Output() browseAccountEvent = new EventEmitter();
+ @Output() browseHashtagEvent = new EventEmitter();
+ @Output() browseThreadEvent = new EventEmitter();
@Input('currentAccount')
//set currentAccount(account: Account) {
@@ -51,12 +52,16 @@ export class UserProfileComponent implements OnInit {
ngOnInit() {
}
- accountSelected(accountName: string): void {
- this.browseAccount.next(accountName);
+ browseAccount(accountName: string): void {
+ this.browseAccountEvent.next(accountName);
}
- hashtagSelected(hashtag: string): void {
- this.browseHashtag.next(hashtag);
+ browseHashtag(hashtag: string): void {
+ this.browseHashtagEvent.next(hashtag);
+ }
+
+ browseThread(statusUri: string): void {
+ this.browseThreadEvent.next(statusUri);
}
private loadAccount(accountName: string): Promise {
diff --git a/src/app/services/mastodon.service.ts b/src/app/services/mastodon.service.ts
index aa798712..ab81b988 100644
--- a/src/app/services/mastodon.service.ts
+++ b/src/app/services/mastodon.service.ts
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
import { HttpHeaders, HttpClient } from '@angular/common/http';
import { ApiRoutes } from './models/api.settings';
-import { Account, Status, Results } from "./models/mastodon.interfaces";
+import { Account, Status, Results, Context } from "./models/mastodon.interfaces";
import { AccountInfo } from '../states/accounts.state';
import { StreamTypeEnum } from '../states/streams.state';
import { stat } from 'fs';
@@ -129,6 +129,14 @@ export class MastodonService {
return this.httpClient.get(route+params, { headers: headers }).toPromise();
}
+ getStatusContext(account: AccountInfo, targetStatusId: string): Promise{
+ const params = this.apiRoutes.getStatusContext.replace('{0}', targetStatusId);
+ const route = `https://${account.instance}${params}`;
+
+ const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
+ return this.httpClient.get(route, { headers: headers }).toPromise();
+ }
+
searchAccount(account: AccountInfo, query: string, limit: number = 40, following: boolean = false): Promise{
const route = `https://${account.instance}${this.apiRoutes.searchForAccounts}?q=${query}&limit=${limit}&following=${following}`;
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });