File size: 6,145 Bytes
4410abe
 
 
 
 
 
 
 
 
 
 
 
 
3028275
4410abe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3028275
4410abe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3028275
4410abe
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<div class="page">
  <!-- Top Bar -->
  <header class="topbar">
    <h1>Community Forum</h1>
    <div class="searchbar">
      <input type="search" placeholder="Search threads, tags, tickers…" />
      <select aria-label="Sort">
        <option>Latest</option>
        <option>Most Active</option>
        <option>Top Voted</option>
        <option>Unanswered</option>
      </select>
    </div>
    <button class="btn" (click)="toggleModal(true)">New Post</button>
  </header>

  <!-- Sidebar (unchanged) -->
  <aside class="sidebar">
    <div class="block">
      <h3>CATEGORIES</h3>
      <div class="cat-list">
        <div class="cat active"><span>General Discussion</span><small style="color:var(--muted)"></small></div>
        <div class="cat"><span>Intraday Trading</span><small style="color:var(--muted)"></small></div>
        <div class="cat"><span>Swing & Position</span><small style="color:var(--muted)"></small></div>
        <div class="cat"><span>Options & Futures</span><small style="color:var(--muted)"></small></div>
        <div class="cat"><span>Fundamental Analysis</span><small style="color:var(--muted)"></small></div>
        <div class="cat"><span>Brokers & Tools</span><small style="color:var(--muted)"></small></div>
        <div class="cat"><span>Announcements</span><small style="color:var(--muted)"></small></div>
      </div>
    </div>

    <div class="block">
      <h3>POPULAR TAGS</h3>
      <div class="tag-list" style="gap:8px;flex-wrap:wrap;">
        <span class="tag">#NSE</span>
        <span class="tag">#BANKNIFTY</span>
        <span class="tag">#Earnings</span>
        <span class="tag">#Result</span>
        <span class="tag">#IPO</span>
        <span class="tag">#Strategy</span>
        <span class="tag">#Beginner</span>
      </div>
    </div>
  </aside>

  <!-- Main Content -->
  <main class="content">
    <!-- Thread List -->
    <section class="panel">
      <div class="toolbar">
        <span class="pill">General</span>
        <span class="pill">Showing: Latest</span>
      </div>

      <div class="threads" id="threadList">
        <div *ngIf="loading" class="tiny" style="color:var(--muted)">Loading…</div>
        <div *ngIf="!loading && loadError" class="tiny" style="color:var(--danger)">{{loadError}}</div>

        <article class="thread" *ngFor="let p of posts" (click)="openThread(p.id)">
          <div class="title">
            {{ p.title || (p.body | slice:0:60) + (p.body.length > 60 ? '…' : '') }}
          </div>
          <div class="meta">
            <span>by <strong>{{ p.userName }}</strong></span>
            <span>• {{ p.createdAt | date:'short' }}</span>
            <div class="chips" *ngIf="p.tags">
              <span class="chip" *ngFor="let t of splitTags(p.tags)">{{ t }}</span>
            </div>
          </div>

          <!-- Body content -->
          <div class="body-text">{{ p.body }}</div>

          <!-- Actions -->
          <div class="actions" (click)="$event.stopPropagation()">
            <button class="btn ghost" (click)="likePost(p)">👍 Like <span class="count">{{ p.likeCount ?? 0 }}</span></button>
            <button class="btn ghost" (click)="dislikePost(p)">👎 Dislike <span class="count">{{ p.dislikeCount ?? 0 }}</span></button>
            <button class="btn ghost" (click)="toggleReply(p.id)">💬 Reply <span class="count">{{ p.commentCount ?? 0 }}</span></button>
          </div>

          <!-- Inline reply editor -->
          <div class="reply" *ngIf="isReplyOpen(p.id)" (click)="$event.stopPropagation()">
            <textarea [(ngModel)]="replyDraft[p.id]" placeholder="Write your reply…"></textarea>
            <div style="display:flex; gap:8px; justify-content:flex-end">
              <button class="btn ghost" (click)="toggleReply(p.id)">Cancel</button>
              <button class="btn" [disabled]="!(replyDraft[p.id] || '').trim()" (click)="submitReply(p.id)">Post Reply</button>
            </div>
          </div>

          <div class="tiny" style="color:var(--muted)">{{ p.category || 'General' }}</div>
        </article>

        <div *ngIf="!loading && posts.length === 0" class="tiny" style="color:var(--muted)">No posts yet.</div>
      </div>
    </section>

   
  </main>
</div>

<!-- New Thread Modal -->
<div id="modal"
     [style.display]="showModal ? 'block' : 'none'"
     style="position:fixed; inset:0; z-index:1000; backdrop-filter: blur(6px); background:rgba(4,8,12,.35)">
  <div style="max-width:720px; margin:60px auto; background:rgba(17,23,35,.98); border:1px solid var(--border); border-radius:16px; padding:16px; box-shadow:0 20px 60px rgba(0,0,0,.6);">
    <div style="display:flex; align-items:center; gap:8px; margin-bottom:8px;">
      <h2 style="margin:0; font-size:18px;">Turn your thoughts into impact</h2>
    </div>
    <div style="display:grid; gap:10px;">
      <input [(ngModel)]="title" placeholder="Title"
             style="padding:10px 12px; border-radius:12px; background:#0b121c; border:1px solid var(--border); color:var(--text)" />
      <div style="display:flex; gap:8px; flex-wrap:wrap">
        <select [(ngModel)]="category"
                style="padding:10px 12px; border-radius:12px; background:#0b121c; border:1px solid var(--border); color:var(--text)">
          <option>General Discussion</option>
          <option>Intraday Trading</option>
          <option>Swing & Position</option>
          <option>Options & Futures</option>
          <option>Fundamental Analysis</option>
        </select>
        <input [(ngModel)]="tags" placeholder="#tags (comma separated)"
               style="flex:1; padding:10px 12px; border-radius:12px; background:#0b121c; border:1px solid var(--border); color:var(--text)" />
      </div>
      <textarea [(ngModel)]="body" placeholder="Write your post…" style="min-height:180px"></textarea>
      <div style="display:flex; gap:8px; justify-content:flex-end">
        <button class="btn ghost" (click)="toggleModal(false)">Cancel</button>
        <button class="btn" [disabled]="!body.trim()" (click)="publish()">Post</button>
      </div>
    </div>
  </div>
</div>