[bookmarks-by-zaso] support for stars in portals-list

This commit is contained in:
fkloft 2014-08-29 23:11:45 +02:00
parent 5339e55542
commit b7d17991b7
2 changed files with 95 additions and 24 deletions

View File

@ -30,7 +30,7 @@
// use own namespace for plugin // use own namespace for plugin
window.plugin.bookmarks = function() {}; window.plugin.bookmarks = function() {};
window.plugin.bookmarks.SYNC_DELAY = 5000; window.plugin.bookmarks.SYNC_DELAY = 5;
window.plugin.bookmarks.KEY_OTHER_BKMRK = 'idOthers'; window.plugin.bookmarks.KEY_OTHER_BKMRK = 'idOthers';
window.plugin.bookmarks.KEY_STORAGE = 'plugin-bookmarks'; window.plugin.bookmarks.KEY_STORAGE = 'plugin-bookmarks';
@ -322,12 +322,12 @@
} }
// Switch the status of the star // Switch the status of the star
window.plugin.bookmarks.switchStarPortal = function() { window.plugin.bookmarks.switchStarPortal = function(guid) {
var guid = window.selectedPortal; if(guid == undefined) guid = window.selectedPortal;
// If portal is saved in bookmarks: Remove this bookmark // If portal is saved in bookmarks: Remove this bookmark
if($('.bkmrksStar').hasClass('favorite')) {
var bkmrkData = window.plugin.bookmarks.findByGuid(guid); var bkmrkData = window.plugin.bookmarks.findByGuid(guid);
if(bkmrkData) {
var list = window.plugin.bookmarks.bkmrksObj['portals']; var list = window.plugin.bookmarks.bkmrksObj['portals'];
delete list[bkmrkData['id_folder']]['bkmrk'][bkmrkData['id_bookmark']]; delete list[bkmrkData['id_folder']]['bkmrk'][bkmrkData['id_bookmark']];
$('.bkmrk#'+bkmrkData['id_bookmark']+'').remove(); $('.bkmrk#'+bkmrkData['id_bookmark']+'').remove();
@ -342,12 +342,12 @@
else{ else{
// Get portal name and coordinates // Get portal name and coordinates
var p = window.portals[guid]; var p = window.portals[guid];
var d = p.options.data; var ll = p.getLatLng();
var label = d.title; plugin.bookmarks.addPortalBookmark(guid, ll.lat+','+ll.lng, p.options.data.title);
var lat = p.getLatLng().lat; }
var lng = p.getLatLng().lng; }
var latlng = lat+','+lng;
plugin.bookmarks.addPortalBookmark = function(guid, latlng, label) {
var ID = window.plugin.bookmarks.generateID(); var ID = window.plugin.bookmarks.generateID();
// Add bookmark in the localStorage // Add bookmark in the localStorage
@ -355,10 +355,9 @@
window.plugin.bookmarks.saveStorage(); window.plugin.bookmarks.saveStorage();
window.plugin.bookmarks.refreshBkmrks(); window.plugin.bookmarks.refreshBkmrks();
window.runHooks('pluginBkmrksEdit', {"target": "portal", "action": "add", "id": ID}); window.runHooks('pluginBkmrksEdit', {"target": "portal", "action": "add", "id": ID, "guid": guid});
console.log('BOOKMARKS: added portal '+ID); console.log('BOOKMARKS: added portal '+ID);
} }
}
// Add BOOKMARK/FOLDER // Add BOOKMARK/FOLDER
window.plugin.bookmarks.addElement = function(elem, type) { window.plugin.bookmarks.addElement = function(elem, type) {
@ -1031,7 +1030,7 @@
window.plugin.bookmarks.editStar = function(data) { window.plugin.bookmarks.editStar = function(data) {
if(data.target === 'portal') { if(data.target === 'portal') {
if(data.action === 'add') { if(data.action === 'add') {
var guid = window.selectedPortal; var guid = data.guid;
var latlng = window.portals[guid].getLatLng(); var latlng = window.portals[guid].getLatLng();
var lbl = window.portals[guid].options.data.title; var lbl = window.portals[guid].options.data.title;
var starInLayer = window.plugin.bookmarks.starLayers[data.guid]; var starInLayer = window.plugin.bookmarks.starLayers[data.guid];
@ -1054,6 +1053,60 @@
$('<style>').prop('type', 'text/css').html('@@INCLUDESTRING:plugins/bookmarks-css.css@@').appendTo('head'); $('<style>').prop('type', 'text/css').html('@@INCLUDESTRING:plugins/bookmarks-css.css@@').appendTo('head');
} }
window.plugin.bookmarks.setupPortalsList = function() {
function onBookmarkChanged(data) {
console.log(data, data.target, data.guid);
if(data.target == "portal" && data.guid) {
if(plugin.bookmarks.findByGuid(data.guid))
$('[data-list-bookmark="'+data.guid+'"]').addClass("favorite");
else
$('[data-list-bookmark="'+data.guid+'"]').removeClass("favorite");
} else {
$('[data-list-bookmark]').each(function(i, element) {
var guid = element.getAttribute("data-list-bookmark");
if(plugin.bookmarks.findByGuid(guid))
$(element).addClass("favorite");
else
$(element).removeClass("favorite");
});
}
}
window.addHook('pluginBkmrksEdit', onBookmarkChanged);
window.addHook('pluginBkmrksSyncEnd', onBookmarkChanged);
window.plugin.portalslist.fields.unshift({ // insert at first column
title: "",
value: function(portal) { return portal.options.guid; }, // we store the guid, but implement a custom comparator so the list does sort properly without closing and reopening the dialog
sort: function(guidA, guidB) {
var infoA = plugin.bookmarks.findByGuid(guidA);
var infoB = plugin.bookmarks.findByGuid(guidB);
if(infoA && !infoB) return 1;
if(infoB && !infoA) return -1;
return 0;
},
format: function(cell, portal, guid) {
$(cell)
.addClass("portal-list-bookmark")
.attr("data-list-bookmark", guid);
// for some reason, jQuery removes event listeners when the list is sorted. Therefore we use DOM's addEventListener
$('<span>').appendTo(cell)[0].addEventListener("click", function() {
if(window.plugin.bookmarks.findByGuid(guid)) {
window.plugin.bookmarks.switchStarPortal(guid);
} else {
var ll = portal.getLatLng();
plugin.bookmarks.addPortalBookmark(guid, ll.lat+','+ll.lng, portal.options.data.title);
}
}, false);
if(plugin.bookmarks.findByGuid(guid))
cell.className += " favorite";
},
});
}
window.plugin.bookmarks.setupContent = function() { window.plugin.bookmarks.setupContent = function() {
plugin.bookmarks.htmlBoxTrigger = '<a id="bkmrksTrigger" class="open" onclick="window.plugin.bookmarks.switchStatusBkmrksBox(\'switch\');return false;" accesskey="v" title="[v]">[-] Bookmarks</a>'; plugin.bookmarks.htmlBoxTrigger = '<a id="bkmrksTrigger" class="open" onclick="window.plugin.bookmarks.switchStatusBkmrksBox(\'switch\');return false;" accesskey="v" title="[v]">[-] Bookmarks</a>';
plugin.bookmarks.htmlBkmrksBox = '<div id="bookmarksBox">' plugin.bookmarks.htmlBkmrksBox = '<div id="bookmarksBox">'
@ -1179,6 +1232,15 @@
window.plugin.bookmarks.addAllStars(); window.plugin.bookmarks.addAllStars();
window.addHook('pluginBkmrksEdit', window.plugin.bookmarks.editStar); window.addHook('pluginBkmrksEdit', window.plugin.bookmarks.editStar);
window.addHook('pluginBkmrksSyncEnd', window.plugin.bookmarks.resetAllStars); window.addHook('pluginBkmrksSyncEnd', window.plugin.bookmarks.resetAllStars);
if(window.plugin.portalslist) {
window.plugin.bookmarks.setupPortalsList();
} else {
setTimeout(function() {
if(window.plugin.portalslist)
window.plugin.bookmarks.setupPortalsList();
}, 500);
}
} }
// PLUGIN END ////////////////////////////////////////////////////////// // PLUGIN END //////////////////////////////////////////////////////////

View File

@ -273,7 +273,16 @@
#sidebar #portaldetails h3.title{ #sidebar #portaldetails h3.title{
width:auto; width:auto;
} }
#bkmrksTrigger, .bkmrksStar span{ .portal-list-bookmark span {
display:inline-block;
margin: -3px;
width:16px;
height:15px;
overflow:hidden;
background-repeat:no-repeat;
cursor:pointer;
}
#bkmrksTrigger, .bkmrksStar span, .portal-list-bookmark span {
background-image:url(@@INCLUDEIMAGE:plugins/bookmarks-img.png@@); background-image:url(@@INCLUDEIMAGE:plugins/bookmarks-img.png@@);
} }
.bkmrksStar span{ .bkmrksStar span{
@ -288,7 +297,7 @@
.bkmrksStar span, .bkmrksStar.favorite:focus span{ .bkmrksStar span, .bkmrksStar.favorite:focus span{
background-position:left top; background-position:left top;
} }
.bkmrksStar:focus span, .bkmrksStar.favorite span{ .bkmrksStar:focus span, .bkmrksStar.favorite span, .portal-list-bookmark.favorite span{
background-position:right top; background-position:right top;
} }
#bookmarksBox .bookmarkList .bookmarkFolder{ #bookmarksBox .bookmarkList .bookmarkFolder{