Skip to content

Commit

Permalink
feat: added tags of color in add url
Browse files Browse the repository at this point in the history
  • Loading branch information
puni9869 committed Nov 8, 2024
1 parent b18126d commit 08003d0
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 82 deletions.
15 changes: 9 additions & 6 deletions frontend/common/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
export function RedirectToLogin() {
window.location = '/logout';
window.location = '/logout';
}

export function CloseModal(modalId, toClose) {
const m = document.querySelector(modalId);
m.addEventListener('click', () => {
toClose.classList.toggle('hidden');
});
export function RefreshPage(path = '') {
window.location = path;
}

export function CloseModal(modalId, toClose) {
const m = document.querySelector(modalId);
m.addEventListener('click', () => {
toClose.classList.toggle('hidden');
});
}
33 changes: 33 additions & 0 deletions frontend/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,36 @@ body {
.dropdown:hover .dropdown-content {
display: flex;
}

.colors ul {
list-style: none;
padding: 0;
margin: 0;
}

.colors li {
margin: 0 10px 0 0;
display: inline-block;
}

.colors label {
cursor: pointer;
}

.colors input {
display: none;
}

.colors input[type="radio"]:checked + .swatch {
box-shadow: inset 0 0 0 3px azure;
}

.swatch {
display: inline-block;
vertical-align: middle;
border-radius: 50%;
height: 20px;
width: 20px;
margin: 0 3px 0 0;
border: 1px solid #2f2424;
}
148 changes: 79 additions & 69 deletions frontend/home/index.js
Original file line number Diff line number Diff line change
@@ -1,86 +1,96 @@
import { CloseModal } from '../common/index.js';
import {CloseModal, RefreshPage} from '../common/index.js';

const navUrl = {
'/': 'home',
'/home': 'home',
'/archived': 'archived',
'/favourite': 'favourite',
'/setting': 'setting',
'/trash': 'trash',
'/login': 'login'
'/': 'home',
'/home': 'home',
'/archived': 'archived',
'/favourite': 'favourite',
'/setting': 'setting',
'/trash': 'trash',
'/login': 'login'
};

export function NavItemSelected() {
if (!navUrl[window.location.pathname]) {
return;
}
if (!navUrl[window.location.pathname]) {
return;
}

const selector = window.location.pathname === '/'
? document.querySelector('[data-home]')
: document.querySelector(`[data-${navUrl[window.location.pathname]}]`);
if (!selector) {
return;
}
selector.classList.add('text-indigo-500');
selector.querySelector('svg').classList.add('text-indigo-500');
console.info('NavBar loaded...', navUrl[window.location.pathname]);
console.info('NavBar selected item ', selector);
const selector = window.location.pathname === '/'
? document.querySelector('[data-home]')
: document.querySelector(`[data-${navUrl[window.location.pathname]}]`);
if (!selector) {
return;
}
selector.classList.add('text-indigo-500');
selector.querySelector('svg').classList.add('text-indigo-500');
console.info('NavBar loaded...', navUrl[window.location.pathname]);
console.info('NavBar selected item ', selector);
}

export function SideNavCollapse() {
const sideNav = document.querySelector('#side-navbar');
const sideNavOpener = document.querySelector('#nav-bar-open');
if (!sideNav || !sideNavOpener) {
return;
}
sideNavOpener.addEventListener('click', (e) => {
sideNav.classList.toggle('hidden');
sideNavOpener.classList.toggle('text-indigo-500');
});
const sideNav = document.querySelector('#side-navbar');
const sideNavOpener = document.querySelector('#nav-bar-open');
if (!sideNav || !sideNavOpener) {
return;
}
sideNavOpener.addEventListener('click', (e) => {
sideNav.classList.toggle('hidden');
sideNavOpener.classList.toggle('text-indigo-500');
});
}

export function AddNewWebLinkInit() {
const link = document.querySelector('#add-weblink');
const linkModal = document.querySelector('#add-weblink-modal');
const saveBtn = document.querySelector('#add-link-btn');
if (!link || !linkModal || !saveBtn) {
return;
}
link.addEventListener('click', async () => {
linkModal.classList.toggle('hidden');
});
saveBtn.addEventListener('click', async () => {
let url = document.querySelector('#add-weblink-input-box');
if (!url || url?.value.trim().length === 0) {
return;
}
await AddNewLink(url?.value.trim());
linkModal.classList.toggle('hidden');
url.value = '';
});
const link = document.querySelector('#add-weblink');
const linkModal = document.querySelector('#add-weblink-modal');
const saveBtn = document.querySelector('#add-link-btn');
if (!link || !linkModal || !saveBtn) {
return;
}
const tags = document.querySelectorAll("#tag");
let selectedTag;
link.addEventListener('click', async () => {
linkModal.classList.toggle('hidden');
if (tags.length) {
tags.forEach((tag) => {
tag.addEventListener('change', (e) => {
selectedTag = e.target.value;
});
});
}
});
saveBtn.addEventListener('click', async () => {
let url = document.querySelector('#add-weblink-input-box');
if (!url || url?.value.trim().length === 0) {
return;
}
await AddNewLink(url?.value.trim(), selectedTag ? selectedTag : 'black');
linkModal.classList.toggle('hidden');
url.value = '';
});

CloseModal('#close-modal', linkModal);
CloseModal('#close-modal', linkModal);
}

async function AddNewLink(webLink) {
const url = '/new';
try {
const headers = new Headers();
headers.append('Content-Type', 'application/json');
async function AddNewLink(webLink, selectedTag) {
const url = '/new';
try {
const headers = new Headers();
headers.append('Content-Type', 'application/json');

const response = await fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify({ url: webLink })
});
if (!response.ok) {
throw new Error(`Response status: ${response.status}`);
}
const resp = await response.json();
if (resp?.Status === "OK") {
console.info(resp?.Message);
}
} catch (error) {
console.error(error.message);
}
const response = await fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify({url: webLink, tag: selectedTag})
});
if (!response.ok) {
throw new Error(`Response status: ${response.status}`);
}
const resp = await response.json();
if (resp?.Status === "OK") {
console.info(resp?.Message);
RefreshPage();
}
} catch (error) {
console.error(error.message);
}
}
12 changes: 9 additions & 3 deletions server/home/home.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,15 @@ import (

func AddWeblink(c *gin.Context) {
log := logger.NewLogger()
webLink := c.Request.PostForm.Get("url")
log.Info("Requested to add " + webLink)
c.JSON(http.StatusCreated, gin.H{"Status": "OK", "Message": "Weblink Added." + webLink})

var requestBody struct {
Url string `json:"url"`
Tag string `json:"tag"`
}
// Handle the error for url validation
_ = c.ShouldBindJSON(&requestBody)
log.Info("Requested to add %s in tag: %s ", requestBody.Url, requestBody.Tag)
c.JSON(http.StatusCreated, gin.H{"Status": "OK", "Message": "Weblink Added."})
}

func Home(c *gin.Context) {
Expand Down
42 changes: 38 additions & 4 deletions templates/widget/add_link.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,44 @@

<!-- Input Box -->
<input autofocus type="text" id="add-weblink-input-box" placeholder="Enter link" class="w-full p-1 border rounded mb-3 focus:outline-none focus:ring-2 focus:ring-indigo-500">

<!-- Add Link Button -->
<div class="flex justify-end">
<button class="bg-blue-500 text-white text-sm px-4 py-2 rounded hover:bg-blue-600" id="add-link-btn">Add Link</button>
<div class="flex select-none">
<div class="colors flex items-center" id="tags">
<ul>
<li>
<label>
<input type="radio" name="tag" value="black" id="tag"/>
<span class="swatch" style="background-color: #222;"></span>
</label>
</li>
<li>
<label>
<input type="radio" name="tag" value="yellow" id="tag"/>
<span class="swatch" style="background-color: #ffde21;"></span>
</label>
</li>
<li>
<label>
<input type="radio" name="tag" value="red" id="tag"/>
<span class="swatch" style="background-color: #ffa896;"></span>
</label>
</li>
<li>
<label>
<input type="radio" name="tag" value="blue" id="tag"/>
<span class="swatch" style="background-color: #6e8cd5;"></span>
</label>
</li>
<li>
<label>
<input type="radio" name="tag" value="green" id="tag"/>
<span class="swatch" style="background-color: #44c28d;"></span>
</label>
</li>
</ul>
</div>
<div class="flex flex-1 justify-end">
<button class="bg-blue-500 text-white text-sm px-4 py-2 rounded hover:bg-blue-600" id="add-link-btn">Add Link</button>
</div>
</div>
</div>
</div>
Expand Down

0 comments on commit 08003d0

Please sign in to comment.