/* ChainHandler, py Peter van der Beken
-------------------------------------------------------- */
function chainHandler(obj, handlerName, handler) {
obj[handlerName] = (function(existingFunction) {
return function() {
handler.apply(this, arguments);
if (existingFunction)
existingFunction.apply(this, arguments);
};
})(handlerName in obj ? obj[handlerName] : null);
};
/* jQuery extensions
-------------------------------------------------------- */
jQuery.fn.check = function() {
return this.each(function() {
if (this.checked != undefined) { this.checked = true; }
});
};
jQuery.fn.unCheck = function() {
return this.each(function() {
if (this.checked != undefined) { this.checked = false; }
});
};
jQuery.fn.setChecked = function(status) {
return this.each(function() {
if (this.checked != undefined) { this.checked = status; }
});
};
jQuery.fn.toggleCheck = function() {
return this.each(function() {
if (this.checked != undefined) { this.checked = !this.checked; }
});
};
jQuery.fn.enableShiftClick = function() {
this.click(
function (event) {
if (event.shiftKey) {
if (dotclear.lastclicked != '') {
var range;
var trparent = $(this).parents('tr');
if (trparent.nextAll('#'+dotclear.lastclicked).length != 0)
range = trparent.nextUntil('#'+dotclear.lastclicked);
else
range = trparent.prevUntil('#'+dotclear.lastclicked);
range.find('input[type=checkbox]').setChecked(dotclear.lastclickedstatus);
this.checked = dotclear.lastclickedstatus;
}
} else {
dotclear.lastclicked = $(this).parents('tr')[0].id;
dotclear.lastclickedstatus = this.checked;
}
return true;
});
}
jQuery.fn.toggleWithLegend = function(target,s) {
var defaults = {
img_on_src: dotclear.img_plus_src,
img_on_alt: dotclear.img_plus_alt,
img_off_src: dotclear.img_minus_src,
img_off_alt: dotclear.img_minus_alt,
hide: true,
speed: 0,
legend_click: false,
fn: false, // A function called on first display,
cookie: false,
reverse_cookie: false // Reverse cookie behavior
};
var p = jQuery.extend(defaults,s);
if (!target) { return this; }
var set_cookie = p.hide ^ p.reverse_cookie;
if (p.cookie && jQuery.cookie(p.cookie)) {
p.hide = p.reverse_cookie;
}
var toggle = function(i,speed) {
speed = speed || 0;
if (p.hide) {
$(i).get(0).src = p.img_on_src;
$(i).get(0).alt = p.img_on_alt;
target.hide(speed, positionFooter);
} else {
$(i).get(0).src = p.img_off_src;
$(i).get(0).alt = p.img_off_alt;
target.show(speed, positionFooter);
if (p.fn) {
p.fn.apply(target);
p.fn = false;
}
}
if (p.cookie && set_cookie) {
if (p.hide ^ p.reverse_cookie) {
jQuery.cookie(p.cookie,'',{expires: -1});
} else {
jQuery.cookie(p.cookie,1,{expires: 30});
}
}
p.hide = !p.hide;
};
return this.each(function() {
var i = document.createElement('img');
i.src = p.img_off_src;
i.alt = p.img_off_alt;
var a = document.createElement('a');
a.href= '#';
$(a).append(i);
$(a).css({
border: 'none',
outline: 'none'
});
var ctarget = p.legend_click ? this : a;
$(ctarget).css('cursor','pointer');
$(ctarget).click(function() {
toggle(i,p.speed, positionFooter);
return false;
});
toggle($(i).get(0));
$(this).prepend(' ').prepend(a);
});
};
jQuery.fn.helpViewer = function() {
if (this.length < 1) {
return this;
}
var p = {
img_on_src: dotclear.img_plus_src,
img_on_alt: dotclear.img_plus_alt,
img_off_src: dotclear.img_minus_src,
img_off_alt: dotclear.img_minus_alt
};
var This = this;
var toggle = function() {
$('#content').toggleClass('with-help');
if (document.all) {
if ($('#content').hasClass('with-help')) {
select = $('#content select:visible').hide();
} else {
select.show();
}
}
sizeBox();
return false;
};
var sizeBox = function() {
This.css('height','auto');
if ($('body').height() > This.height()) {
This.css('height',$('body').height() + 'px');
}
};
var textToggler = function(o) {
var i = $('
');
o.css('cursor','pointer');
var hide = true;
o.prepend(' ').prepend(i);
o.click(function() {
$(this).nextAll().each(function() {
if ($(this).is('h3')) {
return false;
}
$(this).toggle();
sizeBox();
return true;
});
hide = !hide;
var img = $(this).find('img');
if (!hide) {
img.attr('src',p.img_off_src);
} else {
img.attr('src',p.img_on_src);
}
});
};
this.addClass('help-box');
this.find('>hr').remove();
this.find('h3').each(function() { textToggler($(this)); });
this.find('h3:first').nextAll('*:not(h3)').hide();
sizeBox();
var img = $(''+dotclear.msg.help+'');
var select = $();
img.click(function() { return toggle(); });
$('#content').append(img);
return this;
};
/* Dotclear common object
-------------------------------------------------------- */
var dotclear = {
msg: {},
hideLockable: function() {
$('div.lockable').each(function() {
var current_lockable_div = this;
$(this).find('p.form-note').hide();
$(this).find('input').each(function() {
this.disabled = true;
$(this).width(($(this).width()-14) + 'px');
var imgE = document.createElement('img');
imgE.src = 'images/locker.png';
imgE.style.position = 'absolute';
imgE.style.top = '1.7em';
imgE.style.left = ($(this).width()+4)+'px';
$(imgE).css('cursor','pointer');
$(imgE).click(function() {
$(this).hide();
$(this).prev('input').each(function() {
this.disabled = false;
$(this).width(($(this).width()+14) + 'px');
});
$(current_lockable_div).find('p.form-note').show();
});
$(this).parent().css('position','relative');
$(this).after(imgE);
});
});
},
checkboxesHelpers: function(e) {
var a = document.createElement('a');
a.href='#';
$(a).append(document.createTextNode(dotclear.msg.select_all));
a.onclick = function() {
$(this).parents('form').find('input[type="checkbox"]').check();
return false;
};
$(e).append(a);
$(e).append(document.createTextNode(' - '));
a = document.createElement('a');
a.href='#';
$(a).append(document.createTextNode(dotclear.msg.no_selection));
a.onclick = function() {
$(this).parents('form').find('input[type="checkbox"]').unCheck();
return false;
};
$(e).append(a);
$(e).append(document.createTextNode(' - '));
a = document.createElement('a');
a.href='#';
$(a).append(document.createTextNode(dotclear.msg.invert_sel));
a.onclick = function() {
$(this).parents('form').find('input[type="checkbox"]').toggleCheck();
return false;
};
$(e).append(a);
},
postsActionsHelper: function() {
$('#form-entries').submit(function() {
var action = $(this).find('select[name="action"]').val();
var checked = false;
$(this).find('input[name="entries[]"]').each(function() {
if (this.checked) {
checked = true;
}
});
if (!checked) { return false; }
if (action == 'delete') {
return window.confirm(dotclear.msg.confirm_delete_posts.replace('%s',$('input[name="entries[]"]:checked').size()));
}
return true;
});
},
commentsActionsHelper: function() {
$('#form-comments').submit(function() {
var action = $(this).find('select[name="action"]').val();
var checked = false;
$(this).find('input[name="comments[]"]').each(function() {
if (this.checked) {
checked = true;
}
});
if (!checked) { return false; }
if (action == 'delete') {
return window.confirm(dotclear.msg.confirm_delete_comments.replace('%s',$('input[name="comments[]"]:checked').size()));
}
return true;
});
}
};
/* Sticky footer
-------------------------------------------------------- */
function positionFooter() {
$("#wrapper").css({ overflow: "auto" });
var page_height = $("#top").height() + $("#wrapper").height() - $("#footer").height();
if( page_height < $(window).height() ){
// calcul de la largeur
var page_width = $(document).width() - 30;
$("#footer").css({
position: "absolute",
bottom: "10px",
width: page_width+"px",
padding: ".75em 0",
marginbottom: "0"
});
} else {
$("#footer").css({
position: "static",
padding: ".75em 0",
width: "auto"
});
}
}
/* On document ready
-------------------------------------------------------- */
$(function() {
// Blog switcher
$('#switchblog').change(function() {
this.form.submit();
});
var menu_settings = {
img_on_src: dotclear.img_menu_off,
img_off_src: dotclear.img_menu_on,
legend_click: true,
speed: 100
}
$('#blog-menu h3:first').toggleWithLegend($('#blog-menu ul:first'),
$.extend({cookie:'dc_blog_menu'},menu_settings)
);
$('#system-menu h3:first').toggleWithLegend($('#system-menu ul:first'),
$.extend({cookie:'dc_system_menu'},menu_settings)
);
$('#plugins-menu h3:first').toggleWithLegend($('#plugins-menu ul:first'),
$.extend({cookie:'dc_plugins_menu'},menu_settings)
);
$('#favorites-menu h3:first').toggleWithLegend($('#favorites-menu ul:first'),
$.extend({cookie:'dc_favorites_menu',hide:false,reverse_cookie:true},menu_settings)
);
$('#help').helpViewer();
$('.message').backgroundFade({sColor:'#cccccc',eColor:'#666666',steps:20});
$('.error').backgroundFade({sColor:'#f5e5e5',eColor:'#e5bfbf',steps:20});
$('form:has(input[type=password][name=your_pwd])').submit(function() {
var e = this.elements['your_pwd'];
if (e.value == '') {
e.focus();
$(e).backgroundFade({sColor:'#ffffff',eColor:'#ff9999',steps:50},function() {
$(this).backgroundFade({sColor:'#ff9999',eColor:'#ffffff'});
});
return false;
}
return true;
});
// Sticky footer
positionFooter();
$(window).resize(positionFooter);
});