(function($) {
var i18n_js;
$.fn.DataObjectManager = function() {
this.each(function() {
$.fn.DataObjectManager.init(this);
});
};
$.fn.DataObjectManager.init = function(obj) {
var $container = $(obj);
var container_id = '#'+$container.attr('id');
var nested = $('.DataObjectManager').hasClass('isNested');
if(!i18n_js)
i18n_js = $.fn.DataObjectManager.loadi18n();
var facebox_close = function() {
$('#facebox').fadeOut(function() {
$('#facebox .content').removeClass().addClass('content');
$('#facebox_overlay').remove();
$('#facebox .loading').remove();
refresh($container, $container.attr('href'));
})
};
// Popup links
// For Nested DOMs
if(nested) {
// Change 1
// Cache iframe html in a variable so it can be accessed later
var $mainIframe = $('<div id="iframe_'+$container.attr('id')+'" class="iframe_wrap" style="display:none;"><a href="javascript:void(0)" class="nested-close">close</a><iframe src="" frameborder="0" height="1"></iframe></div>');
$('body').append(
$mainIframe
);
// End of change
var $iframeWrap = $('#iframe_'+$container.attr('id'));
$container.find('a.popup-button').unbind('click').click(function(e) {
$link = $(this);
var $iframe = $iframeWrap.find('iframe');
$iframe.attr('src',$link.attr('href'));
//$('body').css({'opacity':.3});
// Change 2
// Get the iframe width from the rel
var w = $(this).attr('rel');
w = w ? w : 430;
var width = new String(w) + 'px';
// Set the iframe width to width
$mainIframe.find('iframe:first').css({width:width});
// end of change
top = $.fn.DataObjectManager.getPageScroll()[1] + ($.fn.DataObjectManager.getPageHeight() / 10);
$iframeWrap.show().css({
'position':'absolute',
'z-index':'999',
'left':'50%',
'top' : top,
// Change 3
// Set iframe wrapper width and margin-left
'width': width,
'margin-left':'-'+(parseInt(w) / 2)+'px'
// end of changes
}).addClass('loading');
$iframe.load(function() {
iframe_height = $iframe.contents().find('body').height()+36;
$iframe.attr('height',iframe_height);
$iframeWrap.removeClass('loading');
});
return false;
});
$('#iframe_'+$container.attr('id')).find('.nested-close').unbind('click').click(function(e) {
$iframeWrap.hide();
$iframeWrap.find('iframe').attr('src','');
refresh($container,$container.attr('href'));
e.stopPropagation();
return false;
});
$container.addClass("loaded");
}
// For normal DOMs
else {
$container.find('a.popup-button').unbind('click').click(function(e) {
$(document).unbind('close.facebox').bind('close.facebox', facebox_close);
w = $(this).attr('rel');
width = new String(w);
height = $(this).attr('rel') == 'duplicate' ? 180 : ($.fn.DataObjectManager.getPageHeight()*.6);
$.facebox('<iframe src="'+$(this).attr('href')+'" frameborder="0" width="'+width+'" height="' + height + '"></iframe>');
e.stopPropagation();
return false;
});
}
// Delete
$deletes = $container.find('a.delete-link');
$deletes.unbind('click').click(function(e) {
$('.delete_dialog').remove();
params = $('#SecurityID') ? {'forceajax' : '1', 'SecurityID' : $('#SecurityID').attr('value')} : {'forceajax' : '1'};
$target = $(this);
if($(this).attr('rel') == "confirm") {
$div = $('<div class="delete_dialog">'
+i18n_js.delete_confirm
+' <a class="yes" href="javascript:void(0)"><img src="dataobject_manager/images/accept.png" alt="yes" /></a> '
+' <a class="no" href="javascript:void(0)"><img src="dataobject_manager/images/cancel.png" alt="no"/></a> '
+'</div>'
).click(function(e) {return false;e.stopPropagation()});
$(this).parents('div:first').append($div);
height = $(this).parents('li').height();
$(this).parents('li').css({
'height' : height+'px',
'overflow' : 'visible'
});
$div.fadeIn("slow");
$div.find('.yes').click(function(e) {
$.post($target.attr('href'),params,function() {$($target).parents('li:first').fadeOut();$(".ajax-loader").fadeOut("fast");});
e.stopPropagation();
return false;
});
$div.find('.no').click(function(e) {
$(this).parent().remove().parents('li').css({
'height' : 'auto',
'overflow' : 'hidden'
});
e.stopPropagation();
return false;
})
}
else {
$.post($target.attr('href'),params,function() {$($target).parents('li:first').fadeOut();$(".ajax-loader").fadeOut("fast");});
}
return false;
});
// Refresh
$container.find('a.refresh-button').unbind('click').click(function(e) {
$t = $(this);
$.post($t.attr('href'),{},function() {
refresh($container, $container.attr('href'));
});
return false;
});
// Pagination
$container.find('.Pagination a').unbind('click').click(function() {
refresh($container, $(this).attr('href'));
return false;
});
// View
if($container.hasClass('FileDataObjectManager') && !$container.hasClass('ImageDataObjectManager')) {
$container.find('a.viewbutton').unbind('click').click(function() {
refresh($container, $(this).attr('href'));
return false;
});
}
// Sortable
$container.find('.sort-control input').unbind('click').click(function(e) {
refresh($container, $(this).attr('value'));
$(this).attr('disabled', true);
e.stopPropagation();
});
$container.find("ul[class^='sortable-']").sortable({
update : function(e) {
$list = $(this);
do_class = $.trim($list.attr('class').replace('sortable-','').replace('ui-sortable',''));
type = $container.hasClass('ManyMany') ? $container.find('input[name=controllerID]').val() : '';
$.post('DataObjectManager_Controller/dosort/'+do_class+'/'+type, $list.sortable("serialize"));
e.stopPropagation();
},
items : 'li:not(.head)',
containment : 'document',
tolerance : 'intersect',
handle : ($('.list-holder').hasClass('grid') ? '.handle' : null)
});
// Click function for the LI
$container.find('ul:not(.ui-sortable) li.data').unbind('click').click(function(e) {
$(this).find('a.popup-button:first').click();
e.stopPropagation();
}).css({'cursor' : 'pointer'});
// Column sort
if(!$container.hasClass('ImageDataObjectManager')) {
$container.find('li.head a').unbind('click').click(function() {
refresh($container, $(this).attr('href'));
return false;
});
}
// Filter
$container.find('.dataobjectmanager-filter select').unbind('change').change(function(e) {
refresh($container, $(this).attr('value'));
});
// Page size
$container.find('.per-page-control select').unbind('change').change(function(e) {
refresh($container, $(this).attr('value'));
});
// Refresh filter
$container.find('.dataobjectmanager-filter .refresh').unbind('click').click(function(e) {
refresh($container, $container.attr('href'));
e.stopPropagation();
return false;
})
// Search
var request = false;
$container.find('#srch_fld').focus(function() {
if($(this).attr('value') == "Search") $(this).attr('value','').css({'color' : '#333'});
}).unbind('blur').blur(function() {
if($(this).attr('value') == '') $(this).attr('value','Search').css({'color' : '#666'});
}).unbind('keyup').keyup(function(e) {
if ((e.keyCode == 9) || (e.keyCode == 13) || // tab, enter
(e.keyCode == 16) || (e.keyCode == 17) || // shift, ctl
(e.keyCode >= 18 && e.keyCode <= 20) || // alt, pause/break, caps lock
(e.keyCode == 27) || // esc
(e.keyCode >= 33 && e.keyCode <= 35) || // page up, page down, end
(e.keyCode >= 36 && e.keyCode <= 38) || // home, left, up
(e.keyCode == 40) || // down
(e.keyCode >= 36 && e.keyCode <= 40) || // home, left, up, right, down
(e.keyCode >= 44 && e.keyCode <= 45) || // print screen, insert
(e.keyCode == 229) // Korean XP fires 2 keyup events, the key and 229
) return;
if(request) window.clearTimeout(request);
$input = $(this);
request = window.setTimeout(function() {
url = $(container_id).attr('href').replace(/\[search\]=(.)*?&/, '[search]='+$input.attr('value')+'&');
refresh($container, url, '#srch_fld');
},500)
e.stopPropagation();
});
$container.find('#srch_clear').unbind('click').click(function() {
$container.find('#srch_fld').attr('value','').keyup();
});
$container.find('a.tooltip').tooltip({
delay: 500,
showURL: false,
track: true,
bodyHandler: function() {
return $(this).parents('li').find('span.tooltip-info').html();
}
});
// Add the slider to the ImageDataObjectManager
if($container.hasClass('ImageDataObjectManager')) {
var MIN_IMG_SIZE = 25
var MAX_IMG_SIZE = 300;
var START_IMG_SIZE = 100;
var new_image_size;
$('.size-control').slider({
// Stupid thing doesn't work. Have to force it with CSS
//startValue : (START_IMG_SIZE - MIN_IMG_SIZE) / ((MAX_IMG_SIZE - MIN_IMG_SIZE) / 100),
slide : function(e, ui) {
new_image_size = MIN_IMG_SIZE + (ui.value * ((MAX_IMG_SIZE - MIN_IMG_SIZE)/100));
$('.grid li img.image').css({'width': new_image_size+'px'});
$('.grid li').css({'width': new_image_size+'px', 'height' : new_image_size +'px'});
},
stop : function(e, ui) {
new_image_size = MIN_IMG_SIZE + (ui.value * ((MAX_IMG_SIZE - MIN_IMG_SIZE)/100));
url = $(container_id).attr('href').replace(/\[imagesize\]=(.)*/, '[imagesize]='+Math.floor(new_image_size));
refresh($container, url);
}
});
$('.ui-slider-handle').css({'left' : $('#size-control-wrap').attr('class').replace('position','')+'px'});
}
// RelationDataObjectManager
if($container.hasClass('RelationDataObjectManager')) {
var $checkedList = $(container_id+'_CheckedList');
$container.find('.actions input, .file-label input').unbind('click').click(function(e){
if($(this).attr('type') == "radio") {
$(this).parents('li').siblings('li').removeClass('selected');
$(this).parents('li').toggleClass('selected');
$checkedList.attr('value', ","+$(this).val()+",");
}
else {
$(this).parents('li').toggleClass('selected');
val = ($(this).attr('checked')) ? $checkedList.val() + $(this).val()+"," : $checkedList.val().replace(","+$(this).val()+",",",");
$checkedList.attr('value', val);
}
e.stopPropagation();
});
$container.find('.actions input, .file-label input').each(function(i,e) {
if($checkedList.val().indexOf(","+$(e).val()+",") != -1)
$(e).attr('checked',true).parents('li').addClass('selected');
else
$(e).attr('checked',false).parents('li').removeClass('selected');
});
$container.find('a[rel=clear]').unbind('click').click(function(e) {
$container.find('.actions input, .file-label input').each(function(i,e) {
$(e).attr('checked', false).parents('li').removeClass('selected');
$checkedList.attr('value','');
});
});
$container.find('.only-related-control input').unbind('click').click(function(e) {
refresh($container, $(this).attr('value'));
$(this).attr('disabled', true);
e.stopPropagation();
});
}
// Columns. God forbid there are more than 10.
cols = $('.list #dataobject-list li.head .fields-wrap .col').length;
if(cols > 10) {
$('.list #dataobject-list li .fields-wrap .col').css({'width' : ((Math.floor(100/cols)) - 0.1) + '%' });
}
};
$.fn.DataObjectManager.getPageHeight = function() {
var windowHeight
if (self.innerHeight) { // all except Explorer
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
windowHeight = document.documentElement.clientHeight;
} else if (document.body) { // other Explorers
windowHeight = document.body.clientHeight;
}
return windowHeight;
};
$.fn.DataObjectManager.getPageScroll = function() {
var xScroll, yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
xScroll = self.pageXOffset;
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
yScroll = document.documentElement.scrollTop;
xScroll = document.documentElement.scrollLeft;
} else if (document.body) {// all other Explorers
yScroll = document.body.scrollTop;
xScroll = document.body.scrollLeft;
}
return new Array(xScroll,yScroll)
};
$.fn.DataObjectManager.loadi18n = function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': 'DataObjectManager_Controller/i18n_js/',
'dataType': "json",
'success': function (data) {
json = data;
}
});
return json;
}
$().ajaxSend(function(r,s){
$(".ajax-loader").show();
});
$().ajaxStop(function(r,s){
$(".ajax-loader").fadeOut("fast");
});
$('.DataObjectManager').livequery(function(){
$(this).DataObjectManager();
});
})(jQuery);
function refresh($div, link, focus)
{
// Kind of a hack. Pass the list of ids to the next refresh
var listValue = ($div.hasClass('RelationDataObjectManager')) ? jQuery('#'+$div.attr('id')+'_CheckedList').val() : false;
jQuery.ajax({
type: "GET",
url: link,
success: function(html){
if(!$div.next().length && !$div.prev().length)
$div.parent().html(html);
else
$div.replaceWith(html);
if(listValue) {
jQuery('#'+$div.attr('id')+'_CheckedList').attr('value',listValue);
}
var $container = jQuery('#'+$div.attr('id'));
$container.DataObjectManager();
if (typeof focus == 'string') {
$container.find(focus).focus();
}
//jQuery('#'+$div.attr('id')).DataObjectManager();
}
});
}