mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-22 18:09:06 +01:00
- function.js :
-> création d'un fichier functions.js pour extraire la partie LSdebug de LSdefault.js. -> création d'une méthode getFData() sensiblement la même quand PHP - LSformElement_text : Création d'une possibilité d'auto-génération en JS de la valeur à partir des autres champs du formulaire. - LSconfirmBox && LSsmoothbox : -> ajout d'une méthode positionWhenScrolling() pour le placement de la box lors du scroll - LSconfirmBox : Correction d'un bug IE à la fermeture
This commit is contained in:
parent
6e217e07fa
commit
1228e42fc7
9 changed files with 258 additions and 42 deletions
|
@ -103,24 +103,6 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
|
||||||
'modify' => 0,
|
'modify' => 0,
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
'cn' => array (
|
|
||||||
'label' => _('Nom complet'),
|
|
||||||
'ldap_type' => 'ascii',
|
|
||||||
'html_type' => 'text',
|
|
||||||
'required' => 1,
|
|
||||||
'default_value' => 'titi',
|
|
||||||
'validation' => 'valid',
|
|
||||||
'rights' => array(
|
|
||||||
'self' => 'w',
|
|
||||||
'user' => 'r',
|
|
||||||
'admin' => 'w'
|
|
||||||
),
|
|
||||||
'view' => 1,
|
|
||||||
'form' => array (
|
|
||||||
'modify' => 1,
|
|
||||||
'create' => 1
|
|
||||||
)
|
|
||||||
),
|
|
||||||
'givenName' => array (
|
'givenName' => array (
|
||||||
'label' => _('Prenom'),
|
'label' => _('Prenom'),
|
||||||
'ldap_type' => 'ascii',
|
'ldap_type' => 'ascii',
|
||||||
|
@ -160,6 +142,27 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
|
||||||
'create' => 1
|
'create' => 1
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
'cn' => array (
|
||||||
|
'label' => _('Nom complet'),
|
||||||
|
'ldap_type' => 'ascii',
|
||||||
|
'html_type' => 'text',
|
||||||
|
'html_options' => array(
|
||||||
|
'generate_value_format' => '%{givenName} %{sn}',
|
||||||
|
'autoGenerateOnModify' => false // default : false
|
||||||
|
),
|
||||||
|
'required' => 1,
|
||||||
|
'validation' => 'valid',
|
||||||
|
'rights' => array(
|
||||||
|
'self' => 'w',
|
||||||
|
'user' => 'r',
|
||||||
|
'admin' => 'w'
|
||||||
|
),
|
||||||
|
'view' => 1,
|
||||||
|
'form' => array (
|
||||||
|
'modify' => 1,
|
||||||
|
'create' => 1
|
||||||
|
)
|
||||||
|
),
|
||||||
'gidNumber' => array (
|
'gidNumber' => array (
|
||||||
'label' => _('Groupe principal'),
|
'label' => _('Groupe principal'),
|
||||||
'ldap_type' => 'numeric',
|
'ldap_type' => 'numeric',
|
||||||
|
@ -254,6 +257,10 @@ $GLOBALS['LSobjects']['LSeepeople'] = array (
|
||||||
'label' => _('Adresse e-mail'),
|
'label' => _('Adresse e-mail'),
|
||||||
'ldap_type' => 'ascii',
|
'ldap_type' => 'ascii',
|
||||||
'html_type' => 'text',
|
'html_type' => 'text',
|
||||||
|
'html_options' => array(
|
||||||
|
'generate_value_format' => '%{uid}@ls.com',
|
||||||
|
'autoGenerateOnModify' => true
|
||||||
|
),
|
||||||
'required' => 1,
|
'required' => 1,
|
||||||
'check_data' => array (
|
'check_data' => array (
|
||||||
'email' => array(
|
'email' => array(
|
||||||
|
|
|
@ -110,6 +110,7 @@ define('LS_CSS_DIR', 'templates/css/');
|
||||||
$GLOBALS['defaultJSscipts']=array(
|
$GLOBALS['defaultJSscipts']=array(
|
||||||
'mootools-core.js',
|
'mootools-core.js',
|
||||||
'mootools-more.js',
|
'mootools-more.js',
|
||||||
|
'functions.js',
|
||||||
'LSdefault.js'
|
'LSdefault.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,10 @@ class LSformElement_text extends LSformElement {
|
||||||
$return = $this -> getLabelInfos();
|
$return = $this -> getLabelInfos();
|
||||||
// value
|
// value
|
||||||
if (!$this -> isFreeze()) {
|
if (!$this -> isFreeze()) {
|
||||||
$return['html'] = "<ul class='LSform'>\n";
|
$return['html'] = "<ul class='LSform LSformElement_text'>\n";
|
||||||
|
if ($this -> params['html_options']['generate_value_format']!="") {
|
||||||
|
$GLOBALS['LSsession'] -> addJSconfigParam($this -> name,$this -> params['html_options']);
|
||||||
|
}
|
||||||
if (empty($this -> values)) {
|
if (empty($this -> values)) {
|
||||||
$return['html'] .= "<li>".$this -> getEmptyField()."</li>\n";
|
$return['html'] .= "<li>".$this -> getEmptyField()."</li>\n";
|
||||||
}
|
}
|
||||||
|
@ -51,19 +54,21 @@ class LSformElement_text extends LSformElement {
|
||||||
foreach ($this -> values as $value) {
|
foreach ($this -> values as $value) {
|
||||||
$multiple = $this -> getMultipleData();
|
$multiple = $this -> getMultipleData();
|
||||||
$id = "LSform_".$this -> name."_".rand();
|
$id = "LSform_".$this -> name."_".rand();
|
||||||
$return['html'] .= "<li><input type='text' name='".$this -> name."[]' value=\"".$value."\" id='".$id."'>".$multiple."</li>\n";
|
$return['html'] .= "<li><input type='text' name='".$this -> name."[]' value=\"".$value."\" id='".$id."' class='LSformElement_text' />".$multiple."</li>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return['html'] .= "</ul>\n";
|
$return['html'] .= "</ul>\n";
|
||||||
|
$GLOBALS['LSsession'] -> addJSscript('LSformElement_text_field.js');
|
||||||
|
$GLOBALS['LSsession'] -> addJSscript('LSformElement_text.js');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$return['html'] = "<ul class='LSform'>\n";
|
$return['html'] = "<ul class='LSform LSformElement_text'>\n";
|
||||||
if (empty($this -> values)) {
|
if (empty($this -> values)) {
|
||||||
$return['html'] .= "<li>"._('Aucune valeur definie')."</li>\n";
|
$return['html'] .= "<li><span class='LSformElement_text'>"._('Aucune valeur definie')."</span><input type='hidden' name='".$this -> name."[]' class='LSformElement_text' value=''/></li>\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
foreach ($this -> values as $value) {
|
foreach ($this -> values as $value) {
|
||||||
$return['html'] .= "<li>".$value."</li>\n";
|
$return['html'] .= "<li><span class='LSformElement_text'>".$value."</span><input type='hidden' name='".$this -> name."[]' class='LSformElement_text' value=\"$value\"/></li>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return['html'] .= "</ul>\n";
|
$return['html'] .= "</ul>\n";
|
||||||
|
@ -78,7 +83,7 @@ class LSformElement_text extends LSformElement {
|
||||||
*/
|
*/
|
||||||
function getEmptyField() {
|
function getEmptyField() {
|
||||||
$multiple = $this -> getMultipleData();
|
$multiple = $this -> getMultipleData();
|
||||||
return "<input type='text' name='".$this -> name."[]' id='LSform_".$this -> name."_".rand()."'>".$multiple;
|
return "<input type='text' name='".$this -> name."[]' id='LSform_".$this -> name."_".rand()."' class='LSformElement_text' />".$multiple;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,18 +57,34 @@ var LSconfirmBox = new Class({
|
||||||
open: new Fx.Morph(this.box, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onComplete: this.displayContent.bind(this)}),
|
open: new Fx.Morph(this.box, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onComplete: this.displayContent.bind(this)}),
|
||||||
close: new Fx.Morph(this.box, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onComplete: this.onClose.bind(this)})
|
close: new Fx.Morph(this.box, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onComplete: this.onClose.bind(this)})
|
||||||
};
|
};
|
||||||
|
this._scrolling=0;
|
||||||
},
|
},
|
||||||
|
|
||||||
display: function() {
|
display: function() {
|
||||||
this.box.setStyle('display','block');
|
this.box.setStyle('display','block');
|
||||||
this.position(true);
|
this.position(true);
|
||||||
window.addEvent('resize', this.position.bind(this));
|
window.addEvent('resize', this.position.bind(this));
|
||||||
|
window.addEvent('scroll', this.positionWhenScrolling.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
positionWhenScrolling: function(oldValue) {
|
||||||
|
if (this._scrolling==0||$type(oldValue)) {
|
||||||
|
this._scrolling = 1;
|
||||||
|
var current = window.getScrollTop().toInt();
|
||||||
|
if (oldValue == current) {
|
||||||
|
this.position();
|
||||||
|
this._scrolling=0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.positionWhenScrolling.delay(200,this,current);
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
displayContent: function() {
|
displayContent: function() {
|
||||||
[this.title, this.closeBtn, this.text, this.btnsBox].each(function(el) {
|
[this.title, this.closeBtn, this.text, this.btnsBox].each(function(el) {
|
||||||
var fx = new Fx.Tween(el,{duration: 200});
|
var fx = new Fx.Tween(el,{duration: 200});
|
||||||
fx.start('opacity',0,1);
|
fx.start('opacity',1);
|
||||||
},this);
|
},this);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -138,19 +154,13 @@ var LSconfirmBox = new Class({
|
||||||
},
|
},
|
||||||
|
|
||||||
confirm: function() {
|
confirm: function() {
|
||||||
if (this._options.onConfirm) {
|
|
||||||
try {
|
|
||||||
this._options.onConfirm();
|
|
||||||
}
|
|
||||||
catch (e){
|
|
||||||
console.log('onConfirm : rater');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.hide();
|
this.hide();
|
||||||
|
if (this._options.onConfirm) {
|
||||||
|
$try(this._options.onConfirm);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
cancel: function() {
|
cancel: function() {
|
||||||
this.hide();
|
this.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -148,14 +148,7 @@ var LSdefault = new Class({
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEvent(window.ie ? 'load' : 'domready', function() {
|
window.addEvent(window.ie ? 'load' : 'domready', function() {
|
||||||
varLSdefault = new LSdefault();
|
varLSdefault = new LSdefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
var LSdebug_active = 0;
|
|
||||||
|
|
||||||
function LSdebug() {
|
|
||||||
if (LSdebug_active != 1) return;
|
|
||||||
if (typeof console == 'undefined') return;
|
|
||||||
console.log.apply(this, arguments);
|
|
||||||
}
|
|
||||||
|
|
56
trunk/includes/js/LSformElement_text.js
Normal file
56
trunk/includes/js/LSformElement_text.js
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
var LSformElement_text = new Class({
|
||||||
|
initialize: function(){
|
||||||
|
this.fields = new Hash();
|
||||||
|
this.initialiseLSformElement_text();
|
||||||
|
},
|
||||||
|
|
||||||
|
initialiseLSformElement_text: function(el) {
|
||||||
|
if (typeof(el) == 'undefined') {
|
||||||
|
el = document;
|
||||||
|
}
|
||||||
|
var getName = /^(.*)\[\]$/
|
||||||
|
el.getElements('ul.LSformElement_text').each(function(ul) {
|
||||||
|
var first = ul.getElement('input.LSformElement_text');
|
||||||
|
if ($type(first)) {
|
||||||
|
var name = getName.exec(first.name)[1];
|
||||||
|
this.fields[name] = new LSformElement_text_field(name,first,this);
|
||||||
|
}
|
||||||
|
}, this);
|
||||||
|
this.fields.each(function(el) {
|
||||||
|
el.start.bind(el)();
|
||||||
|
},this);
|
||||||
|
},
|
||||||
|
|
||||||
|
getDependsFields: function(format) {
|
||||||
|
var retval=new Array();
|
||||||
|
var find = 1;
|
||||||
|
var getMotif = /%{([A-Za-z0-9]+)}/
|
||||||
|
var ch = null;
|
||||||
|
while (find) {
|
||||||
|
ch = getMotif.exec(format);
|
||||||
|
if ($type(ch)) {
|
||||||
|
retval.include(ch[1]);
|
||||||
|
format=format.replace (
|
||||||
|
new RegExp('%{'+ch[1]+'}'),
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
find=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
},
|
||||||
|
|
||||||
|
getInput: function(name) {
|
||||||
|
return this.fields[name].getInput();
|
||||||
|
},
|
||||||
|
|
||||||
|
getValue: function(name) {
|
||||||
|
return this.fields[name].getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
window.addEvent(window.ie ? 'load' : 'domready', function() {
|
||||||
|
varLSformElement_text = new LSformElement_text();
|
||||||
|
});
|
53
trunk/includes/js/LSformElement_text_field.js
Normal file
53
trunk/includes/js/LSformElement_text_field.js
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
var LSformElement_text_field = new Class({
|
||||||
|
initialize: function(name,input,parent){
|
||||||
|
this.name = name;
|
||||||
|
this.parent = parent;
|
||||||
|
this.input = input;
|
||||||
|
this.params = varLSdefault.LSjsConfig[this.name];
|
||||||
|
this._auto=1;
|
||||||
|
this.input.addEvent('change',this.unauto.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
start: function() {
|
||||||
|
var force=0;
|
||||||
|
if ($type(this.params)) {
|
||||||
|
if (this.params.autoGenerateOnModify) {
|
||||||
|
force = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((this.input.value=='')||(force)) {
|
||||||
|
if ($type(this.params)) {
|
||||||
|
if ($type(this.params['generate_value_format'])) {
|
||||||
|
this.format = this.params['generate_value_format'];
|
||||||
|
this.dependsFields = this.parent.getDependsFields(this.format);
|
||||||
|
this.dependsFields.each(function(el) {
|
||||||
|
var input = this.parent.getInput.bind(this.parent)(el);
|
||||||
|
input.addEvent('change',this.refreshValue.bind(this));
|
||||||
|
},this);
|
||||||
|
this.fx = new Fx.Tween(this.input,{property: 'background-color',duration:600});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getInput: function() {
|
||||||
|
return this.input;
|
||||||
|
},
|
||||||
|
|
||||||
|
getValue: function() {
|
||||||
|
return this.input.value;
|
||||||
|
},
|
||||||
|
|
||||||
|
refreshValue: function() {
|
||||||
|
if (this._auto) {
|
||||||
|
this.input.value=getFData(this.format,this.parent,'getValue');
|
||||||
|
this.oldBg=this.input.getStyle('background-color');
|
||||||
|
this.fx.start('#f16d6d');
|
||||||
|
(function() {this.fx.start(this.oldBg);}).delay(1000,this);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
unauto: function() {
|
||||||
|
this._auto=0;
|
||||||
|
}
|
||||||
|
});
|
|
@ -52,7 +52,9 @@ var LSsmoothbox = new Class({
|
||||||
};
|
};
|
||||||
|
|
||||||
this._open=0;
|
this._open=0;
|
||||||
|
this._scrolling=0;
|
||||||
window.addEvent('resize', this.position.bind(this));
|
window.addEvent('resize', this.position.bind(this));
|
||||||
|
window.addEvent('scroll', this.positionWhenScrolling.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
position: function(){
|
position: function(){
|
||||||
|
@ -69,6 +71,20 @@ var LSsmoothbox = new Class({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
positionWhenScrolling: function(oldValue) {
|
||||||
|
if (this._scrolling==0||$type(oldValue)) {
|
||||||
|
this._scrolling = 1;
|
||||||
|
var current = window.getScrollTop().toInt();
|
||||||
|
if (oldValue == current) {
|
||||||
|
this.position();
|
||||||
|
this._scrolling=0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.positionWhenScrolling.delay(200,this,current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
overPosition: function() {
|
overPosition: function() {
|
||||||
var h = window.getScrollHeight()+'px';
|
var h = window.getScrollHeight()+'px';
|
||||||
var w = window.getScrollWidth()+'px';
|
var w = window.getScrollWidth()+'px';
|
||||||
|
|
75
trunk/includes/js/functions.js
Normal file
75
trunk/includes/js/functions.js
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
var LSdebug_active = 0;
|
||||||
|
|
||||||
|
function LSdebug() {
|
||||||
|
if (LSdebug_active != 1) return;
|
||||||
|
if (typeof console == 'undefined') return;
|
||||||
|
console.log.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construction d'une chaine formatée
|
||||||
|
*
|
||||||
|
* Cette fonction retourne la valeur d'une chaine formatée selon le format
|
||||||
|
* et les données passés en paramètre.
|
||||||
|
*
|
||||||
|
* @author Benjamin Renard <brenard@easter-eggs.com>
|
||||||
|
*
|
||||||
|
* @param[in] $format string Format de la chaine
|
||||||
|
* @param[in] $data mixed Les données pour composés la chaine
|
||||||
|
* Ce paramètre peut être un tableau de string ou un objet.
|
||||||
|
* @param[in] $meth string Le nom de la methode de l'objet(s) à appeler pour
|
||||||
|
* obtenir la valeur de remplacement dans la chaine formatée.
|
||||||
|
*
|
||||||
|
* Exemple d'appel :
|
||||||
|
* getFData('%{test1} je %{test2}',{
|
||||||
|
* getValue: function(val) {
|
||||||
|
* var data = {
|
||||||
|
* test1: 'val_test1',
|
||||||
|
* test2: 'val_test2'
|
||||||
|
* };
|
||||||
|
* return data[val];
|
||||||
|
* }
|
||||||
|
* },'getValue');
|
||||||
|
*
|
||||||
|
* @retval string La chaine formatée
|
||||||
|
*/
|
||||||
|
function getFData(format,data,meth) {
|
||||||
|
var getMotif = /%{([A-Za-z0-9]+)}/
|
||||||
|
var find=1;
|
||||||
|
if(($type(data)=='object') || ($type(data)=='array')) {
|
||||||
|
if ($type(data[meth])!='function') {
|
||||||
|
while (find) {
|
||||||
|
var ch = getMotif.exec(format);
|
||||||
|
if ($type(ch)) {
|
||||||
|
format=format.replace (
|
||||||
|
new RegExp('%{'+ch[1]+'}'),
|
||||||
|
data[ch[1]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
find=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
while (find) {
|
||||||
|
var ch = getMotif.exec(format);
|
||||||
|
if ($type(ch)) {
|
||||||
|
try {
|
||||||
|
format=format.replace (
|
||||||
|
new RegExp('%{'+ch[1]+'}'),
|
||||||
|
data[meth](ch[1])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
find=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return format;
|
||||||
|
}
|
Loading…
Reference in a new issue