$.fn.getClassInList = function(list){ for(var i = 0; i < list.length; i++) { if($(this).hasClass(list[i])) return list[i]; } return ""; } function add_parameters(url, parameters){ if (url.indexOf('?') == -1){ return url + '?' + parameters; }else{ return url + '&' + parameters; } } // DETAILS function show_details(){ var main_size = $(window).height() - $('#details').outerHeight() - $('#details_controls').outerHeight() - $('#header').outerHeight() - 45; scroll(0,0); $('#details').show(); $('#details_controls').show(); $('#main').css('height', main_size).addClass('contracted'); $('#menu').css('height', main_size + $('#details').outerHeight() + $('#details_controls').outerHeight()).addClass('contracted'); return false; } function hide_details(){ details_history = []; $('#main').show(); $('#details').hide().removeClass('expanded'); $('#details').attr('href', null); $('#details_controls').hide(); $('#main').css('height', '100%').removeClass('contracted'); $('#menu').css('height', '100%').removeClass('contracted'); return false; } function toggle_details(){ if ($('#details').is(":visible")){ hide_details; }else{ show_details; } return false; } function toggle_expand_details(){ if ($('#details').hasClass('expanded')){ contract_details(); }else{ expand_details(); } return false } function expand_details(){ var url = $('#details').attr('url'); if (url == null) return false; $.ajax(add_parameters(url, '_size=normal&_cache_type=memory'), { cache: false, success: function(data){ $('#details').html(data).attr('url', url); $('#main').hide() $('#details').addClass("expanded") show_details(); rbbt_action_setup(); }, error: function(){ $('#details').html("Error loading " + href + ""); } }) return false } function contract_details(){ var url = $('#details').attr('url'); if (url == null) return false; $.ajax(add_parameters(url, '_size=small&_cache_type=memory'), { cache: false, success: function(data){ $('#details').html(data).attr('url', url); $('#main').show() $('#details').removeClass("expanded") show_details(); rbbt_action_setup(); }, error: function(){ $('#details').html("Error loading " + href + ""); } }) return false } function back_details(){ var url = details_history.pop(); if (url != null && url != undefined ){ if ($('#details').hasClass("expanded")){ size = "normal"; }else{ size = "small"; } $.ajax(add_parameters(url, '_size=' + size + "&_cache_type=memory"), { cache: false, success: function(data){ $('#details').html(data).attr('url', url); rbbt_action_setup(); }, error: function(){ $('#details').html("Error loading " + href + ""); } }) } return false; } // REPLACE OBJECTS function replace_object(obj, update){ var href = obj.attr('href'); if (href == null || href == undefined || href == ""){href = obj.attr('target');} if (href == null || href == undefined || href == ""){href = obj.attr('url');} if (update == 'reload'){ href = add_parameters(href, "_update=reload") } if (update == 'check'){ href = add_parameters(href, "_update=check") } $.ajax(href,{ cache: false, beforeSend: function(){obj.addClass("reloading")}, complete: function(){obj.removeClass("reloading")}, error: function( req, text, error ) { obj.removeClass("reloading"); obj.addClass("error"); if (obj.find('span[class*=cache_status]').length == 0){ obj.html(obj.html() + "error").after($("retry")) }else{ obj.after($("retry")).find('span[class*=cache_status]').first().html("error") } rbbt_action_setup(); }, success: function( data, stat, req ) { if (req.status == 202){ obj.addClass("reloading"); if (obj.find('span[class*=cache_status]').length == 0){ obj.html(obj.html() + data) }else{ obj.find('span[class*=cache_status]').first().replaceWith($(data)) } if (update == 'check'){ obj.removeClass("reloading"); obj.addClass("check"); if (obj.find('span[class*=cache_status]').length == 0){ obj.after($("start")); }else{ obj.after($("start")); } rbbt_action_setup(); }else{ window.setTimeout(function(){replace_object(obj)}, 7000) } }else{ var html = '
' + data + '
'; var embedded = $(html); embedded.addClass(obj.attr('class')); embedded.removeClass('replace'); embedded.removeClass('rbbt_action_setup'); embedded.removeClass("reloading"); obj.replaceWith(embedded); rbbt_action_setup(); } }, }); } function expand_embedded(embedded){ var header = embedded.find('header').first(); embedded.html(embedded.attr('attr-save')); embedded.attr('attr-save',null); embedded.removeClass('contracted_embedded'); embedded.removeClass('rbbt_action_setup').find('.rbbt_action_setup').removeClass('rbbt_action_setup'); rbbt_action_setup(); } function contract_embedded(embedded){ var header = embedded.find('header').first(); embedded.attr('attr-save', embedded.html()); embedded.html(header.html()); embedded.addClass('contracted_embedded'); embedded.removeClass('rbbt_action_setup').find('.rbbt_action_setup').removeClass('rbbt_action_setup'); rbbt_action_setup(); } //-- LIST MANAGEMENT var entity_lists = {} function saved_lists(){ return JSON.parse($.cookie('saved_lists')) } function remove_list(type, list){ var lists = saved_lists(); if (lists == null) { lists = {}; }; if (lists[type] == null) { lists[type] = [] }; var elems = lists[type] if (elems != null){ var index = elems.indexOf(list); if (index != -1){ elems.splice(index, 1);} if (elems.length > 0){ lists[type] = elems; }else{ delete lists[type] } delete entity_lists[type][list] if (entity_lists[type].length == 0){ delete entity_lists[type] } } $.cookie('saved_lists', JSON.stringify(lists), {path: "/"}) update_list_viewer() } function load_list(type, list){ var lists = saved_lists(); if (lists == null) { lists = {}; }; if (lists[type] == null) { lists[type] = [] }; lists[type].push(list); $.cookie('saved_lists', JSON.stringify(lists), {path: "/"}) add_entity_list(type, list); } function record_list(type, list_id, list){ if (entity_lists[type] == null){ entity_lists[type] = {} } entity_lists[type][list_id] = list; } function update_list_viewer(){ var list_html = "" list_html += "your lists\n" list_html += "public lists\n" list_html += "clear selected\n" list_html += "
Loaded lists
\n" list_html += "
\n" $.each(entity_lists, function(type, lists){ list_html += "
" + type + "
\n" list_html += "
\n" list_html += "" list_html += "
\n" }) $('#lists').html(list_html); rbbt_action_setup(); } function update_list_selectors(){ $.each(entity_lists, function(type, lists){ $('select.loaded_lists[type=' + type + ']').each(function(){ var select = $(this); select.find('option').remove(); $.each(lists, function(name, elems){ var option = $('') select.append(option); return true }) }) }); } function add_entity_list(type, list_id){ $.getJSON( "/entity_list/" + type + "/" + list_id + '?_format=json', function(data){ record_list(type, list_id, data); update_list_viewer(); update_list_selectors(); }) } function id_for_entity(entity_format, entity){ return((entity_format.toLowerCase().replace(/[^\w]/g, "_") + "=" + entity)); } function select_list(type, list_id){ var list = entity_lists[type][list_id]; var entity; $.each(list, function(id, data){ var id = data[0]; var info = data[1]; var format = info["format"]; var entity_id = id_for_entity(format, id); $('.entity[' + entity_id + ']').addClass("selected_entity"); }) } //-- SETUP FUNCTIOS function rbbt_table_setup(){ //$('table.sorted, table.results_tsv_table').not('[class*=table_sorted]').tablesorter({textExtraction:"complex", widgets: ['zebra']}).addClass('table_sorted'); $('table form.table_controls').not('[class*=rbbt_table_setup]').each(function(){ var form = $(this); var embedded_div = $(this).parents("div.embedded").first() if (embedded_div.html() != null){ var href = embedded_div.attr('target') form.find(".change_page").click(function(){ var pfield = form.find(".pfield").first().val(); var pnum = form.find(".pnum").first().val(); var psize = form.find(".psize").first().val(); var change = $(this).val(); $.ajax({ cache: false, url: add_parameters(href, "_pfield=" + pfield + "&_pnum=" + pnum + "&_psize=" + psize + "&_paginate=" + change), success: function(data){ embedded_div.html(data); rbbt_action_setup(); } }) return false; }) } }).addClass('rbbt_table_setup'); } function rbbt_action_setup(){ rbbt_table_setup(); $('.toggle').not('[class*=rbbt_action_setup]').each(function(){ var toggle = $(this); var content = toggle.html(); var title_text = toggle.attr('title'); var title = "
" + title_text + "
"; var description = "
" + content + "
"; var dl = "
" + title + description + "
"; toggle.html(dl); }).addClass('rbbt_action_setup').find('> dl').each(function(){ $(this).find('>dd').hide()}).find('>dt').click(function(){ var dl = $(this).parent('dl'); dl.find('>dd').toggle(); }); $('a.replace').not('[class*=rbbt_action_setup]').each(function(){ replace_object($(this)); }).addClass('rbbt_action_setup'); $('a.check_replace').not('[class*=rbbt_action_setup]').each(function(){ replace_object($(this), 'check'); }).addClass('rbbt_action_setup'); $('a.entity').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var href = link.attr('href') if ($('#details').hasClass("expanded")){ size = "normal"; }else{ size = "small"; } show_details(); $('#details').html("Loading " + href + "").addClass("loading").removeClass("error"); $.ajax(add_parameters(href, '_size=' + size + '&_cache_type=memory'), { cache: false, success: function(data){ var old_url = $('#details').attr('url'); if (old_url != null && old_url != undefined ){ details_history.push(old_url); } $('#details').html(data).attr('url', href).removeClass("loading").removeClass("error"); show_details(); rbbt_action_setup(); }, error: function(){ show_details(); $('#details').html("Error loading " + href + "").removeClass("loading").addClass("error"); } }) return false; }).addClass('rbbt_action_setup'); $('.DELETE,.POST').not('[class*=rbbt_action_setup]').click(function() { //if(confirm('Are you sure?')) { if(true) { var link = $(this); var target_id = link.attr('rel') var href = link.attr('href'); $.ajax({cache: false, url:href, data:{ _method: $(this).getClassInList(['POST', 'DELETE'])}, type:"post", asyn:false, success: function(){if (target_id != null){ link.remove(); $("#" + target_id).remove();}}}) } return false; }).addClass('rbbt_action_setup'); $('div.embedded form').not('[class*=rbbt_action_setup]').submit(function(){ var form = $(this); var embedded = form.parents('div.embedded').first(); var params = ""; form.find('input').not('[type=submit]').each(function(){ var input = $(this) if (params.length > 0){ params += '&'} params += input.attr('name') + "=" + input.val(); }) form.find('select').not('[type=submit]').each(function(){ var select = $(this) var option = select.find('option:selected'); if (params.length > 0){ params += '&'} params += select.attr('name') + "=" + option.val(); }) params = params var url = embedded.attr('target'); url = url.replace(/\?.*/, '?' + params) embedded.attr('target', url) replace_object(embedded); return false; }).addClass('rbbt_action_setup'); $('.embedded > header').not('[class*=rbbt_action_setup]').each(function(){ var header = $(this); var embedded = header.parent('.embedded'); var href = embedded.attr('target'); if (header.find('ul.embedded_control').length == 0){ var html = header.html(); html = html + '' header.html(html); } header.addClass('rbbt_action_setup') rbbt_action_setup(); }).addClass('rbbt_action_setup'); $('a.reload_embedded').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var embedded = link.parents('.embedded').first(); if (embedded.hasClass('contracted_embedded')){ expand_embedded(embedded) } replace_object(embedded, 'reload'); return false; }).addClass('rbbt_action_setup'); $('a.toggle_embedded').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var embedded = link.parents('.embedded').first(); var header = embedded.find('header').first(); if (embedded.attr('attr-save') == null){ contract_embedded(embedded) }else{ expand_embedded(embedded) } return false; }).addClass('rbbt_action_setup'); $('a.retry_error').not('[class*=rbbt_action_setup]').click(function(e){ var retry_link = $(this); var link = retry_link.prev('a'); if (link.length == 0){ link = retry_link.prev('.embedded')}; replace_object(link, 'reload'); retry_link.remove(); return false; }).addClass('rbbt_action_setup'); $('a.start_checked').not('[class*=rbbt_action_setup]').click(function(e){ var retry_link = $(this); var link = retry_link.prev('a'); replace_object(link); retry_link.remove(); return false; }).addClass('rbbt_action_setup'); $('a.select_list').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var list_id = link.attr('attr-list') var type = link.attr('attr-list-type') select_list(type, list_id) return false; }).addClass('rbbt_action_setup'); $('a.remove_list').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var list_id = link.attr('attr-list'); var type = link.attr('attr-list-type') remove_list(type, list_id); return false; }).addClass('rbbt_action_setup'); $('a.load_entity_list').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var list_id = link.attr('attr-list'); var type = link.attr('attr-list-type'); load_list(type, list_id); return false; }).addClass('rbbt_action_setup'); $('a.open_edit_controls').not('[class*=rbbt_action_setup]').click(function(){ var link = $(this); var edit_controls = link.next('.edit_controls') edit_controls.toggle(); return false; }).addClass('rbbt_action_setup'); $('a.clear_selected').not('[class*=rbbt_action_setup]').click(function(){ $('a.selected_entity').removeClass('selected_entity') }).addClass('rbbt_action_setup'); update_list_selectors(); }