Initial commit of MyWorkspace - contains multiple projects and global workspace configuration
This commit is contained in:
132
Linkding Browser Extension/LinkdingSync/utils/bookmark.js
Normal file
132
Linkding Browser Extension/LinkdingSync/utils/bookmark.js
Normal file
@@ -0,0 +1,132 @@
|
||||
// Bookmark Manipulation Utilities
|
||||
// Handles bookmark operations for synchronization
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
const BookmarkUtils = {
|
||||
|
||||
// Parse structured notes from Linkding bookmark
|
||||
parseNotes(noteString) {
|
||||
if (!noteString || typeof noteString !== 'string') {
|
||||
return {
|
||||
path: '',
|
||||
userNotes: '',
|
||||
autoTags: []
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(noteString);
|
||||
} catch (e) {
|
||||
// If JSON parsing fails, treat as plain notes
|
||||
return {
|
||||
path: '',
|
||||
userNotes: noteString,
|
||||
autoTags: []
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
// Build structured notes object
|
||||
buildNotes(path, userNotes, autoTags) {
|
||||
return {
|
||||
path: path || '',
|
||||
userNotes: userNotes || '',
|
||||
autoTags: autoTags || []
|
||||
};
|
||||
},
|
||||
|
||||
// Format notes for storage (always as JSON string)
|
||||
formatNotes(notesObject) {
|
||||
return JSON.stringify(notesObject);
|
||||
},
|
||||
|
||||
// Extract folder path from bookmark
|
||||
extractPath(bookmark) {
|
||||
const notes = this.parseNotes(bookmark.notes || '');
|
||||
return notes.path || '';
|
||||
},
|
||||
|
||||
// Get display notes (userNotes only)
|
||||
getDisplayNotes(bookmark) {
|
||||
const notes = this.parseNotes(bookmark.notes || '');
|
||||
return notes.userNotes || '';
|
||||
},
|
||||
|
||||
// Get auto-generated tags
|
||||
getAutoTags(bookmark) {
|
||||
const notes = this.parseNotes(bookmark.notes || '');
|
||||
return notes.autoTags || [];
|
||||
},
|
||||
|
||||
// Create bookmark for Linkding API
|
||||
createBookmarkData(url, title, description, notes, folder) {
|
||||
return {
|
||||
url: url,
|
||||
title: title || '',
|
||||
description: description || '',
|
||||
notes: this.formatNotes(this.buildNotes(folder || '', notes || '')),
|
||||
unread: false,
|
||||
shared: false,
|
||||
tag_names: []
|
||||
};
|
||||
},
|
||||
|
||||
// Update bookmark for Linkding API
|
||||
updateBookmarkData(bookmarkId, title, description, notes, folder) {
|
||||
return {
|
||||
id: bookmarkId,
|
||||
title: title || '',
|
||||
description: description || '',
|
||||
notes: this.formatNotes(this.buildNotes(folder || '', notes || '')),
|
||||
unread: false,
|
||||
shared: false
|
||||
};
|
||||
},
|
||||
|
||||
// Check if bookmark exists by URL
|
||||
async checkExistingBookmark(url) {
|
||||
const response = await fetch(`${window.linkdingSyncBaseURL}api/bookmarks/check/?url=${encodeURIComponent(url)}`, {
|
||||
headers: {
|
||||
'Authorization': `Token ${window.linkdingSyncApiKey}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return await response.json();
|
||||
},
|
||||
|
||||
// Merge bookmark data from browser and Linkding
|
||||
mergeBookmarks(browserBookmark, linkdingBookmark) {
|
||||
if (!linkdingBookmark) {
|
||||
return browserBookmark;
|
||||
}
|
||||
|
||||
// Keep browser's path, merge notes
|
||||
const browserNotes = this.parseNotes(browserBookmark.notes || '');
|
||||
const linkdingNotes = this.parseNotes(linkdingBookmark.notes || '');
|
||||
|
||||
// Use browser notes as primary
|
||||
const mergedNotes = {
|
||||
path: browserNotes.path || linkdingNotes.path || '',
|
||||
userNotes: browserNotes.userNotes || linkdingNotes.userNotes || '',
|
||||
autoTags: browserNotes.autoTags || linkdingNotes.autoTags || []
|
||||
};
|
||||
|
||||
return {
|
||||
...linkdingBookmark,
|
||||
notes: this.formatNotes(mergedNotes),
|
||||
title: browserBookmark.title || linkdingBookmark.title,
|
||||
description: browserBookmark.description || linkdingBookmark.description
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
// Export for use in other scripts
|
||||
window.BookmarkUtils = BookmarkUtils;
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user