From 5bb00ddc7475b34ddc743dcf068b2561e41ffb2f Mon Sep 17 00:00:00 2001 From: Alanna Cao Date: Tue, 17 Sep 2024 16:02:07 -0400 Subject: [PATCH 01/18] Refactored public/src/client/account/blocks.js to remove deeply nested function --- public/src/client/account/blocks.js | 43 ++++++++++++++++------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/public/src/client/account/blocks.js b/public/src/client/account/blocks.js index 91b0745a19..7f38e6b28a 100644 --- a/public/src/client/account/blocks.js +++ b/public/src/client/account/blocks.js @@ -9,6 +9,7 @@ define('forum/account/blocks', [ const Blocks = {}; Blocks.init = function () { + console.log('ALANNA CAO'); header.init(); const blockListEl = $('[component="blocks/search/list"]'); const startTypingEl = blockListEl.find('[component="blocks/start-typing"]'); @@ -29,25 +30,7 @@ define('forum/account/blocks', [ searchBy: 'username', paginate: false, }, function (err, data) { - if (err) { - return alerts.error(err); - } - if (!data.users.length) { - noUsersEl.removeClass('hidden'); - return; - } - noUsersEl.addClass('hidden'); - // Only show first 10 matches - if (data.matchCount > 10) { - data.users.length = 10; - } - - app.parseAndTranslate('account/blocks', 'edit', { - edit: data.users, - }, function (html) { - blockListEl.find('[component="blocks/search/match"]').remove(); - html.insertAfter(noUsersEl); - }); + handleUserSearchResponse(err, data, blockListEl, noUsersEl); }); }, 200)); @@ -66,6 +49,28 @@ define('forum/account/blocks', [ }); }; + function handleUserSearchResponse(err, data, blockListEl, noUsersEl) { + if (err) { + return alerts.error(err); + } + if (!data.users.length) { + noUsersEl.removeClass('hidden'); + return; + } + noUsersEl.addClass('hidden'); + // Only show first 10 matches + if (data.matchCount > 10) { + data.users.length = 10; + } + + app.parseAndTranslate('account/blocks', 'edit', { + edit: data.users, + }, function (html) { + blockListEl.find('[component="blocks/search/match"]').remove(); + html.insertAfter(noUsersEl); + }); + } + async function performBlock(uid, action) { return socket.emit('user.toggleBlock', { blockeeUid: uid, From 3b7d956e53cdb292c07bc2b9d15ace10703b46ab Mon Sep 17 00:00:00 2001 From: Karen Gonzalez Date: Wed, 18 Sep 2024 21:23:18 -0400 Subject: [PATCH 02/18] Refactor code in src/controllers/mods.js --- dump.rdb | Bin 0 -> 54969 bytes src/controllers/mods.js | 68 +++++++++++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 dump.rdb diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..a895d674b44a23631adb565b81ff3a053669c18d GIT binary patch literal 54969 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 literal 0 HcmV?d00001 diff --git a/src/controllers/mods.js b/src/controllers/mods.js index 4976dd9e82..05a4178160 100644 --- a/src/controllers/mods.js +++ b/src/controllers/mods.js @@ -18,6 +18,27 @@ const helpers = require('./helpers'); const modsController = module.exports; modsController.flags = {}; +function adminModCid(isAdminOrGlobalMod, moderatedCidsLength) { + return (!isAdminOrGlobalMod && moderatedCidsLength); +} + +function filtersCidInitialize(filters, res) { + if (!filters.cid) { + // If mod and no cid filter, add filter for their modded categories + return res.locals.cids; + } else if (Array.isArray(filters.cid)) { + // Remove cids they do not moderate + return filters.cid.filter(cid => res.locals.cids.includes(String(cid))); + } else if (!res.locals.cids.includes(String(filters.cid))) { + return res.locals.cids; + } +} + +function paginationFilterCheck(filters) { + return (Object.keys(filters).length === 1 && filters.hasOwnProperty('page')) || + (Object.keys(filters).length === 2 && filters.hasOwnProperty('page') && filters.hasOwnProperty('perPage')); +} + modsController.flags.list = async function (req, res) { const validFilters = ['assignee', 'state', 'reporterId', 'type', 'targetUid', 'cid', 'quick', 'page', 'perPage']; const validSorts = ['newest', 'oldest', 'reports', 'upvotes', 'downvotes', 'replies']; @@ -31,13 +52,22 @@ modsController.flags.list = async function (req, res) { const [isAdminOrGlobalMod, moderatedCids,, { sorts }] = results; let [,, { filters }] = results; - if (!(isAdminOrGlobalMod || !!moderatedCids.length)) { + const AdminModeratedCidVal = adminModCid(isAdminOrGlobalMod, moderatedCids.length); + if ((!(isAdminOrGlobalMod || !!moderatedCids.length))) { + console.log('KAREN GONZALEZ'); return helpers.notAllowed(req, res); } - if (!isAdminOrGlobalMod && moderatedCids.length) { + if (AdminModeratedCidVal) { res.locals.cids = moderatedCids.map(cid => String(cid)); } + // if (!(isAdminOrGlobalMod || !!moderatedCids.length)) { + // return helpers.notAllowed(req, res); + // } + + // if (!isAdminOrGlobalMod && moderatedCids.length) { + // res.locals.cids = moderatedCids.map(cid => String(cid)); + // } // Parse query string params for filters, eliminate non-valid filters filters = filters.reduce((memo, cur) => { @@ -54,24 +84,34 @@ modsController.flags.list = async function (req, res) { let hasFilter = !!Object.keys(filters).length; + // if (res.locals.cids) { + // if (!filters.cid) { + // If mod and no cid filter, add filter for their modded categories + // filters.cid = res.locals.cids; + // } else if (Array.isArray(filters.cid)) { + // // Remove cids they do not moderate + // filters.cid = filters.cid.filter(cid => res.locals.cids.includes(String(cid))); + // } else if (!res.locals.cids.includes(String(filters.cid))) { + // filters.cid = res.locals.cids; + // hasFilter = false; + // } + // } if (res.locals.cids) { - if (!filters.cid) { - // If mod and no cid filter, add filter for their modded categories - filters.cid = res.locals.cids; - } else if (Array.isArray(filters.cid)) { - // Remove cids they do not moderate - filters.cid = filters.cid.filter(cid => res.locals.cids.includes(String(cid))); - } else if (!res.locals.cids.includes(String(filters.cid))) { - filters.cid = res.locals.cids; + filters.cid = filtersCidInitialize(filters, res); + if (!res.locals.cids.includes(String(filters.cid))) { hasFilter = false; } } + console.log('KAREN GONZALEZ'); // Pagination doesn't count as a filter - if ( - (Object.keys(filters).length === 1 && filters.hasOwnProperty('page')) || - (Object.keys(filters).length === 2 && filters.hasOwnProperty('page') && filters.hasOwnProperty('perPage')) - ) { + // if ( + // (Object.keys(filters).length === 1 && filters.hasOwnProperty('page')) || + // (Object.keys(filters).length === 2 && filters.hasOwnProperty('page') && filters.hasOwnProperty('perPage')) + // ) { + // hasFilter = false; + // } + if (paginationFilterCheck(filters)) { hasFilter = false; } From 85db3214e37f9ed88f702651de1cb257c8e05e86 Mon Sep 17 00:00:00 2001 From: sschauk Date: Thu, 19 Sep 2024 09:46:44 -0700 Subject: [PATCH 03/18] add changes from starter task sschauk --- public/src/admin/manage/categories.js | 80 +++++++++++++++------------ 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 7342d0c1de..78402944e2 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -199,50 +199,57 @@ define('admin/manage/categories', [ function itemDidAdd(e) { newCategoryId = e.to.dataset.cid; } - + // asked chatgpt to help find out what function does and give + // suggestions on what a coder can do to reduce cognitive complexity + // this functions updates information once the user finishes drag/drop function itemDragDidEnd(e) { + console.log('Console Logging Saanika Chauk'); const isCategoryUpdate = parseInt(newCategoryId, 10) !== -1; - - // Update needed? - if ((e.newIndex != null && parseInt(e.oldIndex, 10) !== parseInt(e.newIndex, 10)) || isCategoryUpdate) { + if (shouldUpdate(e, isCategoryUpdate)) { const cid = e.item.dataset.cid; - const modified = {}; - // on page 1 baseIndex is 0, on page n baseIndex is (n - 1) * ajaxify.data.categoriesPerPage - // this makes sure order is correct when drag & drop is used on pages > 1 - const baseIndex = (ajaxify.data.pagination.currentPage - 1) * ajaxify.data.categoriesPerPage; - modified[cid] = { - order: baseIndex + e.newIndex + 1, - }; - + const modified = createModObject(e, cid, isCategoryUpdate); if (isCategoryUpdate) { - modified[cid].parentCid = newCategoryId; - - // Show/hide expand buttons after drag completion - const oldParentCid = parseInt(e.from.getAttribute('data-cid'), 10); - const newParentCid = parseInt(e.to.getAttribute('data-cid'), 10); - if (oldParentCid !== newParentCid) { - const toggle = document.querySelector(`.categories li[data-cid="${newParentCid}"] .toggle`); - if (toggle) { - toggle.classList.toggle('invisible', false); - } - - const children = document.querySelectorAll(`.categories li[data-cid="${oldParentCid}"] ul[data-cid] li[data-cid]`); - if (!children.length) { - const toggle = document.querySelector(`.categories li[data-cid="${oldParentCid}"] .toggle`); - if (toggle) { - toggle.classList.toggle('invisible', true); - } - } - - e.item.dataset.parentCid = newParentCid; - } + handleCatUpdate(e); } - newCategoryId = -1; api.put('/categories/' + cid, modified[cid]).catch(alerts.error); } } - + function shouldUpdate(e, isCategoryUpdate) { + return (e.newIndex != null && parseInt(e.oldIndex, 10) !== parseInt(e.newIndex, 10)) || isCategoryUpdate; + } + function createModObject(e, cid, isCategoryUpdate) { + const baseIndex = (ajaxify.data.pagination.currentPage - 1) * ajaxify.data.categoriesPerPage; + const modified = {}; + modified[cid] = { + order: baseIndex + e.newIndex + 1, + }; + if (isCategoryUpdate) { + modified[cid].parentCid = newCategoryId; + } + return modified; + } + function handleCatUpdate(e) { + const oldParentCid = parseInt(e.from.getAttribute('data-cid'), 10); + const newParentCid = parseInt(e.to.getAttribute('data-cid'), 10); + if (oldParentCid !== newParentCid) { + toggleExpand(newParentCid, oldParentCid); + e.item.dataset.parentCid = newParentCid; + } + } + function toggleExpand(newParentCid, oldParentCid) { + const newToggle = document.querySelector(`.categories li[data-cid="${newParentCid}"] .toggle`); + if (newToggle) { + newToggle.classList.toggle('invisible', false); + } + const children = document.querySelectorAll(`.categories li[data-cid="${oldParentCid}"] ul[data-cid] li[data-cid]`); + if (!children.length) { + const oldToggle = document.querySelector(`.categories li[data-cid="${oldParentCid}"] .toggle`); + if (oldToggle) { + oldToggle.classList.toggle('invisible', true); + } + } + } /** * Render categories - recursively * @@ -253,6 +260,7 @@ define('admin/manage/categories', [ */ function renderList(categories, container, parentCategory) { // Translate category names if needed + console.log('rendering categories in list'); let count = 0; const parentId = parentCategory.cid; categories.forEach(function (category, idx, parent) { @@ -310,4 +318,4 @@ define('admin/manage/categories', [ } return Categories; -}); +}); \ No newline at end of file From 6b5555b593eec119504ac83a593f47da11ff8229 Mon Sep 17 00:00:00 2001 From: Dhanya Shah Date: Fri, 20 Sep 2024 16:12:39 -0400 Subject: [PATCH 04/18] Refactored Code in public/src/admin/extend/widgets.js --- public/src/admin/extend/widgets.js | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/public/src/admin/extend/widgets.js b/public/src/admin/extend/widgets.js index 1238ee772b..f8805779fc 100644 --- a/public/src/admin/extend/widgets.js +++ b/public/src/admin/extend/widgets.js @@ -253,11 +253,23 @@ define('admin/extend/widgets', [ }); } - function setupCloneButton() { - const clone = $('[component="clone"]'); + function clone(location, template) { + console.log('Dhanya Shah'); + const widgets = $('#active-widgets .tab-pane[data-template="' + template + '"] [data-location="' + location + '"] [data-widget]'); + widgets.each(function () { + const widget = $(this).clone(true); + appendClonedWidget(widget, location); + }); + } + function appendClonedWidget(widget, location) { + $('#active-widgets .active.tab-pane[data-template]:not([data-template="global"]) [data-location="' + location + '"] .widget-area').append(widget); + } + + function setupCloneButton() { // all correct + const cloneContainer = $('[component="clone"]'); const cloneBtn = $('[component="clone/button"]'); - clone.find('.dropdown-menu li').on('click', function () { + cloneContainer.find('.dropdown-menu li').on('click', function () { const template = $(this).find('a').text(); cloneBtn.translateHtml('[[admin/extend/widgets:clone-from]] ' + template + ''); cloneBtn.attr('data-template', template); @@ -281,18 +293,9 @@ define('admin/extend/widgets', [ return currentAreas.indexOf(location) !== -1 ? location : undefined; }).get().filter(function (i) { return i; }); - function clone(location) { - $('#active-widgets .tab-pane[data-template="' + template + '"] [data-location="' + location + '"]').each(function () { - $(this).find('[data-widget]').each(function () { - const widget = $(this).clone(true); - $('#active-widgets .active.tab-pane[data-template]:not([data-template="global"]) [data-location="' + location + '"] .widget-area').append(widget); - }); - }); - } - for (let i = 0, ii = areasToClone.length; i < ii; i++) { const location = areasToClone[i]; - clone(location); + clone(location, template); } alerts.success('[[admin/extend/widgets:alert.clone-success]]'); From a888d45abaa1002daa418a3171b5289658ad1285 Mon Sep 17 00:00:00 2001 From: Sofian Syed Date: Sat, 21 Sep 2024 00:36:42 -0400 Subject: [PATCH 05/18] Refactor public/src/client/account/info.js to address SonarCloud warning --- public/src/client/account/info.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/public/src/client/account/info.js b/public/src/client/account/info.js index f044860cd6..831961507d 100644 --- a/public/src/client/account/info.js +++ b/public/src/client/account/info.js @@ -10,6 +10,20 @@ define('forum/account/info', ['forum/account/header', 'alerts', 'forum/account/s sessions.prepareSessionRevocation(); }; + function prependModerationNote(html) { + $('[component="account/moderation-note/list"]').prepend(html); + html.find('.timeago').timeago(); + } + + function handleSetModerationNote(noteEl, err, notes) { + console.log('Refactor by Sofian Syed'); + if (err) { + return alerts.error(err); + } + noteEl.val(''); + app.parseAndTranslate('account/info', 'moderationNotes', { moderationNotes: notes }, prependModerationNote); + } + function handleModerationNote() { $('[component="account/save-moderation-note"]').on('click', function () { const noteEl = $('[component="account/moderation-note"]'); @@ -17,17 +31,7 @@ define('forum/account/info', ['forum/account/header', 'alerts', 'forum/account/s socket.emit('user.setModerationNote', { uid: ajaxify.data.uid, note: note, - }, function (err, notes) { - if (err) { - return alerts.error(err); - } - noteEl.val(''); - - app.parseAndTranslate('account/info', 'moderationNotes', { moderationNotes: notes }, function (html) { - $('[component="account/moderation-note/list"]').prepend(html); - html.find('.timeago').timeago(); - }); - }); + }, handleSetModerationNote.bind(null, noteEl)); }); From 0f4507582e8bf100c7a309afe0fbfc0f6750459a Mon Sep 17 00:00:00 2001 From: Karen Gonzalez Date: Sat, 21 Sep 2024 13:14:18 -0400 Subject: [PATCH 06/18] added tpl files to test instructor only viewing restriction --- dump.rdb | Bin 54969 -> 61420 bytes public/scss/global.scss | 8 +- public/src/client/topic/threadTools.js | 7 ++ public/src/modules/pinButton.js | 34 ++++++++ .../category/filter-dropdown-content.tpl | 39 +++++++++ .../category/selector-dropdown-content.tpl | 37 ++++++++ src/views/partials/category/sort.tpl | 38 +++++++++ .../category/tools-dropdown-content.tpl | 79 ++++++++++++++++++ .../partials/category/tools-dropdown-left.tpl | 5 ++ .../category/tools-dropdown-right.tpl | 5 ++ src/views/partials/category/watch.tpl | 60 +++++++++++++ src/views/partials/data/topic.tpl | 2 +- .../groups/filter-dropdown-content.tpl | 25 ++++++ .../partials/tags/filter-dropdown-content.tpl | 38 +++++++++ .../partials/tags/filter-dropdown-right.tpl | 2 +- src/views/partials/tags/watch.tpl | 40 +++++++++ .../users/filter-dropdown-content.tpl | 23 +++++ 17 files changed, 439 insertions(+), 3 deletions(-) create mode 100644 public/src/modules/pinButton.js create mode 100644 src/views/partials/category/filter-dropdown-content.tpl create mode 100644 src/views/partials/category/selector-dropdown-content.tpl create mode 100644 src/views/partials/category/sort.tpl create mode 100644 src/views/partials/category/tools-dropdown-content.tpl create mode 100644 src/views/partials/category/tools-dropdown-left.tpl create mode 100644 src/views/partials/category/tools-dropdown-right.tpl create mode 100644 src/views/partials/category/watch.tpl create mode 100644 src/views/partials/groups/filter-dropdown-content.tpl create mode 100644 src/views/partials/tags/filter-dropdown-content.tpl create mode 100644 src/views/partials/tags/watch.tpl create mode 100644 src/views/partials/users/filter-dropdown-content.tpl diff --git a/dump.rdb b/dump.rdb index a895d674b44a23631adb565b81ff3a053669c18d..7962d10cfe2ac37ce4fc66025a45fa11ee568e3f 100644 GIT binary patch delta 10060 zcmbVS4Rljwn!Y!`ZId=hp+B^R+yrW&ZD?+On~0beltBclARtiMo8+bqq)A9p0TmOd zzyP``uQQJS1%HmZDrj^D2N>&A$KA!jL0z3Q9*4Ly$DN&V$G@IEGmhGQzk6@e6ss(I zw4CJre&6?g@AE#-^X8>zKLN+mtERQqLb4P82}pAOGG zHy!57M>i-8+rq&IS%QG#*Q)Ed4weZ3>${L6$&%(WLnB1SO92SQXyKr`4vv~tp#MP){M(i)&@WcO#y{jAMB--`dSWn=$QzNbofST?S8%ckj7eUX@-i;VhWzCHRqc=>dg zt7}a&HEJb&Kv;|3T3VybSgEewTE%{{9KAJ~G9`WcU^KjSkYC!>t1qdL(FY>2zHqd+ zoN-a(dR<{LxjwR#t*!WA6}4AfGxhEb-SU0X5|xlId&QL#PK+D$f$)_CN!s^qQ|pG<|LeM~Yoz^D50Q|10t zcmNM_1M#x4H0~)Fzv&W~`E&*Rdu%3j-P{H5RkzVqEOON^zzN1w~alj4K7E zT4^7QW%du{Xbm0uEJtbN)OB;qbJT3v-M8vSG%{-F1Rj*(t`W}l&eP*L`m%e3gDq!- zgLO&+x#8r>Dsr^pZgsDQk}+*`+38`8uyTEg*kIh7-EKTf!$$KAqtS?CP>>|+FG{jg zm}J6;;B3kSBQKcXtEMw)eRV$k0WQV&#S&pYdC|K-uNK1Wb&UG%@I6%V5Wc>e5~8HQ zm@$~x^iY6N85Q(ClBQkZV2Og>lM1IIX2Z-rco3uGuG z(Y1SV59Py(xUxX|C5Ban05ooJ!gDV+g7t|Kc(#5v{Ng1OTsCjJ?JH%FzMiZY)tKay znCYSGmu&62k@akKb-Gyh;MT!4F)kL2b#<*>w3?0EI-23;9hX)(R>rV3j`g0mb3A}P$=XKaCWDMcR^2Kg2=vcHJUK*MXt)2UTzVd((QHMlS0388ZB+wC{#4rmC$EKyd`M2@GQQr-| zd#dljvDG3%?;jHL01FQ#B%Fri7ABQ~sln9C)KDr$L*IXOrcG5sk7Y1XduKC3s%A7) zDSpC)?5&|H@Dt`T-Zu@CG4xsHQfemNxApT(n@>Zxl%C1-$hr~OnsIZ@IJS6DF6AR2;F?*mPr;y_Lyn zW~f-**cFfcU6(7fD;&D9&0h@9p!Q~#E7W6ybzkN*Ewo*iqi2-d73cbR68MpuRgTKB z*uoqCsPFaXN*WaQ%CX&tbGim4TRHYW4c}xu%DqBiV0O!2XxUShD_=(2DsyxLwLeGg zQIw6zvv*`zh%D)^Fm073!zr_x(&eZbG+eXvJxsI%Bodi&qlN~@Rhgw)v9O5+U~=v6 zI}et`+D~v=to;v3wI6d7Yd^o z0+mQ5kx;2uWh`KlT*M?^b+-gb3>S^Y1`W{wKY(?i3IPi7>Bn}&rS6vhe}=>nM%+Jo7`SB> z{C@Rb+CerIvaAYtd`)-D1R)Cab14D8WvT+_DJD1;*!9*tn7{Tj`09BrJlvh0E0jJd z%>xM@i@>)N9NAYhn6@>+u`P9Q=bkD!x1}0RZh9PMZL$K_6LuK%g*`2DvZNH8$#pQ# zjpX^Xka%JP=vNR*R1KG|&_MSOrb7(#rMq_*&eOCGk(mp??|a>_th63K8{pWQnGk=} z1&6pt>$S*CF=b-WNI04wI#xbHo#2&_=Sl(mZ30wWXu}XPL%5g#D>oo_%yStz4GZ6J zgQc&tQ(xeo!h0_k$q0worJkUe_w}EJ`y%xVN85diszq)*mMJ@3V8(<_jv#43Hi1B+ zWNKtBXY}|$$FzoK^+o=!@rgx0cJx>jPc|!{y-0;UPy+|3IzALW4L@%QR z%BY+~8I=>1aX+Dq4Eaak8F{KGk^;gB^pH_ELf7_xIO*nxx{FwV=h|!6FY_m@OZ`j2 zSFKsJeaVu|{cHQLS+Om=V{LG7%c9XvW9JpM$OLAj8H19wSv@YRk21EJ`R(y=f=`;g zW}DUKu&`E()w!B=d7VfVJoD=uF8g{c)BUMbd}TDU!|Y8Z2KiQVoJ;jHEY-%;sgm3P zzbc$!uG5>Z=C+%6wweRUL}+zv3m;`FjYusxrzhxacd>T6Kfu}8G|#a?o8Q5D*kI7_ zHoE*CtBdFPK)cOpb8sQ2(_>{h-tTgTT*y#ZV~}+^9IlXybK9+aAQ%W(+e2=a4|*Ja zzuW0|%l3YIY7AC@14KEvFpJ-{c`= zAf{^SCZVr%{(F-91JrL7|mSJ z$+<#q-r^400v3mzvspOgRTf*wV`Du*g~N?RiLt1H2!F_NObOq=GHJTq!+dEvt&T^y zR4A4hV6H0Zh{q#5vz!YsZE}Aiwyk$aVP4dqh%s(;tN8}Rp>T{lOxqmHtqk2!`g3OQ zhq4xW=T5k4$2(0DxQJD;h>N1cC=?EYv%BgWVbhHtUn6a3$D|ES`1FJZLOz|>K>JC_ zV#q&}Hguk%A<3;LtjH#j2zyHlW{C=!8d4acW+7%4v@3GE4C0J%TnW$Bn&I_Wiy)iM z-sH#*-)y2ACB-B_<)pGvJRNv>=XN-^S_3CutcPr-w?U)B8<13nVv$H}8?ILw@*av% zY?^|VLz`jM?ysSJcbyC|O;q9rczQDdd$&)Y2dfm<_y3S6&B6oo68z3RzxjcoRG^MT z7fhxn=c}ggrzfS^p1qgSGW}eHwz=7!AO233S@>p+3Q9XPaPX~J(EDZ&gbwdnrLWJ&g$oEm ztSz31g~Ab@l*UoVLgPY=u7dipbkxH6V}q#y-s0ymr}&!P8)V(`ALZ2bN-l)Tpqi

S0dN*hFV<#1c)XT2 zPjHL#gC%6qIMTaa>O8%xfghQ5+4xg2I-Mt}&TmO)QoAOkGuj<_>8#At)Nd(g=eLz} zp`uO2NwtB7?~~4uyWEVX$<1*5nM>*U!fw7griIs@{sKOK=3Ob7?NcZ7zdZZ!90Bnh zUP%W`sP7`_SPB)#s?j;w=Q~<0IVY3o4{9|+f4)nmwGkTywO9$#p`jC^JR{0&3000# z3<*+?Ak&CoLs3?cYfFe+Ys<^EC0fdeSGSzWY>@@&?8CPg1Sue?bqu3f`x0 zj|ppLlh%w>iHVJMJ}ikF%TOV%FR>_)g(dBFObQt_d?B7<8v6rMTm`#z2S8C$1y+u6P^ry^lZOAABa~Wc{F6#;(a53axcSh^Iq=x=DmdC-1D5IU(X+D3 zs<+UZtlgSrYYg-pQQnABNHk=1Isuz;{|SaH0jX<-W~2VBfhT6X26e`{@W{-+YSAzj zrM+Aug9m5rOe-q#m@gXAstK`KWV#0v26AoUs(VWq!H=3CM1~19zRRQR2ShzB=F}g9eAQ|VP3%dxF z;DbuWzk^x8_=Rxnz1XXk=8ZsCHq-gHiWFsIKjt8@C0wymu%oa!I+&kw`~+A^C)RI0uN z7w=EDF|U=R5@9SR=-e>7=>_2&^-)QPV?vw->1n1`-WFcSa9CZLT;<>Bg^O~sHN8&8 zms7k;FKF9!gj#6&gA8kn>32-Jgi7V;5?Lz3XQugvxwkVFRFe6NJhhlh4bPPE(cp+y zwsU89k)YT56I?Vn(es#)r$XJoIC*O9mJ5b{K?4i?NCGMJaKV(A3!nDPgxgGKVeN2Z z_NcjBiOvkMBG5L>e$xCqns&mjtrK4ALW>FWqv_CbQpkz(&O*g575w4y`(gM621bsV zU}?u0w?V)~tgh$dB2o~kiU>@zctF?)faf~zk|Aa8C~byi>uS)NsE3{F^l)O&W7*S- zE3vwU=7ge_4 z4()UjFPjk24kS}nP7R;@v`4*TTJ~tLJ;(<9?S6}cb$cuht95$7!UfoNi#y=Ahx{mG zQHeH=8#H2sgz#UW8bpQge3zGq+_+p~*eD{pPwSvbO6@be36HNxKvU zzdK(`NE*tEkZ~$&4u+3mK44eou?=s+u@^PjP3u*(OjK>@y!AWk+j>DG8*7T_V#}G? zqKmE0yVw#>B5fqpdPtWvXebd6dp4yNeeDrEgWPBdRVOl{9$5o=b=lNLhTi;Ly-!=- zTPhM3<02b!6f>w|+DF2GeA+o>#?K*2wb46(?Y;gY7ysMMg>$m(%l>LXdtqY^+B)j8 z?ZKGL`qc}sP+cUsrOr)!+uA^UZRg^_727(T%dD&WIM2G3tN9iFYu7DW%?ZS8R?tSDAN0tnW{B zlRyUIx0b?nXEtO%2|q3Cn8clmdZJ39Cn}s}zfFsalyi3Fz#Mv(Kte@pR$AiXC4{X} zGZ;>IkS;8OMR7yj1XDa;g21U;FM*t2EyD0Bp&@<0Y@#83o2ed~(R%oq$(TKsxP@LS z3{heV0zeg*f@sbaP+7{$skuFAtdY2gjkQvU-*74Xa$Eo0LRVPm7fZgM9M^{QjL902 zp0JEAfmtClmWVR=X{HIfvTko(fp(CNXRg!}qa zD)LeCKJr<_j<&h0-MBeQCbwyc6@p@exFG1T$}u4XuT@rt88Fc#kHs&psN(DOtwKe} zzJ7~=M&G>&dJbYYNGHq*lqJ*QztayFgrIHIcfaqcil=aVQV*3#+X*3v(l##yWwg*k zp(>-Y3i zOD0PLY!s66LR$5oG>anW$GeWe^j&j+ewQWe6(Cv#zaAR8Mp2oMn25Ij7a*MM!WU%^ z*&%Rz-{tb3W&abt+{cz~!kQzLaJXjuTwK(@!pry8X|QCEN+lav@w|My{;}hvUH|+H z5qPj0d_L8HlMlX!P2>Z<5wVB$;6rJd9{VK%n=v9R>tNFpMmYBHrUSalYvCJ3Gkp5<8uOUi~P0`s6fPeiA=?cxqv}FbebOd&wCbp%-G$7-9PZEztSKa^X#f-k2*~ zbLx%N!gsx*NqFMti-VKysjY1R%b6kaU@%pR&(Xe_6=ohj>=R}_JhvRq9G(e_e{;WZ zovvKG?$Wc5$WP#XAD(^hJ7y)kI`@`1B3XnJeLUc zdnGTsY3$?(OC8SX*^+QyluHdJcyo?!rJl^`S`CBoNQ?^#+3O7tU}w8IM?0uTayo}1 z5({t&1BRSo{-qzmzQ2WkxWc=CqI~rP84^ySM6SQwOBi1bwCbxCXG!VIS XHQe@Y-L#1?j&Ip4>pJt3J8u79f*^*g delta 4013 zcmaJ^c~}!?9?mzBkekF1p#;egv>*Zji-L$6Q0ul{RP7!fH6siVg@h(SJOS4#6|9xM zJv|DjkKKAzoyA?ZS`lhn>na}TZtFfZPgh&(-F?{Ir|qunHFG?-v%i9ZHPnLbFg8I3-2>9dC^W8$!;`h+u&d@dY;QLsCTs)#k!OY5t4Hy)!Elykpgf-?BXFX@ ziq1_M>@QX0+!^sp7GbgPtR?Da;u2C6W`fJBFKK0@zQW`4*Xqm~845m(#OdEIW(@Yw zWCq{B^u56j# zRp`s%y>_m$=UvA7 z`KA8UB37^Qa(8HJ7Ye}vvAiJh4 z=GbB`l@hKtT5flZV>wem#s&udi;SBPV1DTw$vOf|7s<7+-YOf%eMz(SyZmKl-j-u) z);nJ2IvfLSO0r7LGP3!&vEeQ(c9mSNA^7}-RcPCglx~dfhe;4mOI$ve7{ZUCLR)DQ zfh_zY;s}9mhZd)giu6<9T+U#en_@=W5e2l3hrt-5O+Urn)uoBpctj!GX$%j;(-W=I zW~cEh#yC;}MBCAJ_>2CeM)eAP=d7U!&EFc zCE%Tcc;WLwo`HknJ^pqLN6oGMQQxCwrX=<$WdPtBf&dy9UjT$91Z;l|q zAu}?Q>u_Vsi;OW_5&_SQOnR~nc7+DVX2wW)>PPqHX~5{w8sYxdz2wn|plXQ-Uf|`q zqW4TYNYwS|f4gu$f+CgCpfU4mQoj z<7p2GlQkqvW9(%lTZ%}`a+}F!)rOJ~6{olTRIE!v8Q{Ksy72erXo42Cl{Vt4&8Q9% z_h-bq#}K4>dXox=r^L{3%sAIN2#ZrRP)vn3SJh9jz4f7|*Tr^l!Z>7JJ_ zhmbUF^sWYJr7{pj;BoMfYs zs`1UpnbZnI!Om*Zi&TLxw*hNPtQ#x@4`28=Sd2F;YWnIvih5P#tF)_V(5NYuJ zI^pQp(ePb=Otd>x9=ZXOP9%TOxUAq30>J(^v4N!IF?0HLWm!NSCkQOzW2VQs2#_f7^4Vps=uL|Mdees5ABuoHnjz5uhH2}t%vKx zb{yCehKo;8sVI0rXwD4@G~Y>JlOyqm_BF7#`xrXuNFh>III`1dpGF}~p%sqJ45wN$ zJBP#>Rnm|mPHX-B@1rytI>yVdh3~+bjtu3H;Z#?trr`d5TgZ+q!t+meF!XK_3125x)t4JFimwx<{CbWSgHOgNs4`M*hw-)vIf~x$sqtO$Vvsr(&Q2Z1>!L9JLM*bD zQ?6Yw;^fIj;V3_l#6(a-rvsT7WTB_h?eA+D5muMb$?4e-E~)7x>1eCf1?9TNYE*}0 zh?1*6r(R5}gtH%7=%h4Ki;bl#1luA#q0JT>+bbTuh@1tE&a$F7h;n5(HVUtny}?M{ zB=SLg&4otbKBo$sP5Jt$REq5JW~46<$Aj`#@dDw>DGedRLS)k5Gxs;Rvo1X1A=^;( zP~i)|m(ho#o_~|Zu^5-Pf4`gDaAfd&gMRYgF(!7Ti$Vh&-A508bC;q{e? z@-O7+ZtqIQkQN%R4Vdk_hnwCpnCQPGq3_AcdYX)AyZ!ULpP2CVRMWs8sf-?ZXBROB zO3qVBsGb-_<+c-h&ra(dMMR*UF$aN~xU>Z^*;=F@w}^Tnly_DU;iIMT3LLp5QxZ@NtvZ}87lCpfFP(S6aIrzY&-^j+JbCoroZrX~ z(BEUa=E(QczprjbJi$eqJ;O0}qz2X3^HqKKW6uDawBzpe*$=&SUW=EM&G$vo56(yyeL%YW;9c?D z3sNQaFLKaIM5CrE8I@mck?*GWDwM%{%Wm$Fo_k7y&x>zW|DOsOZ%>oz$lZ=5l+w3{ z>F8N>tV$xPw*wK0xOzLPW>+90)8OMdZ((Upp~vl~o}bvgr>$7FGcYJ4Od{^k0I|zj z0tUO%RpRFSm0sQ!AStpPfryj=Wu8K=j13Dbak+-c7}A=L$^Bf3FJMWNi!g3^ zni^bg)WtL-ak4;?JT23|Fp Var|D4ssBUIww|o^?H@m7{vRZS!E*or diff --git a/public/scss/global.scss b/public/scss/global.scss index ab7d569242..24931d29b6 100644 --- a/public/scss/global.scss +++ b/public/scss/global.scss @@ -36,4 +36,10 @@ html[data-dir="rtl"] { h5 { font-size: 1.125rem; } h6 { font-size: 1rem; } } -} \ No newline at end of file +} +.btn-link { + &:hover, &.active { + background-color: var(--btn-ghost-hover-color); + text-decoration: none; + } +} diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index a66b293a73..7ec13770ab 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -146,6 +146,13 @@ define('forum/topic/threadTools', [ changeWatching('ignore'); }); + // CHATGPT SUGGESTED CODE TESTING AQUI + // require(['pinButton'], function (PinButton) { + // PinButton.init(function () { + // console.log('Button state changed'); + // }); + // }); + function changeWatching(type, state = 1) { const method = state ? 'put' : 'del'; api[method](`/topics/${tid}/${type}`, {}, () => { diff --git a/public/src/modules/pinButton.js b/public/src/modules/pinButton.js new file mode 100644 index 0000000000..9fdeaa5cfd --- /dev/null +++ b/public/src/modules/pinButton.js @@ -0,0 +1,34 @@ +// 'use strict'; +// // ALL CODE IN FILE WRITTEN BY CHATGPT +// define('pinButton', ['components'], function (components) { +// const PinButton = {}; + +// let pinButtonContainer; + +// // Initialize the button component +// PinButton.init = function (onPin) { +// pinButtonContainer = $('[component="pin/button"]'); + +// // Prevent text selection when clicking the button +// pinButtonContainer.on('selectstart', function (ev) { +// ev.preventDefault(); +// }); + +// // Handle button click +// pinButtonContainer.on('click', function (ev) { +// const buttonEl = $(this); +// togglePin(buttonEl); +// if (typeof onPin === 'function') { +// onPin(); +// } +// }); +// }; + +// function togglePin(buttonEl) { +// const isPinned = buttonEl.hasClass('pinned'); +// buttonEl.toggleClass('pinned', !isPinned); +// buttonEl.text(isPinned ? 'Pin' : 'Unpin'); // Change button text based on state +// } + +// return PinButton; +// }); diff --git a/src/views/partials/category/filter-dropdown-content.tpl b/src/views/partials/category/filter-dropdown-content.tpl new file mode 100644 index 0000000000..3b33b9ace0 --- /dev/null +++ b/src/views/partials/category/filter-dropdown-content.tpl @@ -0,0 +1,39 @@ + +

+ diff --git a/src/views/partials/category/selector-dropdown-content.tpl b/src/views/partials/category/selector-dropdown-content.tpl new file mode 100644 index 0000000000..96a4ed0017 --- /dev/null +++ b/src/views/partials/category/selector-dropdown-content.tpl @@ -0,0 +1,37 @@ + + + diff --git a/src/views/partials/category/sort.tpl b/src/views/partials/category/sort.tpl new file mode 100644 index 0000000000..ec1730edf8 --- /dev/null +++ b/src/views/partials/category/sort.tpl @@ -0,0 +1,38 @@ + diff --git a/src/views/partials/category/tools-dropdown-content.tpl b/src/views/partials/category/tools-dropdown-content.tpl new file mode 100644 index 0000000000..c1277682e9 --- /dev/null +++ b/src/views/partials/category/tools-dropdown-content.tpl @@ -0,0 +1,79 @@ + + diff --git a/src/views/partials/category/tools-dropdown-left.tpl b/src/views/partials/category/tools-dropdown-left.tpl new file mode 100644 index 0000000000..e7adfc32ca --- /dev/null +++ b/src/views/partials/category/tools-dropdown-left.tpl @@ -0,0 +1,5 @@ +{{{ if showTopicTools }}} + +{{{ end }}} diff --git a/src/views/partials/category/tools-dropdown-right.tpl b/src/views/partials/category/tools-dropdown-right.tpl new file mode 100644 index 0000000000..ed48f816b7 --- /dev/null +++ b/src/views/partials/category/tools-dropdown-right.tpl @@ -0,0 +1,5 @@ +{{{ if showTopicTools }}} + +{{{ end }}} diff --git a/src/views/partials/category/watch.tpl b/src/views/partials/category/watch.tpl new file mode 100644 index 0000000000..32f7a59b83 --- /dev/null +++ b/src/views/partials/category/watch.tpl @@ -0,0 +1,60 @@ +{{{ if config.loggedIn }}} + +{{{ end }}} diff --git a/src/views/partials/data/topic.tpl b/src/views/partials/data/topic.tpl index 846d17eb40..ff72ba0373 100644 --- a/src/views/partials/data/topic.tpl +++ b/src/views/partials/data/topic.tpl @@ -1 +1 @@ -data-index="{posts.index}" data-pid="{posts.pid}" data-uid="{posts.uid}" data-timestamp="{posts.timestamp}" data-username="{posts.user.username}" data-userslug="{posts.user.userslug}"{{{ if posts.allowDupe }}} data-allow-dupe="1"{{{ end }}}{{{ if posts.navigatorIgnore }}} data-navigator-ignore="1"{{{ end }}} itemprop="comment" itemtype="http://schema.org/Comment" itemscope \ No newline at end of file +data-index="{posts.index}" data-pid="{posts.pid}" data-uid="{posts.uid}" data-timestamp="{posts.timestamp}" data-username="{posts.user.username}" data-userslug="{posts.user.userslug}"{{{ if posts.allowDupe }}} data-allow-dupe="1"{{{ end }}}{{{ if posts.navigatorIgnore }}} data-navigator-ignore="1"{{{ end }}} itemprop="comment" itemtype="http://schema.org/Comment" itemscope diff --git a/src/views/partials/groups/filter-dropdown-content.tpl b/src/views/partials/groups/filter-dropdown-content.tpl new file mode 100644 index 0000000000..a44d9a0730 --- /dev/null +++ b/src/views/partials/groups/filter-dropdown-content.tpl @@ -0,0 +1,25 @@ + diff --git a/src/views/partials/tags/filter-dropdown-content.tpl b/src/views/partials/tags/filter-dropdown-content.tpl new file mode 100644 index 0000000000..a792269157 --- /dev/null +++ b/src/views/partials/tags/filter-dropdown-content.tpl @@ -0,0 +1,38 @@ + + + diff --git a/src/views/partials/tags/filter-dropdown-right.tpl b/src/views/partials/tags/filter-dropdown-right.tpl index daed15f46c..0d30e0e2b6 100644 --- a/src/views/partials/tags/filter-dropdown-right.tpl +++ b/src/views/partials/tags/filter-dropdown-right.tpl @@ -1,3 +1,3 @@ -