$.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 = $('' + name + ' ')
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();
}