Lemonldap::NG::Manager::Build - Static files generator of Lemonldap::NG Web-SSO system.


  use Lemonldap::NG::Manager::Build;
    structFile            => "site/static/struct.json",
    confTreeFile          => "site/static/js/conftree.js",
    managerConstantsFile  => "lib/Lemonldap/NG/Manager/",
    managerAttributesFile => 'lib/Lemonldap/NG/Manager/',
    defaultValuesFile     => "lib/Lemonldap/NG/Common/Conf/",
    firstLmConfFile       => "_example/conf/lmConf-1.js",


Lemonldap::NG::Manager::Build is used only to build javascript files and Lemonldap::NG constants Perl files. It has to be launched after each change.


To add a new parameter, you have to:

declare it in Manager/Build/;
declare its position in the tree in Manager/Build/ (or Manager/Build/ for complex nodes);
refresh files using this (or launch any build makefile target at the root of the Lemonldap::NG project sources).

See below for details.

Attribute declaration

Set your new attribute as a key of attributes() function that points to a hash ref containing:

type (required):

the type of the content. It must be declared in sub types() in the same file (except if attribute embeds its own tests) and must correspond to a form stored in the static/forms/ directory;

help (optional):

the relative HTML path to the help page (relative to /doc/pages/documentation/<version>/);

default (recommended):

a default value to set if not defined;

select (optional):

required only if type is `select`. In this case, it must contains an array of { k => <keyName>, v => <display name> } hashref

documentation (recommended):

some words for other developpers

test (optional):

if test is not defined for this type or if test must be more restrictive, set her a regular expression or a subroutine. Arguments passed to subroutine are (keyValue, newConf, currentKey), it returns 2 arguments: a boolean result and a message (if non empty will be displayed as warning or error depending of result);

msgFail (optional):

for regexp based tests, message to display in case of error. Words to translate have to be written as so: __toTranslate__;

keyTest (optional):

for keys/values attributes, test to be applied on key;

keyMsgFail (optional):

for regexp based key tests, same as msgFail for keys test;

If you decide to declare a new type, you have to declare the following properties:

test, msgFail, keyTest, keyMsgFail as shown above,
form: the form to use if it doesn't have the same name.

Tree positioning

The tree is now very simple: it contains nodes and leaf. Leaf are designed only by their attribute name. All description must be done in the file described above. Nodes are array member designed as this:

    title => 'titleToTranslate',
    help  => 'helpUrl',
    form  => 'relativeUrl',
    nodes => [
      ... nodes or leaf ...


title (required):

it must contain an entry of static/languages/lang.json

help (recommended):

as above, the relative HTML path to the help page (relative to /doc/pages/documentation/<version>/);

form (optional):

the name of a static/forms/<name>.html file


array of sub nodes and leaf attached to this node


must never be used in conjunction with nodes. Array of leafs only to be displayed in the same form


array of sub nodes that will be displayed with a filter. Not yet documented here, see the source code of site/static/js/filterFunctions.js.


filter entry in site/static/js/filterFunctions.js for the same feature.




Clement Oudot, <>
François-Xavier Deltombe, <>
Xavier Guimard, <>
Thomas Chemineau, <>


Use OW2 system to report bug or ask for features:


Lemonldap::NG is available at


This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see