/* 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,
unfolded_sections: dotclear.unfolded_sections,
hide: true,
speed: 0,
legend_click: false,
fn: false, // A function called on first display,
user_pref: false,
reverse_user_pref: 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 set_user_pref = p.hide ^ p.reverse_user_pref;
if (p.user_pref && p.unfolded_sections !== undefined && (p.user_pref in p.unfolded_sections)) {
p.hide = p.reverse_user_pref;
}
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.addClass('hide');
} else {
$(i).get(0).src = p.img_off_src;
$(i).get(0).alt = p.img_off_alt;
target.removeClass('hide');
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');
if (p.legend_click) {
$(ctarget).find('label').css('cursor','pointer');
}
$(ctarget).click(function() {
if (p.user_pref && set_user_pref) {
if (p.hide ^ p.reverse_user_pref) {
jQuery.post('services.php',
{'f':'setSectionFold','section':p.user_pref,'value':1,xd_check: dotclear.nonce},
function(data) {});
} else {
jQuery.post('services.php',
{'f':'setSectionFold','section':p.user_pref,'value':0,xd_check: dotclear.nonce},
function(data) {});
}
jQuery.cookie(p.user_pref,'',{expires: -1});
}
toggle(i,p.speed);
return false;
});
toggle($(i).get(0));
$(this).prepend(' ').prepend(a);
});
};
(function($) {
'use strict';
$.expandContent = function(opts) {
var defaults = {};
$.expandContent.options = $.extend({},defaults,opts);
if (opts==undefined || opts.callback==undefined || !$.isFunction(opts.callback)) {
return;
}
if (opts.line!=undefined) {
multipleExpander(opts.line,opts.lines);
}
opts.lines.each(function() {
singleExpander(this);
});
}
var singleExpander = function singleExpander(line) {
$('')
.click(function(e) {
toggleArrow(this);
$.expandContent.options.callback.call(this,line);
e.preventDefault();
})
.prependTo($(line).children().get(0)); // first td
};
var multipleExpander = function multipleExpander(line,lines) {
$('')
.click(function(e) {
var that = this;
var action = toggleArrow(this);
lines.each(function() {
toggleArrow(this.firstChild.firstChild,action);
$.expandContent.options.callback.call(that,this,action);
});
e.preventDefault();
})
.prependTo($(line).children().get(0)); // first td
};
var toggleArrow = function toggleArrow(button,action) {
action = action || '';
if (action=='') {
if (button.alt==dotclear.img_plus_alt) {
action = 'open';
} else {
action = 'close';
}
}
if (action=='open') {
button.src = dotclear.img_minus_src;
button.alt = dotclear.img_minus_alt;
} else {
button.src = dotclear.img_plus_src;
button.alt = dotclear.img_plus_alt;
}
return action;
}
})(jQuery);
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();
}
}
$('p#help-button span a').text($('#content').hasClass('with-help') ? dotclear.msg.help_hide : dotclear.msg.help);
sizeBox();
return false;
};
var sizeBox = function() {
This.css('height','auto');
if ($('#wrapper').height() > This.height()) {
This.css('height',$('#wrapper').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('h4')) {
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('h4').each(function() { textToggler($(this)); });
this.find('h4:first').nextAll('*:not(h4)').hide();
sizeBox();
var img = $('
'+dotclear.msg.help+'
');
var select = $();
img.click(function() { return toggle(); });
$('#content').append(img);
// listen for scroll
var peInPage = $('#help-button').offset().top;
$('#help-button').addClass("floatable");
var peInFloat = $('#help-button').offset().top - $(window).scrollTop();
$('#help-button').removeClass("floatable");
$(window).scroll(
function() {
if ($(window).scrollTop() >= peInPage - peInFloat ) {
$('#help-button').addClass("floatable");
} else {
$('#help-button').removeClass("floatable");
}
}
);
return this;
};
/* Dotclear common object
-------------------------------------------------------- */
var dotclear = {
msg: {},
condSubmit: function(chkboxes,target) {
var checkboxes = $(chkboxes),
submitButt = $(target);
if (checkboxes === undefined || submitButt === undefined) {
return;
}
// Set initial state
submitButt.attr("disabled", !checkboxes.is(":checked"));
if (!checkboxes.is(":checked")) {
submitButt.addClass('disabled');
} else {
submitButt.removeClass('disabled');
}
checkboxes.click(function() {
// Update target state
submitButt.attr("disabled", !checkboxes.is(":checked"));
if (!checkboxes.is(":checked")) {
submitButt.addClass('disabled');
} else {
submitButt.removeClass('disabled');
}
});
},
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()+12)+'px';
imgE.alt=dotclear.msg.click_to_unlock;
$(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, target, c, s) {
$(e).append(document.createTextNode(dotclear.msg.to_select));
$(e).append(document.createTextNode(' '));
$(''+dotclear.msg.select_all+'').click(function() {
if (target !== undefined) {
target.check();
} else {
$(e).parents('form').find('input[type="checkbox"]').check();
}
if (c !== undefined && s !== undefined) {
dotclear.condSubmit(c,s);
}
return false;
}).appendTo($(e));
$(e).append(document.createTextNode(' | '));
$(''+dotclear.msg.no_selection+'').click(function() {
if (target !== undefined) {
target.unCheck();
} else {
$(e).parents('form').find('input[type="checkbox"]').unCheck();
}
if (c !== undefined && s !== undefined) {
dotclear.condSubmit(c,s);
}
return false;
}).appendTo($(e));
$(e).append(document.createTextNode(' - '));
$(''+dotclear.msg.invert_sel+'').click(function() {
if (target !== undefined) {
target.toggleCheck();
} else {
$(e).parents('form').find('input[type="checkbox"]').toggleCheck();
}
if (c !== undefined && s !== undefined) {
dotclear.condSubmit(c,s);
}
return false;
}).appendTo($(e));
},
postsActionsHelper: function() {
$('#form-entries').submit(function() {
var action = $(this).find('select[name="action"]').val();
if (action===undefined) {
return;
}
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;
});
},
getCSSColor : function ( clazz) {
$('').appendTo(document.body);
var tag2 = $('#dotclear-obj-test-color');
var color = $.trim(tag2.css("color").toLowerCase());
tag2.remove();
if ( color.charAt(0) === '#') {
return color;
}
var result = /^rgb\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\)$/.exec(color);
if ( result === null) {
return '';
}
var ret = '#';
for ( var i = 1; i < 4; i++) {
var val = parseInt(result[i],10);
ret += (val < 16 ? '0'+val.toString(16) : val.toString(16));
}
return ret;
},
initFadeColor : function() {
dotclear.fadeColor = {
beginPassword : dotclear.getCSSColor('colorBeginPassword'),
endPassword : dotclear.getCSSColor('colorEndPassword'),
beginMessage : dotclear.getCSSColor('colorBeginMessage'),
endMessage : dotclear.getCSSColor('colorEndMessage'),
beginError : dotclear.getCSSColor('colorBeginError'),
endError : dotclear.getCSSColor('colorEndError'),
beginSuccess : dotclear.getCSSColor('colorBeginSuccess'),
endSuccess : dotclear.getCSSColor('colorEndSuccess'),
beginValidatorMsg : dotclear.getCSSColor('colorBeginValidatorMsg'),
endValidatorMsg : dotclear.getCSSColor('colorEndValidatorMsg'),
beginValidatorErr : dotclear.getCSSColor('colorBeginValidatorErr'),
endValidatorErr : dotclear.getCSSColor('colorEndValidatorErr'),
beginUserMail : dotclear.getCSSColor('colorBeginUserMail'),
endUserMail : dotclear.getCSSColor('colorEndUserMail')
};
}};
/* On document ready
-------------------------------------------------------- */
$(function() {
dotclear.initFadeColor();
// remove class no-js from html tag; cf style/default.css for examples
$('body').removeClass('no-js').addClass('with-js');
$('body').contents().each(function() {
if (this.nodeType==8) {
var data = this.data;
data = data.replace(/ /g,' ').replace(/\n/g,'
');
$(''+$('#footer a').prop('title')+data+'').appendTo('#footer a');
}
});
// manage outgoing links
$('a').filter(function() {
return ((this.hostname && this.hostname!=location.hostname && !$(this).hasClass('modal'))
|| $(this).hasClass('outgoing'));
}).each(function() {
$(this).prop('title',$(this).prop('title')+' ('+dotclear.msg.new_window+')');
if (!$(this).hasClass('outgoing')) {
$(this).append('
');
}
}).click(function(e) {
e.preventDefault();
window.open($(this).attr('href'));
});
// 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({user_pref:'dc_blog_menu'},menu_settings)
);
$('#system-menu h3:first').toggleWithLegend($('#system-menu ul:first'),
$.extend({user_pref:'dc_system_menu'},menu_settings)
);
$('#plugins-menu h3:first').toggleWithLegend($('#plugins-menu ul:first'),
$.extend({user_pref:'dc_plugins_menu'},menu_settings)
);
$('#favorites-menu h3:first').toggleWithLegend($('#favorites-menu ul:first'),
$.extend({user_pref:'dc_favorites_menu',hide:false,reverse_user_pref:true},menu_settings)
);
$('#help').helpViewer();
$('.message').backgroundFade({sColor: dotclear.fadeColor.beginMessage, eColor: dotclear.fadeColor.endMessage, steps:20});
$('.error').backgroundFade({sColor: dotclear.fadeColor.beginError, eColor: dotclear.fadeColor.endError, steps:20});
$('.success').backgroundFade({sColor: dotclear.fadeColor.beginSuccess, eColor: dotclear.fadeColor.endSuccess, 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: dotclear.fadeColor.beginPassword,eColor: dotclear.fadeColor.endPassword,steps:50},function() {
$(this).backgroundFade({sColor: dotclear.fadeColor.endPassword,eColor: dotclear.fadeColor.beginPassword});
});
return false;
}
return true;
});
// Main menu collapser
var objMain = $('#wrapper');
function showSidebar(){
// Show sidebar
objMain.removeClass('hide-mm');
$.cookie('sidebar-pref',null,{expires:30});
}
function hideSidebar(){
// Hide sidebar
objMain.addClass('hide-mm');
$.cookie('sidebar-pref','hide-mm',{expires:30});
}
// Sidebar separator
var objSeparator = $('#collapser');
objSeparator.click(function(e){
e.preventDefault();
if ( objMain.hasClass('hide-mm') ){
showSidebar();
$('#main-menu input#qx').focus();
}
else {
hideSidebar();
$('#content a.go_home').focus();
}
});
if ( $.cookie('sidebar-pref') == 'hide-mm' ){
objMain.addClass('hide-mm');
} else {
objMain.removeClass('hide-mm');
}
});