mirror of
https://github.com/miniflux/v2.git
synced 2025-08-01 17:38:37 +00:00
Add SVG icons to entry actions
This commit is contained in:
parent
53dd2c1f1d
commit
3c3241f93c
14 changed files with 309 additions and 87 deletions
File diff suppressed because one or more lines are too long
|
@ -689,6 +689,18 @@ a.button {
|
|||
content: "";
|
||||
}
|
||||
|
||||
.item-meta-icons li:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
.item-meta-icons li {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.item-meta-icons li:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.items {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
@ -713,6 +725,18 @@ article.feed-parsing-error {
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
.icon,
|
||||
.icon-label {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
/* Entry view */
|
||||
.entry header {
|
||||
padding-bottom: 5px;
|
||||
|
@ -744,11 +768,8 @@ article.feed-parsing-error {
|
|||
}
|
||||
|
||||
.entry-actions li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.entry-actions li:not(:last-child):after {
|
||||
content: "|";
|
||||
display: inline-block;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.entry-meta {
|
||||
|
|
|
@ -60,21 +60,20 @@ function showKeyboardShortcuts(){let template=document.getElementById("keyboard-
|
|||
function markPageAsRead(){let items=DomHelper.getVisibleElements(".items .item");let entryIDs=[];items.forEach((element)=>{element.classList.add("item-status-read");entryIDs.push(parseInt(element.dataset.id,10));});if(entryIDs.length>0){updateEntriesStatus(entryIDs,"read",()=>{let element=document.querySelector("a[data-action=markPageAsRead]");let showOnlyUnread=false;if(element){showOnlyUnread=element.dataset.showOnlyUnread||false;}
|
||||
if(showOnlyUnread){window.location.reload();}else{goToPage("next",true);}});}}
|
||||
function handleEntryStatus(element){let toasting=!element;let currentEntry=findEntry(element);if(currentEntry){toggleEntryStatus(currentEntry,toasting);if(isListView()&¤tEntry.classList.contains('current-item')){goToNextListItem();}}}
|
||||
function toggleEntryStatus(element,toasting){let entryID=parseInt(element.dataset.id,10);let link=element.querySelector("a[data-toggle-status]");let currentStatus=link.dataset.value;let newStatus=currentStatus==="read"?"unread":"read";updateEntriesStatus([entryID],newStatus);if(currentStatus==="read"){link.innerHTML=link.dataset.labelRead;link.dataset.value="unread";if(toasting){toast(link.dataset.toastUnread);}}else{link.innerHTML=link.dataset.labelUnread;link.dataset.value="read";if(toasting){toast(link.dataset.toastRead);}}
|
||||
function toggleEntryStatus(element,toasting){let entryID=parseInt(element.dataset.id,10);let link=element.querySelector("a[data-toggle-status]");let currentStatus=link.dataset.value;let newStatus=currentStatus==="read"?"unread":"read";updateEntriesStatus([entryID],newStatus);if(currentStatus==="read"){link.innerHTML='<span class="icon-label">'+link.dataset.labelRead+'</span>';link.dataset.value="unread";if(toasting){toast(link.dataset.toastUnread);}}else{link.innerHTML='<span class="icon-label">'+link.dataset.labelUnread+'</span>';link.dataset.value="read";if(toasting){toast(link.dataset.toastRead);}}
|
||||
if(element.classList.contains("item-status-"+currentStatus)){element.classList.remove("item-status-"+currentStatus);element.classList.add("item-status-"+newStatus);}}
|
||||
function markEntryAsRead(element){if(element.classList.contains("item-status-unread")){element.classList.remove("item-status-unread");element.classList.add("item-status-read");let entryID=parseInt(element.dataset.id,10);updateEntriesStatus([entryID],"read");}}
|
||||
function updateEntriesStatus(entryIDs,status,callback){let url=document.body.dataset.entriesStatusUrl;let request=new RequestBuilder(url);request.withBody({entry_ids:entryIDs,status:status});request.withCallback(callback);request.execute();if(status==="read"){decrementUnreadCounter(1);}else{incrementUnreadCounter(1);}}
|
||||
function handleSaveEntry(element){let toasting=!element;let currentEntry=findEntry(element);if(currentEntry){saveEntry(currentEntry.querySelector("a[data-save-entry]"),toasting);}}
|
||||
function saveEntry(element,toasting){if(!element){return;}
|
||||
if(element.dataset.completed){return;}
|
||||
element.innerHTML=element.dataset.labelLoading;let request=new RequestBuilder(element.dataset.saveUrl);request.withCallback(()=>{element.innerHTML=element.dataset.labelDone;element.dataset.completed=true;if(toasting){toast(element.dataset.toastDone);}});request.execute();}
|
||||
let previousInnerHTML=element.innerHTML;element.innerHTML='<span class="icon-label">'+element.dataset.labelLoading+'</span>';let request=new RequestBuilder(element.dataset.saveUrl);request.withCallback(()=>{element.innerHTML=previousInnerHTML;element.dataset.completed=true;if(toasting){toast(element.dataset.toastDone);}});request.execute();}
|
||||
function handleBookmark(element){let toasting=!element;let currentEntry=findEntry(element);if(currentEntry){toggleBookmark(currentEntry,toasting);}}
|
||||
function toggleBookmark(parentElement,toasting){let element=parentElement.querySelector("a[data-toggle-bookmark]");if(!element){return;}
|
||||
element.innerHTML=element.dataset.labelLoading;let request=new RequestBuilder(element.dataset.bookmarkUrl);request.withCallback(()=>{if(element.dataset.value==="star"){element.innerHTML=element.dataset.labelStar;element.dataset.value="unstar";if(toasting){toast(element.dataset.toastUnstar);}}else{element.innerHTML=element.dataset.labelUnstar;element.dataset.value="star";if(toasting){toast(element.dataset.toastStar);}}});request.execute();}
|
||||
element.innerHTML='<span class="icon-label">'+element.dataset.labelLoading+'</span>';let request=new RequestBuilder(element.dataset.bookmarkUrl);request.withCallback(()=>{if(element.dataset.value==="star"){element.innerHTML='<span class="icon-label">'+element.dataset.labelStar+'</span>';element.dataset.value="unstar";if(toasting){toast(element.dataset.toastUnstar);}}else{element.innerHTML='<span class="icon-label">'+element.dataset.labelUnstar+'</span>';element.dataset.value="star";if(toasting){toast(element.dataset.toastStar);}}});request.execute();}
|
||||
function handleFetchOriginalContent(){if(isListView()){return;}
|
||||
let element=document.querySelector("a[data-fetch-content-entry]");if(!element){return;}
|
||||
if(element.dataset.completed){return;}
|
||||
element.innerHTML=element.dataset.labelLoading;let request=new RequestBuilder(element.dataset.fetchContentUrl);request.withCallback((response)=>{element.innerHTML=element.dataset.labelDone;element.dataset.completed=true;response.json().then((data)=>{if(data.hasOwnProperty("content")){document.querySelector(".entry-content").innerHTML=data.content;}});});request.execute();}
|
||||
let previousInnerHTML=element.innerHTML;element.innerHTML='<span class="icon-label">'+element.dataset.labelLoading+'</span>';let request=new RequestBuilder(element.dataset.fetchContentUrl);request.withCallback((response)=>{element.innerHTML=previousInnerHTML;response.json().then((data)=>{if(data.hasOwnProperty("content")){document.querySelector(".entry-content").innerHTML=data.content;}});});request.execute();}
|
||||
function openOriginalLink(openLinkInCurrentTab){let entryLink=document.querySelector(".entry h1 a");if(entryLink!==null){if(openLinkInCurrentTab){window.location.href=entryLink.getAttribute("href");}else{DomHelper.openNewTab(entryLink.getAttribute("href"));}
|
||||
return;}
|
||||
let currentItemOriginalLink=document.querySelector(".current-item a[data-original-link]");if(currentItemOriginalLink!==null){DomHelper.openNewTab(currentItemOriginalLink.getAttribute("href"));let currentItem=document.querySelector(".current-item");if(document.location.href!=document.querySelector('a[data-page=starred]').href){goToNextListItem();}
|
||||
|
@ -111,6 +110,6 @@ window.addEventListener('beforeinstallprompt',(e)=>{e.preventDefault();let defer
|
|||
}
|
||||
|
||||
var JavascriptsChecksums = map[string]string{
|
||||
"app": "f26277a4397cc129a40190d5b7f008611a4cbe052e3fad71b7a4f5de473a1bf9",
|
||||
"app": "e7f953dd231bd59b239ba4c801366d1bc5d59233f085e4b0801e27c94e416416",
|
||||
"sw": "55fffa223919cc18572788fb9c62fccf92166c0eb5d3a1d6f91c31f24d020be9",
|
||||
}
|
||||
|
|
|
@ -137,13 +137,13 @@ function toggleEntryStatus(element, toasting) {
|
|||
updateEntriesStatus([entryID], newStatus);
|
||||
|
||||
if (currentStatus === "read") {
|
||||
link.innerHTML = link.dataset.labelRead;
|
||||
link.innerHTML = '<span class="icon-label">' + link.dataset.labelRead + '</span>';
|
||||
link.dataset.value = "unread";
|
||||
if (toasting) {
|
||||
toast(link.dataset.toastUnread);
|
||||
}
|
||||
} else {
|
||||
link.innerHTML = link.dataset.labelUnread;
|
||||
link.innerHTML = '<span class="icon-label">' + link.dataset.labelUnread + '</span>';
|
||||
link.dataset.value = "read";
|
||||
if (toasting) {
|
||||
toast(link.dataset.toastRead);
|
||||
|
@ -201,11 +201,12 @@ function saveEntry(element, toasting) {
|
|||
return;
|
||||
}
|
||||
|
||||
element.innerHTML = element.dataset.labelLoading;
|
||||
let previousInnerHTML = element.innerHTML;
|
||||
element.innerHTML = '<span class="icon-label">' + element.dataset.labelLoading + '</span>';
|
||||
|
||||
let request = new RequestBuilder(element.dataset.saveUrl);
|
||||
request.withCallback(() => {
|
||||
element.innerHTML = element.dataset.labelDone;
|
||||
element.innerHTML = previousInnerHTML;
|
||||
element.dataset.completed = true;
|
||||
if (toasting) {
|
||||
toast(element.dataset.toastDone);
|
||||
|
@ -230,18 +231,18 @@ function toggleBookmark(parentElement, toasting) {
|
|||
return;
|
||||
}
|
||||
|
||||
element.innerHTML = element.dataset.labelLoading;
|
||||
element.innerHTML = '<span class="icon-label">' + element.dataset.labelLoading + '</span>';
|
||||
|
||||
let request = new RequestBuilder(element.dataset.bookmarkUrl);
|
||||
request.withCallback(() => {
|
||||
if (element.dataset.value === "star") {
|
||||
element.innerHTML = element.dataset.labelStar;
|
||||
element.innerHTML = '<span class="icon-label">' + element.dataset.labelStar + '</span>';
|
||||
element.dataset.value = "unstar";
|
||||
if (toasting) {
|
||||
toast(element.dataset.toastUnstar);
|
||||
}
|
||||
} else {
|
||||
element.innerHTML = element.dataset.labelUnstar;
|
||||
element.innerHTML = '<span class="icon-label">' + element.dataset.labelUnstar + '</span>';
|
||||
element.dataset.value = "star";
|
||||
if (toasting) {
|
||||
toast(element.dataset.toastStar);
|
||||
|
@ -262,16 +263,12 @@ function handleFetchOriginalContent() {
|
|||
return;
|
||||
}
|
||||
|
||||
if (element.dataset.completed) {
|
||||
return;
|
||||
}
|
||||
|
||||
element.innerHTML = element.dataset.labelLoading;
|
||||
let previousInnerHTML = element.innerHTML;
|
||||
element.innerHTML = '<span class="icon-label">' + element.dataset.labelLoading + '</span>';
|
||||
|
||||
let request = new RequestBuilder(element.dataset.fetchContentUrl);
|
||||
request.withCallback((response) => {
|
||||
element.innerHTML = element.dataset.labelDone;
|
||||
element.dataset.completed = true;
|
||||
element.innerHTML = previousInnerHTML;
|
||||
|
||||
response.json().then((data) => {
|
||||
if (data.hasOwnProperty("content")) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue