@okjavis/nodebb-theme-javis 4.0.2 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@okjavis/nodebb-theme-javis",
3
- "version": "4.0.2",
3
+ "version": "4.0.4",
4
4
  "description": "Modern, premium NodeBB theme for JAVIS Community - Extends Harmony with custom styling",
5
5
  "main": "theme.js",
6
6
  "scripts": {
package/scss/_base.scss CHANGED
@@ -144,6 +144,55 @@ a {
144
144
  }
145
145
  }
146
146
 
147
+ // ===========================================================
148
+ // PROFILE PAGE - Hide Push Notifications link
149
+ // ===========================================================
150
+ #web-push {
151
+ display: none !important;
152
+ }
153
+
154
+ // ===========================================================
155
+ // PROFILE EDIT PAGE - Right side options alignment
156
+ // ===========================================================
157
+ .account .col-xl-6:last-child {
158
+ // Remove text-center, align left
159
+ text-align: left !important;
160
+
161
+ // The list group for Change Picture, Username, etc.
162
+ .list-group {
163
+ border-radius: $jv-radius-sm;
164
+ overflow: hidden;
165
+
166
+ .list-group-item {
167
+ text-align: left;
168
+ padding: $jv-space-4 $jv-space-6;
169
+ border-left: none;
170
+ border-right: none;
171
+
172
+ &:first-child {
173
+ border-top: none;
174
+ }
175
+
176
+ a {
177
+ display: block;
178
+ font-weight: 500;
179
+ }
180
+ }
181
+ }
182
+
183
+ // SSO section label - align with list items above
184
+ > label.form-label {
185
+ margin-top: $jv-space-6;
186
+ padding-left: $jv-space-6; // Match list-group-item padding
187
+ }
188
+
189
+ // Delete account button container
190
+ .d-flex.justify-content-center {
191
+ justify-content: flex-start !important;
192
+ margin-top: $jv-space-6;
193
+ }
194
+ }
195
+
147
196
  // ===========================================================
148
197
  // LOGIN PAGE ONLY - Hide search bar
149
198
  // ===========================================================
package/scss/_forms.scss CHANGED
@@ -30,9 +30,11 @@ textarea,
30
30
  }
31
31
  }
32
32
 
33
- // Textarea specific
34
- textarea {
35
- border-radius: $jv-radius-md;
33
+ // Textarea specific - override pill shape for multi-line inputs
34
+ textarea,
35
+ textarea.form-control,
36
+ .form-control[type="textarea"] {
37
+ border-radius: $jv-radius-sm !important; // 8px rounded rectangle, not pill
36
38
  resize: vertical;
37
39
  min-height: 100px;
38
40
  }
@@ -128,3 +128,91 @@ $(document).ready(function() {
128
128
  });
129
129
  });
130
130
  </script>
131
+
132
+ <script>
133
+ // Embed videos on feed page - runs independently
134
+ (function() {
135
+ function embedFeedVideos() {
136
+ // Find all MP4 links in feed posts
137
+ var $links = $('a[href*=".mp4"]').not('.stretched-link');
138
+
139
+ $links.each(function() {
140
+ var $link = $(this);
141
+
142
+ // Avoid double-processing
143
+ if ($link.data('javisVideoEmbedded')) {
144
+ return;
145
+ }
146
+
147
+ var href = $link.attr('href');
148
+ if (!href || href.indexOf('.mp4') === -1) return;
149
+
150
+ // Normalise relative URLs
151
+ var src = href;
152
+ if (href.indexOf('http') !== 0) {
153
+ src = window.location.origin + href;
154
+ }
155
+
156
+ // Find the parent post content div and feed-content-section
157
+ var $contentDiv = $link.closest('[component="post/content"]');
158
+ var $feedContentSection = $link.closest('.feed-content-section');
159
+
160
+ // Remove the stretched-link overlay so video controls work
161
+ if ($contentDiv.length) {
162
+ $contentDiv.find('.stretched-link').remove();
163
+ $contentDiv.removeClass('position-relative');
164
+ }
165
+
166
+ // Create the inline video player
167
+ var $video = $('<video />', {
168
+ src: src,
169
+ controls: true,
170
+ preload: 'metadata',
171
+ class: 'javis-feed-video'
172
+ }).css({
173
+ width: '100%',
174
+ maxWidth: '100%',
175
+ borderRadius: '8px',
176
+ backgroundColor: '#000'
177
+ });
178
+
179
+ // Wrap video in a container
180
+ var $videoContainer = $('<div class="feed-video-section px-3 pb-3"></div>').append($video);
181
+
182
+ // Insert video container after the feed-content-section (outside of it)
183
+ if ($feedContentSection.length) {
184
+ $feedContentSection.after($videoContainer);
185
+ }
186
+
187
+ // Hide the link/paragraph containing the MP4 link
188
+ var $parent = $link.closest('p');
189
+ if ($parent.length) {
190
+ $parent.hide();
191
+ } else {
192
+ $link.hide();
193
+ }
194
+
195
+ $link.data('javisVideoEmbedded', true);
196
+ });
197
+ }
198
+
199
+ // Run when DOM is ready
200
+ if (document.readyState === 'loading') {
201
+ document.addEventListener('DOMContentLoaded', function() {
202
+ setTimeout(embedFeedVideos, 200);
203
+ });
204
+ } else {
205
+ setTimeout(embedFeedVideos, 200);
206
+ }
207
+
208
+ // Also run on ajaxify (SPA navigation)
209
+ $(window).on('action:ajaxify.end', function() {
210
+ setTimeout(embedFeedVideos, 200);
211
+ });
212
+
213
+ // Run when new posts are loaded (infinite scroll)
214
+ $(window).on('action:posts.loaded', function() {
215
+ setTimeout(embedFeedVideos, 200);
216
+ });
217
+ })();
218
+ </script>
@@ -46,11 +46,6 @@
46
46
  <i class="fa fa-fw fa-edit text-secondary"></i> <span>[[user:edit-profile]]</span>
47
47
  </a>
48
48
  </li>
49
- <li>
50
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings" role="menuitem">
51
- <i class="fa fa-fw fa-gear text-secondary"></i> <span>[[user:settings]]</span>
52
- </a>
53
- </li>
54
49
  {{{ if showModMenu }}}
55
50
  <li role="presentation" class="dropdown-divider"></li>
56
51
  <li><h6 class="dropdown-header text-xs">[[pages:moderator-tools]]</h6></li>