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()