rbbt.favourites = {};
var fav_module = rbbt.favourites;
fav_module.update_favourite_entities = function(){
return m.request({method: 'GET', url: '/favourite_entities'}).then(function(data){
fav_module.favourite_entities = {}
for (type in data){
var type_data = data[type]
fav_module.favourite_entities[type] = {}
for (entity in type_data){
var info = type_data[entity]
info.id = entity
info.type = type
fav_module.favourite_entities[type][entity] = new Entity(info)
}
}
return data
})
}
fav_module.update_favourite_lists = function(){
return m.request({method: 'GET', url: '/favourite_entity_lists'}).then(function(data){
fav_module.favourite_lists = {}
for (type in data){
var type_data = data[type]
fav_module.favourite_lists[type] = {}
for (i in type_data){
var list = type_data[i]
info = {}
info.id = list
info.type = type
fav_module.favourite_lists[type][list] = new EntityList(info)
}
}
return data
}) //.then(fav_module.update_list_selects)
}
fav_module.update_favourites = function(){
return fav_module.update_favourite_entities().then(fav_module.update_favourite_lists)
}
fav_module.isFavourite_entity = function(entity){
var favourites = fav_module.favourite_entities
return favourites[entity.type] !== undefined && favourites[entity.type][entity.id] !== undefined
}
fav_module.isFavourite_list = function(list){
var favourites = fav_module.favourite_lists
return favourites[list.type] !== undefined && favourites[list.type][list.id] !== undefined
}
fav_module.toggleFavourite_entity = function(){
var entity = rbbt.page.entity();
if (fav_module.isFavourite_entity(entity)){
rbbt.post({url: '/remove_favourite_entity/' + entity.type + '/' + entity.id}).then(fav_module.update)
}else{
rbbt.post({url: '/add_favourite_entity/' + entity.type + '/' + entity.id, data: entity.info}).then(fav_module.update)
}
}
fav_module.toggleFavourite_list = function(){
var list = rbbt.page.list();
if (fav_module.isFavourite_list(list)){
rbbt.post({url: '/remove_favourite_entity_list/' + list.type + '/' + list.id}).then(fav_module.update)
}else{
rbbt.post({url: '/add_favourite_entity_list/' + list.type + '/' + list.id}).then(fav_module.update)
}
}
fav_module.toggleFavourite = function(){
if (! rbbt.page.entity())
if (! rbbt.page.list())
return
else
fav_module.toggleFavourite_list()
else
fav_module.toggleFavourite_entity()
}
//{{{ VIEWS
fav_module.star_view = function(){
if (! rbbt.page.entity())
if (! rbbt.page.list())
return
else
return m('i.icon.star', {class: (fav_module.isFavourite_list(rbbt.page.list()) ? 'favourite' : 'not_favourite')})
else
return m('i.icon.star', {class: (fav_module.isFavourite_entity(rbbt.page.entity()) ? 'favourite' : 'not_favourite')})
}
fav_module.draw_favourite_menu = function(){
var favourites = fav_module.favourite_entities
var types = Object.keys(favourites)
return m('.ui.menu',
m('.ui.dropdown.item', [
m('i.icon.dropdown'),
'Entities',
m('.menu', types.map(function(type, index){
var _type = favourites[type]
var entities = Object.keys(_type)
return m('.ui.dropdown.item', [
m('i.icon.dropdown'),
type,
m('.menu', entities.map(function(entity, index){ url = _type[entity].url(); return m('a.item', {href: url}, _type[entity].name) }))
]);
}))
])
)
}
fav_module.draw_favourite_list_menu = function(){
var favourites = fav_module.favourite_lists
var types = Object.keys(favourites)
return m('.ui.menu',
m('.ui.dropdown.item', [
m('i.icon.dropdown'),
'Lists',
m('.menu', types.map(function(type, index){
var _type = favourites[type]
var lists = Object.keys(_type)
return m('.ui.dropdown.item', [
m('i.icon.dropdown'),
type,
m('.menu', lists.map(function(lists, index){ url = _type[lists].url(); return m('a.item', {href: url}, _type[lists].name) }))
]);
}))
])
)
}
fav_module.view = function(){
m.render($('#top_menu > .favourite')[0], [
m('.item.pointer', {onclick: fav_module.toggleFavourite}, fav_module.star_view()),
m('.item', {style: 'padding: 0px'}, fav_module.draw_favourite_menu()),
m('.item', {style: 'padding: 0px'}, fav_module.draw_favourite_list_menu())
])
}
fav_module.update = function(){
fav_module.update_favourites().then(fav_module.view).then(function(){ $('.dropdown:not([tabindex])').dropdown()})
}
fav_module._update_list_select= function(select, type, lists){
if (select.attr('attr-allow-empty') == 'true'){
var option = $('')
select.append(option);
}
var selected = null;
if (select.attr('attr-selected') != undefined ){
selected = select.attr('attr-selected');
}
$.each(lists, function(name, elems){
var option = null;
var name = elems
if (selected == null || name != selected){
option = $('');
}else{
option = $('');
}
select.append(option);
return true
})
},
fav_module.update_list_selects= function(){
$('select.favourite_lists').find('option.automatic_load').remove()
$.each(fav_module.favourite_lists, function(type, lists){
$('select.favourite_lists[type=' + type + ']').each(function(){
var select = $(this);
fav_module._update_list_select(select, type, lists);
})
$('select.favourite_lists[type=All]').each(function(){
var select = $(this);
select.append($(''));
fav_module._update_list_select(select, type, lists);
})
});
}
fav_module.update()