(function($) {
$(document).ready(function(){
function formulaire_fabrique_interactions($is_ajax) {
/* Cette variable permet de savoir si on est en ajax, et si du coup il nous faudra repositionner
le navigateur. On dit que la variable est a true par defaut
(plus pratique pour l'appel de onAjaxLoad)
*/
if (typeof $is_ajax == 'undefined') {
$is_ajax = true;
}
/* Faire remonter les erreurs sur l'accordion et l'onglet */
$(".formulaire_fabriquer_plugin .sous_parties li.erreur").closest('div')
.prev('h4').addClass('erreur')
.closest('.sous_parties').prev('h3').addClass('erreur')
.closest('.parties').parent().parent().each(function(){
id = $(this).attr('id');
$('#tabs .tabs a[href=#' + id + ']').parent().addClass('erreur');
});
$(".formulaire_fabriquer_plugin .parties li.erreur").closest('div')
.prev('h3').addClass('erreur')
.parent().parent().each(function(){
id = $(this).attr('id');
$('#tabs .tabs a[href=#' + id + ']').parent().addClass('erreur');
});
/* Deplier ou replier le diff */
$(".formulaire_fabriquer_plugin .reponse_formulaire_diff").find('>div.diff').hide();
$(".formulaire_fabriquer_plugin .reponse_formulaire_diff h4").click(function(){
$(this).parent().find('>div').toggle();
});
/* Installer les onglets et accordions */
basket
.require("#CHEMIN{javascript/ui/jquery.ui.core.js}")
.require("#CHEMIN{javascript/ui/jquery.ui.widget.js}")
.require("#CHEMIN{javascript/ui/jquery.ui.mouse.js}")
.require("#CHEMIN{javascript/ui/jquery.ui.tabs.js}")
.require("#CHEMIN{javascript/ui/jquery.ui.accordion.js}")
.require("#CHEMIN{javascript/ui/jquery.ui.sortable.js}")
.wait(function(){
/*
ACCORDION avant TABS sinon la largeur de
l'accordion actif (autre que le premier)
est mal calcule sur un onglet caché
Pour les accordions & tabs, on sauve
le dernier ouvert, et on ouvre ceux la
au chargement de la page
*/
if ($.fn.accordion) {
$("#tabs > div > .parties").accordion({
collapsible: true,
autoHeight: false,
navigation: true,
change: function(event, ui) {
tab_id = $(this).attr('id').substring(7);
$('#open_accordion_' + tab_id).val(ui.options.active);
}
}).each(function() {
tab_id = $(this).attr('id').substring(7);
i = Number($("#open_accordion_" + tab_id).val());
/* 0 ne fonctionne pas */
if (i != 0) { $(this).accordion("activate", i); }
});
$("#tabs > div > .parties .parties").accordion({
collapsible: true,
autoHeight: false,
navigation: true,
active: false,
header: '> div > h4'
})
.sortable({
axis: "y",
handle: "h4",
stop: function( event, ui ) {
// IE doesn't register the blur when sorting
// so trigger focusout handlers to remove .ui-state-focus
ui.item.children( "h4" ).triggerHandler( "focusout" );
},
update: function(event, ui) {
tab = ui.item.parent().data('tab');
var champOrder = $(this).sortable('toArray').toString();
form = $(this).closest('form');
form.find('div:first')
.prepend('');
form.submit();
}
});
}
if ($.fn.tabs) {
$("#tabs").tabs({
selected: $('#open_tab').val(),
select: function(event, ui) {
$('#open_tab').val(ui.index);
},
create: function(event, ui) {
/* Se remettre en haut du formulaire après un coup d'ajax
Ce que fait SPIP habituellement, mais accordion() et tabs()
arrivent après et les navigateurs se décalent
*/
if ($is_ajax) {
$('.formulaire_fabriquer_plugin').positionner(false);
}
}
})
.find( ".ui-tabs-nav" ).sortable({
axis: "x",
update: function(event, ui) {
var tabOrder = $(this).sortable('toArray').toString();
form = $(this).closest('form');
form.find('div:first')
.prepend('');
form.submit();
}
});
}
});
/* un peu de coloration syntaxique */
$(".colorier textarea").focus(function() {
if (!$(this).data('coloriage')) {
code = $(this).closest('ul').data('code');
fabrique_coloriage(this, code);
$(this).data('coloriage', 1);
}
});
function fabrique_coloriage(textarea, code) {
basket
.require("#CHEMIN{codemirror/lib/codemirror.js}")
.require("#CHEMIN{codemirror/mode/xml/xml.js}")
.require("#CHEMIN{codemirror/mode/javascript/javascript.js}")
.require("#CHEMIN{codemirror/mode/css/css.js}")
.require("#CHEMIN{codemirror/mode/clike/clike.js}")
.require("#CHEMIN{codemirror/mode/php/php.js}")
.wait(function(){
var cm_options = {
lineNumbers: true,
matchBrackets: true,
indentUnit: 4,
tabSize: 4,
indentWithTabs: true,
enterMode: "keep",
tabMode: "shift",
width: "95%",
minHeight: 60
};
if (code.length) {
cm_options.mode = code;
/* Ouvrir automatiquement les scripts PHP */
if (code == 'php') {
cm_options.mode = 'text/x-php';
}
}
CodeMirror.fromTextArea(textarea, cm_options);
});
}
}
formulaire_fabrique_interactions(false); /* ici, on n'est pas ajax */
onAjaxLoad(formulaire_fabrique_interactions);
});
})(jQuery);