]> Untitled Git - lemmy.git/blobdiff - ui/src/utils.ts
Merge branch 'master' into federation_merge_from_master_2
[lemmy.git] / ui / src / utils.ts
index bdb9afbd2da3f243fc74ef8c0ce0a833f0526d68..071b86acea6045bfe2928f738b056f8c411d4bfa 100644 (file)
@@ -592,7 +592,10 @@ export function setupTribute(): Tribute {
       {
         trigger: '@',
         selectTemplate: (item: any) => {
-          return `[/u/${item.original.key}](/u/${item.original.key})`;
+          let link = item.original.local
+            ? `[${item.original.key}](/u/${item.original.name})`
+            : `[${item.original.key}](/user/${item.original.id})`;
+          return link;
         },
         values: (text: string, cb: any) => {
           userSearch(text, (users: any) => cb(users));
@@ -605,9 +608,12 @@ export function setupTribute(): Tribute {
 
       // Communities
       {
-        trigger: '#',
+        trigger: '!',
         selectTemplate: (item: any) => {
-          return `[/c/${item.original.key}](/c/${item.original.key})`;
+          let link = item.original.local
+            ? `[${item.original.key}](/c/${item.original.name})`
+            : `[${item.original.key}](/community/${item.original.id})`;
+          return link;
         },
         values: (text: string, cb: any) => {
           communitySearch(text, (communities: any) => cb(communities));
@@ -650,7 +656,12 @@ function userSearch(text: string, cb: any) {
         if (res.op == UserOperation.Search) {
           let data = res.data as SearchResponse;
           let users = data.users.map(u => {
-            return { key: u.name };
+            return {
+              key: `@${u.name}@${hostname(u.actor_id)}`,
+              name: u.name,
+              local: u.local,
+              id: u.id,
+            };
           });
           cb(users);
           this.userSub.unsubscribe();
@@ -681,8 +692,13 @@ function communitySearch(text: string, cb: any) {
         let res = wsJsonToRes(msg);
         if (res.op == UserOperation.Search) {
           let data = res.data as SearchResponse;
-          let communities = data.communities.map(u => {
-            return { key: u.name };
+          let communities = data.communities.map(c => {
+            return {
+              key: `!${c.name}@${hostname(c.actor_id)}`,
+              name: c.name,
+              local: c.local,
+              id: c.id,
+            };
           });
           cb(communities);
           this.communitySub.unsubscribe();
@@ -933,6 +949,13 @@ export function previewLines(text: string, lines: number = 3): string {
     .join('\n');
 }
 
+export function hostname(url: string): string {
+  let cUrl = new URL(url);
+  return window.location.port
+    ? `${cUrl.hostname}:${cUrl.port}`
+    : `${cUrl.hostname}`;
+}
+
 function canUseWebP() {
   // TODO pictshare might have a webp conversion bug, try disabling this
   return false;