diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine.htm b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine.htm deleted file mode 100644 index 7eb2822..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine.htm +++ /dev/null @@ -1,811 +0,0 @@ - - - - - - - - - - - - Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine - - - - - - - - - - - - - - - - - - - -
-
SensioLabs

Since - 1998, SensioLabs has been promoting the Open-Source software movement -by providing quality and performant web application development -products, trainings, and consulting. SensioLabs also supports multiple -important Open-Source projects.
Learn more

In the Spotlight

SensioLabsInsight
Blackfire

Our Blogs

    - Symfony, - SensioLabs, - Insight, - and Blackfire. -
- -
-
-
-
-
- a SensioLabs Product -
-
- -

- The flexible, fast, and secure
template engine for PHP -

-
- - -
-
-
-
-
-
- - You are reading the documentation for Twig 2.x. - - Switch to the documentation for Twig - 1.x. -
- - -
- - -
-

Questions & Feedback

- - -

License

-
- Twig documentation is licensed under the - new BSD license. -
-
-
- -
-
-

Twig for Developers

-

This chapter describes the API to Twig and not the template language. It will -be most useful as reference to those implementing the template interface to -the application and not those who are creating Twig templates.

-
-

Basics

-

Twig uses a central object called the environment (of class -Twig_Environment). Instances of this class are used to store the -configuration and extensions, and are used to load templates from the file -system or other locations.

-

Most applications will create one Twig_Environment object on application -initialization and use that to load templates. In some cases it's however -useful to have multiple environments side by side, if different configurations -are in use.

-

The simplest way to configure Twig to load templates for your application -looks roughly like this:

-
1
-2
-3
-4
-5
-6
require_once '/path/to/vendor/autoload.php';
-
-$loader = new Twig_Loader_Filesystem('/path/to/templates');
-$twig = new Twig_Environment($loader, array(
-    'cache' => '/path/to/compilation_cache',
-));
-
-
-

This will create a template environment with the default settings and a loader -that looks up the templates in the /path/to/templates/ folder. Different -loaders are available and you can also write your own if you want to load -templates from a database or other resources.

-
-

Note

-

Notice that the second argument of the environment is an array of options. -The cache option is a compilation cache directory, where Twig caches -the compiled templates to avoid the parsing phase for sub-sequent -requests. It is very different from the cache you might want to add for -the evaluated templates. For such a need, you can use any available PHP -cache library.

-
-
-
-

Rendering Templates

-

To load a template from a Twig environment, call the load() method which -returns a Twig_TemplateWrapper instance:

-
$template = $twig->load('index.html');
-
-
-

To render the template with some variables, call the render() method:

-
echo $template->render(array('the' => 'variables', 'go' => 'here'));
-
-
-
-

Note

-

The display() method is a shortcut to output the template directly.

-
-

You can also load and render the template in one fell swoop:

-
echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));
-
-
-

If a template defines blocks, they can be rendered individually via the -renderBlock() call:

-
echo $template->renderBlock('block_name', array('the' => 'variables', 'go' => 'here'));
-
-
-
-
-

Environment Options

-

When creating a new Twig_Environment instance, you can pass an array of -options as the constructor second argument:

-
$twig = new Twig_Environment($loader, array('debug' => true));
-
-
-

The following options are available:

-
    -
  • debug boolean

    -

    When set to true, the generated templates have a -__toString() method that you can use to display the generated nodes -(default to false).

    -
  • -
  • charset string (defaults to utf-8)

    -

    The charset used by the templates.

    -
  • -
  • base_template_class string (defaults to Twig_Template)

    -

    The base template class to use for generated -templates.

    -
  • -
  • cache string or false

    -

    An absolute path where to store the compiled templates, or -false to disable caching (which is the default).

    -
  • -
  • auto_reload boolean

    -

    When developing with Twig, it's useful to recompile the -template whenever the source code changes. If you don't provide a value for -the auto_reload option, it will be determined automatically based on the -debug value.

    -
  • -
  • strict_variables boolean

    -

    If set to false, Twig will silently ignore invalid -variables (variables and or attributes/methods that do not exist) and -replace them with a null value. When set to true, Twig throws an -exception instead (default to false).

    -
  • -
  • autoescape string

    -

    Sets the default auto-escaping strategy (name, html, js, css, -url, html_attr, or a PHP callback that takes the template "filename" -and returns the escaping strategy to use -- the callback cannot be a function -name to avoid collision with built-in escaping strategies); set it to -false to disable auto-escaping. The name escaping strategy determines -the escaping strategy to use for a template based on the template filename -extension (this strategy does not incur any overhead at runtime as -auto-escaping is done at compilation time.)

    -
  • -
  • optimizations integer

    -

    A flag that indicates which optimizations to apply -(default to -1 -- all optimizations are enabled; set it to 0 to -disable).

    -
  • -
-
-
-

Loaders

-

Loaders are responsible for loading templates from a resource such as the file -system.

-
-

Compilation Cache

-

All template loaders can cache the compiled templates on the filesystem for -future reuse. It speeds up Twig a lot as templates are only compiled once; and -the performance boost is even larger if you use a PHP accelerator such as APC. -See the cache and auto_reload options of Twig_Environment above -for more information.

-
-
-

Built-in Loaders

-

Here is a list of the built-in loaders Twig provides:

-
-

Twig_Loader_Filesystem

-

Twig_Loader_Filesystem loads templates from the file system. This loader -can find templates in folders on the file system and is the preferred way to -load them:

-
$loader = new Twig_Loader_Filesystem($templateDir);
-
-
-

It can also look for templates in an array of directories:

-
$loader = new Twig_Loader_Filesystem(array($templateDir1, $templateDir2));
-
-
-

With such a configuration, Twig will first look for templates in -$templateDir1 and if they do not exist, it will fallback to look for them -in the $templateDir2.

-

You can add or prepend paths via the addPath() and prependPath() -methods:

-
$loader->addPath($templateDir3);
-$loader->prependPath($templateDir4);
-
-
-

The filesystem loader also supports namespaced templates. This allows to group -your templates under different namespaces which have their own template paths.

-

When using the setPaths(), addPath(), and prependPath() methods, -specify the namespace as the second argument (when not specified, these -methods act on the "main" namespace):

-
$loader->addPath($templateDir, 'admin');
-
-
-

Namespaced templates can be accessed via the special -@namespace_name/template_path notation:

-
$twig->render('@admin/index.html', array());
-
-
-

Twig_Loader_Filesystem support absolute and relative paths. Using relative -paths is preferred as it makes the cache keys independent of the project root -directory (for instance, it allows warming the cache from a build server where -the directory might be different from the one used on production servers):

-
$loader = new Twig_Loader_Filesystem('templates', getcwd().'/..');
-
-
-
-

Note

-

When not passing the root path as a second argument, Twig uses getcwd() -for relative paths.

-
-
-
-

Twig_Loader_Array

-

Twig_Loader_Array loads a template from a PHP array. It's passed an array -of strings bound to template names:

-
1
-2
-3
-4
-5
-6
$loader = new Twig_Loader_Array(array(
-    'index.html' => 'Hello {{ name }}!',
-));
-$twig = new Twig_Environment($loader);
-
-echo $twig->render('index.html', array('name' => 'Fabien'));
-
-
-

This loader is very useful for unit testing. It can also be used for small -projects where storing all templates in a single PHP file might make sense.

-
-

Tip

-

When using the Array loader with a cache mechanism, you -should know that a new cache key is generated each time a template content -"changes" (the cache key being the source code of the template). If you -don't want to see your cache grows out of control, you need to take care -of clearing the old cache file by yourself.

-
-
-
-

Twig_Loader_Chain

-

Twig_Loader_Chain delegates the loading of templates to other loaders:

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
$loader1 = new Twig_Loader_Array(array(
-    'base.html' => '{% block content %}{% endblock %}',
-));
-$loader2 = new Twig_Loader_Array(array(
-    'index.html' => '{% extends "base.html" %}{% block content %}Hello {{ name }}{% endblock %}',
-    'base.html'  => 'Will never be loaded',
-));
-
-$loader = new Twig_Loader_Chain(array($loader1, $loader2));
-
-$twig = new Twig_Environment($loader);
-
-
-

When looking for a template, Twig will try each loader in turn and it will -return as soon as the template is found. When rendering the index.html -template from the above example, Twig will load it with $loader2 but the -base.html template will be loaded from $loader1.

-

Twig_Loader_Chain accepts any loader that implements -Twig_LoaderInterface.

-
-

Note

-

You can also add loaders via the addLoader() method.

-
-
-
-
-

Create your own Loader

-

All loaders implement the Twig_LoaderInterface:

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
interface Twig_LoaderInterface
-{
-    /**
-     * Returns the source context for a given template logical name.
-     *
-     * @param string $name The template logical name
-     *
-     * @return Twig_Source
-     *
-     * @throws Twig_Error_Loader When $name is not found
-     */
-    public function getSourceContext($name);
-
-    /**
-     * Gets the cache key to use for the cache for a given template name.
-     *
-     * @param string $name The name of the template to load
-     *
-     * @return string The cache key
-     *
-     * @throws Twig_Error_Loader When $name is not found
-     */
-    public function getCacheKey($name);
-
-    /**
-     * Returns true if the template is still fresh.
-     *
-     * @param string    $name The template name
-     * @param timestamp $time The last modification time of the cached template
-     *
-     * @return bool    true if the template is fresh, false otherwise
-     *
-     * @throws Twig_Error_Loader When $name is not found
-     */
-    public function isFresh($name, $time);
-
-    /**
-     * Check if we have the source code of a template, given its name.
-     *
-     * @param string $name The name of the template to check if we can load
-     *
-     * @return bool    If the template source code is handled by this loader or not
-     */
-    public function exists($name);
-}
-
-
-

The isFresh() method must return true if the current cached template -is still fresh, given the last modification time, or false otherwise.

-

The getSourceContext() method must return an instance of Twig_Source.

-
-
-
-

Using Extensions

-

Twig extensions are packages that add new features to Twig. Using an -extension is as simple as using the addExtension() method:

-
$twig->addExtension(new Twig_Extension_Sandbox());
-
-
-

Twig comes bundled with the following extensions:

-
    -
  • Twig_Extension_Core: Defines all the core features of Twig.
  • -
  • Twig_Extension_Escaper: Adds automatic output-escaping and the possibility -to escape/unescape blocks of code.
  • -
  • Twig_Extension_Sandbox: Adds a sandbox mode to the default Twig -environment, making it safe to evaluate untrusted code.
  • -
  • Twig_Extension_Profiler: Enabled the built-in Twig profiler.
  • -
  • Twig_Extension_Optimizer: Optimizes the node tree before compilation.
  • -
-

The core, escaper, and optimizer extensions do not need to be added to the -Twig environment, as they are registered by default.

-
-
-

Built-in Extensions

-

This section describes the features added by the built-in extensions.

-
-

Tip

-

Read the chapter about extending Twig to learn how to create your own -extensions.

-
-
-

Core Extension

-

The core extension defines all the core features of Twig:

- -
-
-

Escaper Extension

-

The escaper extension adds automatic output escaping to Twig. It defines a -tag, autoescape, and a filter, raw.

-

When creating the escaper extension, you can switch on or off the global -output escaping strategy:

-
$escaper = new Twig_Extension_Escaper('html');
-$twig->addExtension($escaper);
-
-
-

If set to html, all variables in templates are escaped (using the html -escaping strategy), except those using the raw filter:

-
1
{{ article.to_html|raw }}
-
-
-

You can also change the escaping mode locally by using the autoescape tag:

-
1
-2
-3
-4
-5
{% autoescape 'html' %}
-    {{ var }}
-    {{ var|raw }}      {# var won't be escaped #}
-    {{ var|escape }}   {# var won't be double-escaped #}
-{% endautoescape %}
-
-
-
-

Warning

-

The autoescape tag has no effect on included files.

-
-

The escaping rules are implemented as follows:

-
    -
  • Literals (integers, booleans, arrays, ...) used in the template directly as -variables or filter arguments are never automatically escaped:

    -
    1
    -2
    -3
    -4
    {{ "Twig<br />" }} {# won't be escaped #}
    -
    -{% set text = "Twig<br />" %}
    -{{ text }} {# will be escaped #}
    -
    -
    -
  • -
  • Expressions which the result is always a literal or a variable marked safe -are never automatically escaped:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    {{ foo ? "Twig<br />" : "<br />Twig" }} {# won't be escaped #}
    -
    -{% set text = "Twig<br />" %}
    -{{ foo ? text : "<br />Twig" }} {# will be escaped #}
    -
    -{% set text = "Twig<br />" %}
    -{{ foo ? text|raw : "<br />Twig" }} {# won't be escaped #}
    -
    -{% set text = "Twig<br />" %}
    -{{ foo ? text|escape : "<br />Twig" }} {# the result of the expression won't be escaped #}
    -
    -
    -
  • -
  • Escaping is applied before printing, after any other filter is applied:

    -
    1
    {{ var|upper }} {# is equivalent to {{ var|upper|escape }} #}
    -
    -
    -
  • -
  • The raw filter should only be used at the end of the filter chain:

    -
    1
    -2
    -3
    {{ var|raw|upper }} {# will be escaped #}
    -
    -{{ var|upper|raw }} {# won't be escaped #}
    -
    -
    -
  • -
  • Automatic escaping is not applied if the last filter in the chain is marked -safe for the current context (e.g. html or js). escape and -escape('html') are marked safe for HTML, escape('js') is marked -safe for JavaScript, raw is marked safe for everything.

    -
    1
    -2
    -3
    -4
    -5
    {% autoescape 'js' %}
    -    {{ var|escape('html') }} {# will be escaped for HTML and JavaScript #}
    -    {{ var }} {# will be escaped for JavaScript #}
    -    {{ var|escape('js') }} {# won't be double-escaped #}
    -{% endautoescape %}
    -
    -
    -
  • -
-
-

Note

-

Note that autoescaping has some limitations as escaping is applied on -expressions after evaluation. For instance, when working with -concatenation, {{ foo|raw ~ bar }} won't give the expected result as -escaping is applied on the result of the concatenation, not on the -individual variables (so, the raw filter won't have any effect here).

-
-
-
-

Sandbox Extension

-

The sandbox extension can be used to evaluate untrusted code. Access to -unsafe attributes and methods is prohibited. The sandbox security is managed -by a policy instance. By default, Twig comes with one policy class: -Twig_Sandbox_SecurityPolicy. This class allows you to white-list some -tags, filters, properties, and methods:

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
$tags = array('if');
-$filters = array('upper');
-$methods = array(
-    'Article' => array('getTitle', 'getBody'),
-);
-$properties = array(
-    'Article' => array('title', 'body'),
-);
-$functions = array('range');
-$policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);
-
-
-

With the previous configuration, the security policy will only allow usage of -the if tag, and the upper filter. Moreover, the templates will only be -able to call the getTitle() and getBody() methods on Article -objects, and the title and body public properties. Everything else -won't be allowed and will generate a Twig_Sandbox_SecurityError exception.

-

The policy object is the first argument of the sandbox constructor:

-
$sandbox = new Twig_Extension_Sandbox($policy);
-$twig->addExtension($sandbox);
-
-
-

By default, the sandbox mode is disabled and should be enabled when including -untrusted template code by using the sandbox tag:

-
1
-2
-3
{% sandbox %}
-    {% include 'user.html' %}
-{% endsandbox %}
-
-
-

You can sandbox all templates by passing true as the second argument of -the extension constructor:

-
$sandbox = new Twig_Extension_Sandbox($policy, true);
-
-
-
-
-

Profiler Extension

-

The profiler extension enables a profiler for Twig templates; it should -only be used on your development machines as it adds some overhead:

-
1
-2
-3
-4
-5
$profile = new Twig_Profiler_Profile();
-$twig->addExtension(new Twig_Extension_Profiler($profile));
-
-$dumper = new Twig_Profiler_Dumper_Text();
-echo $dumper->dump($profile);
-
-
-

A profile contains information about time and memory consumption for template, -block, and macro executions.

-

You can also dump the data in a Blackfire.io -compatible format:

-
$dumper = new Twig_Profiler_Dumper_Blackfire();
-file_put_contents('/path/to/profile.prof', $dumper->dump($profile));
-
-
-

Upload the profile to visualize it (create a free account first):

-
1
blackfire --slot=7 upload /path/to/profile.prof
-
-
-
-
-

Optimizer Extension

-

The optimizer extension optimizes the node tree before compilation:

-
$twig->addExtension(new Twig_Extension_Optimizer());
-
-
-

By default, all optimizations are turned on. You can select the ones you want -to enable by passing them to the constructor:

-
$optimizer = new Twig_Extension_Optimizer(Twig_NodeVisitor_Optimizer::OPTIMIZE_FOR);
-
-$twig->addExtension($optimizer);
-
-
-

Twig supports the following optimizations:

-
    -
  • Twig_NodeVisitor_Optimizer::OPTIMIZE_ALL, enables all optimizations -(this is the default value).
  • -
  • Twig_NodeVisitor_Optimizer::OPTIMIZE_NONE, disables all optimizations. -This reduces the compilation time, but it can increase the execution time -and the consumed memory.
  • -
  • Twig_NodeVisitor_Optimizer::OPTIMIZE_FOR, optimizes the for tag by -removing the loop variable creation whenever possible.
  • -
  • Twig_NodeVisitor_Optimizer::OPTIMIZE_RAW_FILTER, removes the raw -filter whenever possible.
  • -
  • Twig_NodeVisitor_Optimizer::OPTIMIZE_VAR_ACCESS, simplifies the creation -and access of variables in the compiled templates whenever possible.
  • -
-
-
-
-

Exceptions

-

Twig can throw exceptions:

-
    -
  • Twig_Error: The base exception for all errors.
  • -
  • Twig_Error_Syntax: Thrown to tell the user that there is a problem with -the template syntax.
  • -
  • Twig_Error_Runtime: Thrown when an error occurs at runtime (when a filter -does not exist for instance).
  • -
  • Twig_Error_Loader: Thrown when an error occurs during template loading.
  • -
  • Twig_Sandbox_SecurityError: Thrown when an unallowed tag, filter, or -method is called in a sandboxed template.
  • -
-
-
- -
- - -
-
-
- Website powered by Symfony and Twig, deployed on -
- The Twig logo is © 2010-2017 SensioLabs -
-
-
- - - \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/base.css b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/base.css deleted file mode 100644 index 2eaba2e..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/base.css +++ /dev/null @@ -1,446 +0,0 @@ -html, body -{ - width: 100%; - height: 100%; - background-color: #d9dadb; -} - -body -{ - font: 1em Georgia, "Times New Roman", serif; - color: #626262; - text-align: left; -} - -h1, h2, h3, h4 -{ - font: 1em Georgia, "Times New Roman", serif; -} - -a -{ - color: #21A6A4; -} - -a:visited -{ - color: #004D7D; -} - -.clearfix:after { - content: "\0020"; - display: block; - height: 0; - clear: both; - visibility: hidden; - overflow: hidden; -} -.clearfix {display: inline-block;} -* html .clearfix {height: 1%;} -.clearfix {display: block;} - -.content -{ - width: 947px; - margin: 0 auto; - padding-left: 49px; -} - -.sensio_product -{ - position: absolute; - top: 50px; - right: 30px; -} - -.hd, .bd, .ft -{ - max-width: 1200px; - min-width: 996px; - width: 100%; - _width: expression(document.body.clientWidth >= 1200 ? "1200px": document.body.clientWidth <= 996 ? "996px" :"100%"); - margin: auto; - background-color: #fff; -} - -.hd -{ - background: #fff url("../images/background.png") repeat-x; -} - -.hd .illustration, .hd -{ - height:390px; -} - -.hd .content -{ - padding-top: 110px; - position: relative; -} - -.hd .logo_header -{ - float: left; - padding: 0px 25px 0 0; - height: 91px; - font-size: 76px; - font-family: Arial, sans-serif; - font-weight: bold; -} - -.hd .logo_header a -{ - color: #fff; - text-decoration: none; -} - -.hd .title_header -{ - font-family: Arial, sans-serif; - float: left; - height: 70px; - padding: 14px 0 0 27px; - border-left: 4px solid #8fe6e5; - color: #006f9f; - font-size: 28px; - line-height: 1em; - _line-height: 0.85em; - margin-top: 0px; -} - -.hd .title_header_home -{ - border-left: 4px solid #c4c3c3; -} - -.hd .title_header_home span -{ - color: #d6cecf; -} - -.hd .illustration -{ - background: transparent url(../images/logo.png) no-repeat center 2px; -} - -.menu -{ - padding-top: 95px; - width: 940px; - font-family: Arial, sans-serif; -} - -.menu li -{ - color: #ffffff; - font-size: 1.125em; - display: inline; - padding-right: 30px; -} - -.menu a -{ - color: #ffffff; - text-decoration: none; -} - -.menu a:hover -{ - color: #ffffff; - text-decoration: underline; -} - -.menu a.active -{ - color: #444; -} - -.bd .content -{ - padding-top: 20px; - padding-bottom: 40px; -} - -.bd .content li -{ - list-style: disc; - margin-left: 20px; - padding-bottom: 10px; -} - -.bd h1 -{ - padding: 20px 0 15px 0; - color: #21a6a4; - font-size: 2em; -} - -.bd h3 -{ - padding: 10px 0 5px 0; - color: #21a6a4; - font-size: 1.1em; -} - -.page_title -{ - font-family: Georgia, "Times New Roman", serif; - font-size: 1.79em; - margin-bottom: 40px; -} - -.intro -{ - padding-top: 25px; - width: 625px; - float: left; -} - -.links_intro -{ - padding: 20px 0 0 676px; -} - -.bd .content .links_intro li -{ - padding: 15px 0; - border-radius: 8px; - list-style: none; - margin-left: 0; - text-align: center; - margin-bottom: 20px; -} - -.bd .content .links_intro li a, .bd .content .links_intro li a:hover { - text-decoration: none; - color: #fff; - font-size: 23px; - font-weight: bold; - text-transform: uppercase; - font-family: Arial; -} - -.bd .content .links_intro li a img { - margin-left: 15px; -} - -.intro p -{ - color: #595959; - font-family: Georgia, "Times New Roman", serif; -} - -.box_content -{ - padding: 0 10px; - width: 939px; -} - -.important -{ - margin: 20px 0; - padding-top: 10px; - border-top: 1px solid #bcbcbc; - border-bottom: 1px solid #bcbcbc; -} - -.box_content div -{ - width: 260px; - float: left; -} - -.box_content div.middle -{ - padding: 0 69px; -} - -.box_content h3 -{ - color: #21a6a4; - font-weight: bold; - margin: 10px 0; -} - -.important h3 -{ - color: #db4528; - font-size: 1.27em; -} - -.box_content p -{ - margin: 10px 0 30px; -} - -.box_content p.last -{ - margin: 10px 0; -} - -.bd .author -{ - margin: 0; -} - -h2 -{ - font: 1em Georgia, "Times New Roman", serif; - color: #444; - margin-bottom: 5px; - padding: 15px 0 10px 0; - font-size: 1.4em; -} - -.ft { - font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; - font-size: 15px; - color: #ddd; - background-color: #000; -} - -.ft a { - text-decoration: none; - color: #ddd; -} - -.ft .sc { - width: 100px; - vertical-align: bottom; -} - -.ft .content -{ - padding-top: 20px; - padding-bottom: 20px; - font-size: 0.793em; -} - -em -{ - font-style: italic; -} - -strong -{ - font-weight: bold; -} - -p -{ - margin-bottom: 10px; -} - -.latest -{ - margin-top: 5px; - text-align: left; - font-size: 14px; - font-family: Georgia; - color: #fff; - margin-left: 38px; -} - -.latest a { - font-size: 14px !important; - font-family: Georgia !important; -} - -.contributors -{ - margin-left: 0; - margin-bottom: 0; - margin-top: 30px; - list-style-type: none; -} - -.bd .content .contributors li -{ - float: left; - margin-right: 50px; - margin-left: 0; - width: 250px; - height: 60px; - list-style-type: none; -} - -.contributors small -{ - font-size: 0.7em; - color: #313131; -} - -.contributors .gravatar -{ - float: left; - width: 50px; -} - - -.builtin-reference -{ - min-width: 120px; - float: left; - padding-right: 54px; - padding-bottom: 20px; -} - -.bd .content .builtin-reference li -{ - margin-left: 0; - list-style: none; - padding-bottom: 5px; -} - -.reference-column -{ - float: left; - padding-right: 20px; -} - -.offline-docs -{ - float: right; - padding: 20px; - margin-top: 10px; - width: 200px; - -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; - background: #eee; -} - -.bd .content .offline-docs ul -{ - margin-top: 10px; - text-align: center; -} - -.bd .content .offline-docs li -{ - margin: 10px; - list-style: none; - display: inline; -} - -.rotate-90 { - -ms-transform: rotate(90deg); - -webkit-transform: rotate(90deg); - transform: rotate(90deg); -} - -.alert { - background-color: #d9edf7; - border-radius: 4px; - padding: 15px; -} - -a.sensiolabs { - font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; - color: #fff; - letter-spacing: -1px; - font-weight: bold; -} - -.sensiolabs .brand { - color: #92db33; -} diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/blackfire.png b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/blackfire.png deleted file mode 100644 index ae9f0cb..0000000 Binary files a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/blackfire.png and /dev/null differ diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/code.css b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/code.css deleted file mode 100644 index 4b1c8c3..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/code.css +++ /dev/null @@ -1,496 +0,0 @@ -img -{ - vertical-align: middle; -} - -ul.error_list -{ - margin: 0; - list-style: none; - color: #f22; -} - -ul.error_list li -{ - list-style: none; -} - -pre -{ - margin: 0; - background-color: #000; - overflow: auto; - line-height: 1.3em; - font-size: 14px; - color: #fff; - background-color: #232125; - padding: 0.7em; - margin-bottom: 10px; -} - -pre code -{ - background-color: #000; -} - -pre.command-line -{ - background-color: #333; - color: #eee; - padding-bottom: 10px; -} - -pre.command-line code -{ - background-color: #333; -} - -blockquote -{ - padding: 2px 20px 5px 45px; - margin: 15px 0; - background-color: #fff; -} - -div.admonition-wrapper -{ - margin: 20px 0; - padding: 15px; - padding-right: 0; - position: relative; -} - -.body-web div.admonition-wrapper -{ - overflow: auto; -} - -div.admonition -{ - background-color: #F5F5F5; - padding: 35px 35px 13px 50px; -} - -div.note -{ - background: url(../images/admonition/note.gif) no-repeat 0 0; - height: 51px; left: 0; position: absolute; top: 0; width: 51px; -} - -div.caution -{ - background: url(../images/admonition/caution.gif) no-repeat 0 0; - height: 51px; left: 0; position: absolute; top: 0; width: 51px; -} - -div.warning -{ - background: url(../images/admonition/warning.gif) no-repeat 0 0; - height: 51px; left: 0; position: absolute; top: 0; width: 51px; -} - -div.tip -{ - background: url(../images/admonition/tip.gif) no-repeat 0 0; - height: 51px; left: 0; position: absolute; top: 0; width: 51px; -} - -div.sidebar -{ - background: url(../images/admonition/sidebar.gif) no-repeat 0 0; - height: 51px; left: 0; position: absolute; top: 0; width: 51px; -} - -div.seealso -{ - background: url(../images/admonition/seealso.png) no-repeat 0 0; - height: 51px; left: 0; position: absolute; top: 0; width: 51px; -} - -div.admonition-wrapper p.admonition-title -{ - display: none; -} - -p.sidebar-title -{ - margin-top: 10px; - color:#313131; - padding-bottom:20px; - font-style: italic; - font-family: my-sans-serif, Georgia, "Times New Roman", Times, serif; - font-size:20px; -} - -.sidebar h2 -{ - margin: 0; - padding: 0; -} - -blockquote.quote -{ - background: #D7CABA; -} - -.navigation -{ - font-family: my-sans-serif, Arial, sans-serif; - padding: 15px 0; - font-size: 0.9em; -} - -.navigation a -{ - text-decoration: none; -} - -.navigation a:hover -{ - text-decoration: underline; -} - -.navigation .separator -{ - padding: 0 10px; - color: #ccc; -} - -.feedback p -{ - font-family: my-sans-serif, Arial, sans-serif; - color: #858585; - font-size: 0.8em; -} - -.feedback p a, #license a -{ - text-decoration: underline; -} - -.infobar-box -{ - margin-top: 10px; - padding: 10px; - background-color: #f1f1f1; - border: 1px solid #e3e3e3; - -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; - font-family: my-sans-serif, Arial, sans-serif; -} - -.infobar-box h2 -{ - margin: 0; - padding: 0; -} - -.pages -{ - padding: 10px 0 0 0; -} - -.pages ul.inline -{ - display: inline; - padding: 5px 0 0 0; -} - -.pages .inline li -{ - display: inline; - margin: 0 5px; -} - -.infobar-box a -{ - text-decoration: none; - color: #777; -} - -.infobar-box a:hover -{ - text-decoration: underline; -} - -#doc-toc li -{ - padding: 2px; - list-style: square; - margin-left: 15px; -} - -#doc-toc li.current -{ - font-weight: bold; - background-color: #e3e3e3; -} - -#doc-toc ul.inline -{ - padding: 0; - margin: 0; - margin-left: 3px; -} - -#doc-toc .inline li -{ - margin: 0; - padding: 0; -} - -#doc-toc li.separator -{ - color: #ccc; -} - -#license -{ - line-height: 1.3em; - font-size: 0.8em; -} - -#license img -{ - margin-right: 5px; -} - -table.docutils -{ - margin-bottom: 10px; -} - -table.docutils th -{ - font-weight:bold; - background-color: #efefef; -} - -table.docutils td, table.docutils th -{ - padding: 4px 6px; - border: 0; - border-bottom: 1px solid #ddd; - text-align: left; - vertical-align: top; -} - -a.headerlink -{ - padding: 2px; - color: #ddd; - text-decoration: none; - font-size: 80%; -} - -a.reference em, a.internal em -{ - font-style: normal; -} - -#guides ul ul, #contributing ul ul -{ - display: inline; - padding: 5px 0 0 0; -} - -#guides ul ul li, #contributing ul ul li -{ - display: inline; - margin: 0; -} - -.sidebarbox -{ - margin-top: 10px; - padding: 10px; - background-color: #f1f1f1; - border: 1px solid #e3e3e3; - -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; - font-family: my-sans-serif, Arial, sans-serif; -} - -.sidebarbox h2 -{ - margin: 0; - padding: 0; -} - -.sidebarbox h3 -{ - margin: 0; - padding: 0; - margin-top: 5px; -} - -div.breadcrumb h3 -{ - display: none; -} - -.bd .content div.breadcrumb ul -{ - margin: 0; - padding: 0; - list-style: none; - margin-top: 5px; -} - -.bd .content div.breadcrumb li -{ - display: inline; - margin: 0; - padding: 0; - line-height: 0.9em; -} - -.bd .content div.breadcrumb li a -{ - color: #777; - text-decoration: none; -} - -.bd .content div.breadcrumb li a:hover -{ - text-decoration: underline; -} - -.p-Indicator -{ - color: #FF8400; -} - -div.genindex-jumpbox -{ - font-size: 85%; - border: 0; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox -{ - color: #999; -} - -div.genindex-jumpbox strong -{ - font-weight: normal; -} - -div.genindex-jumpbox a -{ - padding: 0 4px; -} - -h2#A, h2#B, h2#C, h2#D, h2#E, h2#F, h2#G, h2#H, h2#I, h2#J, h2#K, h2#L, h2#M, h2#N, h2#O, -h2#P, h2#Q, h2#R, h2#S, h2#T, h2#U, h2#V, h2#W, h2#X, h2#Y, h2#Z -{ - background-color: #eee; - border-bottom: 1px solid #aaa; - font-size: 120%; - font-weight: bold; - margin: 20px 0; - padding: 5px; -} - -.indextable a, div.genindex-jumpbox a -{ - text-decoration: none; -} - -.indextable a:hover, div.genindex-jumpbox a:hover -{ - text-decoration: underline; -} - -.infobar -{ - background-color:#FFFFFF; - float:right; - font-size:0.9em; - margin:15px; - position:relative; - width:300px; - z-index:999; -} - -/* for code block with line numbers */ -table .highlight -{ - margin-bottom: 0; -} - -p.versionadded -{ - background-color: #def; - padding: 10px; - margin-bottom: 12px; - overflow: auto; -} - -.versionmodified -{ - font-style: italic; -} - -div.configuration-block em -{ - margin-bottom: 10px; -} - -div.configuration-block li -{ - padding: 5px; -} - -div.configuration-block em -{ - font-style: normal; - font-size: 90%; -} - -.literal-block -{ - margin-bottom: 10px; - overflow: auto; - max-width: 100%; -} - -.highlighttable -{ - width: 100%; -} - -td.linenos -{ - border: 1px solid #ddd; - border-right: 0; - width: 35px; - min-width: 35px; - text-align: right; -} - -td.code -{ - border: 1px solid #232125; - border-left: 0; -} - -.highlighttable pre -{ - margin: 0; -} - -.linenodiv pre -{ - background-color: #ececec; - color: #aaa; -} - -.navigation { - font-family: Arial,sans-serif; - padding: 15px; - padding-bottom: 0; - font-size: .9em; - text-align: center; -} diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/colors.css b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/colors.css deleted file mode 100644 index 8e010ca..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/colors.css +++ /dev/null @@ -1,39 +0,0 @@ -.hd -{ - background-color: #fff; -} - -.hd .title_header -{ - border-left-color: #e0e9a1; -} - -.intro h2, .box_content h3, .bd h1, a, .bd h3, .bd h2, .bd .content .intro_more li strong -{ - color: #006f9f; -} - -.important h3 -{ - color: #bacf29; -} - -#symfony-api #class-description, #symfony-api #method-details h3 -{ - color: #bacf29 !important; -} - -.links_intro .learn_more -{ - background-color: #bacf29; -} - -.links_intro .certification -{ - background-color: #71b236; -} - -.links_intro .install_now -{ - background-color: #006f9f; -} diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/da02766c-18d7-4302-aede-0547d35f0ad8.png b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/da02766c-18d7-4302-aede-0547d35f0ad8.png deleted file mode 100644 index 17c72f8..0000000 Binary files a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/da02766c-18d7-4302-aede-0547d35f0ad8.png and /dev/null differ diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/dc.js b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/dc.js deleted file mode 100644 index 87691e8..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/dc.js +++ /dev/null @@ -1,76 +0,0 @@ -(function(){var E;function Aa(a,b){switch(b){case 0:return""+a;case 1:return 1*a;case 2:return!!a;case 3:return 1E3*a}return a}function Ba(a){return"function"==typeof a}function Ca(a){return void 0!=a&&-1<(a.constructor+"").indexOf("String")}function F(a,b){return void 0==a||"-"==a&&!b||""==a}function Da(a){if(!a||""==a)return"";for(;a&&-1<" \n\r\t".indexOf(a.charAt(0));)a=a.substring(1);for(;a&&-1<" \n\r\t".indexOf(a.charAt(a.length-1));)a=a.substring(0,a.length-1);return a} -function Ea(){return Math.round(2147483647*Math.random())}function Fa(){}function G(a,b){if(encodeURIComponent instanceof Function)return b?encodeURI(a):encodeURIComponent(a);H(68);return escape(a)}function I(a){a=a.split("+").join(" ");if(decodeURIComponent instanceof Function)try{return decodeURIComponent(a)}catch(b){H(17)}else H(68);return unescape(a)}var Ga=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)}; -function Ia(a,b){if(a){var c=J.createElement("script");c.type="text/javascript";c.async=!0;c.src=a;c.id=b;var d=J.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d);return c}}function K(a){return a&&0a.split("/")[0].indexOf(":")&&(a=n+f[2].substring(0,f[2].lastIndexOf("/"))+ -"/"+a):a=n+f[2]+(a||Be);d.href=a;e=c(d);return{protocol:(d.protocol||"").toLowerCase(),host:e[0],port:e[1],path:e[2],Oa:d.search||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b).push(c)}for(var d=Da(b).split("&"),e=0;ef?c(d[e],"1"):c(d[e].substring(0,f),d[e].substring(f+1))}} -function Pa(a,b){if(F(a)||"["==a.charAt(0)&&"]"==a.charAt(a.length-1))return"-";var c=J.domain;return a.indexOf(c+(b&&"/"!=b?b:""))==(0==a.indexOf("http://")?7:0==a.indexOf("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){1<=Qa||1<=100*Math.random()||ld()||(a=["utmt=error","utmerr="+a,"utmwv=5.6.7dc","utmn="+Ea(),"utmsp=1"],b&&a.push("api="+b),c&&a.push("msg="+G(c.substring(0,100))),M.w&&a.push("aip=1"),Sa(a.join("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a} -var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(!0),Gb=Va("currencyCode"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(!0),Sb=N(!0),Tb=N(!0),Ub=N(!0),Vb=N(!0),Wb=N(!0),Zb=N(!0),$b=N(!0),ac=N(!0),bc=N(!0),cc=N(!0),R=N(!0),dc=N(!0), -ec=N(!0),fc=N(!0),gc=N(!0),hc=N(!0),ic=N(!0),jc=N(!0),S=N(!0),kc=N(!0),lc=N(!0),mc=N(!0),nc=N(!0),oc=N(!0),pc=N(!0),qc=N(!0),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();var Mc=N(),Nc=N(),jf=N(),Yb=N(),kf=N(),lf=Va("utmtCookieName"),mf=Va("displayFeatures"),Oc=N(),Ie=Va("gtmid"),Ne=Va("uaName"),Oe=Va("uaDomain"),Pe=Va("uaPath"),Je=Va("linkid");var Qe=function(){function a(a,c,d){T(gf.prototype,a,c,d)}a("_createTracker",gf.prototype.hb,55);a("_getTracker",gf.prototype.oa,0);a("_getTrackerByName",gf.prototype.u,51);a("_getTrackers",gf.prototype.pa,130);a("_anonymizeIp",gf.prototype.aa,16);a("_forceSSL",gf.prototype.la,125);a("_getPlugin",Pc,120)},Re=function(){function a(a,c,d){T(U.prototype,a,c,d)}Qc("_getName",$a,58);Qc("_getAccount",Wa,64);Qc("_visitCode",Q,54);Qc("_getClientInfo",ib,53,1);Qc("_getDetectTitle",lb,56,1);Qc("_getDetectFlash", -jb,65,1);Qc("_getLocalGifPath",wb,57);Qc("_getServiceMode",xb,59);V("_setClientInfo",ib,66,2);V("_setAccount",Wa,3);V("_setNamespace",Ya,48);V("_setAllowLinker",fb,11,2);V("_setDetectFlash",jb,61,2);V("_setDetectTitle",lb,62,2);V("_setLocalGifPath",wb,46,0);V("_setLocalServerMode",xb,92,void 0,0);V("_setRemoteServerMode",xb,63,void 0,1);V("_setLocalRemoteServerMode",xb,47,void 0,2);V("_setSampleRate",vb,45,1);V("_setCampaignTrack",kb,36,2);V("_setAllowAnchor",gb,7,2);V("_setCampNameKey",ob,41);V("_setCampContentKey", -tb,38);V("_setCampIdKey",nb,39);V("_setCampMediumKey",rb,40);V("_setCampNOKey",ub,42);V("_setCampSourceKey",qb,43);V("_setCampTermKey",sb,44);V("_setCampCIdKey",pb,37);V("_setCookiePath",P,9,0);V("_setMaxCustomVariables",yb,0,1);V("_setVisitorCookieTimeout",cb,28,1);V("_setSessionCookieTimeout",db,26,1);V("_setCampaignCookieTimeout",eb,29,1);V("_setReferrerOverride",Jb,49);V("_setSiteSpeedSampleRate",Dc,132);a("_trackPageview",U.prototype.Fa,1);a("_trackEvent",U.prototype.F,4);a("_trackPageLoadTime", -U.prototype.Ea,100);a("_trackSocial",U.prototype.Ga,104);a("_trackTrans",U.prototype.Ia,18);a("_sendXEvent",U.prototype.ib,78);a("_createEventTracker",U.prototype.ia,74);a("_getVersion",U.prototype.qa,60);a("_setDomainName",U.prototype.B,6);a("_setAllowHash",U.prototype.va,8);a("_getLinkerUrl",U.prototype.na,52);a("_link",U.prototype.link,101);a("_linkByPost",U.prototype.ua,102);a("_setTrans",U.prototype.za,20);a("_addTrans",U.prototype.$,21);a("_addItem",U.prototype.Y,19);a("_clearTrans",U.prototype.ea, -105);a("_setTransactionDelim",U.prototype.Aa,82);a("_setCustomVar",U.prototype.wa,10);a("_deleteCustomVar",U.prototype.ka,35);a("_getVisitorCustomVar",U.prototype.ra,50);a("_setXKey",U.prototype.Ca,83);a("_setXValue",U.prototype.Da,84);a("_getXKey",U.prototype.sa,76);a("_getXValue",U.prototype.ta,77);a("_clearXKey",U.prototype.fa,72);a("_clearXValue",U.prototype.ga,73);a("_createXObj",U.prototype.ja,75);a("_addIgnoredOrganic",U.prototype.W,15);a("_clearIgnoredOrganic",U.prototype.ba,97);a("_addIgnoredRef", -U.prototype.X,31);a("_clearIgnoredRef",U.prototype.ca,32);a("_addOrganic",U.prototype.Z,14);a("_clearOrganic",U.prototype.da,70);a("_cookiePathCopy",U.prototype.ha,30);a("_get",U.prototype.ma,106);a("_set",U.prototype.xa,107);a("_addEventListener",U.prototype.addEventListener,108);a("_removeEventListener",U.prototype.removeEventListener,109);a("_addDevId",U.prototype.V);a("_getPlugin",Pc,122);a("_setPageGroup",U.prototype.ya,126);a("_trackTiming",U.prototype.Ha,124);a("_initData",U.prototype.initData, -2);a("_setVar",U.prototype.Ba,22);V("_setSessionTimeout",db,27,3);V("_setCookieTimeout",eb,25,3);V("_setCookiePersistence",cb,24,1);a("_setAutoTrackOutbound",Fa,79);a("_setTrackOutboundSubdomains",Fa,81);a("_setHrefExamineLimit",Fa,80)};function Pc(a){var b=this.plugins_;if(b)return b.get(a)} -var T=function(a,b,c,d){a[b]=function(){try{return void 0!=d&&H(d),c.apply(this,arguments)}catch(a){throw Ra("exc",b,a&&a.name),a;}}},Qc=function(a,b,c,d){U.prototype[a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e.name),e;}}},V=function(a,b,c,d,e){U.prototype[a]=function(f){try{H(c),void 0==e?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(Be){throw Ra("exc",a,Be&&Be.name),Be;}}},Se=function(a,b){return{type:b,target:a,stopPropagation:function(){throw"aborted";}}};var Rc=new RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc.test(J.location.hostname)?!0:"/"!==b?!1:0!=a.indexOf("www.google.")&&0!=a.indexOf(".google.")&&0!=a.indexOf("google.")||-1b.length||ad(b[0],c))return!1;b=b.slice(1).join(".").split("|"); -0=b.length)return!0;b=b[1].split(-1==b[1].indexOf(",")?"^":",");for(c=0;cb.length||ad(b[0],c))return a.set(ec,void 0),a.set(fc,void 0),a.set(gc,void 0),a.set(ic,void 0),a.set(jc,void 0),a.set(nc,void 0),a.set(oc,void 0),a.set(pc,void 0),a.set(qc,void 0),a.set(S,void 0),a.set(kc,void 0),a.set(lc,void 0),a.set(mc,void 0),!1;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]); -Ue(a,b.slice(4).join("."));return!0},Ue=function(a,b){function c(a){return(a=b.match(a+"=(.*?)(?:\\|utm|$)"))&&2==a.length?a[1]:void 0}function d(b,c){c?(c=e?I(c):c.split("%20").join(" "),a.set(b,c)):a.set(b,void 0)}-1==b.indexOf("=")&&(b=I(b));var e="2"==c("utmcvr");d(ic,c("utmcid"));d(jc,c("utmccn"));d(nc,c("utmcsr"));d(oc,c("utmcmd"));d(pc,c("utmctr"));d(qc,c("utmcct"));d(S,c("utmgclid"));d(kc,c("utmgclsrc"));d(lc,c("utmdclid"));d(mc,c("utmdsid"))},ad=function(a,b){return b?a!=b:!/^\d+$/.test(a)};var Uc=function(){this.filters=[]};Uc.prototype.add=function(a,b){this.filters.push({name:a,s:b})};Uc.prototype.cb=function(a){try{for(var b=0;b=100*a.get(vb)&&a.stopPropagation()}function kd(a){ld(a.get(Wa))&&a.stopPropagation()}function md(a){"file:"==J.location.protocol&&a.stopPropagation()}function Ge(a){He()&&a.stopPropagation()} -function nd(a){a.get(Ib)||a.set(Ib,J.title,!0);a.get(Hb)||a.set(Hb,J.location.pathname+J.location.search,!0)}function hf(a){a.get(Wa)&&"UA-XXXXX-X"!=a.get(Wa)||a.stopPropagation()};var od=new function(){var a=[];this.set=function(b){a[b]=!0};this.encode=function(){for(var b=[],c=0;c=b[0]||0>=b[1]?"":b.join("x");a.Wa=d}catch(n){H(135)}qd=a}},td=function(){sd();for(var a=qd,b=W.navigator,a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.jb+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:""),b=a.length,c=W.history.length;0d?(this.i=b.substring(0,d),this.l=b.substring(d+1,c),this.h=b.substring(c+1)):(this.i=b.substring(0,d),this.h=b.substring(d+1));this.Xa=a.slice(1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y.prototype, -"push",Y.prototype.push,5);T(Y.prototype,"_getPlugin",Pc,121);T(Y.prototype,"_createAsyncTracker",Y.prototype.Sa,33);T(Y.prototype,"_getAsyncTracker",Y.prototype.Ta,34);this.I=new Bd;this.eb=[]};E=Y.prototype;E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return!1;b.plugins_=b.plugins_||new Bd;b.plugins_.set(a,new d(b,c||{}));return!0};E.push=function(a){var b=Z.Va.apply(this,arguments),b=Z.eb.concat(b);for(Z.eb=[];0e?b+"#"+d:b+"&"+d;c="";f=b.indexOf("?");0f?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f= -0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c];var Be=b.replace(/ /g,"%20"),n=c.replace(/ /g,"%20");if(d==Yc(a+Be+n))return H(128),[Be,n];Be=Be.replace(/\+/g,"%20");n=n.replace(/\+/g,"%20");if(d==Yc(a+Be+n))return H(129),[Be,n];try{var Ja=b.match("utmctr=(.*?)(?:\\|utm|$)");if(Ja&&2==Ja.length&&(Be=b.replace(Ja[1],G(I(Ja[1]))),d==Yc(a+Be+c)))return H(139),[Be,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,Be,n,Ja){var t=ee(a,b);t||(t={},a.get(Cb).push(t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=Be;t.state_=n;t.country_=Ja;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,Be){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");var n;a:{if(a&&a.items_){n=a.items_;for(var Ja=0;Jab.length||!/^\d+$/.test(b[0])||(b[0]=""+c,Fd(a,"__utmx",b.join("."),void 0))},be=function(a,b){var c=$c(a.get(O),pd("__utmx"));"-"==c&&(c="");return b?G(c):c},Xe=function(a){try{var b=La(J.location.href,!1),c=decodeURIComponent(L(b.R.get("utm_referrer")))||"";c&&a.set(Jb,c);var d=decodeURIComponent(K(b.R.get("utm_expid")))||"";d&&(d=d.split(".")[0],a.set(Oc,""+d))}catch(e){H(146)}},k=function(a){var b=W.gaData&&W.gaData.expId;b&&a.set(Oc, -""+b)};var ke=function(a,b){var c=Math.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return!1;c=Ye()||Ze();if(void 0==c)return!1;var d=c[0];if(void 0==d||Infinity==d||isNaN(d))return!1;0a[b])return!1;return!0},le=function(a){return isNaN(a)||0>a?0:5E3>a?10*Math.floor(a/10):5E4>a?100*Math.floor(a/100):41E5>a?1E3*Math.floor(a/1E3):41E5},je=function(a){for(var b=new yd,c=0;cc.length)){for(var d=[],e=0;e=f)return!1;c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||isNaN(c)||0>c||0>f||100=a||a>e.get(yb))a=!1;else if(!b||!c||128=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a.match(/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b.push(a);this.set(Ic,b)}};E.initData=function(){this.a.load()}; -E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a.stopPropagation();if("event"===a.get(sc)){var b=(new Date).getTime(),c=a.b(dc,0),d=a.b(Zb,0),c=Math.floor((b-(c!=d?c:1E3*c))/1E3*1);0=a.b(R,0)&&a.stopPropagation()}},pe=function(a){"event"===a.get(sc)&&a.set(R,Math.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a.push(b+"="+c)};this.toString=function(){return a.join("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add("utmwv","5.6.7dc");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J.location.hostname;F(c)||b.add("utmhn",c,!0);c=a.get(vb);100!=c&&b.add("utmsp",c,!0)},te=function(a,b){b.add("utmht",(new Date).getTime());b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),!0);a.get(vc)&&b.add("utmni", -1);a.get(Ie)&&b.add("utmgtm",a.get(Ie),!0);var c=a.get(Ic);c&&0=a.length)ff(a,b,c);else if(8192>=a.length){if(0<=W.navigator.userAgent.indexOf("Firefox")&&![].reduce)throw new De(a.length);df(a,b)||Ee(a,b)||b()}else throw new Ce(a.length);},ff=function(a,b,c){c=c||Kc()+"/__utm.gif?"; -var d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=null;d.onerror=null;b()};d.onerror=function(){d.onload=null;d.onerror=null;b()}},df=function(a,b){var c=W.XMLHttpRequest;if(!c)return!1;var d=new c;if(!("withCredentials"in d))return!1;d.open("POST",Kc()+"/p/__utm.gif",!0);d.withCredentials=!0;d.setRequestHeader("Content-Type","text/plain");d.onreadystatechange=function(){4==d.readyState&&(b(),d=null)};d.send(a);return!0},Ee=function(a,b){if(!J.body)return Ve(function(){Ee(a,b)},100),!0; -a=encodeURIComponent(a);try{var c=J.createElement('')}catch(d){c=J.createElement("iframe"),c.name=a}c.height="0";c.width="0";c.style.display="none";c.style.visibility="hidden";var e=Kc()+"/u/post_iframe_dc.html";Ga(W,"beforeunload",function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)});setTimeout(b,1E3);J.body.appendChild(c);c.src=e;return!0};var gf=function(){this.G=this.w=!1;0==Ea()%100&&(H(142),this.G=!0);this.C={};this.D=[];this.U=0;this.S=[["www.google-analytics.com","","/plugins/"]];this._gasoCPath=this._gasoDomain=this.bb=void 0;Qe();Re()};E=gf.prototype;E.oa=function(a,b){return this.hb(a,void 0,b)};E.hb=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);a=new U(b,a,c);M.C[b]=a;M.D.push(a);return a};E.u=function(a){a=a||"";return M.C[a]||M.hb(void 0,a)};E.pa=function(){return M.D.slice(0)};E.ab=function(){return M.D.length}; -E.aa=function(){this.w=!0};E.la=function(){this.G=!0};var Fe=function(a){if("prerender"==J.visibilityState)return!1;a();return!0};var M=new gf;var Ha=W._gat;Ha&&Ba(Ha._getTracker)?M=Ha:W._gat=M;var Z=new Y;(function(a){if(!Fe(a)){H(123);var b=!1,c=function(){if(!b&&Fe(a)){b=!0;var d=J,e=c;d.removeEventListener?d.removeEventListener("visibilitychange",e,!1):d.detachEvent&&d.detachEvent("onvisibilitychange",e)}};Ga(J,"visibilitychange",c)}})(function(){var a=W._gaq,b=!1;if(a&&Ba(a.push)&&(b="[object Array]"==Object.prototype.toString.call(Object(a)),!b)){Z=a;return}W._gaq=Z;b&&Z.push.apply(Z,a)});function Yc(a){var b=1,c=0,d;if(a)for(b=0,d=a.length-1;0<=d;d--)c=a.charCodeAt(d),b=(b<<6&268435455)+c+(c<<14),c=b&266338304,b=0!=c?b^c>>21:b;return b};})(); diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/dis.htm b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/dis.htm deleted file mode 100644 index 9bf98df..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/dis.htm +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/event.js b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/event.js deleted file mode 100644 index ba307eb..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/event.js +++ /dev/null @@ -1,9 +0,0 @@ -/**/ \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/ga.js b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/ga.js deleted file mode 100644 index b670916..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/ga.js +++ /dev/null @@ -1,77 +0,0 @@ -(function(){var E;function Aa(a,b){switch(b){case 0:return""+a;case 1:return 1*a;case 2:return!!a;case 3:return 1E3*a}return a}function Ba(a){return"function"==typeof a}function Ca(a){return void 0!=a&&-1<(a.constructor+"").indexOf("String")}function F(a,b){return void 0==a||"-"==a&&!b||""==a}function Da(a){if(!a||""==a)return"";for(;a&&-1<" \n\r\t".indexOf(a.charAt(0));)a=a.substring(1);for(;a&&-1<" \n\r\t".indexOf(a.charAt(a.length-1));)a=a.substring(0,a.length-1);return a} -function Ea(){return Math.round(2147483647*Math.random())}function Fa(){}function G(a,b){if(encodeURIComponent instanceof Function)return b?encodeURI(a):encodeURIComponent(a);H(68);return escape(a)}function I(a){a=a.split("+").join(" ");if(decodeURIComponent instanceof Function)try{return decodeURIComponent(a)}catch(b){H(17)}else H(68);return unescape(a)}var Ga=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)}; -function Ia(a,b){if(a){var c=J.createElement("script");c.type="text/javascript";c.async=!0;c.src=a;c.id=b;var d=J.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d);return c}}function K(a){return a&&0a.split("/")[0].indexOf(":")&&(a=k+f[2].substring(0,f[2].lastIndexOf("/"))+ -"/"+a):a=k+f[2]+(a||Be);d.href=a;e=c(d);return{protocol:(d.protocol||"").toLowerCase(),host:e[0],port:e[1],path:e[2],Oa:d.search||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b).push(c)}for(var d=Da(b).split("&"),e=0;ef?c(d[e],"1"):c(d[e].substring(0,f),d[e].substring(f+1))}} -function Pa(a,b){if(F(a)||"["==a.charAt(0)&&"]"==a.charAt(a.length-1))return"-";var c=J.domain;return a.indexOf(c+(b&&"/"!=b?b:""))==(0==a.indexOf("http://")?7:0==a.indexOf("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){1<=Qa||1<=100*Math.random()||ld()||(a=["utmt=error","utmerr="+a,"utmwv=5.6.7","utmn="+Ea(),"utmsp=1"],b&&a.push("api="+b),c&&a.push("msg="+G(c.substring(0,100))),M.w&&a.push("aip=1"),Sa(a.join("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a} -var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(!0),Gb=Va("currencyCode"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(!0),Sb=N(!0),Tb=N(!0),Ub=N(!0),Vb=N(!0),Wb=N(!0),Zb=N(!0),$b=N(!0),ac=N(!0),bc=N(!0),cc=N(!0),R=N(!0),dc=N(!0), -ec=N(!0),fc=N(!0),gc=N(!0),hc=N(!0),ic=N(!0),jc=N(!0),S=N(!0),kc=N(!0),lc=N(!0),mc=N(!0),nc=N(!0),oc=N(!0),pc=N(!0),qc=N(!0),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();var Mc=N(),Nc=N(),Yb=N(),Jc=N(),Kc=N(),Lc=Va("utmtCookieName"),Cd=Va("displayFeatures"),Oc=N(),of=Va("gtmid"),Oe=Va("uaName"),Pe=Va("uaDomain"),Qe=Va("uaPath"),pf=Va("linkid");var Re=function(){function a(a,c,d){T(qf.prototype,a,c,d)}a("_createTracker",qf.prototype.hb,55);a("_getTracker",qf.prototype.oa,0);a("_getTrackerByName",qf.prototype.u,51);a("_getTrackers",qf.prototype.pa,130);a("_anonymizeIp",qf.prototype.aa,16);a("_forceSSL",qf.prototype.la,125);a("_getPlugin",Pc,120)},Se=function(){function a(a,c,d){T(U.prototype,a,c,d)}Qc("_getName",$a,58);Qc("_getAccount",Wa,64);Qc("_visitCode",Q,54);Qc("_getClientInfo",ib,53,1);Qc("_getDetectTitle",lb,56,1);Qc("_getDetectFlash", -jb,65,1);Qc("_getLocalGifPath",wb,57);Qc("_getServiceMode",xb,59);V("_setClientInfo",ib,66,2);V("_setAccount",Wa,3);V("_setNamespace",Ya,48);V("_setAllowLinker",fb,11,2);V("_setDetectFlash",jb,61,2);V("_setDetectTitle",lb,62,2);V("_setLocalGifPath",wb,46,0);V("_setLocalServerMode",xb,92,void 0,0);V("_setRemoteServerMode",xb,63,void 0,1);V("_setLocalRemoteServerMode",xb,47,void 0,2);V("_setSampleRate",vb,45,1);V("_setCampaignTrack",kb,36,2);V("_setAllowAnchor",gb,7,2);V("_setCampNameKey",ob,41);V("_setCampContentKey", -tb,38);V("_setCampIdKey",nb,39);V("_setCampMediumKey",rb,40);V("_setCampNOKey",ub,42);V("_setCampSourceKey",qb,43);V("_setCampTermKey",sb,44);V("_setCampCIdKey",pb,37);V("_setCookiePath",P,9,0);V("_setMaxCustomVariables",yb,0,1);V("_setVisitorCookieTimeout",cb,28,1);V("_setSessionCookieTimeout",db,26,1);V("_setCampaignCookieTimeout",eb,29,1);V("_setReferrerOverride",Jb,49);V("_setSiteSpeedSampleRate",Dc,132);a("_trackPageview",U.prototype.Fa,1);a("_trackEvent",U.prototype.F,4);a("_trackPageLoadTime", -U.prototype.Ea,100);a("_trackSocial",U.prototype.Ga,104);a("_trackTrans",U.prototype.Ia,18);a("_sendXEvent",U.prototype.ib,78);a("_createEventTracker",U.prototype.ia,74);a("_getVersion",U.prototype.qa,60);a("_setDomainName",U.prototype.B,6);a("_setAllowHash",U.prototype.va,8);a("_getLinkerUrl",U.prototype.na,52);a("_link",U.prototype.link,101);a("_linkByPost",U.prototype.ua,102);a("_setTrans",U.prototype.za,20);a("_addTrans",U.prototype.$,21);a("_addItem",U.prototype.Y,19);a("_clearTrans",U.prototype.ea, -105);a("_setTransactionDelim",U.prototype.Aa,82);a("_setCustomVar",U.prototype.wa,10);a("_deleteCustomVar",U.prototype.ka,35);a("_getVisitorCustomVar",U.prototype.ra,50);a("_setXKey",U.prototype.Ca,83);a("_setXValue",U.prototype.Da,84);a("_getXKey",U.prototype.sa,76);a("_getXValue",U.prototype.ta,77);a("_clearXKey",U.prototype.fa,72);a("_clearXValue",U.prototype.ga,73);a("_createXObj",U.prototype.ja,75);a("_addIgnoredOrganic",U.prototype.W,15);a("_clearIgnoredOrganic",U.prototype.ba,97);a("_addIgnoredRef", -U.prototype.X,31);a("_clearIgnoredRef",U.prototype.ca,32);a("_addOrganic",U.prototype.Z,14);a("_clearOrganic",U.prototype.da,70);a("_cookiePathCopy",U.prototype.ha,30);a("_get",U.prototype.ma,106);a("_set",U.prototype.xa,107);a("_addEventListener",U.prototype.addEventListener,108);a("_removeEventListener",U.prototype.removeEventListener,109);a("_addDevId",U.prototype.V);a("_getPlugin",Pc,122);a("_setPageGroup",U.prototype.ya,126);a("_trackTiming",U.prototype.Ha,124);a("_initData",U.prototype.initData, -2);a("_setVar",U.prototype.Ba,22);V("_setSessionTimeout",db,27,3);V("_setCookieTimeout",eb,25,3);V("_setCookiePersistence",cb,24,1);a("_setAutoTrackOutbound",Fa,79);a("_setTrackOutboundSubdomains",Fa,81);a("_setHrefExamineLimit",Fa,80)};function Pc(a){var b=this.plugins_;if(b)return b.get(a)} -var T=function(a,b,c,d){a[b]=function(){try{return void 0!=d&&H(d),c.apply(this,arguments)}catch(a){throw Ra("exc",b,a&&a.name),a;}}},Qc=function(a,b,c,d){U.prototype[a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e.name),e;}}},V=function(a,b,c,d,e){U.prototype[a]=function(f){try{H(c),void 0==e?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(Be){throw Ra("exc",a,Be&&Be.name),Be;}}},Te=function(a,b){return{type:b,target:a,stopPropagation:function(){throw"aborted";}}};var Rc=new RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc.test(J.location.hostname)?!0:"/"!==b?!1:0!=a.indexOf("www.google.")&&0!=a.indexOf(".google.")&&0!=a.indexOf("google.")||-1b.length||ad(b[0],c))return!1;b=b.slice(1).join(".").split("|"); -0=b.length)return!0;b=b[1].split(-1==b[1].indexOf(",")?"^":",");for(c=0;cb.length||ad(b[0],c))return a.set(ec,void 0),a.set(fc,void 0),a.set(gc,void 0),a.set(ic,void 0),a.set(jc,void 0),a.set(nc,void 0),a.set(oc,void 0),a.set(pc,void 0),a.set(qc,void 0),a.set(S,void 0),a.set(kc,void 0),a.set(lc,void 0),a.set(mc,void 0),!1;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]); -Ve(a,b.slice(4).join("."));return!0},Ve=function(a,b){function c(a){return(a=b.match(a+"=(.*?)(?:\\|utm|$)"))&&2==a.length?a[1]:void 0}function d(b,c){c?(c=e?I(c):c.split("%20").join(" "),a.set(b,c)):a.set(b,void 0)}-1==b.indexOf("=")&&(b=I(b));var e="2"==c("utmcvr");d(ic,c("utmcid"));d(jc,c("utmccn"));d(nc,c("utmcsr"));d(oc,c("utmcmd"));d(pc,c("utmctr"));d(qc,c("utmcct"));d(S,c("utmgclid"));d(kc,c("utmgclsrc"));d(lc,c("utmdclid"));d(mc,c("utmdsid"))},ad=function(a,b){return b?a!=b:!/^\d+$/.test(a)};var Uc=function(){this.filters=[]};Uc.prototype.add=function(a,b){this.filters.push({name:a,s:b})};Uc.prototype.cb=function(a){try{for(var b=0;b=100*a.get(vb)&&a.stopPropagation()}function kd(a){ld(a.get(Wa))&&a.stopPropagation()}function md(a){"file:"==J.location.protocol&&a.stopPropagation()}function Ge(a){He()&&a.stopPropagation()} -function nd(a){a.get(Ib)||a.set(Ib,J.title,!0);a.get(Hb)||a.set(Hb,J.location.pathname+J.location.search,!0)}function lf(a){a.get(Wa)&&"UA-XXXXX-X"!=a.get(Wa)||a.stopPropagation()};var od=new function(){var a=[];this.set=function(b){a[b]=!0};this.encode=function(){for(var b=[],c=0;c=b[0]||0>=b[1]?"":b.join("x");a.Wa=d}catch(k){H(135)}qd=a}},td=function(){sd();for(var a=qd,b=W.navigator,a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.jb+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:""),b=a.length,c=W.history.length;0d?(this.i=b.substring(0,d),this.l=b.substring(d+1,c),this.h=b.substring(c+1)):(this.i=b.substring(0,d),this.h=b.substring(d+1));this.Xa=a.slice(1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y.prototype, -"push",Y.prototype.push,5);T(Y.prototype,"_getPlugin",Pc,121);T(Y.prototype,"_createAsyncTracker",Y.prototype.Sa,33);T(Y.prototype,"_getAsyncTracker",Y.prototype.Ta,34);this.I=new nf;this.eb=[]};E=Y.prototype;E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return!1;b.plugins_=b.plugins_||new nf;b.plugins_.set(a,new d(b,c||{}));return!0};E.push=function(a){var b=Z.Va.apply(this,arguments),b=Z.eb.concat(b);for(Z.eb=[];0e?b+"#"+d:b+"&"+d;c="";f=b.indexOf("?");0f?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f= -0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c];var Be=b.replace(/ /g,"%20"),k=c.replace(/ /g,"%20");if(d==Yc(a+Be+k))return H(128),[Be,k];Be=Be.replace(/\+/g,"%20");k=k.replace(/\+/g,"%20");if(d==Yc(a+Be+k))return H(129),[Be,k];try{var Ja=b.match("utmctr=(.*?)(?:\\|utm|$)");if(Ja&&2==Ja.length&&(Be=b.replace(Ja[1],G(I(Ja[1]))),d==Yc(a+Be+c)))return H(139),[Be,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,Be,k,Ja){var t=ee(a,b);t||(t={},a.get(Cb).push(t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=Be;t.state_=k;t.country_=Ja;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,Be){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");var k;a:{if(a&&a.items_){k=a.items_;for(var Ja=0;Jab.length||!/^\d+$/.test(b[0])||(b[0]=""+c,Fd(a,"__utmx",b.join("."),void 0))},be=function(a,b){var c=$c(a.get(O),pd("__utmx"));"-"==c&&(c="");return b?G(c):c},Ye=function(a){try{var b=La(J.location.href,!1),c=decodeURIComponent(L(b.R.get("utm_referrer")))||"";c&&a.set(Jb,c);var d=decodeURIComponent(K(b.R.get("utm_expid")))||"";d&&(d=d.split(".")[0],a.set(Oc,""+d))}catch(e){H(146)}},l=function(a){var b=W.gaData&&W.gaData.expId;b&&a.set(Oc, -""+b)};var ke=function(a,b){var c=Math.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return!1;c=Ze()||$e();if(void 0==c)return!1;var d=c[0];if(void 0==d||Infinity==d||isNaN(d))return!1;0a[b])return!1;return!0},le=function(a){return isNaN(a)||0>a?0:5E3>a?10*Math.floor(a/10):5E4>a?100*Math.floor(a/100):41E5>a?1E3*Math.floor(a/1E3):41E5},je=function(a){for(var b=new yd,c=0;cc.length)){for(var d=[],e=0;e=f)return!1;c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||isNaN(c)||0>c||0>f||100=a||a>e.get(yb))a=!1;else if(!b||!c||128=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a.match(/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b.push(a);this.set(Ic,b)}};E.initData=function(){this.a.load()}; -E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a.stopPropagation();if("event"===a.get(sc)){var b=(new Date).getTime(),c=a.b(dc,0),d=a.b(Zb,0),c=Math.floor((b-(c!=d?c:1E3*c))/1E3*1);0=a.b(R,0)&&a.stopPropagation()}},pe=function(a){"event"===a.get(sc)&&a.set(R,Math.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a.push(b+"="+c)};this.toString=function(){return a.join("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add("utmwv","5.6.7");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J.location.hostname;F(c)||b.add("utmhn",c,!0);c=a.get(vb);100!=c&&b.add("utmsp",c,!0)},te=function(a,b){b.add("utmht",(new Date).getTime());b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),!0);a.get(vc)&&b.add("utmni",1); -a.get(of)&&b.add("utmgtm",a.get(of),!0);var c=a.get(Ic);c&&0=a.length)gf(a,b,c);else if(8192>=a.length){if(0<=W.navigator.userAgent.indexOf("Firefox")&&![].reduce)throw new De(a.length);df(a,b)||ef(a,b)||Ee(a,b)||b()}else throw new Ce(a.length);},gf=function(a,b,c){c=c||Ne()+"/__utm.gif?"; -var d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=null;d.onerror=null;b()};d.onerror=function(){d.onload=null;d.onerror=null;b()}},ef=function(a,b){if(0!=Ne().indexOf(J.location.protocol))return!1;var c;c=W.XDomainRequest;if(!c)return!1;c=new c;c.open("POST",Ne()+"/p/__utm.gif");c.onerror=function(){b()};c.onload=b;c.send(a);return!0},df=function(a,b){var c=W.XMLHttpRequest;if(!c)return!1;var d=new c;if(!("withCredentials"in d))return!1;d.open("POST",Ne()+"/p/__utm.gif",!0);d.withCredentials= -!0;d.setRequestHeader("Content-Type","text/plain");d.onreadystatechange=function(){4==d.readyState&&(b(),d=null)};d.send(a);return!0},Ee=function(a,b){if(!J.body)return We(function(){Ee(a,b)},100),!0;a=encodeURIComponent(a);try{var c=J.createElement('')}catch(d){c=J.createElement("iframe"),c.name=a}c.height="0";c.width="0";c.style.display="none";c.style.visibility="hidden";var e=Ne()+"/u/post_iframe.html";Ga(W,"beforeunload",function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)}); -setTimeout(b,1E3);J.body.appendChild(c);c.src=e;return!0};var qf=function(){this.G=this.w=!1;0==Ea()%1E4&&(H(142),this.G=!0);this.C={};this.D=[];this.U=0;this.S=[["www.google-analytics.com","","/plugins/"]];this._gasoCPath=this._gasoDomain=this.bb=void 0;Re();Se()};E=qf.prototype;E.oa=function(a,b){return this.hb(a,void 0,b)};E.hb=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);a=new U(b,a,c);M.C[b]=a;M.D.push(a);return a};E.u=function(a){a=a||"";return M.C[a]||M.hb(void 0,a)};E.pa=function(){return M.D.slice(0)};E.ab=function(){return M.D.length}; -E.aa=function(){this.w=!0};E.la=function(){this.G=!0};var Fe=function(a){if("prerender"==J.visibilityState)return!1;a();return!0};var M=new qf;var Ha=W._gat;Ha&&Ba(Ha._getTracker)?M=Ha:W._gat=M;var Z=new Y;(function(a){if(!Fe(a)){H(123);var b=!1,c=function(){if(!b&&Fe(a)){b=!0;var d=J,e=c;d.removeEventListener?d.removeEventListener("visibilitychange",e,!1):d.detachEvent&&d.detachEvent("onvisibilitychange",e)}};Ga(J,"visibilitychange",c)}})(function(){var a=W._gaq,b=!1;if(a&&Ba(a.push)&&(b="[object Array]"==Object.prototype.toString.call(Object(a)),!b)){Z=a;return}W._gaq=Z;b&&Z.push.apply(Z,a)});function Yc(a){var b=1,c=0,d;if(a)for(b=0,d=a.length-1;0<=d;d--)c=a.charCodeAt(d),b=(b<<6&268435455)+c+(c<<14),c=b&266338304,b=0!=c?b^c>>21:b;return b};})(); diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/jquery-1.js b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/jquery-1.js deleted file mode 100644 index 16ad06c..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/jquery-1.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.2 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( -a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f -.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/ld.js b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/ld.js deleted file mode 100644 index c861cca..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/ld.js +++ /dev/null @@ -1,21 +0,0 @@ -if(!window.criteo_q||window.criteo_q instanceof Array){var oldQueue=window.criteo_q||[];window.criteo_q=function(){var e={bodyReady:!1,domReady:!1,queue:[],actions:[],disingScheduled:[],accounts:[],acid:null,axid:null,pxsig:null,ccp:null},d={tagVersion:"4.1.0",handlerUrlPrefix:("https:"===document.location.protocol?"https://sslwidget.":"http://widget.")+"criteo.com/event",handlerResponseType:"single",responseType:"js",handlerParams:{v:"4.1.0"},extraData:[],customerInfo:[],manualDising:!1,manualFlush:!1, -disOnce:!1,partialDis:!1,eventMap:{applaunched:"al",viewitem:"vp",viewhome:"vh",viewlist:"vl",viewbasket:"vb",viewsearch:"vs",tracktransaction:"vc",calldising:"dis",setdata:"exd",setemail:"ce"},propMap:{event:"e",account:"a",currency:"c",product:"p",item:"p","item.id":"i","item.price":"pr","item.quantity":"q","product.id":"i","product.price":"pr","product.quantity":"q",data:"d",keywords:"kw",checkin_date:"din",checkout_date:"dout",deduplication:"dd",attribution:"at","attribution.channel":"ac","attribution.value":"v", -user_segment:"si",new_customer:"nc",customer_id:"ci",email:"m",hash_method:"h",transaction_value:"tv",responseType:"rt"},setters:{seturl:{cfg:"handlerUrlPrefix",evt:"url"},setaccount:{cfg:"account",evt:"account"},setcalltype:{cfg:"handlerResponseType",evt:"type"},setresponsetype:{cfg:"responseType",evt:"type"},oninitialized:{cfg:"onInitialized",evt:"callback"},ondomready:{cfg:"onDOMReady",evt:"callback"},beforeappend:{cfg:"beforeAppend",evt:"callback"},aftereval:{cfg:"afterEval",evt:"callback"},onflush:{cfg:"onFlush", -evt:"callback"}},flags:{disonce:"disOnce",manualdising:"manualDising",manualflush:"manualFlush",nopartialflush:"noPartialFlush",disonpartialflush:"partialDis"}},l=function(a){var b;return 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiocloud.svg b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiocloud.svg deleted file mode 100644 index 4837dec..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiocloud.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 7 diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiolabs.png b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiolabs.png deleted file mode 100644 index 6342f24..0000000 Binary files a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiolabs.png and /dev/null differ diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiolabsinsight.png b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiolabsinsight.png deleted file mode 100644 index a0b84dd..0000000 Binary files a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sensiolabsinsight.png and /dev/null differ diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sln.css b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sln.css deleted file mode 100644 index 0359775..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sln.css +++ /dev/null @@ -1 +0,0 @@ -#sln div,#sln span,#sln applet,#sln object,#sln iframe,#sln h1,#sln h2,#sln h3,#sln h4,#sln h5,#sln h6,#sln p,#sln blockquote,#sln pre,#sln a,#sln abbr,#sln acronym,#sln address,#sln big,#sln cite,#sln code,#sln del,#sln dfn,#sln em,#sln img,#sln ins,#sln kbd,#sln q,#sln s,#sln samp,#sln small,#sln strike,#sln strong,#sln sub,#sln sup,#sln tt,#sln var,#sln b,#sln u,#sln i,#sln center,#sln dl,#sln dt,#sln dd,#sln ol,#sln ul,#sln li,#sln fieldset,#sln form,#sln label,#sln legend,#sln table,#sln caption,#sln tbody,#sln tfoot,#sln thead,#sln tr,#sln th,#sln td,#sln article,#sln aside,#sln canvas,#sln details,#sln embed,#sln figure,#sln figcaption,#sln footer,#sln header,#sln hgroup,#sln menu,#sln nav,#sln output,#sln ruby,#sln section,#sln summary,#sln time,#sln mark,#sln audio,#sln video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}#sln article,#sln aside,#sln details,#sln figcaption,#sln figure,#sln footer,#sln header,#sln hgroup,#sln menu,#sln nav,#sln section{display:block}#sln ol,#sln ul{list-style:none}#sln blockquote,#sln q{quotes:none}#sln blockquote:before,#sln blockquote:after,#sln q:before,#sln q:after{content:'';content:none}#sln table{border-collapse:collapse;border-spacing:0}#sln .sln-dropdown{background-color:#0f0f0f;color:#b7b7b7;padding-top:35px;padding-bottom:35px;line-height:20px}#sln .sln-dropdown-network img{margin-bottom:15px}#sln .sln-dropdown-network p{color:#b7b7b7;margin-bottom:25px;padding-right:35px}#sln .sln-dropdown-network .sln-websites li{display:inline}#sln .sln-dropdown-network .sln-websites li:before{padding-left:7px;padding-right:7px;content:"|"}#sln .sln-dropdown-network .sln-websites li:first-child:before,#sln .sln-dropdown-network .sln-websites li.first:before{content:"";padding:0}#sln .sln-dropdown-network .sln-websites li.first:before{padding-left:7px}#sln .sln-dropdown-network .sln-right-box{margin-left:30px;margin-bottom:25px;width:auto;min-width:510px;float:left}#sln .sln-dropdown-network .sln-right-box:last-child{margin-bottom:0}#sln .sln-dropdown-network .sln-right-box .sln-row{margin-left:0;padding-bottom:25px}#sln .sln-dropdown-network .sln-right-box .sln-row:last-child{padding-bottom:0}#sln .sln-dropdown-network .sln-right-box .sln-row .sln-span3{width:39%;float:right}#sln .sln-dropdown-network .sln-right-box .sln-row .sln-span3:first-child{float:left}#sln .sln-dropdown-network .sln-products-listing{background:transparent url(/images/sln-v2/border.gif) repeat-y 50% 0}#sln .sln-dropdown-network .sln-our-blogs h2{display:inline}#sln .sln-dropdown-user{color:#fff}#sln .sln-dropdown-user ul{border-top:1px solid #373737;margin-bottom:15px}#sln .sln-dropdown-user ul li{border-bottom:1px solid #373737;line-height:50px}#sln .sln-dropdown-user ul li img{margin-right:15px}#sln .sln-dropdown-user .sln-separator{margin-bottom:15px}#sln .sln-dropdown-user .sln-user-actions{float:right}#sln .sln-dropdown-search{background-color:#e5e5e5;padding-top:0}@media(min-width:978px) and (max-width:1198px){#sln .sln-dropdown-network .sln-products-listing{min-width:inherit;max-width:420px}}@media(min-width:768px) and (max-width:978px){#sln .sln-dropdown-network .sln-products-listing{min-width:inherit;max-width:342px}}@media(max-width:551px){#sln .sln-dropdown-network .sln-products-listing{background:transparent;min-width:inherit}#sln .sln-dropdown-network .sln-products-listing .sln-row{padding-bottom:0}#sln .sln-dropdown-network .sln-products-listing .sln-row .sln-span3{float:none;width:100%;padding-bottom:25px}}#sln{background-color:#2f2f2f;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;color:#b7b7b7;font-size:13px;min-height:36px;height:36px}#sln h2{color:#fff;margin-bottom:10px;font-size:16px;font-weight:bold}#sln img{vertical-align:middle}#sln .sln-bar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;position:fixed;top:0;right:0;left:0;z-index:9000;margin-bottom:0;color:#b7b7b7;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif}#sln .sln-bar a{text-decoration:none}#sln .sln-bar a,#sln .sln-bar a:hover{color:#82e83e}#sln .sln-bar a:hover{text-decoration:underline}#sln .sln-bar ul{list-style:none}#sln .sln-bar-inner{min-height:36px;padding-left:0;padding-right:0;background-color:#2f2f2f}#sln .sln-bar-inner div{height:36px}#sln .sln-container{margin-left:auto;margin-right:auto}#sln .nav-collapse.collapse{height:auto}#sln .sln-network,#sln .sln-ad,#sln .sln-user,#sln .sln-search{line-height:34px}#sln .sln-network,#sln .sln-ad{float:left}#sln .sln-user,#sln .sln-search{float:right}#sln .sln-network,#sln .sln-user{background-color:#000}#sln .sln-network{margin-right:10px;width:175px}#sln .sln-network a,#sln .sln-network a:hover{padding-left:15px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;text-decoration:none;color:white;padding-right:18px;background:url("../images/sln-v2/triangle-down.png") no-repeat scroll right 6px transparent}#sln .sln-network a span,#sln .sln-network a:hover span{color:#82e83e}#sln .sln-ad{white-space:nowrap}#sln .sln-ad img{margin-right:8px}#sln .sln-ad a,#sln .sln-ad a:hover{color:#fff;font-size:12px;text-decoration:none}#sln .sln-ad a:hover{color:#82e83e}#sln .sln-user{min-width:50px;background-color:#000;padding-left:3px}#sln .sln-user a,#sln .sln-user a:hover{color:#fff;text-decoration:none;margin-right:10px;background:url("../images/sln-v2/triangle-down.png") no-repeat scroll right 5px transparent}#sln .sln-user a img,#sln .sln-user a:hover img{margin-right:8px}#sln .sln-user a .sln-notification-count,#sln .sln-user a:hover .sln-notification-count{margin-left:7px;margin-right:15px;background-color:#9f3;color:#000;-moz-border-radius:10px;-webkit-border-radius:10px;-o-border-radius:10px;border-radius:10px;padding:0 5px 0 5px;font-weight:bold;font-size:12px}#sln .sln-user a .sln-user-name,#sln .sln-user a:hover .sln-user-name{padding-right:20px}#sln .sln-user a.sln-connect{display:inline-block;padding-left:36px;padding-right:14px;margin:0;font:13px/36px bold Helvetica,arial,sans-serif;color:#292929;font-weight:bold;background-color:#d9d9d9;background-image:url(/images/sln-v2/picto-connectwithSLBlack.png);background-repeat:no-repeat;background-position:9px 11px;background:url(/images/sln-v2/picto-connectwithSLBlack.png) no-repeat 9px 11px,-moz-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:url(/images/sln-v2/picto-connectwithSLBlack.png) no-repeat 9px 11px,-webkit-gradient(linear,left top,left bottom,color-stop(0%,#eaeaea),color-stop(100%,#c2c2c2));background:url(/images/sln-v2/picto-connectwithSLBlack.png) no-repeat 9px 11px,-webkit-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:url(/images/sln-v2/picto-connectwithSLBlack.png) no-repeat 9px 11px,-o-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:url(/images/sln-v2/picto-connectwithSLBlack.png) no-repeat 9px 11px,-ms-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:url(/images/sln-v2/picto-connectwithSLBlack.png) no-repeat 9px 11px,linear-gradient(to bottom,#eaeaea 0,#c2c2c2 100%)}#sln .sln-user a.sln-connect:hover{color:white;background-color:#69cd26;background-image:url(/images/sln-v2/picto-connectwithSL.png);background-repeat:no-repeat;background-position:9px 11px;background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-moz-linear-gradient(top,#82e83e 0,#53b610 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-webkit-gradient(linear,left top,left bottom,color-stop(0%,#82e83e),color-stop(100%,#53b610));background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-webkit-linear-gradient(top,#82e83e 0,#53b610 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-o-linear-gradient(top,#82e83e 0,#53b610 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-ms-linear-gradient(top,#82e83e 0,#53b610 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,linear-gradient(to bottom,#82e83e 0,#53b610 100%)}#sln .sln-user-unconfirmed{background:#a33}#sln .sln-search img{margin-left:13px;margin-right:13px;vertical-align:top;margin-top:10px}#sln .sln-search .sln-search-activated{background-color:#e5e5e5;width:200px}#sln .sln-search form,#sln .sln-search input{display:inline;background-color:#e5e5e5;color:#727272;font-style:italic;height:36px;padding:0;margin:0}#sln .sln-search input{border:0;width:100px;height:36px}#sln .sln-search input,#sln .sln-search input:focus{box-shadow:none}#sln .sln-row{margin-left:-20px;*zoom:1}#sln .sln-row:before,#sln .sln-row:after{display:table;content:""}#sln .sln-row:after{clear:both}#sln [class*="sln-span"]{float:left;margin-left:20px}#sln .sln-span3{width:220px}#sln .sln-span6{width:460px}#sln .sln-span9{width:700px}#sln .sln-span12,#sln .sln-container{width:940px}#sln .sln-offset9{margin-left:740px}ul.sln-autocomplete-menu{background:none repeat scroll 0 0 #e5e5e5;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;color:#b7b7b7;border:1px solid #e5e5e5;border-right:0;left:auto!important;padding:0;position:absolute;right:0!important;top:34px!important;width:370px;z-index:1000!important}ul.sln-autocomplete-menu li{display:list-item;font-size:13px}ul.sln-autocomplete-menu li a{display:block;padding-left:5px}ul.sln-autocomplete-menu li.all-results,ul.sln-autocomplete-menu li.ui-menu-item{background:none repeat scroll 0 0 white;border-top:1px solid #eee;margin-left:110px;min-height:40px;width:260px}ul.sln-autocomplete-menu li.all-results a,ul.sln-autocomplete-menu li.ui-menu-item a{cursor:pointer;line-height:40px}ul.sln-autocomplete-menu li.all-results.first,ul.sln-autocomplete-menu li.ui-menu-item.first{margin-top:-41px}ul.sln-autocomplete-menu li.ui-menu-item:hover{border-top:1px solid #e5e5e5}ul.sln-autocomplete-menu li.ui-autocomplete-category{background:none repeat scroll 0 0 #e5e5e5;border-top:1px solid #e5e5e5;font-weight:bold;line-height:40px;padding-right:10px;text-align:right;width:100px}ul.sln-autocomplete-menu li.ui-autocomplete-category:first-letter {text-transform:uppercase}ul.sln-autocomplete-menu .ui-state-hover,ul.sln-autocomplete-menu .ui-widget-content .ui-state-hover,ul.sln-autocomplete-menu .ui-widget-header .ui-state-hover,ul.sln-autocomplete-menu .ui-state-focus,ul.sln-autocomplete-menu .ui-widget-content .ui-state-focus,ul.sln-autocomplete-menu .ui-widget-header .ui-state-focus{background:none repeat scroll 0 0 #e5e5e5;color:#727272}#sln div.sln-notifications-container h2{margin-bottom:0}#sln div.sln-notifications-container ul{margin-bottom:10px}#sln div.sln-notifications-container ul li.sln-notification{border-bottom:1px solid #373737;line-height:60px}#sln div.sln-notifications-container ul li.sln-notification img{padding-right:10px}#sln .sln-hidden{display:none;visibility:hidden}#sln .sln-visible-phone{display:none!important}#sln .sln-visible-tablet{display:none!important}#sln .sln-hidden-desktop{display:none!important}@media(max-width:767px){#sln .sln-visible-phone{display:inherit!important}#sln .sln-hidden-phone{display:none!important}#sln .sln-hidden-desktop{display:inherit!important}#sln .sln-visible-desktop{display:none!important}#sln .sln-bar{position:static}#sln .sln-container{width:auto;padding:0 20px}#sln .sln-row{margin-left:0}#sln .sln-row>[class*="span"]{float:none;display:block;width:auto;margin:0}#sln .sln-network{width:70px}#sln .sln-network a,#sln .sln-network a:hover{background:url("../images/sln-v2/triangle-down.png") no-repeat scroll 45px 14px transparent}#sln .sln-user a img,#sln .sln-user a:hover img{margin-right:0}#sln .sln-search .sln-search-activated{width:120px}#sln .sln-search .sln-search-activated input{width:50px}#sln .sln .sln-dropdown-network p{margin-bottom:5px}#sln h2{margin-top:10px}#sln .sln-dropdown{padding-top:15px;padding-bottom:15px}#sln .sln-dropdown-user .sln-user-actions{float:none}}@media(max-width:360px){#sln .sln-network{width:60px;margin-right:5px}#sln .sln-network a,#sln .sln-network a:hover{background-position:40px 14px;padding-left:10px;padding-right:15px}#sln .sln-ad{position:absolute;top:0;left:60px;right:46px;overflow:hidden}#sln .sln-user{position:absolute;top:0;right:0;min-width:36px;padding-left:0}#sln .sln-user a.sln-connect{padding-right:0;font-size:0;position:absolute;top:0;right:0}#sln .sln-user a.sln-user-connected{margin-right:0;padding-right:2px}#sln .sln-user a img,#sln .sln-user a:hover img{margin-right:13px}}@media(min-width:768px) and (max-width:979px){#sln .sln-visible-tablet{display:inherit!important}#sln .sln-hidden-tablet{display:none!important}#sln .sln-hidden-desktop{display:inherit!important}#sln .sln-visible-desktop{display:none!important}#sln .sln-row{margin-left:-20px;*zoom:1}#sln .sln-row:before,#sln .sln-row:after{display:table;content:""}#sln .sln-row:after{clear:both}#sln [class*="sln-span"]{float:left;margin-left:20px}#sln .sln-span3{width:166px}#sln .sln-span6{width:352px}#sln .sln-span9{width:538px}#sln .sln-span12,#sln .sln-container{width:724px}#sln .sln-offset9{margin-left:578px}}@media(min-width:1199px){#sln .sln-row{margin-left:-30px;*zoom:1}#sln .sln-row:before,#sln .sln-row:after{display:table;content:""}#sln .sln-row:after{clear:both}#sln [class*="sln-span"]{float:left;margin-left:30px}#sln .sln-span3{width:270px}#sln .sln-span6{width:570px}#sln .sln-span9{width:870px}#sln .sln-span12,#sln .sln-container{width:1170px}#sln .sln-offset9{margin-left:930px}}.connect-with-sensiolabs{padding-left:36px;box-shadow:0 1px 1px rgba(0,0,0,0.5);background-color:#ababab;background-image:url(/images/sln-v2/picto-connectwithSL.png);background-repeat:no-repeat;background-position:9px 11px;background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-moz-linear-gradient(top,#c0c0c0 0,#868585 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-webkit-gradient(linear,left top,left bottom,color-stop(0%,#c0c0c0),color-stop(100%,#868585));background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-webkit-linear-gradient(top,#c0c0c0 0,#868585 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-o-linear-gradient(top,#c0c0c0 0,#868585 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-ms-linear-gradient(top,#c0c0c0 0,#868585 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,linear-gradient(to bottom,#c0c0c0 0,#868585 100%)}.connect-with-sensiolabs,.connect-with-sensiolabs span{display:inline-block;min-height:36px}.connect-with-sensiolabs span{font:13px/36px bold Helvetica,arial,sans-serif;color:#292929;padding:0 10px;background:#d9d9d9;background:-moz-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#eaeaea),color-stop(100%,#c2c2c2));background:-webkit-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:-o-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:-ms-linear-gradient(top,#eaeaea 0,#c2c2c2 100%);background:linear-gradient(to bottom,#eaeaea 0,#c2c2c2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#eaeaea,endColorstr=#c2c2c2,GradientType=0)}.connect-with-sensiolabs:hover{background-color:#54b314;background-image:url(/images/sln-v2/picto-connectwithSL.png);background-repeat:no-repeat;background-position:9px 11px;background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-moz-linear-gradient(top,#6adb1f 0,#40910b 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-webkit-gradient(linear,left top,left bottom,color-stop(0%,#6adb1f),color-stop(100%,#40910b));background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-webkit-linear-gradient(top,#6adb1f 0,#40910b 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-o-linear-gradient(top,#6adb1f 0,#40910b 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,-ms-linear-gradient(top,#6adb1f 0,#40910b 100%);background:url(/images/sln-v2/picto-connectwithSL.png) no-repeat 9px 11px,linear-gradient(to bottom,#6adb1f 0,#40910b 100%)}.connect-with-sensiolabs:hover span{background:#69cd26;background:-moz-linear-gradient(top,#82e83e 0,#53b610 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#82e83e),color-stop(100%,#53b610));background:-webkit-linear-gradient(top,#82e83e 0,#53b610 100%);background:-o-linear-gradient(top,#82e83e 0,#53b610 100%);background:-ms-linear-gradient(top,#82e83e 0,#53b610 100%);background:linear-gradient(to bottom,#82e83e 0,#53b610 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#82e83e,endColorstr=#53b610,GradientType=0)} \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sln.js b/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sln.js deleted file mode 100644 index 636ce3d..0000000 --- a/Sources/webAduc/Documentation/Twig for Developers - Documentation - Twig - The flexible, fast, and secure PHP template engine_fichiers/sln.js +++ /dev/null @@ -1,262 +0,0 @@ - -var SLNBar = { - 'ads': '\x5B\x7B\x22href\x22\x3A\x22https\x3A\x5C\x2F\x5C\x2Fblackfire.io\x5C\x2F\x22,\x22icon\x22\x3A\x22https\x3A\x5C\x2F\x5C\x2Fdoschzharf1i9.cloudfront.net\x5C\x2Fpersonal_assets\x5C\x2Fsln\x5C\x2F30x30\x5C\x2F1c5498dd\x2D0649\x2D4d42\x2Daf4b\x2D1de957825f62.png\x22,\x22short_text\x22\x3A\x22Blackfire.io\x22,\x22medium_text\x22\x3A\x22Blackfire.io\x3A\x20Fire\x20up\x20your\x20PHP\x20apps\x20performance\x22,\x22long_text\x22\x3A\x22Blackfire.io\x3A\x20Fire\x20up\x20your\x20PHP\x20apps\x20performance\x22,\x22ga\x22\x3A\x22blackfire\x22\x7D,\x7B\x22href\x22\x3A\x22https\x3A\x5C\x2F\x5C\x2Fsensiolabs.com\x5C\x2Fen\x5C\x2Ftwig\x5C\x2Fcertification.html\x22,\x22icon\x22\x3A\x22https\x3A\x5C\x2F\x5C\x2Fdoschzharf1i9.cloudfront.net\x5C\x2Fpersonal_assets\x5C\x2Fsln\x5C\x2F30x30\x5C\x2Fda02766c\x2D18d7\x2D4302\x2Daede\x2D0547d35f0ad8.png\x22,\x22short_text\x22\x3A\x22Twig\x20Certification\x22,\x22medium_text\x22\x3A\x22Twig\x20Certification\x20now\x20available\x22,\x22long_text\x22\x3A\x22Twig\x20Certification\x20now\x20available\x20in\x204,000\x20exam\x20centers\x20around\x20the\x20world\x22,\x22ga\x22\x3A\x22twig_certification\x22\x7D\x5D', - 'isAuthenticated': null, - 'uuid': '', - 'fullName': '', - 'needsEmailConfirmation': false, - 'urlConnectHomepage': 'https\x3A\x2F\x2Fconnect.sensiolabs.com\x2F', - 'urlConnectAccount': 'https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fme', - 'urlConnectLogout': 'https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Flogout', - 'urlConnectButton': '', - 'searchActive' : false, - 'searchPlaceholder': 'Search', - 'searchUrl': '', - 'searchUrlAutocomplete': '', - 'searchUrlMethod': 'GET', - 'searchAutocompleteMethod': 'GET', - 'searchApiAlternateShow': '', - 'searchApiImageShow': '', - 'searchAutocompleteSelect': function (event, ui) { - if (ui.item.path) { - $("#sln-autocomplete").val(ui.item.label); - window.location.href = ui.item.path; - - return false; - } - }, - 'searchAutocompleteRenderItem': function(){}, - 'actions': {}, - 'separatedActions': {}, - - 'render': function() { - template = '\x3Cdiv\x20class\x3D\x22sln\x2Dbar\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dbar\x2Dinner\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dnetwork\x22\x3E\x3Ca\x20href\x3D\x22\x23\x22\x20class\x3D\x22sln\x2Dhidden\x2Dphone\x22\x3ESensioLabs\x3Cspan\x3EWorld\x3C\x2Fspan\x3E\x3C\x2Fa\x3E\x3Ca\x20href\x3D\x22\x23\x22\x20class\x3D\x22sln\x2Dvisible\x2Dphone\x22\x3ESL\x3Cspan\x3EW\x3C\x2Fspan\x3E\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E\x20__AD__\x20__SEARCH__\x20__USER__\x0A\x20\x20\x20\x20\x3C\x2Fdiv\x3E\x0A\x20\x20\x20\x20__DROPDOWN_NETWORK__\x0A\x20\x20\x20\x20__DROPDOWN_USER__\x0A\x3C\x2Fdiv\x3E'; - - template = template.replace(/__AD__/g, this.renderAds()) - .replace(/__SEARCH__/g, this.renderSearch()) - .replace(/__USER__/g, this.renderUser()) - .replace(/__USER_CONTAINER_CLASS__/g, this.needsEmailConfirmation ? 'sln-user sln-user-unconfirmed' : 'sln-user') - .replace(/__DROPDOWN_NETWORK__/g, this.renderDropdownNetwork()) - .replace(/__DROPDOWN_USER__/g, this.renderDropdownUser()) - .replace(/__DROPDOWN_SEARCH__/g, this.renderDropdownSearch()); - - return template; - }, - 'renderSearch': function() { - template = '\x3Cdiv\x20class\x3D\x22sln\x2Dsearch\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dsearch\x2Ddeactivated\x22\x3E\x3Ca\x20href\x3D\x22\x23\x22\x3E\x3Cimg\x20src\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fimages\x2Fsln\x2Dv2\x2Fsearch.png\x22\x20\x2F\x3E\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dsearch\x2Dactivated\x20sln\x2Dhidden\x22\x3E\x3Ca\x20href\x3D\x22\x23\x22\x3E\x3Cimg\x20src\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fimages\x2Fsln\x2Dv2\x2Fsearch\x2Dalt.png\x22\x20\x2F\x3E\x3C\x2Fa\x3E\x3Cform\x20method\x3D\x22__METHOD__\x22\x20action\x3D\x22__ACTION__\x22\x3E\x3Cinput\x20name\x3D\x22q\x22\x20id\x3D\x22sln\x2Dautocomplete\x22\x20type\x3D\x22text\x22\x20placeholder\x3D\x22__PLACEHOLDER__\x22\x20\x2F\x3E\x3C\x2Fform\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E'; - if (this.searchActive == true) { - return template.replace(/__METHOD__/g, this.searchUrlMethod) - .replace(/__ACTION__/g, this.searchUrl) - .replace(/__PLACEHOLDER__/g, this.searchPlaceholder); - } - - return ''; - }, - 'renderUser': function() { - template = '\x3Cdiv\x20class\x3D\x22__USER_CONTAINER_CLASS__\x22\x3E\x20__USER_STATE__\x20\x3C\x2Fdiv\x3E'; - if (this.isAuthenticated) { - state = '\x3Ca\x20class\x3D\x22sln\x2Duser\x2Dconnected\x22\x20href\x3D\x22\x23\x22\x3E\x3Cimg\x20src\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fapi\x2Fimages\x2F__UUID__.png\x22\x20width\x3D\x2230\x22\x20height\x3D\x2230\x22\x20alt\x3D\x22__FULLNAME__\x22\x2F\x3E\x3Cspan\x20class\x3D\x22sln\x2Duser\x2Dname\x20sln\x2Dhidden\x2Dphone\x22\x3E__FULLNAME_HTML__\x3C\x2Fspan\x3E\x3C\x2Fa\x3E'; - state = state.replace(/__UUID__/g, this.uuid) - .replace(/__FULLNAME__/g, this.fullName) - .replace(/__FULLNAME_HTML__/g, this.fullName + (this.needsEmailConfirmation ? ' unconfirmed' : '')); - - return template.replace(/__USER_STATE__/g, state); - } else if (!this.isAuthenticated && this.urlConnectButton != '') { - state = '\x3Ca\x20href\x3D\x22__CONNECT_URL__\x22\x20class\x3D\x22sln\x2Dconnect\x22\x3E\x20Connect\x20\x3C\x2Fa\x3E'; - state = state.replace(/__CONNECT_URL__/g, this.urlConnectButton); - - return template.replace(/__USER_STATE__/g, state); - } - - return ''; - }, - 'renderDropdownNetwork': function() { - return '\x3Cdiv\x20class\x3D\x22sln\x2Ddropdown\x2Dnetwork\x20sln\x2Ddropdown\x20sln\x2Dhidden\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dcontainer\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan6\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan3\x22\x3E\x3Cimg\x20src\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fimages\x2Fsln\x2Dv2\x2Fsensiolabs.png\x22\x20alt\x3D\x22SensioLabs\x22\x20\x2F\x3E\x3Cp\x3ESince\x201998,\x20SensioLabs\x20has\x20been\x20promoting\x20the\x20Open\x2DSource\x20software\x20movement\x20by\x20providing\x20quality\x20and\x20performant\x20web\x20application\x20development\x20products,\x20trainings,\x20\x20and\x20consulting.\x20SensioLabs\x20also\x20supports\x20multiple\x20important\x20Open\x2DSource\x20projects.\x20\x3Cbr\x20\x2F\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_learn_more\x22\x20href\x3D\x22http\x3A\x2F\x2Fsensiolabs.com\x2Fen\x22\x3ELearn\x20more\x3C\x2Fa\x3E\x3C\x2Fp\x3E\x3Cdiv\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_sl_international\x22\x20href\x3D\x22http\x3A\x2F\x2Fsensiolabs.com\x2Fen\x22\x3EInternational\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E\x3Cul\x20class\x3D\x22sln\x2Dwebsites\x22\x3E\x3Cli\x3ELocal\x3A\x3C\x2Fli\x3E\x3Cli\x20class\x3D\x22first\x22\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_sl_FR\x22\x20href\x3D\x22http\x3A\x2F\x2Fsensiolabs.com\x2Ffr\x22\x3EFrance\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_sl_DE\x22\x20href\x3D\x22http\x3A\x2F\x2Fsensiolabs.de\x2F\x22\x3EGermany\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3C\x2Ful\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan3\x20sln\x2Dads\x22\x3E\x3Ch2\x3EIn\x20the\x20Spotlight\x3C\x2Fh2\x3E\x3Cdiv\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_insight_thumb\x22\x20href\x3D\x22https\x3A\x2F\x2Finsight.sensiolabs.com\x2F\x22\x3E\x3Cimg\x20src\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fimages\x2Fsln\x2Dv2\x2Fsensiolabsinsight.png\x22\x20alt\x3D\x22SensioLabsInsight\x22\x20\x2F\x3E\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_blackfire_thumb\x22\x20href\x3D\x22https\x3A\x2F\x2Fblackfire.io\x22\x3E\x3Cimg\x20src\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fimages\x2Fsln\x2Dv2\x2Fblackfire.png\x22\x20alt\x3D\x22Blackfire\x22\x20\x2F\x3E\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan6\x20sln\x2Dproducts\x2Dlisting\x20sln\x2Dright\x2Dbox\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan3\x22\x3E\x3Ch2\x3EOpen\x20Source\x3C\x2Fh2\x3E\x3Cul\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_sf\x22\x20href\x3D\x22http\x3A\x2F\x2Fsymfony.com\x2F\x22\x3ESymfony\x20\x2D\x20Web\x20framework\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_twig\x22\x20href\x3D\x22http\x3A\x2F\x2Ftwig.sensiolabs.org\x2F\x22\x3ETwig\x20\x2D\x20Templating\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x20\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_silex\x22\x20href\x3D\x22http\x3A\x2F\x2Fsilex.sensiolabs.org\x2F\x22\x3ESilex\x20\x2D\x20Micro\x2Dframework\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_swift\x22\x20href\x3D\x22http\x3A\x2F\x2Fwww.swiftmailer.org\x2F\x22\x3ESwift\x20Mailer\x20\x2D\x20E\x2DMailing\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3C\x2Ful\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan3\x22\x3E\x3Ch2\x3EProducts\x3C\x2Fh2\x3E\x3Cul\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_insight\x22\x20href\x3D\x22https\x3A\x2F\x2Finsight.sensiolabs.com\x22\x3EInsight\x3A\x20PHP\x20Quality\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_profiler\x22\x20href\x3D\x22https\x3A\x2F\x2Fblackfire.io\x22\x3EBlackfire\x3A\x20Web\x20App\x20performance\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_sensiocloud\x22\x20href\x3D\x22https\x3A\x2F\x2Fsensio.cloud\x22\x3ESensioCloud\x3A\x20PaaS\x20for\x20Symfony\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_security_checker\x22\x20href\x3D\x22https\x3A\x2F\x2Fsecurity.sensiolabs.org\x2F\x22\x3ESecurity\x20checker\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3C\x2Ful\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan3\x22\x3E\x3Ch2\x3ESolutions\x20\x26amp\x3B\x20Services\x3C\x2Fh2\x3E\x3Cul\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_training\x22\x20href\x3D\x22https\x3A\x2F\x2Ftraining.sensiolabs.com\x2F\x22\x3ETraining\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_certification\x22\x20href\x3D\x22https\x3A\x2F\x2Fsensiolabs.com\x2Fcertification\x22\x3ECertification\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_services\x22\x20\x20href\x3D\x22https\x3A\x2F\x2Fsensiolabs.com\x2Fsolutions\x22\x3ETechnical\x20Solutions\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_university\x22\x20href\x3D\x22https\x3A\x2F\x2Fsensiolabs.com\x2Fen\x2Funiversity\x2Findex.html\x22\x3ESensioLabs\x20University\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_experts\x22\x20href\x3D\x22http\x3A\x2F\x2Fexpert.sensiolabs.com\x2F\x22\x3EExperts\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3C\x2Ful\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan3\x22\x3E\x3Ch2\x3ECommunity\x3C\x2Fh2\x3E\x3Cul\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_connect\x22\x20href\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2F\x22\x3ECommunity\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_live\x22\x20href\x3D\x22http\x3A\x2F\x2Flive.symfony.com\x22\x3EConferences\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_youtube\x22\x20href\x3D\x22https\x3A\x2F\x2Fwww.youtube.com\x2Fuser\x2FSensioLabs\x22\x3EVideos\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_partners\x22\x20href\x3D\x22https\x3A\x2F\x2Fnetwork.sensiolabs.com\x2Fen\x2F\x22\x3EPartners\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3Cli\x3E\x3Ca\x20data\x2Dga\x3D\x22sln_job_board\x22\x20href\x3D\x22http\x3A\x2F\x2Fjobs.sensiolabs.com\x2F\x22\x3EJob\x20Board\x3C\x2Fa\x3E\x3C\x2Fli\x3E\x3C\x2Ful\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dright\x2Dbox\x20sln\x2Dour\x2Dblogs\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x20\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan5\x22\x3E\x3Ch2\x3EOur\x20Blogs\x3C\x2Fh2\x3E\x26nbsp\x3B\x26nbsp\x3B\x26nbsp\x3B\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3Ca\x20href\x3D\x22http\x3A\x2F\x2Fsymfony.com\x2Fblog\x2F\x22\x3ESymfony\x3C\x2Fa\x3E,\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3Ca\x20href\x3D\x22http\x3A\x2F\x2Fblog.sensiolabs.com\x2F\x22\x3ESensioLabs\x3C\x2Fa\x3E,\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3Ca\x20href\x3D\x22http\x3A\x2F\x2Fblog.insight.sensiolabs.com\x2F\x22\x3EInsight\x3C\x2Fa\x3E,\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20and\x20\x3Ca\x20href\x3D\x22http\x3A\x2F\x2Fblog.blackfire.io\x2F\x22\x3EBlackfire\x3C\x2Fa\x3E.\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E'; - }, - 'renderDropdownUser': function() { - template = '\x3Cdiv\x20class\x3D\x22sln\x2Ddropdown\x2Duser\x20sln\x2Ddropdown\x20sln\x2Dhidden\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dcontainer\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Duser\x2Dactions\x20sln\x2Dspan3\x22\x3E\x3Ch2\x3EYour\x20actions\x3C\x2Fh2\x3E\x3Cul\x3E\x20__ACTIONS__\x20\x3C\x2Ful\x3E\x3C\x2Fdiv\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dspan9\x20sln\x2Dnotifications\x2Dcontainer\x22\x3E\x3Ch2\x3EYour\x20notifications\x3A\x3C\x2Fh2\x3E\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20order\x20to\x20see\x20your\x20notifications,\x20please\x20\x3Ca\x20href\x3D\x22https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Flogin\x22\x3Elogin\x20to\x20your\x20SensioLabs\x20account\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E'; - if (!this.isAuthenticated) { - return ''; - } - - var processActions = function(actions) { - actionList = ''; - for (key in actions) { - action = actions[key]; - actionTemplate = '\x3Cli\x3E\x3Ca\x20href\x3D\x22__HREF__\x22\x3E__TEXT__\x3C\x2Fa\x3E\x3C\x2Fli\x3E'; - actionTemplate = actionTemplate.replace(/__HREF__/g, action.url); - actionTemplate = actionTemplate.replace(/__TEXT__/g, action.label); - - actionList += actionTemplate; - } - - return actionList; - } - - actions = processActions(this.actions); - separated = processActions(this.separatedActions); - if (separated != '') { - actions += '\x3Cli\x20class\x3D\x22sln\x2Dseparator\x22\x3E\x3C\x2Fli\x3E'; - actions += separated; - } - - return template.replace(/__ACTIONS__/g, actions); - }, - 'renderAds': function() { - var ads = jQuery.parseJSON(this.ads); - if (ads && ads.length > 0) { - var ad = ads[Math.floor((Math.random()*ads.length))]; - template = '\x3Cdiv\x20class\x3D\x22sln\x2Dad\x22\x3E\x3Ca\x20href\x3D\x22__HREF__\x22\x20data\x2Dga\x3D\x22__GA__\x22\x20class\x3D\x22sln\x2Dvisible\x2Dphone\x22\x3E\x3Cimg\x20src\x3D\x22__ICON__\x22\x20\x2F\x3E__TEXT_SHORT__\x3C\x2Fa\x3E\x3Ca\x20href\x3D\x22__HREF__\x22\x20data\x2Dga\x3D\x22__GA__\x22\x20class\x3D\x22sln\x2Dvisible\x2Dtablet\x22\x3E\x3Cimg\x20src\x3D\x22__ICON__\x22\x20\x2F\x3E__TEXT_MEDIUM__\x3C\x2Fa\x3E\x3Ca\x20href\x3D\x22__HREF__\x22\x20data\x2Dga\x3D\x22__GA__\x22\x20class\x3D\x22sln\x2Dvisible\x2Ddesktop\x22\x3E\x3Cimg\x20src\x3D\x22__ICON__\x22\x20\x2F\x3E__TEXT_LONG__\x3C\x2Fa\x3E\x3C\x2Fdiv\x3E'; - return template.replace(/__HREF__/g, ad.href) - .replace(/__ICON__/g, ad.icon) - .replace(/__TEXT_SHORT__/g, ad.short_text) - .replace(/__TEXT_MEDIUM__/g, ad.medium_text) - .replace(/__TEXT_LONG__/g, ad.long_text) - .replace(/__GA__/g, ad.ga); - } - - return ''; - }, - 'renderDropdownSearch': function() { - if (!this.searchActive) { - return ''; - } - - return '\x3Cdiv\x20class\x3D\x22sln\x2Ddropdown\x20sln\x2Ddropdown\x2Dsearch\x20sln\x2Dhidden\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Dcontainer\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Drow\x22\x3E\x3Cdiv\x20class\x3D\x22sln\x2Doffset9\x20sln\x2Dspan3\x20sln\x2Dautocomplete\x2Dcontainer\x22\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E\x3C\x2Fdiv\x3E'; - }, - 'bindEvents': function() { - jQuery('.sln-network a').click(function(e) { - e.preventDefault(); - jQuery('.sln-dropdown-user').addClass('sln-hidden'); - jQuery('.sln-dropdown-network').toggleClass('sln-hidden sln-open'); - jQuery('.sln-search-activated').addClass('sln-hidden'); - jQuery('.sln-search-deactivated').removeClass('sln-hidden'); - jQuery('#sln').height($('.sln-bar').outerHeight()); - - jQuery('.sln-dropdown-network.sln-open a').click(function () { - _gaq.push(['sln._trackEvent', 'Toolbar', 'click', 'ad_'+jQuery(this).attr('data-ga')]); - }); - }); - - if (this.isAuthenticated) { - jQuery('.sln-user a').click(function(e) { - e.preventDefault(); - jQuery('.sln-dropdown-network').addClass('sln-hidden'); - jQuery('.sln-dropdown-user').toggleClass('sln-hidden'); - jQuery('.sln-search-activated').addClass('sln-hidden'); - jQuery('.sln-search-deactivated').removeClass('sln-hidden'); - jQuery('#sln').height($('.sln-bar').outerHeight()); - }); - } - if (this.searchActive) { - jQuery('.sln-search a').click(function(e) { - e.preventDefault(); - jQuery('.sln-dropdown-user').addClass('sln-hidden'); - jQuery('.sln-dropdown-network').addClass('sln-hidden'); - jQuery('.sln-search-activated').toggleClass('sln-hidden'); - jQuery('.sln-search-deactivated').toggleClass('sln-hidden'); - jQuery('#sln').height($('.sln-bar').outerHeight()); - }); - - this.bindSearch(); - } - - jQuery('.sln-ad a').click(function() { - _gaq.push(['sln._trackEvent', 'Ads', 'Ads', 'ad_'+jQuery(this).attr('data-ga')]); - }); - - }, - 'loadNotifications': function() { - jQuery('.sln-notification-count').remove(); - jQuery.ajax('https\x3A\x2F\x2Fconnect.sensiolabs.com\x2Fnotifications', { - headers: {'Accept': 'application/json'}, - xhrFields: { - withCredentials: true - }, - statusCode: { - 200: function(data, textStatus, jqXHR) { - if ('object' !== typeof data) { - data = jQuery.parseJSON(data); - } - jQuery('.sln-notifications-container').html(data.body); - if (data.count > 0) { - jQuery('.sln-user-connected').append(''+data.count+'') - } - jQuery('#sln').height(jQuery('.sln-bar').outerHeight(true)); - }, - 401: function(data, textStatus, jqXHR) { - } - } - }) - }, - 'bindSearch': function() { - $.widget("custom.slncomplete", $.ui.autocomplete, { - _renderMenu: function (ul, items) { - ul.addClass('sln-autocomplete-menu'); - ul.removeClass("ui-autocomplete"); - - var self = this, currentCategory = ""; - var group = "primary"; - var first = ''; - - $.each (items, function (index, item) { - if (item.category != currentCategory) { - ul.append("
  • " + item.category + "
  • "); - currentCategory = item.category; - if ("primary" == group) { - group = "secondary"; - } else { - group = "primary"; - } - first = 'first'; - } - self._renderItem({ ul: ul, item: item, group: group, first: first }); - first = ''; - }); - - ul.prepend("
  • Show all results...
  • "); - $('.sln_autocomplete .all-results a').click(function(e){window.location = $(this).attr('href');e.preventDefault();}); - } - }); - if (0 != $("#sln-autocomplete").length) { - $("#sln-autocomplete").slncomplete({ - source: this.searchUrlAutocomplete, - minLength: 2, - select: SLNBar.searchAutocompleteSelect - }).data("slncomplete")._renderItem = SLNBar.searchAutocompleteRenderItem; - } - } -} - -var _gaq = _gaq || []; -(function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); -})(); - - jQuery.get('\x2Fjs\x2Fsln_customize.js', function (data) { - jQuery(document).ready(function() { - if (null === SLNBar.isAuthenticated) { - SLNBar.isAuthenticated = false; - eval(data); - } - }) - }); - -_gaq.push(['sln._setAccount', 'UA-1221949-8']); -_gaq.push(['sln._setAllowLinker', true]); -_gaq.push(['sln._setCustomVar', 1, 'is_connected', 'no']); -_gaq.push(['sln._trackPageview']); - -(function() { - var crit = document.createElement('script'); crit.type = 'text/javascript'; crit.async = true; - crit.src = '//static.criteo.net/js/ld/ld.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(crit, s); -})(); - -window.criteo_q = window.criteo_q || []; -window.criteo_q.push ( - { event: "setAccount", account: 14086 }, - { event: "viewHome"} -); diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !.htm b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !.htm deleted file mode 100644 index 30f5b66..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !.htm +++ /dev/null @@ -1,1116 +0,0 @@ - - - -Utilisation de Twig, un moteur de templates ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    - -
    -
    -
    - -
    - - - - -
    -
    - -
    -
    -
    -
    -
    -

    dans

    Voir aussi les ... cours non certifiants correspondant à cette recherche

    -
    -
    -
    -
    -
    -
    Fil d'Ariane
    - -
    -
    -
    -
    -
    -
    -
    Mis à jour le mardi 4 avril 2017
    • 30 minutes
    • -Facile -
    -
    - -
    - - - -
    -

    Ce cours est visible gratuitement en ligne.

    -J'ai tout compris ! -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -Connectez-vous ou inscrivez-vous pour bénéficier de toutes les fonctionnalités de ce cours ! -
    -

    Introduction du cours

    - -
    -
    -
    -

    Bonjour à tous,

    Aujourd'hui - je vous propose de découvrir un moteur de templates du nom de Twig. -Twig est le moteur de templates présent dans le célèbre framework Symfony. - Ce cours portera sur son utilisation "seule" (c'est-à-dire sans -Symfony) mais il faut savoir que la syntaxe que vous apprendrez à mettre - dans vos templates sera valable pour ce cours et pour l'utilisation des - templates avec Symfony (ou si le moteur est intégré dans un autre -framework).

    Twig est - un moteur de templates PHP. Je vous conseille donc d'avoir de bonnes -bases en PHP et si possible en orienté objet (bien que ça ne soit pas -indispensable). Une petite note : la syntaxe du moteur est énormément -inspirée de Jinja, le moteur de templates du framework web Python Django. Un cours est d'ailleurs disponible sur le site.

    Je vous souhaite une agréable lecture !

    Qu'est ce qu'un moteur de templates ?

    Twig - n'est pas le seul moteur de templates qui existe, et ce n'est pas non -plus le meilleur. C'est un moteur parmi tant d'autres. Au même titre que - Twig, ce cours n'est pas le seul à traiter du sujet. Vous pouvez -également lire ces tutoriels :

    Présentation

    Je - vais ici vous expliquer le fonctionnement d'un "moteur de templates". -Pour cela, je vous propose un exemple : la création d'un blog basique. -L'organisation des fichiers que je vous propose ici est personnelle, -c'est normal si pour vous la conception d'un blog est différente. Les -grandes lignes sont là.

    Pour - créer votre blog, vous allez d'abord récupérer votre contenu stocké en -base de données. Vous allez ensuite afficher via une boucle les -différents articles. Dans certains cas, vous incluez aussi un en-tête et - un pied de page.

    <?php include 'inc/header.php'; ?> -
    -
    <?php -
    -
    $articles = $db->query('SELECT * FROM blog'); -
    -
    while($article = $articles->fetch()) { -
    -
    ?> -
    <div class="article"> -
    -
    <div class="title"><?php echo $article['title']; ?></div> -
    <div class="content"> -
    <?php echo $article['content']; ?> -
    </div> -
    -
    </div> -
    } -
    -
    -
    <?php include 'inc/footer.php'; ?> -

    Je n'explique pas ce code. Il est relativement simple.

    Le - moteur de templates va vous obliger à utiliser deux fichiers (plus si -vous utilisez le modèle MVC). Vous allez d'une part avoir un fichier PHP - avec l'obtention du contenu en base de données, des variables, la -gestion des sessions, etc. et un fichier template qui gérera l'affichage - de vos pages. Normalement, plus aucun code HTML ne doit apparaître dans - vos fichiers PHP.

    Voici donc ce que pourrait donner notre exemple précédent avec un moteur de templates :

    <?php include 'inc/header.php'; ?> -
    -
    -
    <?php -
    -
    $articlesQuery = $db->query('SELECT * FROM blog'); -
    $articles = $articlesQuery->fetchAll(); -
    -
    $template = $twig->loadTemplate('blog.twig'); -
    echo $template->render(array( -
    'articles' => $articles, -
    )); -
    ?> -
    <?php include 'inc/footer.php'; ?> -
    {% for key, article in articles %} -
    <div class="article"> -
    -
    <div class="title">{{ article.title }}</div> -
    <div class="content"> -
    {{ article.content }} -
    </div> -
    -
    </div> -
    {% endfor %} -

    Je n'explique pas ce code pour le moment car vous allez apprendre cette syntaxe dans la suite du cours.

    Pourquoi utiliser un moteur de templates ?

    Depuis - tout à l'heure je vous parle de Twig et je viens même de vous montrer -les grandes lignes de son fonctionnement. Mais vous vous demandez -peut-être pourquoi utiliser un moteur de templates ? Quel(s) avantage(s) - peut-on avoir à l'utiliser par rapport à du PHP "classique" ?.

    On peut y voir plusieurs avantages notables :

    • Le code est plus clair : on sait où est le code HTML et on ne doit pas chercher après dans le code PHP

    • Pour - reprendre la phrase du dessus on peut noter le fait que vous savez quel - fichier éditer quand vous savez d'où vient l'erreur. De plus pour -reprendre l'exemple du blog, si un jour vous voulez modifier simplement -l'affichage des billets, vous savez quelle partie du code éditer et vous - n'avez pas à chercher.

    • Si - vous travaillez avec un graphiste, c'est un réel plus. Les graphistes -connaissent généralement HTML et CSS et pas toujours PHP. Le graphiste -s'y retrouve donc beaucoup plus facilement.

    Je - pourrais en citer d'autres mais je pense que ce sont les plus -importants qui m'ont fait adopter un tel système pour des sites de -petites et moyennes tailles.

    Si je vous ai convaincu, je vous propose de lire la suite de ce cours pour voir comment mettre en place Twig.

    Mise en place

    Avant - de mettre en place le moteur sur votre site, il vous faut le -télécharger. Je vous propose donc de lire la partie qui vous concerne -pour le faire. Si vous ne savez pas laquelle choisir, lisez la partie -juste en dessous.

    Via une archive

    Pour télécharger Twig via une archive rien de plus simple, rendez vous sur le site - et cliquez sur le lien "Install now". Choisissez ensuite votre archive -(en tar ou en zip). Si vous ne savez pas trop, je vous conseille de -prendre tar si vous êtes sur un système (de type) UNIX et zip sur un -système Windows.

    Vous - devez maintenant décompresser l'archive et copier les fichiers dans un -dossier nommé "twig" dans le dossier de votre site. Vous pouvez, si vous - le souhaitez, l'appeler différemment ; en sachant que dans ce cours je -pars du principe que vous avez appelé votre dossier contenant ces -sources "twig".

    Vous pouvez vous rendre à la partie "Mise en place"

    Via git

    Si vous voulez passer par Git, il vous suffit de vous placer dans le répertoire de votre site et de faire :

    git clone http://github.com/fabpot/twig

    Un dossier twig contenant les fichiers sources va être créé. Vous pouvez vous rendre à la partie "Mise en place"

    Via Subversion

    Pour cloner le dépôt SVN, placez-vous dans le répertoire de votre projet et tapez :

    svn co http://svn.twig-project.org/trunk/ twig

    Un dossier twig contenant les fichiers sources va être créé. Vous pouvez vous rendre à la partie "Mise en place"

    Installation via PEAR

    Pour les fans de PEAR, vous pouvez vous rendre sur la page dédiée à PEAR.

    Note : à ma connaissance il n'existe pas de dépôt pour Mercurial ou pour CVS.

    Mise en place

    Si - vous le souhaitez, vous pouvez supprimer tous les fichiers et dossiers -sauf le dossier lib et son contenu. Je vous conseille de laisser le -dossier tel quel et de ne pas changer les fichiers de place.

    Twig - est un moteur de templates réalisé avec le langage PHP en orienté -objet. Il va donc falloir créer une instance des classes en question. -Voici donc le code que vous devez mettre en début de chaque fichier (que - je vous conseille de charger via include).

    Avant tout, je vous demanderais de créer un dossier "templates" contenant les templates de votre site.

    <?php -
    require_once __DIR__ . '/vendor/autoload.php'; -
    -
    $loader = new Twig_Loader_Filesystem('templates'); // Dossier contenant les templates -
    $twig = new Twig_Environment($loader, array( -
    'cache' => false -
    )); -

    Le - code ici est assez simple. On inclut le fichier Autoloader.php. -Ensuite, on indique le fichier où se trouvent nos templates. Pour finir, - on demande à Twig d'aller chercher les templates dans le dossier -indiqué précédemment et on lui indique quelques options pour plus de -"souplesse" pendant le développement de notre projet.

    D'ailleurs, ici je n'ai mis que le cache mais il y a d'autres options possibles :

    • cache - : prend en argument le dossier où vous stockez les templates en cache -ou bien false pour ne pas s'en servir. Je me permet de vous donner un -conseil : en production, le cache peut être une bonne chose mais en -développement le mieux est de le mettre à false.

    • charset : par défaut à utf-8, définit l'encodage de votre projet.

    • autoescape : échappe automatiquement les variables. Le code HTML contenu dedans n'est donc pas interprété. Par défaut à true.

    Pour plus d'options, je vous renvoie vers cette section de la documentation.

    Sachez - aussi que si vous le souhaitez, vous pouvez mettre plusieurs dossiers -contenants les templates. En sachant que Twig va d'abord regarder dans -le premier, puis le suivant et ainsi de suite. Je vous montre ici un -code demandant à Twig d'aller chercher dans deux dossiers différents, -mais vous pouvez en mettre plus :

    <?php -
    $loader = new Twig_Loader_Filesystem(array('templates', 'views')); -

    Notre premier template

    Je - vous propose maintenant de voir la création de notre premier template. -Avant toutes choses, créez un fichier appelé index.twig dans le dossier -dans lequel vous stockez vos templates.

    Ouvrez ce fichier avec votre éditeur favori et mettez-y le code suivant :

    Vous venez de créer votre premier template avec {{ moteur_name }} ! -

    Nous - reviendrons juste après sur cette portion de code. Ensuite, créez un -fichier à la racine de votre site appelé index.php et mettez-y le code -suivant (n'oubliez pas d'y inclure le fichier contenant le code qui -instancie le moteur).

    <?php -
    $template = $twig->loadTemplate('index.twig'); -
    echo $template->render(array( -
    'moteur_name' => 'Twig' -
    )); -
    ?> -

    Vous pouvez aussi écrire ce qu'il y a au dessus de cette façon :

    <?php -
    echo $twig->render('index.twig', array( -
    'moteur_name' => 'Twig' -
    )); -
    ?> -

    Il n'y a pas énormément de différences mais cette portion de code est plus courte que la précédente.

    Quand - vous ouvrez le fichier, vous voyez "Vous venez de créer votre premier -template avec Twig". En fait, dans le template le {{ moteur_name }} est -le nom de la variable que vous avez passé à Twig lors de l'affichage du -template. Il s'agit de cette portion de code.

    <?php -
    echo $template->render(array( -
    'moteur_name' => 'Twig' -
    )); -
    ?> -

    Dans cet exemple, j'ai mis du texte entre guillemets, mais rien ne vous empêche de mettre des variables, des tableaux, etc.

    Pour - l'instant c'est plus que basique. Heureusement, Twig nous permet de -faire bien plus de choses que ça. Je vous propose donc de voir les -possibilités que nous offre Twig dans la partie suivante.

    Syntaxe de base

    Cette - partie est certainement la plus importante de ce cours. Vous allez -apprendre à remplir vos templates avec la syntaxe proposée par le -moteur. Vous pourrez donc faire des opérations complexes comme les -conditions, les boucles, etc.

    Affichage des variables et tableaux

    Lors - de l'affichage d'un template (vu un petit peu plus haut), vous passez -en argument des variables, des tableaux, etc. Voyons un peu l'affichage -côté template.

    Votre nom est : {{ name }} -

    Pour afficher une variable, il faut la placer entre accolades.

    Supposons que vous voulez passer un tableau à votre template, il vous suffit de faire :

    {{ array['key'] }} -
    {{ array.key }} <!-- fait exactement la même chose qu'au dessus --> -

    Les filtres

    Les - filtres sont un concept que vous ne connaissez peut-être pas. En fait, -un filtre agit comme une fonction. Il sont déjà définis mais vous pouvez - créer les vôtres si vous le souhaitez. Pour appliquer un filtre à une -variable, il faut séparer le nom de la variable et celui du filtre par -un pipe ( | ). Je vous propose ici de voir quelques filtres utiles.

    • upper : met la chaîne de caractères qui le concerne en majuscule ;

    • lower : fait exactement l'inverse d'upper et va mettre toutes les lettres en minuscule ;

    • title : met la première lettre de chaque mot de la chaîne de caractère en majuscule. Comme un titre de noblesse ;

    • length : retourne le nombre de caractères dont la chaîne se compose ;

    • escape - & e : pour échapper du code HTML vous pouvez utiliser escape ou e. -Tous deux font la même chose mais l'un est plus court que l'autre.

    Il y a encore beaucoup d'autres filtres proposés par Twig, en voici la liste.

    Les filtres sur les blocs

    Si - vous le souhaitez, plutôt que d'appliquer un filtre à chacune de vos -variables, si vous comptez le faire sur beaucoup de variables ou une -partie de votre site en particulier, je vous conseille de passer par -cette méthode :

    {% filter upper %} -
    je vais être écrit en majuscule -
    {{ moi_aussi }} -
    {% endfilter %} -

    Vous pouvez aussi chaîner les filtres en en mettant plusieurs à la suite :

    {% filter upper|escape %} -
    je vais être écrit en majuscule <em>et échappé</em> -
    {% endfilter %} -

    Concernant - le filtre escape, un bloc spécial a été prévu à cet effet. Ainsi, si -par exemple vous avez mis lors de l'initialisation de Twig autoespace à -true, vous pouvez faire ceci :

    {% autoescape false %} -
    <strong>Je vais être affiché en gras</strong> -
    {% endautoescape %} -

    Les commentaires

    Ici, - c'est juste un petit plus. Ça n'est pas vraiment utile (c'est moins -intuitif, dira-t-on) si vous n'avez pas l'habitude de les utiliser. -C'est un plus pour ceux qui utilisent Django par exemple :

    {# Je suis un commentaire #} -

    Les conditions

    Pour faire des conditions, rien de plus simple :

    {% if online > 1 %} -
    Il y a {{ online }} membres en ligne -
    {% elseif online == 1 %} -
    Il n'y a qu'un seul utilisateur en ligne (Vous !) -
    {% else %} -
    Il n'y a aucun utilisateur en ligne. Cette phrase ne sera, en principe, jamais lue sauf par toi. Ô grand développeur !. -
    {% endif %} -

    Les tests utiles (built-in tests)

    Les - tests utiles vous permettent de réaliser des conditions plus "poussées" - et plus intuitives. Par exemple, avec, vous pouvez savoir si une -variable est divisible par 10 ou si une variable est définie.

    defined

    Celui-ci vous permet de savoir si une variable est définie ou pas. Il renverra true si c'est le cas et false si ça ne l'est pas.

    {% if session.pseudo is defined %} -
    Votre pseudo est {{ session.pseudo}} . -
    {% endif %} -

    divisibleby

    Une test très intéressant est celui de savoir si votre variable est divisible par un certain nombre.

    {% if equipe.volley is divisibleby(6) %} -
    L'équipe sera divisé en 2 équipes de 6. -
    {% endif %} -

    empty

    Verifie si une variable est vide ou pas.

    {% if equipe.volley is empty %} -
    Le match est annulé. -
    {% endif %} -

    Il y a encore beaucoup d'autres test-utiles mais je pense que vous avez compris le principe. Je vous renvoie donc vers la liste de ces tests.

    La boucle for

    Ici rien de bien compliqué. Je vais surtout vous donner des exemples car il n'y a pas grand-choses à dire sur cette boucle.

    {% for i in 0..50 %} -
    Ceci est la ligne {{ i }} -
    {% enfor %} -

    En sachant que ce que je viens de vous montrer marche aussi avec des lettres :

    {% for lettre in 'a'..'z' %} -
    La lettre {{ letter }} est lettre numéro {{ loop.index }} de l'alphabet. -
    -
    {% endfor %} -

    Si - vous vous demandez d'où je sors le loop.index, il contient en fait le -numéro de tour de boucle actuel. Vous pouvez voir d'autres variables de -ce type ici (en scrollant un peu selon la taille de votre écran ; il s'agit du tableau).
    Vous pouvez également parcourir vos tableaux avec :

    {% for joueur in club %} -
    Le joueur {{ joueur.nom }} joue dans l'équipe {{ joueur.equipe }} -
    {% endfor %} -

    Depuis - la version 1.2 de Twig, il est possible de lancer une boucle selon une -condition dans le même "bloc". Ce n'est pas très clair alors je vous -propose un exemple.

    {% for joueur in club if equipe is not empty %} -
    Le joueur {{ joueur.nom }} joue dans l'équipe {{ joueur.equipe }} -
    {% endfor %} -

    Définir des variables

    J'ai - décidé de mettre cette partie en dernier pour une raison bien -particulière. La logique d'un moteur de template veut qu'on sépare les -variables et les fonctions php de l'affichage du contenu. Déclarer des -variables dans un template casse la logique du système. Je vous le -montre quand même car c'est quand même vous qui allez entretenir le code - que vous écrivez par la suite (en principe) et vous faîtes comme vous -le souhaitez.

    {% set var = "val" %} -

    Vous - pouvez aussi définir des variables comme en Javascript. C'est à dire en - mettant une seule fois "set" et en mettant à la suite les différentes -variables séparées par des virgules :

    {% set mascotte, os = 'beastie', 'bsd' %} -

    Quelques ajouts pratiques

    Voici quelques fonctions, pas indispensables, mais qui peuvent se révéler utiles.

    Les includes

    Vous pouvez aussi inclure des templates comme avec la fonction include de PHP. Pas besoin de vous écrire un roman :

    {% include 'header.twig' %} -

    Une chose que j'ai vraiment adorée c'est de pouvoir inclure des pages en leur restreignant l'accès à certaines variables.

    {% include 'fichier.twig' with {'var': 'val'} only %} -

    Ici, - la page n'aura accès qu'à la variable var. Le only lui empêche -d'accéder aux autres. Vous pouvez bien évidemment enlever le only pour -que la page accède aux autres variables.

    Une chose que j'ai aussi beaucoup aimée c'est la possibilité d'inclure des pages selon une condition. Par exemple :

    {% include online ? 'options.twig' : 'connexion.twig' %} -

    Un - dernier point sur les include est le fait que vous pouvez inclure un -template, lui passer des variables ou lui restreindre l'accès à -certaines et indiquer à Twig que si le template est inexistant, aucune -erreur ne sera renvoyée.

    {% include "sidebar.html" ignore missing %} -
    {% include "sidebar.html" ignore missing with {'foo': 'bar} %} -
    {% include "sidebar.html" ignore missing only %} -

    Cet exemple est tiré de la documentation.

    Les imports

    On passe maintenant à une fonctionnalité que j'apprécie énormément : les imports.

    Twig - vous propose de créer un système équivalent aux helpers. Je vous copie -le code de la documentation que je trouve tout simplement génial !
    Supposons que cette page s'appelle forms.html :

    {% macro input(name, value, type, size) %} -
    <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> -
    {% endmacro %} -
    -
    {% macro textarea(name, value, rows) %} -
    <textarea name="{{ name }}" rows="{{ rows|default(10) }}" cols="{{ cols|default(40) }}">{{ value|e }}</textarea> -
    {% endmacro %} -

    Et maintenant dans votre template, mettez le code suivant :

    {% import 'forms.html' as forms %} -
    -
    <dl> -
    <dt>Username</dt> -
    <dd>{{ forms.input('username') }}</dd> -
    <dt>Password</dt> -
    <dd>{{ forms.input('password', none, 'password') }}</dd> -
    </dl> -
    <p>{{ forms.textarea('comment') }}</p> -

    Les - formulaires sont un aspect récurrent et assez prise de tête quelques -fois. Cette fonctionnalité permet un réel gain de temps !

    Héritage

    Une - autre fonctionnalité qui m'a beaucoup plu est la possibilité d'héritage - entre templates. Dans la plupart des cas, vous avez une charte définie -pour votre site et à part le contenu, peu de choses changent dans la -présentation de votre page. Avec Twig, vous pouvez définir un template -avec votre header, votre footer (ce n'est qu'un exemple) et faire un -héritage entre les deux templates (celui qui affiche le contenu et celui - contenant le header et le footer) pour que vous n'ayez qu'à modifier un - seul fichier si vous voulez changer la structure de votre site. Je vous - prends encore un exemple de la documentation. En premier le template -parent et en second le template qui hérite du premier (l'enfant).

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> -
    <html lang="en"> -
    <head> -
    {% block head %} -
    <link rel="stylesheet" href="style.css" /> -
    <title>{% block title %}{% endblock %} - My Webpage</title> -
    {% endblock %} -
    </head> -
    <body> -
    <div id="content">{% block content %}{% endblock %}</div> -
    <div id="footer"> -
    {% block footer %} -
    &copy; Copyright 2009 by <a href="http://domain.invalid/">you</a>. -
    {% endblock %} -
    </div> -
    </body> -
    </html> -
    {% extends "base.html" %} -
    -
    {% block title %}Index{% endblock %} -
    {% block head %} -
    {{ parent() }} -
    <style type="text/css"> -
    .important { color: #336699; } -
    </style> -
    {% endblock %} -
    {% block content %} -
    <h1>Index</h1> -
    <p class="important"> -
    Welcome on my awesome homepage. -
    </p> -
    {% endblock %} -

    Dans - cet exemple, le template parent s'appelle base.html. Un petit point -dans le template enfant. Dans le block head, il y a un {{ parent() }}. -Cette fonction signifie que le bloc n'est pas nettoyé et le contenu du -bloc head sera celui présent dans le template parent et le template -enfant. Pratique non ?

    Fonctionnalités côté PHP

    Pour - l'instant je vous ai montré des fonctionnalités en majorité valables -pour les templates. Je vous propose ici de voir certains points -intéressants côté PHP.

    Modifier les tags

    Par - défaut, Twig utilise la syntaxe des templates jinja. Pour afficher une -variable il faut faire {{ variable }} et pour des instructions comme la -boucle for, ou les conditions il faut faire {% if confition %}. Twig -vous permet de modifier ces tags. Vous pouvez par exemple mettre les -tags erb (moteur de template Ruby présent dans Ruby on Rails et Sinatra pour ne citer qu'eux) :

    <?php -
    $syntaxe = new Twig_Lexer($twig, array( -
    'tag_comment' => array('#', '#'), -
    'tag_block' => array('<%', '%>'), -
    'tag_variable' => array('<%=', '%>') -
    )); -

    Ensuite, il faut indiquer au moteur que vous voulez modifier la syntaxe dans vos templates.

    <?php $twig->setLexer($syntaxe); ?> -

    La - variable $twig représente l'instance de la classe Twig_Environnement(). - Si votre instance de la classe s'appelle différemment, changez en -conséquence.

    Étendre Twig

    Les - personnes utilisant des moteurs de templates sont nombreuses. Mais tout - le monde ne l'utilise pas pour des projets de même taille. Twig peut -donc être "étendu", c'est-à-dire qu'on peut lui rajouter des -fonctionnalités très simplement grâce à des méthodes qui font tout le -travail à notre place. Ça nous évite de toucher au code source pour -ajouter un simple filtre par exemple.

    Je vous propose ici de voir comment ajouter vos propres filtres et objets.

    Ajouter un objet "global"

    Un - objet global, avec Twig, est un objet accessible depuis n'importe quel -template. La documentation montre, par exemple, comment rajouter un -objet "text" ayant une méthode lipsum. Je vous propose ici de voir -comment intégrer cet objet.

    Tout d'abord, il faut créer un fichier contenant une nouvelle classe :

    <?php -
    class Text { -
    -
    public $lipsum_text = 'Lorem ipsum dolor sit amet'; -
    -
    -
    /** -
    * @param none -
    * @return lipsum_text -
    */ -
    -
    public function lipsum() { -
    -
    return $this->lipsum_text; -
    -
    } -
    } -

    Ensuite, - indiquez à Twig que vous voulez ajouter votre objet dans les templates -(il faut que le fichier contenant la classe soit inclus dans le fichier -contenant cette instruction).

    <?php $twig->addGlobal('text', new Text()); -

    Le - premier argument représente le nom de votre objet dans les templates et - le second est une instance de la classe que vous avez précédemment -créée. Et maintenant dans vos templates vous pouvez faire :

    Voici un texte : <br /> -
    {{ text.lipsum() }} -

    Ajouter des filtres

    Maintenant - que vous avez compris le principe pour les objets, les filtres vont -aller tout seuls. C'est la même marche à suivre que précédemment. Ici -vous créez une fonction (pas forcément une méthode de classe) et vous -demandez à Twig de l'ajouter au parseur. Ici je vais vous montrer -comment ajouter le filtre lower (même s'il existe déjà, c'est juste pour - l'exemple).

    <?php $twig->addFilter('lower', new Twig_Filter_Function('strtolower')); ?> -

    Ici, - je n'ai pas eu à créer la fonction car elle est native mais vous pouvez - mettre les vôtres sans aucun problème. Vous pouvez aussi appeler la -méthode d'une classe mais attention, il faut que la méthode soit statique. Par exemple :

    <?php $twig->addFilter('monfiltre', new Twig_Filter_Function('MaClasse::MaMethode')); ?> -

    Ce - cours s'achève là. Je vous invite à poster un commentaire si vous avez -des suggestions, des points que vous ne trouvez pas clairs, etc. Pour ce - qui est de l'aide, je vous renvoie vers le forum php.

    Avant de vous quitter, je peux vous conseiller quelques liens :

    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -Exemple de certificat de réussite -
    -
    -Exemple de certificat de réussite -
    -
    - -
    -
    - -
    -
    -
    - - - - - - - - - - - -
    \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/1570554156513134.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/1570554156513134.js deleted file mode 100644 index b778f75..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/1570554156513134.js +++ /dev/null @@ -1 +0,0 @@ -fbq.registerPlugin("1570554156513134", {__fbEventsPlugin: 1, plugin: function(fbq, instance) { if (!instance.pixelsByID.hasOwnProperty("1570554156513134")) { fbq.init("1570554156513134"); }instance.configLoaded("1570554156513134"); }}); \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/2080865.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/2080865.js deleted file mode 100644 index c019466..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/2080865.js +++ /dev/null @@ -1 +0,0 @@ -// Excluding messages \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/2080865_002.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/2080865_002.js deleted file mode 100644 index 4bcaae7..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/2080865_002.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * HubSpot Analytics Tracking Code Build Number 1.155 - * Copyright 2017 HubSpot, Inc. http://www.hubspot.com - */ -var _hsq = _hsq || []; -var _paq = _paq || []; -_hsq.push(['setPortalId', 2080865]); -_hsq.push(['trackPageView']); -_hsq.push(['setLegacy', false]); -_hsq.push(['addCookieDomain', '.hs-sites.com']); -_hsq.push(['addCookieDomain', '.openclassrooms.com']); -_hsq.push(['enableAutomaticLinker', true]); -_hsq.push(['embedHubSpotScript', 'https://api.usemessages.com/messages/v2/embed/2080865.js', 'messages-2080865']); -/** _anon_wrapper_ **/ (function() { -function load(){function t(t){try{if("function"==typeof t)t(s,hstc);else if(t&&hstc.utils.isArray(t)&&s[t[0]])return s[t[0]].apply(s,t.slice(1))}catch(e){hstc.utils.logError(e)}}function e(){if(!r){for(r=win[ran_param]=!0,hstc.log("Processing HSQ"),hstc.utils.search2dArray(i,1,["setCookiesToSubdomain","addCookieDomain"],t),s._initialize(i),hstc.utils.search2dArray(i,1,PRIORITY_FUNCTIONS,t);i.length;)t(i.shift());i.push=t}}function n(){var t=context.getDocument();return!t.readyState||"complete"==t.readyState||t.addEventListener&&"loaded"==t.readyState?(e(),!0):!1}win[loaded_param]=!0;var i=win[hsq];hstc.utils.isArray(i)||(i=[]);var r=win[ran_param]||!1,s=new hstc.tracking.Tracker(context);n()||hstc.utils.addEventListener(win,"load",e,!0)}var hstc=hstc||{};hstc.JS_VERSION=1.1,hstc.ANALYTICS_HOST="track.hubspot.com";var hstc=hstc||{};hstc.Math={uuid:function(){if(window.navigator.userAgent.indexOf("googleweblight")>-1)return hstc.Math._mathRandomUuid();var t=window.crypto||window.msCrypto;return"undefined"!=typeof t&&"undefined"!=typeof t.getRandomValues&&"undefined"!=typeof window.Uint16Array?hstc.Math._cryptoUuid():hstc.Math._mathRandomUuid()},_mathRandomUuid:function(){var t=(new Date).getTime();return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:3&n|8).toString(16)})},_cryptoUuid:function(){var t=window.crypto||window.msCrypto,e=new Uint16Array(8);t.getRandomValues(e);var n=function(t){for(var e=t.toString(16);e.length<4;)e="0"+e;return e};return n(e[0])+n(e[1])+n(e[2])+n(e[3])+n(e[4])+n(e[5])+n(e[6])+n(e[7])}},Math.uuid=Math.uuid||function(){return hstc.utils.logError(new Error("Attempt to use Math.uuid()")),hstc.Math.uuid()};var hstc=hstc||{};hstc.debug=!1,hstc.log=function(){try{var t=new hstc.cookies.Cookie,e="hs_dbg",n=document.location.hash.indexOf("#hsdbg")>-1;if(hstc.debug||n||"1"===t.get(e)){var i=window.console;i&&"function"==typeof i.log&&i.log.apply(i,arguments),t.set(e,1)}}catch(r){}};var hstc=hstc||{};hstc.global={},hstc.global.Context=function(t,e,n,i,r,s,o){this.doc=t||document,this.nav=e||navigator,this.scr=n||screen,this.win=i||window,this.loc=r||this.win.location,this.top=s||top,this.parent=o||parent},hstc.global.Context.prototype.getDocument=function(){return this.doc},hstc.global.Context.prototype.getNavigator=function(){return this.nav},hstc.global.Context.prototype.getScreen=function(){return this.scr},hstc.global.Context.prototype.getWindow=function(){return this.win},hstc.global.Context.prototype.getLocation=function(){return this.loc},hstc.global.Context.prototype.getHostName=function(){try{return this.loc.hostname}catch(t){return this.doc.domain}},hstc.global.Context.prototype.getTop=function(){return this.top},hstc.global.Context.prototype.getParent=function(){return this.parent},hstc.global.Context.prototype.getReferrer=function(){var t="";try{t=this.top.document.referrer}catch(e){if(parent)try{t=this.parent.document.referrer}catch(n){t=""}}return""===t&&(t=this.doc.referrer),t},hstc.global.Context.prototype.getCharacterSet=function(){return this.doc.characterSet?this.doc.characterSet:this.doc.charset?this.doc.charset:""},hstc.global.Context.prototype.getLanguage=function(){return this.nav.language?this.nav.language:this.nav.browserLanguage?this.nav.browserLanguage:""};var hstc=hstc||{};hstc.utils={},hstc.utils.tostr=function(){return Object.prototype.toString}(),hstc.utils.getNextWeekStart=function(t){var e=t||new Date,n=e.getDay(),i=e.getDate()+(0==n?7:7-n);return hstc.utils.clearTimePart(new Date(e.setDate(i)))},hstc.utils.getNextMonthStart=function(t){for(var e=t||new Date,n=e.getMonth(),i=0;n==e.getMonth();)i++,e.setDate(e.getDate()+1);return hstc.utils.clearTimePart(e)},hstc.utils.clearTimePart=function(t){return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t},hstc.utils.truncateString=function(t,e){return t?t.length>e?t.substr(0,e):t:""},hstc.utils.search2dArray=function(t,e,n,i){for(var r=0;re?t.length+e:e,t.push.apply(t,i)},hstc.utils.isArray=function(t){return"[object Array]"===hstc.utils.tostr.call(t)},hstc.utils.inArray=function(t,e){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},hstc.utils.extend=function(){var t,e=arguments[0]||{},n=1,i=arguments.length,r=!1;for("boolean"==typeof e&&(r=e,e=arguments[1]||{},n=2),"object"==typeof e||hstc.utils.isFunction(e)||(e={}),i==n&&(e=this,--n);i>n;n++)if(null!=(t=arguments[n]))for(var s in t){var o=e[s],c=t[s];e!==c&&(r&&c&&"object"==typeof c&&!c.nodeType?e[s]=hstc.utils.extend(r,o||(null!==c.length?[]:{}),c):void 0!==c&&(e[s]=c))}return e},hstc.utils.each=function(t,e){var n,i=0,r=t.length;if(void 0===r){for(n in t)if(e.call(t[n],n,t[n])===!1)break}else for(var s=t[0];r>i&&e.call(s,i,s)!==!1;s=t[++i]);return t},hstc.utils.isDefined=function(t){return"undefined"!=typeof t},hstc.utils.addEventListener=function(t,e,n,i){return t.addEventListener?(t.addEventListener(e,n,i),!0):t.attachEvent?t.attachEvent("on"+e,n):void(t["on"+e]=n)},hstc.utils.preventDefault=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1},hstc.utils.loadImage=function(t,e,n){var i=new Date,r=new Image(1,1);expireDateTime=i.getTime()+e,r.onload=function(){n&&n()},r.src=t},hstc.utils.isEmpty=function(t){return void 0==t||"-"==t||""==t},hstc.utils.isEmptyObject=function(t){for(var e in t)return!1;return!0},hstc.utils.safeString=function(t){return hstc.utils.isEmpty(t)?"":t},hstc.utils.makeLowerCase=function(t){return hstc.utils.safeString(t).toLowerCase()},hstc.utils.encodeParam=function(t,e){var n=encodeURIComponent;return n instanceof Function?e?encodeURI(t):n(t):escape(t)},hstc.utils.decodeParam=function(t,e){var n,i=decodeURIComponent;if(t=t.split("+").join(" "),i instanceof Function)try{n=e?decodeURI(t):i(t)}catch(r){n=unescape(t)}else n=unescape(t);return n},hstc.utils.isFunction=function(t){return"[object Function]"===hstc.utils.tostr.call(t)},hstc.utils.utcnow=function(){return(new Date).getTime()},hstc.utils.hashDomain=function(e){var n=0;for(t=e.length-1;t>=0;t--){var i=e.charCodeAt(t);n=(n<<6&268435455)+i+(i<<14),i=266338304&n,n=0!==i?n^i>>21:n}return n},hstc.utils.extractDomain=function(t){var e=t.split(".");return e.length>2&&(e=e.slice(1)),"."+e.join(".")},hstc.utils.createElement=function(t){var e=document.createDocumentFragment(),n=document.createElement("div");for(n.innerHTML=t;n.firstChild;)e.appendChild(n.firstChild);return e},hstc.utils.deparam=function(t,e){var n={},i={"true":!0,"false":!1,"null":null};return t=hstc.utils.trim(hstc.utils.safeString(t)),(hstc.utils.startsWith(t,"?")||hstc.utils.startsWith(t,"#"))&&(t=t.slice(1)),hstc.utils.each(t.split("+").join(" ").split("&"),function(t,r){var s,o=r.split("="),c=hstc.utils.decodeParam(o[0]),a=n,h=0,u=c.split("]["),l=u.length-1;if(/\[/.test(u[0])&&/\]$/.test(u[l])?(u[l]=u[l].replace(/\]$/,""),u=u.shift().split("[").concat(u),l=u.length-1):l=0,2===o.length)if(s=hstc.utils.decodeParam(o[1]),e&&(s=s&&!isNaN(s)?+s:"undefined"===s?void 0:void 0!==i[s]?i[s]:s),l)for(;l>=h;h++)c=""===u[h]?a.length:u[h],a=a[c]=l>h?a[c]||(u[h+1]&&isNaN(u[h+1])?{}:[]):s;else hstc.utils.isArray(n[c])?n[c].push(s):void 0!==n[c]?n[c]=[n[c],s]:n[c]=s;else c&&(n[c]=e?void 0:"")}),n},hstc.utils.param=function(t,e){function n(t,e){i[i.length]=hstc.utils.encodeParam(t)+"="+hstc.utils.encodeParam(e)}var i=[];e=e||"&";for(var r in t)hstc.utils.isArray(t[r])?hstc.utils.each(t[r],function(){n(r,this)}):n(r,hstc.utils.isFunction(t[r])?t[r]():t[r]);return i.join(e).replace(/%20/g,"+")},hstc.utils.updateQueryStringParameter=function(t,e,n){var i=new RegExp("([?|&])"+e+"=.*?(&|#|$)(.*)","gi");if(i.test(t))return n?t.replace(i,"$1"+e+"="+n+"$2$3"):t.replace(i,"$1$3").replace(/(&|\?)$/,"");if(n){var r=-1!==t.indexOf("?")?"&":"?",s=t.split("#");return t=s[0]+r+e+"="+n,s[1]&&(t+="#"+s[1]),t}return t},hstc.utils.trim=function(t){return(t||"").replace(/^\s+|\s+$/g,"")},hstc.utils.startsWith=function(t,e){return t.substr(0,e.length)==e},hstc.utils.endsWith=function(t,e){var n=t.length-e.length;return n>=0&&t.lastIndexOf(e)===n},hstc.utils.mergeObject=function(t,e){if(t=t||{},!e)return e;for(var n in e)t[n]=e[n];return t},hstc.utils.hasClass=function(t,e){return t&&t.className?hstc.utils.inArray(e,t.className.split(" "))>-1:void 0},hstc.utils.stripNumericBrackets=function(t){return(t||"").replace(/(^.+?)\[(.+?)\]/,"$1_$2")},hstc.utils.parseCurrency=function(t,e){if("number"==typeof t)return t;var n=t.match(/([^\d]*)([\d\.,]+)([^\d\.,]*)/);if(n){var i,r=n[2],s=r.split("."),o=r.split(",");i=s.length>2||2==s.length&&s[1].length>2&&(0===o.length||s[0].length1?(decimalPart=i.pop(),c=i.join("")):c=i.join(""),c=c.replace(/[\.,]/g,"");var a=parseInt(c);return decimalPart&&(a+=parseFloat(decimalPart)/Math.pow(10,decimalPart.length)),a}return null},hstc.utils.logError=function(t,e){e=e||{};var n={w:hstc.utils.utcnow(),m:t.message||t.toString?t.toString():"-",j:hstc.JS_VERSION};n=hstc.utils.extend(n,e),t.name&&(n.n=t.name),t.fileName&&(n.f=t.fileName),t.lineNumber&&(n.l=t.lineNumber);try{n.x=t.stack||t.stacktrace||""}catch(i){}hstc.log("Encountered a JS error"),hstc.log(n),hstc.utils.loadImage("//"+hstc.ANALYTICS_HOST+"/__pto.gif?"+hstc.utils.param(n))},hstc.utils.objectsAreEqual=function(t,e){return eq(t,e,[])},hstc.utils.eq=function(t,e,n){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return t===e;if(t._chain&&(t=t._wrapped),e._chain&&(e=e._wrapped),t.isEqual&&_.isFunction(t.isEqual))return t.isEqual(e);if(e.isEqual&&_.isFunction(e.isEqual))return e.isEqual(t);var i=toString.call(t);if(i!=toString.call(e))return!1;switch(i){case"[object String]":return t==String(e);case"[object Number]":return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case"[object Date]":case"[object Boolean]":return+t==+e;case"[object RegExp]":return t.source==e.source&&t.global==e.global&&t.multiline==e.multiline&&t.ignoreCase==e.ignoreCase}if("object"!=typeof t||"object"!=typeof e)return!1;for(var r=n.length;r--;)if(n[r]==t)return!0;n.push(t);var s=0,o=!0;if("[object Array]"==i){if(s=t.length,o=s==e.length)for(;s--&&(o=s in t==s in e&&eq(t[s],e[s],n)););}else{if("constructor"in t!="constructor"in e||t.constructor!=e.constructor)return!1;for(var c in t)if(_.has(t,c)&&(s++,!(o=_.has(e,c)&&eq(t[c],e[c],n))))break;if(o){for(c in e)if(_.has(e,c)&&!s--)break;o=!s}}return n.pop(),o};var hstc=hstc||{};hstc.cookies={},hstc.cookies.Cookie=function(t){this.context=t||new hstc.global.Context,this.cookies=[],this.currentDomain=null,this.domains=[]},hstc.cookies.Cookie.prototype.addDomain=function(t){hstc.utils.endsWith("."+this.context.getHostName(),t)&&(!this.currentDomain||t.length0)||(i=n.expires+n.path+n.secure,this._writeCookie(t+"="+e+i)),this.get(t)&&this.cookies.push({name:t,value:e,extras:i})},hstc.cookies.Cookie.prototype._writeCookie=function(t){this.context.getDocument().cookie=t},hstc.cookies.Cookie.prototype.get=function(t){var e=new RegExp("(^|;)[ ]*"+t+"=([^;]*)"),n=e.exec(this.context.getDocument().cookie);return n?hstc.utils.decodeParam(n[2],!0):""},hstc.cookies.Cookie.prototype.has=function(t){if(hstc.utils.isDefined(this.context.getNavigator().cookieEnabled)||"cookie"in this.context.getDocument()&&this.context.getDocument().cookie.length>0)return!0;if(t)return!1;var e="__hs_testcookie";return this.set(e,"1"),"1"===this.get(e)},hstc.cookies.Cookie.prototype.remove=function(t){this.set(t,"",{expiryDate:"Thu, 01-Jan-1970 00:00:01 GMT"})},hstc.cookies.Cookie.prototype.removeAll=function(){for(var t=0;t0){hstc.log("Updating existing "+t+" hidden fields with new value");for(var n=0;nr;r++){var s=this.targetedContentMetadata[r];3===s.length&&n.push(s[0]+"-"+s[1]+"-"+s[2])}n.length&&(t.tc=n)}var o=this.context.getReferrer();hstc.utils.isEmpty(o)||(t.r=o);var c=this.context.getDocument().title;return hstc.utils.isEmpty(c)||(t.t=c),t},hstc.tracking.Tracker.prototype._getClientInfo=function(){var t={},e=this.context.getScreen();e&&(t.sd=e.width+"x"+e.height,t.cd=e.colorDepth+"-bit");var n=this.context.getCharacterSet();hstc.utils.isEmpty(n)||(t.cs=n);var i=this.context.getNavigator(),r=i.language?i.language:i.browserLanguage?i.browserLanguage:"";if(hstc.utils.isEmpty(r)||(t.ln=hstc.utils.makeLowerCase(r)),!this._hasDoNotTrack()){var s=this._getFingerprint();null!==s&&(t.bfp=s)}return t},hstc.tracking.Tracker.prototype._hasDoNotTrack=function(){try{if(this.cookie.get(hstc.tracking.Tracker.DO_NOT_TRACK)&&"yes"==this.cookie.get(hstc.tracking.Tracker.DO_NOT_TRACK))return!0}catch(t){}return!1},hstc.tracking.Tracker.prototype.showTargetedElements=function(){hstc.utils.each(this.clickSelectors,function(t,e){hstc.utils.each(hstc.find(e),function(t,e){e._hs_oldStyle=e.style.border,e.style.border="dotted 2px red"})})},hstc.tracking.Tracker.prototype.hideTargetedElements=function(){var t=function(t,e){hstc.utils.each(hstc.find(e),function(t,e){hstc.utils.isDefined(e._hs_oldStyle)&&(e.style.border=e._hs_oldStyle)})};hstc.utils.each(this.clickSelectors,t)},hstc.tracking.Tracker.prototype._handleMigrations=function(){var t=new hstc.migrations.MigrationHelper(this.context,this.cookie);if(this.migrationHelper=t,this.addUserTokenListener(function(e){t.insertUserTokenIntoForms.call(t,e)}),this.cookiesEnabled){this.addUserTokenListener(function(e){t.ensureHubspotutk.call(t,e)});var e=t.getHubspotutk()||window.hubspotutk,n=this.cookie.get(hstc.tracking.Utk.COOKIE);if(!hstc.utils.isEmpty(e)&&/[0123456789abcdef]{32}/.test(e)&&hstc.utils.isEmpty(n)){var i=hstc.tracking.Utk.parse(this.cookie,e);this._manageCookies(i)}t.clearFirstVisitCookie()}},hstc.tracking.Tracker.prototype._handlePrivacy=function(t){var e=null,n=null,i=null,r=null,s=!1,o=!1;hstc.utils.search2dArray(t,1,["setPrivacyPolicyWording","setPrivacyAcceptWording","setPrivacyDismissWording","setPrivacyDisclaimerWording","setPrivacyActive","setPrivacyHideDecline"],function(c,a){var h=c[0];"setPrivacyPolicyWording"===h?e=c[1]:"setPrivacyAcceptWording"===h?n=c[1]:"setPrivacyDismissWording"===h?i=c[1]:"setPrivacyDisclaimerWording"==h?r=c[1]:"setPrivacyActive"==h?s=c[1]:"setPrivacyHideDecline"==h&&(o=c[1]),delete t[a]});var c=this;hstc.utils.search2dArray(t,1,["setPrivacyPolicy"],function(a,h){a[1](c,hstc,s,e,n,i,r,o),delete t[h]})},hstc.tracking.Tracker.prototype._getFingerprint=function(){try{return(new hstc.Fingerprint).get()}catch(t){return hstc.utils.logError(t),null}},hstc.tracking.Tracker.prototype._getUrlParams=function(){var t,e,n=this.context.getLocation();try{t=n.search,e=n.hash}catch(i){t=window.location.search,e=window.location.hash}return hstc.utils.deparam(t||e)},hstc.tracking.Tracker.prototype.embedHubSpotScript=function(t,n){if(!document.getElementById(n)){var i=document.createElement("script");i.src=t,i.type="text/javascript",i.id=n,e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(i,e)}},hstc.tracking.Utk=function(t,e,n,i,r,s,o,c,a){this.context=t?t.context:new hstc.global.Context,this.cookie=t||new hstc.cookies.Cookie(this.context),this.rawDomain=this.cookie.currentDomain||hstc.utils.extractDomain(this.context.getHostName()),this.domain=e&&!c?e:hstc.utils.hashDomain(this.rawDomain),this.visitor=n?n.toLowerCase():hstc.Math.uuid(),this.initial=i||hstc.utils.utcnow(),this.previous=r||hstc.utils.utcnow(),this.current=s||hstc.utils.utcnow(),this.session=o||1,this.recovered=c,this.returningVisitor=a},hstc.tracking.Utk.COOKIE="__hstc",hstc.tracking.Utk.EXPIRATION=730,hstc.tracking.Utk.parse=function(t,e){var n=t?t.context:new hstc.global.Context; -t=t||new hstc.cookies.Cookie(n);var i=e?!1:!0;e=e||t.get(hstc.tracking.Utk.COOKIE);try{var r=e.split(".");if(6==r.length&&r[1].length>0)return r[5]=parseInt(r[5],10),new hstc.tracking.Utk(t,r[0],r[1],r[2],r[3],r[4],r[5],i,!0);if(1==r.length&&r[0].length>0)return new hstc.tracking.Utk(t,null,r[0],null,null,null,null,!0,!1)}catch(s){}return new hstc.tracking.Utk(t)},hstc.tracking.Utk.prototype.isNew=function(){return!this.returningVisitor},hstc.tracking.Utk.prototype.rotate=function(t){this.previous=this.current||t,this.current=t,this.session+=1},hstc.tracking.Utk.prototype.get=function(){var t=[this.domain,this.visitor,this.initial,this.previous,this.current,this.session];return t.join(".")},hstc.tracking.Utk.prototype.save=function(){this.cookie.set(hstc.tracking.Utk.COOKIE,this.get(),{daysToExpire:hstc.tracking.Utk.EXPIRATION})},hstc.tracking.Utk.prototype.resetDomain=function(){this.domain=hstc.utils.hashDomain(this.rawDomain)},hstc.tracking.Session=function(t,e,n,i,r){this.context=t?t.context:new hstc.global.Context,this.cookie=t||new hstc.cookies.Cookie(this.context),this.rawDomain=this.cookie.currentDomain||hstc.utils.extractDomain(this.context.getHostName()),this.domain=e&&!r?e:hstc.utils.hashDomain(this.rawDomain),this.viewCount=n||1,this.start=i||hstc.utils.utcnow(),this.recovered=r},hstc.tracking.Session.COOKIE="__hssc",hstc.tracking.Session.RESTART_COOKIE="__hssrc",hstc.tracking.Session.prototype.isNew=function(){return this.recovered!==!0},hstc.tracking.Session.parse=function(t,e){var n=t?t.context:new hstc.global.Context;t=t||new hstc.cookies.Cookie(n);var i=e?!1:!0;if(e||"1"===t.get(hstc.tracking.Session.RESTART_COOKIE)){e=e||t.get(hstc.tracking.Session.COOKIE);try{var r=e.split(".");if(3==r.length)return new hstc.tracking.Session(t,r[0],r[1],r[2],i)}catch(s){}}return new hstc.tracking.Session(t)},hstc.tracking.Session.prototype.increment=function(){try{this.viewCount=parseInt(this.viewCount||1,10)+1}catch(t){this.viewCount=1}},hstc.tracking.Session.prototype.get=function(){var t=[this.domain,this.viewCount,this.start];return t.join(".")},hstc.tracking.Session.prototype.save=function(){this.cookie.set(hstc.tracking.Session.RESTART_COOKIE,"1"),this.cookie.set(hstc.tracking.Session.COOKIE,this.get(),{minsToExpire:30})},hstc.tracking.Session.prototype.merge=function(t){return t.start&&t.startS.cacheLength&&delete t[e.shift()],t[n]=i}var e=[];return t}function i(t){return t[F]=!0,t}function r(t){var e=L.createElement("div");try{return!!t(e)}catch(n){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function s(t,e){for(var n=t.split("|"),i=t.length;i--;)S.attrHandle[n[i]]=e}function o(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||X)-(~t.sourceIndex||X);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function c(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function a(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function h(t){return i(function(e){return e=+e,i(function(n,i){for(var r,s=t([],n.length,e),o=s.length;o--;)n[r=s[o]]&&(n[r]=!(i[r]=n[r]))})})}function u(){}function l(t,n){var i,r,s,o,c,a,h,u=B[t+" "];if(u)return n?0:u.slice(0);for(c=t,a=[],h=S.preFilter;c;){(!i||(r=ut.exec(c)))&&(r&&(c=c.slice(r[0].length)||c),a.push(s=[])),i=!1,(r=lt.exec(c))&&(i=r.shift(),s.push({value:i,type:r[0].replace(ht," ")}),c=c.slice(i.length));for(o in S.filter)!(r=mt[o].exec(c))||h[o]&&!(r=h[o](r))||(i=r.shift(),s.push({value:i,type:o,matches:r}),c=c.slice(i.length));if(!i)break}return n?c.length:c?e.error(t):B(t,a).slice(0)}function g(t){for(var e=0,n=t.length,i="";n>e;e++)i+=t[e].value;return i}function p(t,e,n){var i=e.dir,r=n&&"parentNode"===i,s=q++;return e.first?function(e,n,s){for(;e=e[i];)if(1===e.nodeType||r)return t(e,n,s)}:function(e,n,o){var c,a,h,u=K+" "+s;if(o){for(;e=e[i];)if((1===e.nodeType||r)&&t(e,n,o))return!0}else for(;e=e[i];)if(1===e.nodeType||r)if(h=e[F]||(e[F]={}),(a=h[i])&&a[0]===u){if((c=a[1])===!0||c===b)return c===!0}else if(a=h[i]=[u],a[1]=t(e,n,o)||b,a[1]===!0)return!0}}function f(t){return t.length>1?function(e,n,i){for(var r=t.length;r--;)if(!t[r](e,n,i))return!1;return!0}:t[0]}function d(t,e,n,i,r){for(var s,o=[],c=0,a=t.length,h=null!=e;a>c;c++)(s=t[c])&&(!n||n(s,i,r))&&(o.push(s),h&&e.push(c));return o}function m(t,e,n,r,s,o){return r&&!r[F]&&(r=m(r)),s&&!s[F]&&(s=m(s,o)),i(function(i,o,c,a){var h,u,l,g=[],p=[],f=o.length,m=i||v(e||"*",c.nodeType?[c]:c,[]),y=!t||!i&&e?m:d(m,g,t,c,a),k=n?s||(i?t:f||r)?[]:o:y;if(n&&n(y,k,c,a),r)for(h=d(k,p),r(h,[],c,a),u=h.length;u--;)(l=h[u])&&(k[p[u]]=!(y[p[u]]=l));if(i){if(s||t){if(s){for(h=[],u=k.length;u--;)(l=k[u])&&h.push(y[u]=l);s(null,k=[],h,a)}for(u=k.length;u--;)(l=k[u])&&(h=s?nt.call(i,l):g[u])>-1&&(i[h]=!(o[h]=l))}}else k=d(k===o?k.splice(f,k.length):k),s?s(null,o,k,a):tt.apply(o,k)})}function y(t){for(var e,n,i,r=t.length,s=S.relative[t[0].type],o=s||S.relative[" "],c=s?1:0,a=p(function(t){return t===e},o,!0),h=p(function(t){return nt.call(e,t)>-1},o,!0),u=[function(t,n,i){return!s&&(i||n!==I)||((e=n).nodeType?a(t,n,i):h(t,n,i))}];r>c;c++)if(n=S.relative[t[c].type])u=[p(f(u),n)];else{if(n=S.filter[t[c].type].apply(null,t[c].matches),n[F]){for(i=++c;r>i&&!S.relative[t[i].type];i++);return m(c>1&&f(u),c>1&&g(t.slice(0,c-1).concat({value:" "===t[c-2].type?"*":""})).replace(ht,"$1"),n,i>c&&y(t.slice(c,i)),r>i&&y(t=t.slice(i)),r>i&&g(t))}u.push(n)}return f(u)}function k(t,n){var r=0,s=n.length>0,o=t.length>0,c=function(i,c,a,h,u){var l,g,p,f=[],m=0,y="0",k=i&&[],v=null!=u,w=I,C=i||o&&S.find.TAG("*",u&&c.parentNode||c),x=K+=null==w?1:Math.random()||.1,T=C.length;for(v&&(I=c!==L&&c,b=r);y!==T&&null!=(l=C[y]);y++){if(o&&l){for(g=0;p=t[g++];)if(p(l,c,a)){h.push(l);break}v&&(K=x,b=++r)}s&&((l=!p&&l)&&m--,i&&k.push(l))}if(m+=y,s&&y!==m){for(g=0;p=n[g++];)p(k,f,c,a);if(i){if(m>0)for(;y--;)k[y]||f[y]||(f[y]=Y.call(h));f=d(f)}tt.apply(h,f),v&&!i&&f.length>0&&m+n.length>1&&e.uniqueSort(h)}return v&&(K=x,I=w),k};return s?i(c):c}function v(t,n,i){for(var r=0,s=n.length;s>r;r++)e(t,n[r],i);return i}function w(t,e,n,i){var r,s,o,c,a,h=l(t);if(!i&&1===h.length){if(s=h[0]=h[0].slice(0),s.length>2&&"ID"===(o=s[0]).type&&T.getById&&9===e.nodeType&&P&&S.relative[s[1].type]){if(e=(S.find.ID(o.matches[0].replace(xt,Tt),e)||[])[0],!e)return n;t=t.slice(s.shift().value.length)}for(r=mt.needsContext.test(t)?0:s.length;r--&&(o=s[r],!S.relative[c=o.type]);)if((a=S.find[c])&&(i=a(o.matches[0].replace(xt,Tt),gt.test(s[0].type)&&e.parentNode||e))){if(s.splice(r,1),t=i.length&&g(s),!t)return tt.apply(n,i),n;break}}return D(t,h)(i,e,!P,n,gt.test(t)),n}function C(t){if(!t)return null;var e=/\[\w+(\*|\$|\||~|!|\^)?=(.+)]/,n=e.test(t);if(n&&(n=e.exec(t),n&&3==n.length)){var i=/'.+'/,r=/".+"/;if(!i.test(n[2])&&!r.test(n[2]))return t.replace("="+n[2],"='"+n[2]+"'")}}var x,T,b,S,E,_,D,I,N,A,L,O,P,M,R,U,j,F="sizzle"+-new Date,H=t.document,K=0,q=0,$=n(),B=n(),V=n(),W=!1,z=function(t,e){return t===e?(W=!0,0):0},G="undefined",X=1<<31,Q={}.hasOwnProperty,J=[],Y=J.pop,Z=J.push,tt=J.push,et=J.slice,nt=J.indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(this[e]===t)return e;return-1},it="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",rt="[\\x20\\t\\r\\n\\f]",st="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ot=st.replace("w","w#"),ct="\\["+rt+"*("+st+")"+rt+"*(?:([*^$|!~]?=)"+rt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+ot+")|)|)"+rt+"*\\]",at=":("+st+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+ct.replace(3,8)+")*)|.*)\\)|)",ht=new RegExp("^"+rt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+rt+"+$","g"),ut=new RegExp("^"+rt+"*,"+rt+"*"),lt=new RegExp("^"+rt+"*([>+~]|"+rt+")"+rt+"*"),gt=new RegExp(rt+"*[+~]"),pt=new RegExp("="+rt+"*([^\\]'\"]*)"+rt+"*\\]","g"),ft=new RegExp(at),dt=new RegExp("^"+ot+"$"),mt={ID:new RegExp("^#("+st+")"),CLASS:new RegExp("^\\.("+st+")"),TAG:new RegExp("^("+st.replace("w","w*")+")"),ATTR:new RegExp("^"+ct),PSEUDO:new RegExp("^"+at),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+rt+"*(even|odd|(([+-]|)(\\d*)n|)"+rt+"*(?:([+-]|)"+rt+"*(\\d+)|))"+rt+"*\\)|)","i"),bool:new RegExp("^(?:"+it+")$","i"),needsContext:new RegExp("^"+rt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+rt+"*((?:-\\d)?\\d*)"+rt+"*\\)|)(?=[^-]|$)","i")},yt=/^[^{]+\{\s*\[native \w/,kt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,vt=/^(?:input|select|textarea|button)$/i,wt=/^h\d$/i,Ct=/'|\\/g,xt=new RegExp("\\\\([\\da-f]{1,6}"+rt+"?|("+rt+")|.)","ig"),Tt=function(t,e,n){var i="0x"+e-65536;return i!==i||n?e:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)};try{tt.apply(J=et.call(H.childNodes),H.childNodes),J[H.childNodes.length].nodeType}catch(bt){tt={apply:J.length?function(t,e){Z.apply(t,et.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}_=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return e?"HTML"!==e.nodeName:!1},T=e.support={},A=e.setDocument=function(t){var e=t?t.ownerDocument||t:H,n=e.defaultView;return e!==L&&9===e.nodeType&&e.documentElement?(L=e,O=e.documentElement,P=!_(e),n&&n.attachEvent&&n!==n.top&&n.attachEvent("onbeforeunload",function(){A()}),T.attributes=r(function(t){return t.className="i",!t.getAttribute("className")}),T.getElementsByTagName=r(function(t){return t.appendChild(e.createComment("")),!t.getElementsByTagName("*").length}),T.getElementsByClassName=r(function(t){return t.innerHTML="
    ",t.firstChild.className="i",2===t.getElementsByClassName("i").length}),T.getById=r(function(t){return O.appendChild(t).id=F,!e.getElementsByName||!e.getElementsByName(F).length}),T.getById?(S.find.ID=function(t,e){if(typeof e.getElementById!==G&&P){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},S.filter.ID=function(t){var e=t.replace(xt,Tt);return function(t){return t.getAttribute("id")===e}}):(delete S.find.ID,S.filter.ID=function(t){var e=t.replace(xt,Tt);return function(t){var n=typeof t.getAttributeNode!==G&&t.getAttributeNode("id");return n&&n.value===e}}),S.find.TAG=T.getElementsByTagName?function(t,e){return typeof e.getElementsByTagName!==G?e.getElementsByTagName(t):void 0}:function(t,e){var n,i=[],r=0,s=e.getElementsByTagName(t);if("*"===t){for(;n=s[r++];)1===n.nodeType&&i.push(n);return i}return s},S.find.CLASS=T.getElementsByClassName&&function(t,e){return typeof e.getElementsByClassName!==G&&P?e.getElementsByClassName(t):void 0},R=[],M=[],(T.qsa=yt.test(e.querySelectorAll))&&(r(function(t){t.innerHTML="",t.querySelectorAll("[selected]").length||M.push("\\["+rt+"*(?:value|"+it+")"),t.querySelectorAll(":checked").length||M.push(":checked")}),r(function(t){var n=e.createElement("input");n.setAttribute("type","hidden"),t.appendChild(n).setAttribute("t",""),t.querySelectorAll("[t^='']").length&&M.push("[*^$]="+rt+"*(?:''|\"\")"),t.querySelectorAll(":enabled").length||M.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),M.push(",.*:")})),(T.matchesSelector=yt.test(U=O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&r(function(t){T.disconnectedMatch=U.call(t,"div"),U.call(t,"[s!='']:x"),R.push("!=",at)}),M=M.length&&new RegExp(M.join("|")),R=R.length&&new RegExp(R.join("|")),j=yt.test(O.contains)||O.compareDocumentPosition?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=O.compareDocumentPosition?function(t,n){if(t===n)return W=!0,0;var i=n.compareDocumentPosition&&t.compareDocumentPosition&&t.compareDocumentPosition(n);return i?1&i||!T.sortDetached&&n.compareDocumentPosition(t)===i?t===e||j(H,t)?-1:n===e||j(H,n)?1:N?nt.call(N,t)-nt.call(N,n):0:4&i?-1:1:t.compareDocumentPosition?-1:1}:function(t,n){var i,r=0,s=t.parentNode,c=n.parentNode,a=[t],h=[n];if(t===n)return W=!0,0;if(!s||!c)return t===e?-1:n===e?1:s?-1:c?1:N?nt.call(N,t)-nt.call(N,n):0;if(s===c)return o(t,n);for(i=t;i=i.parentNode;)a.unshift(i);for(i=n;i=i.parentNode;)h.unshift(i);for(;a[r]===h[r];)r++;return r?o(a[r],h[r]):a[r]===H?-1:h[r]===H?1:0},e):L},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==L&&A(t),n=n.replace(pt,"='$1']"),T.matchesSelector&&P&&(!R||!R.test(n))&&(!M||!M.test(n)))try{var i=U.call(t,n);if(i||T.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(r){}return e(n,L,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==L&&A(t),j(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==L&&A(t);var n=S.attrHandle[e.toLowerCase()],i=n&&Q.call(S.attrHandle,e.toLowerCase())?n(t,e,!P):void 0;return void 0===i?T.attributes||!P?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null:i},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],i=0,r=0;if(W=!T.detectDuplicates,N=!T.sortStable&&t.slice(0),t.sort(z),W){for(;e=t[r++];)e===t[r]&&(i=n.push(r));for(;i--;)t.splice(n[i],1)}return t},E=e.getText=function(t){var e,n="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=E(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i];i++)n+=E(e);return n},S=e.selectors={cacheLength:50,createPseudo:i,match:mt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(xt,Tt),t[3]=(t[4]||t[5]||"").replace(xt,Tt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[5]&&t[2];return mt.CHILD.test(t[0])?null:(t[3]&&void 0!==t[4]?t[2]=t[4]:n&&ft.test(n)&&(e=l(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(xt,Tt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=$[t+" "];return e||(e=new RegExp("(^|"+rt+")"+t+"("+rt+"|$)"))&&$(t,function(t){return e.test("string"==typeof t.className&&t.className||typeof t.getAttribute!==G&&t.getAttribute("class")||"")})},ATTR:function(t,n,i){return function(r){var s=e.attr(r,t);return null==s?"!="===n:n?(s+="","="===n?s===i:"!="===n?s!==i:"^="===n?i&&0===s.indexOf(i):"*="===n?i&&s.indexOf(i)>-1:"$="===n?i&&s.slice(-i.length)===i:"~="===n?(" "+s+" ").indexOf(i)>-1:"|="===n?s===i||s.slice(0,i.length+1)===i+"-":!1):!0}},CHILD:function(t,e,n,i,r){var s="nth"!==t.slice(0,3),o="last"!==t.slice(-4),c="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,n,a){var h,u,l,g,p,f,d=s!==o?"nextSibling":"previousSibling",m=e.parentNode,y=c&&e.nodeName.toLowerCase(),k=!a&&!c;if(m){if(s){for(;d;){for(l=e;l=l[d];)if(c?l.nodeName.toLowerCase()===y:1===l.nodeType)return!1;f=d="only"===t&&!f&&"nextSibling"}return!0}if(f=[o?m.firstChild:m.lastChild],o&&k){for(u=m[F]||(m[F]={}),h=u[t]||[],p=h[0]===K&&h[1],g=h[0]===K&&h[2],l=p&&m.childNodes[p];l=++p&&l&&l[d]||(g=p=0)||f.pop();)if(1===l.nodeType&&++g&&l===e){u[t]=[K,p,g];break}}else if(k&&(h=(e[F]||(e[F]={}))[t])&&h[0]===K)g=h[1];else for(;(l=++p&&l&&l[d]||(g=p=0)||f.pop())&&((c?l.nodeName.toLowerCase()!==y:1!==l.nodeType)||!++g||(k&&((l[F]||(l[F]={}))[t]=[K,g]),l!==e)););return g-=r,g===i||g%i===0&&g/i>=0}}},PSEUDO:function(t,n){var r,s=S.pseudos[t]||S.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return s[F]?s(n):s.length>1?(r=[t,t,"",n],S.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,r=s(t,n),o=r.length;o--;)i=nt.call(t,r[o]),t[i]=!(e[i]=r[o])}):function(t){return s(t,0,r)}):s}},pseudos:{not:i(function(t){var e=[],n=[],r=D(t.replace(ht,"$1"));return r[F]?i(function(t,e,n,i){for(var s,o=r(t,null,i,[]),c=t.length;c--;)(s=o[c])&&(t[c]=!(e[c]=s))}):function(t,i,s){return e[0]=t,r(e,null,s,n),!n.pop()}}),has:i(function(t){return function(n){return e(t,n).length>0}}),contains:i(function(t){return function(e){return(e.textContent||e.innerText||E(e)).indexOf(t)>-1}}),lang:i(function(t){return dt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(xt,Tt).toLowerCase(),function(e){var n;do if(n=P?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===O},focus:function(t){return t===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeName>"@"||3===t.nodeType||4===t.nodeType)return!1;return!0},parent:function(t){return!S.pseudos.empty(t)},header:function(t){return wt.test(t.nodeName)},input:function(t){return vt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||e.toLowerCase()===t.type)},first:h(function(){return[0]}),last:h(function(t,e){return[e-1]}),eq:h(function(t,e,n){return[0>n?n+e:n]}),even:h(function(t,e){for(var n=0;e>n;n+=2)t.push(n);return t}),odd:h(function(t,e){for(var n=1;e>n;n+=2)t.push(n);return t}),lt:h(function(t,e,n){for(var i=0>n?n+e:n;--i>=0;)t.push(i);return t}),gt:h(function(t,e,n){for(var i=0>n?n+e:n;++ir;r++)if(n.call(i,t[r],r,t)==={})return}else for(var o in t)if(t.hasOwnProperty(o)&&n.call(i,t[o],o,t)==={})return},this.map=function(t,e,i){var r=[];return null==t?r:n&&t.map===n?t.map(e,i):(this.each(t,function(t,n,s){r[r.length]=e.call(i,t,n,s)}),r)},"object"==typeof t?(this.hasher=t.hasher,this.screen_resolution=t.screen_resolution,this.screen_orientation=t.screen_orientation):"function"==typeof t&&(this.hasher=t)};return t.prototype={get:function(){var t=[];if(t.push(navigator.userAgent),t.push(navigator.language),t.push(screen.colorDepth),this.screen_resolution){var e=this.getScreenResolution();"undefined"!=typeof e&&t.push(e.join("x"))}return t.push((new Date).getTimezoneOffset()),t.push(this.hasSessionStorage()),t.push(this.hasLocalStorage()),t.push(!!window.indexedDB),document&&document.body?t.push(typeof document.body.addBehavior):t.push("undefined"),t.push(typeof window.openDatabase),t.push(navigator.cpuClass),t.push(navigator.platform),t.push(navigator.doNotTrack),this.hasher?this.hasher(t.join("###"),31):this.murmurhash3_32_gc(t.join("###"),31)},murmurhash3_32_gc:function(t,e){var n,i,r,s,o,c,a,h;for(n=3&t.length,i=t.length-n,r=e,o=3432918353,c=461845907,h=0;i>h;)a=255&t.charCodeAt(h)|(255&t.charCodeAt(++h))<<8|(255&t.charCodeAt(++h))<<16|(255&t.charCodeAt(++h))<<24,++h,a=(65535&a)*o+(((a>>>16)*o&65535)<<16)&4294967295,a=a<<15|a>>>17,a=(65535&a)*c+(((a>>>16)*c&65535)<<16)&4294967295,r^=a,r=r<<13|r>>>19,s=5*(65535&r)+((5*(r>>>16)&65535)<<16)&4294967295,r=(65535&s)+27492+(((s>>>16)+58964&65535)<<16);switch(a=0,n){case 3:a^=(255&t.charCodeAt(h+2))<<16;case 2:a^=(255&t.charCodeAt(h+1))<<8;case 1:a^=255&t.charCodeAt(h),a=(65535&a)*o+(((a>>>16)*o&65535)<<16)&4294967295,a=a<<15|a>>>17,a=(65535&a)*c+(((a>>>16)*c&65535)<<16)&4294967295,r^=a}return r^=t.length,r^=r>>>16,r=2246822507*(65535&r)+((2246822507*(r>>>16)&65535)<<16)&4294967295,r^=r>>>13,r=3266489909*(65535&r)+((3266489909*(r>>>16)&65535)<<16)&4294967295,r^=r>>>16,r>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(t){return!0}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(t){return!0}},getScreenResolution:function(){var t;return t=this.screen_orientation?screen.height>screen.width?[screen.height,screen.width]:[screen.width,screen.height]:[screen.height,screen.width]}},t});var PRIORITY_FUNCTIONS=["setPortalId","setCanonicalUrl","setPath","setContentType","setContentMetadata","setPageId","setTargetedContentMetadata","identify","setDebugMode","setLimitTrackingToCookieDomains"],hsq="_hsq",ran_param="_hstc_ran",loaded_param="_hstc_loaded";try{var context=new hstc.global.Context,win=context.getWindow();win[loaded_param]?hstc.utils.logError(new Error("Found multiple instances of the tracking code. Preventing additional tracker.")):load()}catch(err){hstc.utils.logError(err)} - -})(); /** _anon_wrapper_ **/ diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/300lo.json b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/300lo.json deleted file mode 100644 index a763883..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/300lo.json +++ /dev/null @@ -1 +0,0 @@ -addthis.cbs.oln9_15841865294629110({"bt2":"590c35b5001us0002","loc":"MDAwMDBFVUZSMDAyMjg5MTgyMzAwMDAwMDAwVg==","pixels":[{"url":"https://pm.w55c.net/ping_match.gif?st=addthis&rurl=https%3A%2F%2Fsu.addthis.com%2Fred%2Fusync%3Fpid%3D5%26puid%3D_wfivefivec_%26ssrc%3D1","id":5846,"isHttp":false}]}); \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/90dc06697a b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/90dc06697a deleted file mode 100644 index 3057913..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/90dc06697a +++ /dev/null @@ -1 +0,0 @@ -NREUM.setToken({'stn':0,'err':0,'ins':0,'cap':0,'spa':0}) \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/_ate.config_resp b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/_ate.config_resp deleted file mode 100644 index e3bde06..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/_ate.config_resp +++ /dev/null @@ -1 +0,0 @@ -_ate.track.config_resp({"pc":"shin","tool-config":{"_default":{"widgets":{"11ia":{"widgetId":"11ia","shareCountThreshold":0,"services":"facebook,twitter,google_plusone_share","numPreferredServices":5,"borderRadius":"0%","size":"32px","thirdPartyButtons":false,"elements":".addthis_sharing_toolbox","responsive":"0px","style":"fixed","id":"shin","hideLabel":true}}}},"subscription":{"active":true,"edition":"BASIC","tier":"basic","reducedBranding":false,"insightsEnabled":false},"customMessageTemplates":[],"pro-config":{"_default":{"widgets":{"shin":{"widgetId":"11ia","shareCountThreshold":0,"services":"facebook,twitter,google_plusone_share","numPreferredServices":5,"borderRadius":"0%","size":"32px","thirdPartyButtons":false,"elements":".addthis_sharing_toolbox","responsive":"0px","style":"fixed","id":"shin","hideLabel":true}}}}}); \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/amplitude-3.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/amplitude-3.js deleted file mode 100644 index 8f2838a..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/amplitude-3.js +++ /dev/null @@ -1,3 +0,0 @@ -(function umd(require){if("object"==typeof exports){module.exports=require("1")}else if("function"==typeof define&&define.amd){define(function(){return require("1")})}else{this["amplitude"]=require("1")}})(function outer(modules,cache,entries){var global=function(){return this}();function require(name,jumped){if(cache[name])return cache[name].exports;if(modules[name])return call(name,require);throw new Error('cannot find module "'+name+'"')}function call(id,require){var m=cache[id]={exports:{}};var mod=modules[id];var name=mod[2];var fn=mod[0];fn.call(m.exports,function(req){var dep=modules[id][1][req];return require(dep?dep:req)},m,m.exports,outer,modules,cache,entries);if(name)cache[name]=cache[id];return cache[id].exports}for(var id in entries){if(entries[id]){global[entries[id]]=require(id)}else{require(id)}}require.duo=true;require.cache=cache;require.modules=modules;return require}({1:[function(require,module,exports){var Amplitude=require("./amplitude");var old=window.amplitude||{};var newInstance=new Amplitude;newInstance._q=old._q||[];for(var instance in old._iq){if(old._iq.hasOwnProperty(instance)){newInstance.getInstance(instance)._q=old._iq[instance]._q||[]}}module.exports=newInstance},{"./amplitude":2}],2:[function(require,module,exports){var AmplitudeClient=require("./amplitude-client");var Constants=require("./constants");var Identify=require("./identify");var object=require("object");var Revenue=require("./revenue");var type=require("./type");var utils=require("./utils");var version=require("./version");var DEFAULT_OPTIONS=require("./options");var Amplitude=function Amplitude(){this.options=object.merge({},DEFAULT_OPTIONS);this._q=[];this._instances={}};Amplitude.prototype.Identify=Identify;Amplitude.prototype.Revenue=Revenue;Amplitude.prototype.getInstance=function getInstance(instance){instance=utils.isEmptyString(instance)?Constants.DEFAULT_INSTANCE:instance.toLowerCase();var client=this._instances[instance];if(client===undefined){client=new AmplitudeClient(instance);this._instances[instance]=client}return client};Amplitude.prototype.init=function init(apiKey,opt_userId,opt_config,opt_callback){this.getInstance().init(apiKey,opt_userId,opt_config,function(instance){this.options=instance.options;if(type(opt_callback)==="function"){opt_callback(instance)}}.bind(this))};Amplitude.prototype.runQueuedFunctions=function(){for(var i=0;ithis.options.sessionTimeout){this._newSession=true;this._sessionId=now;if(this.options.saveParamsReferrerOncePerSession){this._trackParamsAndReferrer()}}if(!this.options.saveParamsReferrerOncePerSession){this._trackParamsAndReferrer()}this._lastEventTime=now;_saveCookieData(this);this._sendEventsIfReady()}catch(e){utils.log(e)}finally{if(type(opt_callback)==="function"){opt_callback(this)}}};AmplitudeClient.prototype._trackParamsAndReferrer=function _trackParamsAndReferrer(){if(this.options.includeUtm){this._initUtmData()}if(this.options.includeReferrer){this._saveReferrer(this._getReferrer())}if(this.options.includeGclid){this._saveGclid(this._getUrlParams())}};var _parseConfig=function _parseConfig(options,config){if(type(config)!=="object"){return}var parseValidateAndLoad=function parseValidateAndLoad(key){if(!DEFAULT_OPTIONS.hasOwnProperty(key)){return}var inputValue=config[key];var expectedType=type(DEFAULT_OPTIONS[key]);if(!utils.validateInput(inputValue,key+" option",expectedType)){return}if(expectedType==="boolean"){options[key]=!!inputValue}else if(expectedType==="string"&&!utils.isEmptyString(inputValue)||expectedType==="number"&&inputValue>0){options[key]=inputValue}};for(var key in config){if(config.hasOwnProperty(key)){parseValidateAndLoad(key)}}};AmplitudeClient.prototype.runQueuedFunctions=function(){for(var i=0;i=this.options.eventUploadThreshold){this.sendEvents(callback);return true}if(!this._updateScheduled){this._updateScheduled=true;setTimeout(function(){this._updateScheduled=false;this.sendEvents()}.bind(this),this.options.eventUploadPeriodMillis)}return false};AmplitudeClient.prototype._getFromStorage=function _getFromStorage(storage,key){return storage.getItem(key+this._storageSuffix)};AmplitudeClient.prototype._setInStorage=function _setInStorage(storage,key,value){storage.setItem(key+this._storageSuffix,value)};var _upgradeCookeData=function _upgradeCookeData(scope){var cookieData=scope.cookieStorage.get(scope.options.cookieName);if(type(cookieData)==="object"&&cookieData.deviceId&&cookieData.sessionId&&cookieData.lastEventTime){return}var _getAndRemoveFromLocalStorage=function _getAndRemoveFromLocalStorage(key){var value=localStorage.getItem(key);localStorage.removeItem(key);return value};var apiKeySuffix=type(scope.options.apiKey)==="string"&&"_"+scope.options.apiKey.slice(0,6)||"";var localStorageDeviceId=_getAndRemoveFromLocalStorage(Constants.DEVICE_ID+apiKeySuffix);var localStorageUserId=_getAndRemoveFromLocalStorage(Constants.USER_ID+apiKeySuffix);var localStorageOptOut=_getAndRemoveFromLocalStorage(Constants.OPT_OUT+apiKeySuffix);if(localStorageOptOut!==null&&localStorageOptOut!==undefined){localStorageOptOut=String(localStorageOptOut)==="true"}var localStorageSessionId=parseInt(_getAndRemoveFromLocalStorage(Constants.SESSION_ID));var localStorageLastEventTime=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_EVENT_TIME));var localStorageEventId=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_EVENT_ID));var localStorageIdentifyId=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_IDENTIFY_ID));var localStorageSequenceNumber=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_SEQUENCE_NUMBER));var _getFromCookie=function _getFromCookie(key){return type(cookieData)==="object"&&cookieData[key]};scope.options.deviceId=_getFromCookie("deviceId")||localStorageDeviceId;scope.options.userId=_getFromCookie("userId")||localStorageUserId;scope._sessionId=_getFromCookie("sessionId")||localStorageSessionId||scope._sessionId;scope._lastEventTime=_getFromCookie("lastEventTime")||localStorageLastEventTime||scope._lastEventTime;scope._eventId=_getFromCookie("eventId")||localStorageEventId||scope._eventId;scope._identifyId=_getFromCookie("identifyId")||localStorageIdentifyId||scope._identifyId;scope._sequenceNumber=_getFromCookie("sequenceNumber")||localStorageSequenceNumber||scope._sequenceNumber;scope.options.optOut=localStorageOptOut||false;if(cookieData&&cookieData.optOut!==undefined&&cookieData.optOut!==null){scope.options.optOut=String(cookieData.optOut)==="true"}_saveCookieData(scope)};var _loadCookieData=function _loadCookieData(scope){var cookieData=scope.cookieStorage.get(scope.options.cookieName+scope._storageSuffix);if(type(cookieData)==="object"){if(cookieData.deviceId){scope.options.deviceId=cookieData.deviceId}if(cookieData.userId){scope.options.userId=cookieData.userId}if(cookieData.optOut!==null&&cookieData.optOut!==undefined){scope.options.optOut=cookieData.optOut}if(cookieData.sessionId){scope._sessionId=parseInt(cookieData.sessionId)}if(cookieData.lastEventTime){scope._lastEventTime=parseInt(cookieData.lastEventTime)}if(cookieData.eventId){scope._eventId=parseInt(cookieData.eventId)}if(cookieData.identifyId){scope._identifyId=parseInt(cookieData.identifyId)}if(cookieData.sequenceNumber){scope._sequenceNumber=parseInt(cookieData.sequenceNumber)}}};var _saveCookieData=function _saveCookieData(scope){scope.cookieStorage.set(scope.options.cookieName+scope._storageSuffix,{deviceId:scope.options.deviceId,userId:scope.options.userId,optOut:scope.options.optOut,sessionId:scope._sessionId,lastEventTime:scope._lastEventTime,eventId:scope._eventId,identifyId:scope._identifyId,sequenceNumber:scope._sequenceNumber})};AmplitudeClient.prototype._initUtmData=function _initUtmData(queryParams,cookieParams){queryParams=queryParams||this._getUrlParams();cookieParams=cookieParams||this.cookieStorage.get("__utmz");var utmProperties=getUtmData(cookieParams,queryParams);_sendParamsReferrerUserProperties(this,utmProperties)};var _sendParamsReferrerUserProperties=function _sendParamsReferrerUserProperties(scope,userProperties){if(type(userProperties)!=="object"||Object.keys(userProperties).length===0){return}var identify=new Identify;for(var key in userProperties){if(userProperties.hasOwnProperty(key)){identify.setOnce("initial_"+key,userProperties[key]);identify.set(key,userProperties[key])}}scope.identify(identify)};AmplitudeClient.prototype._getReferrer=function _getReferrer(){return document.referrer};AmplitudeClient.prototype._getUrlParams=function _getUrlParams(){return location.search};AmplitudeClient.prototype._saveGclid=function _saveGclid(urlParams){var gclid=utils.getQueryParam("gclid",urlParams);if(utils.isEmptyString(gclid)){return}var gclidProperties={gclid:gclid};_sendParamsReferrerUserProperties(this,gclidProperties)};AmplitudeClient.prototype._getDeviceIdFromUrlParam=function _getDeviceIdFromUrlParam(urlParams){return utils.getQueryParam(Constants.AMP_DEVICE_ID_PARAM,urlParams)};AmplitudeClient.prototype._getReferringDomain=function _getReferringDomain(referrer){if(utils.isEmptyString(referrer)){return null}var parts=referrer.split("/");if(parts.length>=3){return parts[2]}return null};AmplitudeClient.prototype._saveReferrer=function _saveReferrer(referrer){if(utils.isEmptyString(referrer)){return}var referrerInfo={referrer:referrer,referring_domain:this._getReferringDomain(referrer)};_sendParamsReferrerUserProperties(this,referrerInfo)};AmplitudeClient.prototype.saveEvents=function saveEvents(){try{this._setInStorage(localStorage,this.options.unsentKey,JSON.stringify(this._unsentEvents))}catch(e){}try{this._setInStorage(localStorage,this.options.unsentIdentifyKey,JSON.stringify(this._unsentIdentifys))}catch(e){}};AmplitudeClient.prototype.setDomain=function setDomain(domain){if(!utils.validateInput(domain,"domain","string")){return}try{this.cookieStorage.options({domain:domain});this.options.domain=this.cookieStorage.options().domain;_loadCookieData(this);_saveCookieData(this)}catch(e){utils.log(e)}};AmplitudeClient.prototype.setUserId=function setUserId(userId){try{this.options.userId=userId!==undefined&&userId!==null&&""+userId||null;_saveCookieData(this)}catch(e){utils.log(e)}};AmplitudeClient.prototype.setGroup=function(groupType,groupName){if(!this._apiKeySet("setGroup()")||!utils.validateInput(groupType,"groupType","string")||utils.isEmptyString(groupType)){return}var groups={};groups[groupType]=groupName;var identify=(new Identify).set(groupType,groupName);this._logEvent(Constants.IDENTIFY_EVENT,null,null,identify.userPropertiesOperations,groups,null,null)};AmplitudeClient.prototype.setOptOut=function setOptOut(enable){if(!utils.validateInput(enable,"enable","boolean")){return}try{this.options.optOut=enable;_saveCookieData(this)}catch(e){utils.log(e)}};AmplitudeClient.prototype.regenerateDeviceId=function regenerateDeviceId(){this.setDeviceId(UUID()+"R")};AmplitudeClient.prototype.setDeviceId=function setDeviceId(deviceId){if(!utils.validateInput(deviceId,"deviceId","string")){return}try{if(!utils.isEmptyString(deviceId)){this.options.deviceId=""+deviceId;_saveCookieData(this)}}catch(e){utils.log(e)}};AmplitudeClient.prototype.setUserProperties=function setUserProperties(userProperties){if(!this._apiKeySet("setUserProperties()")||!utils.validateInput(userProperties,"userProperties","object")){return}var sanitized=utils.truncate(utils.validateProperties(userProperties));if(Object.keys(sanitized).length===0){return}var identify=new Identify;for(var property in sanitized){if(sanitized.hasOwnProperty(property)){identify.set(property,sanitized[property])}}this.identify(identify)};AmplitudeClient.prototype.clearUserProperties=function clearUserProperties(){if(!this._apiKeySet("clearUserProperties()")){return}var identify=new Identify;identify.clearAll();this.identify(identify)};var _convertProxyObjectToRealObject=function _convertProxyObjectToRealObject(instance,proxy){for(var i=0;i0){return this._logEvent(Constants.IDENTIFY_EVENT,null,null,identify_obj.userPropertiesOperations,null,null,opt_callback)}}else{utils.log("Invalid identify input type. Expected Identify object but saw "+type(identify_obj))}if(type(opt_callback)==="function"){opt_callback(0,"No request sent")}};AmplitudeClient.prototype.setVersionName=function setVersionName(versionName){if(!utils.validateInput(versionName,"versionName","string")){return}this.options.versionName=versionName};AmplitudeClient.prototype._logEvent=function _logEvent(eventType,eventProperties,apiProperties,userProperties,groups,timestamp,callback){_loadCookieData(this);if(!eventType||this.options.optOut){if(type(callback)==="function"){callback(0,"No request sent")}return}try{var eventId;if(eventType===Constants.IDENTIFY_EVENT){eventId=this.nextIdentifyId()}else{eventId=this.nextEventId()}var sequenceNumber=this.nextSequenceNumber();var eventTime=type(timestamp)==="number"?timestamp:(new Date).getTime();if(!this._sessionId||!this._lastEventTime||eventTime-this._lastEventTime>this.options.sessionTimeout){this._sessionId=eventTime}this._lastEventTime=eventTime;_saveCookieData(this);userProperties=userProperties||{};apiProperties=apiProperties||{};eventProperties=eventProperties||{};groups=groups||{};var event={device_id:this.options.deviceId,user_id:this.options.userId,timestamp:eventTime,event_id:eventId,session_id:this._sessionId||-1,event_type:eventType,version_name:this.options.versionName||null,platform:this.options.platform,os_name:this._ua.browser.name||null,os_version:this._ua.browser.major||null,device_model:this._ua.os.name||null,language:this.options.language,api_properties:apiProperties,event_properties:utils.truncate(utils.validateProperties(eventProperties)),user_properties:utils.truncate(utils.validateProperties(userProperties)),uuid:UUID(),library:{name:"amplitude-js",version:version},sequence_number:sequenceNumber,groups:utils.truncate(utils.validateGroups(groups)),user_agent:this._userAgent};if(eventType===Constants.IDENTIFY_EVENT){this._unsentIdentifys.push(event);this._limitEventsQueued(this._unsentIdentifys)}else{this._unsentEvents.push(event);this._limitEventsQueued(this._unsentEvents)}if(this.options.saveEvents){this.saveEvents()}if(!this._sendEventsIfReady(callback)&&type(callback)==="function"){callback(0,"No request sent")}return eventId}catch(e){utils.log(e)}};AmplitudeClient.prototype._limitEventsQueued=function _limitEventsQueued(queue){if(queue.length>this.options.savedMaxCount){queue.splice(0,queue.length-this.options.savedMaxCount)}};AmplitudeClient.prototype.logEvent=function logEvent(eventType,eventProperties,opt_callback){return this.logEventWithTimestamp(eventType,eventProperties,null,opt_callback)};AmplitudeClient.prototype.logEventWithTimestamp=function logEvent(eventType,eventProperties,timestamp,opt_callback){if(!this._apiKeySet("logEvent()")||!utils.validateInput(eventType,"eventType","string")||utils.isEmptyString(eventType)){if(type(opt_callback)==="function"){opt_callback(0,"No request sent")}return-1}return this._logEvent(eventType,eventProperties,null,null,null,timestamp,opt_callback)};AmplitudeClient.prototype.logEventWithGroups=function(eventType,eventProperties,groups,opt_callback){if(!this._apiKeySet("logEventWithGroup()")||!utils.validateInput(eventType,"eventType","string")){if(type(opt_callback)==="function"){opt_callback(0,"No request sent")}return-1}return this._logEvent(eventType,eventProperties,null,null,groups,null,opt_callback)};var _isNumber=function _isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n)};AmplitudeClient.prototype.logRevenueV2=function logRevenueV2(revenue_obj){if(!this._apiKeySet("logRevenueV2()")){return}if(type(revenue_obj)==="object"&&revenue_obj.hasOwnProperty("_q")){revenue_obj=_convertProxyObjectToRealObject(new Revenue,revenue_obj)}if(revenue_obj instanceof Revenue){if(revenue_obj&&revenue_obj._isValidRevenue()){return this.logEvent(Constants.REVENUE_EVENT,revenue_obj._toJSONObject())}}else{utils.log("Invalid revenue input type. Expected Revenue object but saw "+type(revenue_obj))}};AmplitudeClient.prototype.logRevenue=function logRevenue(price,quantity,product){if(!this._apiKeySet("logRevenue()")||!_isNumber(price)||quantity!==undefined&&!_isNumber(quantity)){return-1}return this._logEvent(Constants.REVENUE_EVENT,{},{productId:product,special:"revenue_amount",quantity:quantity||1,price:price},null,null,null,null)};AmplitudeClient.prototype.removeEvents=function removeEvents(maxEventId,maxIdentifyId){_removeEvents(this,"_unsentEvents",maxEventId);_removeEvents(this,"_unsentIdentifys",maxIdentifyId)};var _removeEvents=function _removeEvents(scope,eventQueue,maxId){if(maxId<0){return}var filteredEvents=[];for(var i=0;imaxId){filteredEvents.push(scope[eventQueue][i])}}scope[eventQueue]=filteredEvents};AmplitudeClient.prototype.sendEvents=function sendEvents(callback){if(!this._apiKeySet("sendEvents()")||this._sending||this.options.optOut||this._unsentCount()===0){if(type(callback)==="function"){callback(0,"No request sent")}return}this._sending=true;var protocol=this.options.forceHttps?"https":"https:"===window.location.protocol?"https":"http";var url=protocol+"://"+this.options.apiEndpoint+"/";var numEvents=Math.min(this._unsentCount(),this.options.uploadBatchSize);var mergedEvents=this._mergeEventsAndIdentifys(numEvents);var maxEventId=mergedEvents.maxEventId;var maxIdentifyId=mergedEvents.maxIdentifyId;var events=JSON.stringify(mergedEvents.eventsToSend);var uploadTime=(new Date).getTime();var data={client:this.options.apiKey,e:events,v:Constants.API_VERSION,upload_time:uploadTime,checksum:md5(Constants.API_VERSION+this.options.apiKey+events+uploadTime)};var scope=this;new Request(url,data).send(function(status,response){scope._sending=false;try{if(status===200&&response==="success"){scope.removeEvents(maxEventId,maxIdentifyId);if(scope.options.saveEvents){scope.saveEvents()}if(!scope._sendEventsIfReady(callback)&&type(callback)==="function"){callback(status,response)}}else if(status===413){if(scope.options.uploadBatchSize===1){scope.removeEvents(maxEventId,maxIdentifyId)}scope.options.uploadBatchSize=Math.ceil(numEvents/2);scope.sendEvents(callback)}else if(type(callback)==="function"){callback(status,response)}}catch(e){}})};AmplitudeClient.prototype._mergeEventsAndIdentifys=function _mergeEventsAndIdentifys(numEvents){var eventsToSend=[];var eventIndex=0;var maxEventId=-1;var identifyIndex=0;var maxIdentifyId=-1;while(eventsToSend.length=this._unsentIdentifys.length;var noEvents=eventIndex>=this._unsentEvents.length;if(noEvents&&noIdentifys){utils.log("Merging Events and Identifys, less events and identifys than expected");break}else if(noIdentifys){event=this._unsentEvents[eventIndex++];maxEventId=event.event_id}else if(noEvents){event=this._unsentIdentifys[identifyIndex++];maxIdentifyId=event.event_id}else{if(!("sequence_number"in this._unsentEvents[eventIndex])||this._unsentEvents[eventIndex].sequence_number>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+Base64._keyStr.charAt(enc1)+Base64._keyStr.charAt(enc2)+Base64._keyStr.charAt(enc3)+Base64._keyStr.charAt(enc4)}return output},decode:function(input){try{if(window.btoa&&window.atob){return decodeURIComponent(escape(window.atob(input)))}}catch(e){}return Base64._decode(input)},_decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}output=UTF8.decode(output);return output}};module.exports=Base64},{"./utf8":23}],23:[function(require,module,exports){var UTF8={encode:function(s){var utftext="";for(var n=0;n127&&c<2048){utftext+=String.fromCharCode(c>>6|192);utftext+=String.fromCharCode(c&63|128)}else{utftext+=String.fromCharCode(c>>12|224);utftext+=String.fromCharCode(c>>6&63|128);utftext+=String.fromCharCode(c&63|128)}}return utftext},decode:function(utftext){var s="";var i=0;var c=0,c1=0,c2=0;while(i191&&c<224){c1=utftext.charCodeAt(i+1);s+=String.fromCharCode((c&31)<<6|c1&63);i+=2}else{c1=utftext.charCodeAt(i+1);c2=utftext.charCodeAt(i+2);s+=String.fromCharCode((c&15)<<12|(c1&63)<<6|c2&63);i+=3}}return s}};module.exports=UTF8},{}],14:[function(require,module,exports){var json=window.JSON||{};var stringify=json.stringify;var parse=json.parse;module.exports=parse&&stringify?JSON:require("json-fallback")},{"json-fallback":24}],24:[function(require,module,exports){(function(){"use strict";var JSON=module.exports={};function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}}var cx,escapable,gap,indent,meta,rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;iconstants.MAX_STRING_LENGTH?value.substring(0,constants.MAX_STRING_LENGTH):value}return value};var validateInput=function validateInput(input,name,expectedType){if(type(input)!==expectedType){log("Invalid "+name+" input type. Expected "+expectedType+" but received "+type(input));return false}return true};var validateProperties=function validateProperties(properties){var propsType=type(properties);if(propsType!=="object"){log("Error: invalid properties format. Expecting Javascript object, received "+propsType+", ignoring");return{}}if(Object.keys(properties).length>constants.MAX_PROPERTY_KEYS){log("Error: too many properties (more than 1000), ignoring");return{}}var copy={};for(var property in properties){if(!properties.hasOwnProperty(property)){continue}var key=property;var keyType=type(key);if(keyType!=="string"){key=String(key);log("WARNING: Non-string property key, received type "+keyType+', coercing to string "'+key+'"')}var value=validatePropertyValue(key,properties[property]);if(value===null){continue}copy[key]=value}return copy};var invalidValueTypes=["null","nan","undefined","function","arguments","regexp","element"];var validatePropertyValue=function validatePropertyValue(key,value){var valueType=type(value);if(invalidValueTypes.indexOf(valueType)!==-1){log('WARNING: Property key "'+key+'" with invalid value type '+valueType+", ignoring");value=null}else if(valueType==="error"){value=String(value);log('WARNING: Property key "'+key+'" with value type error, coercing to '+value)}else if(valueType==="array"){var arrayCopy=[];for(var i=0;i0){if(!this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)){utils.log("Need to send $clearAll on its own Identify object without any other operations, skipping $clearAll")}return this}this.userPropertiesOperations[AMP_OP_CLEAR_ALL]="-";return this};Identify.prototype.prepend=function(property,value){this._addOperation(AMP_OP_PREPEND,property,value);return this};Identify.prototype.set=function(property,value){this._addOperation(AMP_OP_SET,property,value);return this};Identify.prototype.setOnce=function(property,value){this._addOperation(AMP_OP_SET_ONCE,property,value);return this};Identify.prototype.unset=function(property){this._addOperation(AMP_OP_UNSET,property,"-");return this};Identify.prototype._addOperation=function(operation,property,value){if(this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)){utils.log("This identify already contains a $clearAll operation, skipping operation "+operation);return}if(this.properties.indexOf(property)!==-1){utils.log('User property "'+property+'" already used in this identify, skipping operation '+operation);return}if(!this.userPropertiesOperations.hasOwnProperty(operation)){this.userPropertiesOperations[operation]={}}this.userPropertiesOperations[operation][property]=value;this.properties.push(property)};module.exports=Identify},{"./type":8,"./utils":9}],16:[function(require,module,exports){(function($){"use strict";function safe_add(x,y){var lsw=(x&65535)+(y&65535),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}function bit_rol(num,cnt){return num<>>32-cnt}function md5_cmn(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)}function md5_ff(a,b,c,d,x,s,t){return md5_cmn(b&c|~b&d,a,b,x,s,t)}function md5_gg(a,b,c,d,x,s,t){return md5_cmn(b&d|c&~d,a,b,x,s,t)}function md5_hh(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)}function md5_ii(a,b,c,d,x,s,t){return md5_cmn(c^(b|~d),a,b,x,s,t)}function binl_md5(x,len){x[len>>5]|=128<>>9<<4)+14]=len;var i,olda,oldb,oldc,oldd,a=1732584193,b=-271733879,c=-1732584194,d=271733878;for(i=0;i>5]>>>i%32&255)}return output}function rstr2binl(input){var i,output=[];output[(input.length>>2)-1]=undefined;for(i=0;i>5]|=(input.charCodeAt(i/8)&255)<16){bkey=binl_md5(bkey,key.length*8)}for(i=0;i<16;i+=1){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}hash=binl_md5(ipad.concat(rstr2binl(data)),512+data.length*8);return binl2rstr(binl_md5(opad.concat(hash),512+128))}function rstr2hex(input){var hex_tab="0123456789abcdef",output="",x,i;for(i=0;i>>4&15)+hex_tab.charAt(x&15)}return output}function str2rstr_utf8(input){return unescape(encodeURIComponent(input))}function raw_md5(s){return rstr_md5(str2rstr_utf8(s))}function hex_md5(s){return rstr2hex(raw_md5(s))}function raw_hmac_md5(k,d){return rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d))}function hex_hmac_md5(k,d){return rstr2hex(raw_hmac_md5(k,d))}function md5(string,key,raw){if(!key){if(!raw){return hex_md5(string)}return raw_md5(string)}if(!raw){return hex_hmac_md5(key,string)}return raw_hmac_md5(key,string)}if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=md5}exports.md5=md5}else{if(typeof define==="function"&&define.amd){define(function(){return md5})}else{$.md5=md5}}})(this)},{}],6:[function(require,module,exports){var has=Object.prototype.hasOwnProperty;exports.keys=Object.keys||function(obj){var keys=[];for(var key in obj){if(has.call(obj,key)){keys.push(key)}}return keys};exports.values=function(obj){var vals=[];for(var key in obj){if(has.call(obj,key)){vals.push(obj[key])}}return vals};exports.merge=function(a,b){for(var key in b){if(has.call(b,key)){a[key]=b[key]}}return a};exports.length=function(obj){return exports.keys(obj).length};exports.isEmpty=function(obj){return 0==exports.length(obj)}},{}],17:[function(require,module,exports){var querystring=require("querystring");var Request=function(url,data){this.url=url;this.data=data||{}};Request.prototype.send=function(callback){var isIE=window.XDomainRequest?true:false;if(isIE){var xdr=new window.XDomainRequest;xdr.open("POST",this.url,true);xdr.onload=function(){callback(200,xdr.responseText)};xdr.onerror=function(){if(xdr.responseText==="Request Entity Too Large"){callback(413,xdr.responseText)}else{callback(500,xdr.responseText)}};xdr.ontimeout=function(){};xdr.onprogress=function(){};xdr.send(querystring.stringify(this.data))}else{var xhr=new XMLHttpRequest;xhr.open("POST",this.url,true);xhr.onreadystatechange=function(){if(xhr.readyState===4){callback(xhr.status,xhr.responseText)}};xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");xhr.send(querystring.stringify(this.data))}};module.exports=Request},{querystring:26}],26:[function(require,module,exports){var encode=encodeURIComponent;var decode=decodeURIComponent;var trim=require("trim");var type=require("type");exports.parse=function(str){if("string"!=typeof str)return{};str=trim(str);if(""==str)return{};if("?"==str.charAt(0))str=str.slice(1);var obj={};var pairs=str.split("&");for(var i=0;i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,uuid)};module.exports=uuid},{}],10:[function(require,module,exports){module.exports="3.4.0"},{}],11:[function(require,module,exports){var language=require("./language");module.exports={apiEndpoint:"api.amplitude.com",cookieExpiration:365*10,cookieName:"amplitude_id",domain:"",includeReferrer:false,includeUtm:false,language:language.language,optOut:false,platform:"Web",savedMaxCount:1e3,saveEvents:true,sessionTimeout:30*60*1e3,unsentKey:"amplitude_unsent",unsentIdentifyKey:"amplitude_unsent_identify",uploadBatchSize:100,batchEvents:false,eventUploadThreshold:30,eventUploadPeriodMillis:30*1e3,forceHttps:false,includeGclid:false,saveParamsReferrerOncePerSession:true,deviceIdFromUrlParam:false}},{"./language":29}],29:[function(require,module,exports){var getLanguage=function(){return navigator&&(navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage)||undefined};module.exports={language:getLanguage()}},{}]},{},{1:""})); \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/analytics.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/analytics.js deleted file mode 100644 index a3dccfd..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/analytics.js +++ /dev/null @@ -1,46 +0,0 @@ -(function(){var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b\x3c/script>')):(c=M.createElement("script"), -c.type="text/javascript",c.async=!0,c.src=a,d&&(c.onload=d),b&&(c.id=b),a=M.getElementsByTagName("script")[0],a.parentNode.insertBefore(c,a)))},Ud=function(){return"https:"==M.location.protocol},E=function(a,b){return(a=a.match("(?:&|#|\\?)"+K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},ya=function(a){var b=M.referrer;if(/^https?:\/\//i.test(b)){if(a)return b;a="//"+M.location.hostname; -var c=b.indexOf(a);if(5==c||6==c)if(a=b.charAt(c+a.length),"/"==a||"?"==a||""==a||":"==a)return;return b}},za=function(a,b){if(1==b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c){var d=O.XMLHttpRequest;if(!d)return!1;var e=new d;if(!("withCredentials"in e))return!1; -e.open("POST",a,!0);e.withCredentials=!0;e.setRequestHeader("Content-Type","text/plain");e.onreadystatechange=function(){4==e.readyState&&(c(),e=null)};e.send(b);return!0},x=function(a,b,c){return O.navigator.sendBeacon?O.navigator.sendBeacon(a,b)?(c(),!0):!1:!1},ge=function(a,b,c){1<=100*Math.random()||G("?")||(a=["t=error","_e="+a,"_v=j53","sr=1"],b&&a.push("_f="+b),c&&a.push("_m="+K(c.substring(0,100))),a.push("aip=1"),a.push("z="+hd()),wc(oc()+"/collect",a.join("&"),ua))};var h=function(a){var b=O.gaData=O.gaData||{};return b[a]=b[a]||{}};var Ha=function(){this.M=[]};Ha.prototype.add=function(a){this.M.push(a)};Ha.prototype.D=function(a){try{for(var b=0;b=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} -function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];Qa.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} -function Sa(a){var b=P(a,gd)||oc()+"/collect",c=P(a,fa);!c&&a.get(Vd)&&(c="beacon");if(c){var d=P(a,Ra),e=a.get(Ia),e=e||ua;"image"==c?wc(b,d,e):"xhr"==c&&wd(b,d,e)||"beacon"==c&&x(b,d,e)||ba(b,d,e)}else ba(b,P(a,Ra),a.get(Ia));b=a.get(Na);b=h(b);c=b.hitcount;b.hitcount=c?c+1:1;b=a.get(Na);delete h(b).pending_experiments;a.set(Ia,ua,!0)} -function Hc(a){(O.gaData=O.gaData||{}).expId&&a.set(Nc,(O.gaData=O.gaData||{}).expId);(O.gaData=O.gaData||{}).expVar&&a.set(Oc,(O.gaData=O.gaData||{}).expVar);var b=a.get(Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&a.set(m,d,!0)}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";} -function yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set("&did",b.join(","),!0)}function vb(a){if(!a.get(Na))throw"abort";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){var c=R(a,Wa),d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee},Qa=new ee,Za=[];Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:1*a};Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)}; -var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)},bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=Qa.get(a);if(!b)for(var c=0;c=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c= -aa(b);b=0b.length)){for(var c=[], -d=0;d=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;d=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||"").toLowerCase());if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;carguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(qc[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={},Ed(this.ra,this.b)&&da(this.b.get(Na)))}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener("visibilitychange",d,!1):e.detachEvent&&e.detachEvent("onvisibilitychange",d)}};L(M,"visibilitychange",c)}};var td=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=td.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||"t0",this.K=b[2]||"",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A="create"==this.C,this.i="require"==this.C,this.g="provide"==this.C,this.ba="remove"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort"; -if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.c)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.c)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47}; -var u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);if(p.test(b)){J(52);a=N.j(a);if(!a)return!0;c=d||{};d={id:b,B:c.dataLayer||"dataLayer",ia:!!a.get("anonymizeIp"),sync:e,G:!1};a.get(">m")==b&&(d.G=!0);var g=String(a.get("name"));"t0"!=g&&(d.target=g);G(String(a.get("trackingId")))||(d.ja=String(a.get(Q)), -d.ka=Number(a.get(n)),c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,";").match(c))?c.sort().join("").substring(1):void 0,d.la=c,d.qa=E(a.b.get(kb)||"","gclid"));a=d.B;c=(new Date).getTime();O[a]=O[a]||[];c={"gtm.start":c};e||(c.event="gtm.js");O[a].push(c);c=t(d)}!c&&Zd.hasOwnProperty(b)?(J(39),c=b+".js"):J(43);c&&(c&&0<=c.indexOf("/")||(c=(Ba||Ud()?"https:":"http:")+"//www.google-analytics.com/plugins/ua/"+c),d=ae(c),a=d.protocol,c=M.location.protocol,("https:"==a||a==c||("http:"!=a?0:"http:"== -c))&&B(d)&&(wa(d.url,void 0,e),$d.set(b,!0)))}},v=function(a,b){var c=A.get(a)||[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0, -e[2].lastIndexOf("/"))+"/"+a);c.href=a;d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments),b=Z.f.concat(b);for(Z.f=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf("https://www.google-analytics.com/analytics")){J(33); -b=!0;break a}}b=!1}b&&(Ba=!0)}Ud()||Ba||!Ed(new Od(1E4))||(J(36),Ba=!0);(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);C("displayfeatures",fd);C("adfeatures",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b>21:b}return b};})(window); diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/analytics_002.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/analytics_002.js deleted file mode 100644 index 5f9d0cd..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/analytics_002.js +++ /dev/null @@ -1,9 +0,0 @@ -!function(t){"function"==typeof t&&t.amd&&(t=undefined);!function e(t,n,o){function i(a,s){if(!n[a]){if(!t[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(r)return r(a,!0);var p=new Error("Cannot find module '"+a+"'");throw p.code="MODULE_NOT_FOUND",p}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return i(n||e)},u,u.exports,e,t,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a0;){var r=o.shift(),a=r.shift();"function"==typeof n[a]&&n[a].apply(n,r)}o=null;e.analytics=n}).call(this,"undefined"!=typeof window&&window.document&&window.document.implementation?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{})},{"./analytics":1}],3:[function(t,e,n){"use strict";e.exports={"adlearn-open-platform":t("@segment/analytics.js-integration-adlearn-open-platform"),"adobe-analytics":t("@segment/analytics.js-integration-adobe-analytics"),"adometry":t("@segment/analytics.js-integration-adometry"),"adroll":t("@segment/analytics.js-integration-adroll"),"adwords":t("@segment/analytics.js-integration-adwords"),"alexa":t("@segment/analytics.js-integration-alexa"),"ambassador":t("@segment/analytics.js-integration-ambassador"),"amplitude":t("@segment/analytics.js-integration-amplitude"),"appboy":t("@segment/analytics.js-integration-appboy"),"appcues":t("@segment/analytics.js-integration-appcues"),"appnexus":t("@segment/analytics.js-integration-appnexus"),"atatus":t("@segment/analytics.js-integration-atatus"),"autosend":t("@segment/analytics.js-integration-autosend"),"awesm":t("@segment/analytics.js-integration-awesm"),"bing-ads":t("@segment/analytics.js-integration-bing-ads"),"blueshift":t("@segment/analytics.js-integration-blueshift"),"boomtrain":t("@segment/analytics.js-integration-boomtrain"),"bronto":t("@segment/analytics.js-integration-bronto"),"bugherd":t("@segment/analytics.js-integration-bugherd"),"bugsnag":t("@segment/analytics.js-integration-bugsnag"),"chameleon":t("@segment/analytics.js-integration-chameleon"),"chartbeat":t("@segment/analytics.js-integration-chartbeat"),"clicky":t("@segment/analytics.js-integration-clicky"),"comscore":t("@segment/analytics.js-integration-comscore"),"convertro":t("@segment/analytics.js-integration-convertro"),"crazy-egg":t("@segment/analytics.js-integration-crazy-egg"),"curebit":t("@segment/analytics.js-integration-curebit"),"customerio":t("@segment/analytics.js-integration-customerio"),"doubleclick-floodlight":t("@segment/analytics.js-integration-doubleclick-floodlight"),"drift":t("@segment/analytics.js-integration-drift"),"drip":t("@segment/analytics.js-integration-drip"),"elevio":t("@segment/analytics.js-integration-elevio"),"eloqua":t("@segment/analytics.js-integration-eloqua"),"email-aptitude":t("@segment/analytics.js-integration-email-aptitude"),"errorception":t("@segment/analytics.js-integration-errorception"),"evergage":t("@segment/analytics.js-integration-evergage"),"extole":t("@segment/analytics.js-integration-extole"),"facebook-conversion-tracking":t("@segment/analytics.js-integration-facebook-conversion-tracking"),"facebook-custom-audiences":t("@segment/analytics.js-integration-facebook-custom-audiences"),"facebook-pixel":t("@segment/analytics.js-integration-facebook-pixel"),"foxmetrics":t("@segment/analytics.js-integration-foxmetrics"),"fullstory":t("@segment/analytics.js-integration-fullstory"),"gauges":t("@segment/analytics.js-integration-gauges"),"get-satisfaction":t("@segment/analytics.js-integration-get-satisfaction"),"google-analytics":t("@segment/analytics.js-integration-google-analytics"),"google-tag-manager":t("@segment/analytics.js-integration-google-tag-manager"),"gosquared":t("@segment/analytics.js-integration-gosquared"),"heap":t("@segment/analytics.js-integration-heap"),"hellobar":t("@segment/analytics.js-integration-hellobar"),"hittail":t("@segment/analytics.js-integration-hittail"),"hubspot":t("@segment/analytics.js-integration-hubspot"),"improvely":t("@segment/analytics.js-integration-improvely"),"inspectlet":t("@segment/analytics.js-integration-inspectlet"),"intercom":t("@segment/analytics.js-integration-intercom"),"keen-io":t("@segment/analytics.js-integration-keen-io"),"kenshoo":t("@segment/analytics.js-integration-kenshoo"),"kenshoo-infinity":t("@segment/analytics.js-integration-kenshoo-infinity"),"kissmetrics":t("@segment/analytics.js-integration-kissmetrics"),"klaviyo":t("@segment/analytics.js-integration-klaviyo"),"livechat":t("@segment/analytics.js-integration-livechat"),"localytics":t("@segment/analytics.js-integration-localytics"),"lucky-orange":t("@segment/analytics.js-integration-lucky-orange"),"lytics":t("@segment/analytics.js-integration-lytics"),"madkudu":t("@segment/analytics.js-integration-madkudu"),"marketo":t("@segment/analytics.js-integration-marketo"),"mediamath":t("@segment/analytics.js-integration-mediamath"),"mixpanel":t("@segment/analytics.js-integration-mixpanel"),"mojn":t("@segment/analytics.js-integration-mojn"),"monetate":t("@segment/analytics.js-integration-monetate"),"mouseflow":t("@segment/analytics.js-integration-mouseflow"),"mousestats":t("@segment/analytics.js-integration-mousestats"),"nanigans":t("@segment/analytics.js-integration-nanigans"),"navilytics":t("@segment/analytics.js-integration-navilytics"),"nudgespot":t("@segment/analytics.js-integration-nudgespot"),"olark":t("@segment/analytics.js-integration-olark"),"omniture":t("@segment/analytics.js-integration-omniture"),"onespot":t("@segment/analytics.js-integration-onespot"),"optimizely":t("@segment/analytics.js-integration-optimizely"),"outbound":t("@segment/analytics.js-integration-outbound"),"pardot":t("@segment/analytics.js-integration-pardot"),"parsely":t("@segment/analytics.js-integration-parsely"),"pendo":t("@segment/analytics.js-integration-pendo"),"perfect-audience":t("@segment/analytics.js-integration-perfect-audience"),"pingdom":t("@segment/analytics.js-integration-pingdom"),"piwik":t("@segment/analytics.js-integration-piwik"),"qualaroo":t("@segment/analytics.js-integration-qualaroo"),"quantcast":t("@segment/analytics.js-integration-quantcast"),"quanticmind":t("@segment/analytics.js-integration-quanticmind"),"ramen":t("@segment/analytics.js-integration-ramen"),"rockerbox":t("@segment/analytics.js-integration-rockerbox"),"rocket-fuel":t("@segment/analytics.js-integration-rocket-fuel"),"rollbar":t("@segment/analytics.js-integration-rollbar"),"route":t("@segment/analytics.js-integration-route"),"saasquatch":t("@segment/analytics.js-integration-saasquatch"),"satismeter":t("@segment/analytics.js-integration-satismeter"),"segmentio":t("@segment/analytics.js-integration-segmentio"),"sentry":t("@segment/analytics.js-integration-sentry"),"shareasale":t("@segment/analytics.js-integration-shareasale"),"simplereach":t("@segment/analytics.js-integration-simplereach"),"simplifi":t("@segment/analytics.js-integration-simplifi"),"snapengage":t("@segment/analytics.js-integration-snapengage"),"spinnakr":t("@segment/analytics.js-integration-spinnakr"),"steelhouse":t("@segment/analytics.js-integration-steelhouse"),"stripe-radar":t("@segment/analytics.js-integration-stripe-radar"),"supporthero":t("@segment/analytics.js-integration-supporthero"),"taplytics":t("@segment/analytics.js-integration-taplytics"),"tapstream":t("@segment/analytics.js-integration-tapstream"),"tell-apart":t("@segment/analytics.js-integration-tell-apart"),"totango":t("@segment/analytics.js-integration-totango"),"trackjs":t("@segment/analytics.js-integration-trackjs"),"tvsquared":t("@segment/analytics.js-integration-tvsquared"),"twitter-ads":t("@segment/analytics.js-integration-twitter-ads"),"userlike":t("@segment/analytics.js-integration-userlike"),"uservoice":t("@segment/analytics.js-integration-uservoice"),"vero":t("@segment/analytics.js-integration-vero"),"visual-website-optimizer":t("@segment/analytics.js-integration-visual-website-optimizer"),"webengage":t("@segment/analytics.js-integration-webengage"),"wishpond":t("@segment/analytics.js-integration-wishpond"),"woopra":t("@segment/analytics.js-integration-woopra"),"wootric":t("@segment/analytics.js-integration-wootric"),"yandex-metrica":t("@segment/analytics.js-integration-yandex-metrica"),"yellowhammer":t("@segment/analytics.js-integration-yellowhammer"),"zopim":t("@segment/analytics.js-integration-zopim")}},{"@segment/analytics.js-integration-adlearn-open-platform":33,"@segment/analytics.js-integration-adobe-analytics":34,"@segment/analytics.js-integration-adometry":41,"@segment/analytics.js-integration-adroll":42,"@segment/analytics.js-integration-adwords":49,"@segment/analytics.js-integration-alexa":50,"@segment/analytics.js-integration-ambassador":51,"@segment/analytics.js-integration-amplitude":52,"@segment/analytics.js-integration-appboy":53,"@segment/analytics.js-integration-appcues":60,"@segment/analytics.js-integration-appnexus":61,"@segment/analytics.js-integration-atatus":62,"@segment/analytics.js-integration-autosend":63,"@segment/analytics.js-integration-awesm":64,"@segment/analytics.js-integration-bing-ads":65,"@segment/analytics.js-integration-blueshift":66,"@segment/analytics.js-integration-boomtrain":67,"@segment/analytics.js-integration-bronto":68,"@segment/analytics.js-integration-bugherd":75,"@segment/analytics.js-integration-bugsnag":76,"@segment/analytics.js-integration-chameleon":77,"@segment/analytics.js-integration-chartbeat":78,"@segment/analytics.js-integration-clicky":79,"@segment/analytics.js-integration-comscore":80,"@segment/analytics.js-integration-convertro":81,"@segment/analytics.js-integration-crazy-egg":88,"@segment/analytics.js-integration-curebit":89,"@segment/analytics.js-integration-customerio":96,"@segment/analytics.js-integration-doubleclick-floodlight":97,"@segment/analytics.js-integration-drift":104,"@segment/analytics.js-integration-drip":105,"@segment/analytics.js-integration-elevio":112,"@segment/analytics.js-integration-eloqua":114,"@segment/analytics.js-integration-email-aptitude":115,"@segment/analytics.js-integration-errorception":116,"@segment/analytics.js-integration-evergage":118,"@segment/analytics.js-integration-extole":119,"@segment/analytics.js-integration-facebook-conversion-tracking":120,"@segment/analytics.js-integration-facebook-custom-audiences":121,"@segment/analytics.js-integration-facebook-pixel":128,"@segment/analytics.js-integration-foxmetrics":135,"@segment/analytics.js-integration-fullstory":142,"@segment/analytics.js-integration-gauges":144,"@segment/analytics.js-integration-get-satisfaction":145,"@segment/analytics.js-integration-google-analytics":146,"@segment/analytics.js-integration-google-tag-manager":153,"@segment/analytics.js-integration-gosquared":160,"@segment/analytics.js-integration-heap":167,"@segment/analytics.js-integration-hellobar":174,"@segment/analytics.js-integration-hittail":175,"@segment/analytics.js-integration-hubspot":176,"@segment/analytics.js-integration-improvely":183,"@segment/analytics.js-integration-inspectlet":184,"@segment/analytics.js-integration-intercom":185,"@segment/analytics.js-integration-keen-io":186,"@segment/analytics.js-integration-kenshoo":194,"@segment/analytics.js-integration-kenshoo-infinity":187,"@segment/analytics.js-integration-kissmetrics":195,"@segment/analytics.js-integration-klaviyo":196,"@segment/analytics.js-integration-livechat":203,"@segment/analytics.js-integration-localytics":204,"@segment/analytics.js-integration-lucky-orange":205,"@segment/analytics.js-integration-lytics":212,"@segment/analytics.js-integration-madkudu":213,"@segment/analytics.js-integration-marketo":214,"@segment/analytics.js-integration-mediamath":215,"@segment/analytics.js-integration-mixpanel":216,"@segment/analytics.js-integration-mojn":217,"@segment/analytics.js-integration-monetate":218,"@segment/analytics.js-integration-mouseflow":225,"@segment/analytics.js-integration-mousestats":226,"@segment/analytics.js-integration-nanigans":227,"@segment/analytics.js-integration-navilytics":229,"@segment/analytics.js-integration-nudgespot":230,"@segment/analytics.js-integration-olark":231,"@segment/analytics.js-integration-omniture":232,"@segment/analytics.js-integration-onespot":233,"@segment/analytics.js-integration-optimizely":234,"@segment/analytics.js-integration-outbound":236,"@segment/analytics.js-integration-pardot":238,"@segment/analytics.js-integration-parsely":241,"@segment/analytics.js-integration-pendo":242,"@segment/analytics.js-integration-perfect-audience":249,"@segment/analytics.js-integration-pingdom":256,"@segment/analytics.js-integration-piwik":257,"@segment/analytics.js-integration-qualaroo":258,"@segment/analytics.js-integration-quantcast":259,"@segment/analytics.js-integration-quanticmind":266,"@segment/analytics.js-integration-ramen":267,"@segment/analytics.js-integration-rockerbox":268,"@segment/analytics.js-integration-rocket-fuel":269,"@segment/analytics.js-integration-rollbar":270,"@segment/analytics.js-integration-route":271,"@segment/analytics.js-integration-saasquatch":272,"@segment/analytics.js-integration-satismeter":273,"@segment/analytics.js-integration-segmentio":274,"@segment/analytics.js-integration-sentry":275,"@segment/analytics.js-integration-shareasale":276,"@segment/analytics.js-integration-simplereach":283,"@segment/analytics.js-integration-simplifi":284,"@segment/analytics.js-integration-snapengage":285,"@segment/analytics.js-integration-spinnakr":286,"@segment/analytics.js-integration-steelhouse":287,"@segment/analytics.js-integration-stripe-radar":288,"@segment/analytics.js-integration-supporthero":295,"@segment/analytics.js-integration-taplytics":296,"@segment/analytics.js-integration-tapstream":297,"@segment/analytics.js-integration-tell-apart":298,"@segment/analytics.js-integration-totango":305,"@segment/analytics.js-integration-trackjs":306,"@segment/analytics.js-integration-tvsquared":307,"@segment/analytics.js-integration-twitter-ads":308,"@segment/analytics.js-integration-userlike":315,"@segment/analytics.js-integration-uservoice":316,"@segment/analytics.js-integration-vero":317,"@segment/analytics.js-integration-visual-website-optimizer":318,"@segment/analytics.js-integration-webengage":325,"@segment/analytics.js-integration-wishpond":326,"@segment/analytics.js-integration-woopra":327,"@segment/analytics.js-integration-wootric":328,"@segment/analytics.js-integration-yandex-metrica":329,"@segment/analytics.js-integration-yellowhammer":330,"@segment/analytics.js-integration-zopim":331}],4:[function(t,e,n){"use strict";var o=t("@ndhoule/arity"),i=Object.prototype.toString,r=function(t){return"function"==typeof t},a=function(t){var e=typeof t;return"number"===e||"object"===e&&"[object Number]"===i.call(t)},s=function(t,e){if(!a(t))throw new TypeError("Expected a number but received "+typeof t);if(!r(e))throw new TypeError("Expected a function but received "+typeof e);var n=0;return o(e.length,function(){n+=1;if(!(n",h);return h}var i=t("debug")("analytics.js:normalize"),r=t("@ndhoule/defaults"),a=t("@ndhoule/each"),s=t("@ndhoule/includes"),c=t("@ndhoule/map"),p=t("component-type"),u=Object.prototype.hasOwnProperty;e.exports=o;var d=["integrations","anonymousId","timestamp","context"]},{"@ndhoule/defaults":7,"@ndhoule/each":9,"@ndhoule/includes":14,"@ndhoule/map":16,"component-type":375,"debug":378}],29:[function(t,e,n){"use strict";function o(){return{path:i(),referrer:document.referrer,search:location.search,title:document.title,url:r(location.search)}}function i(){var t=a();return t?c.parse(t).pathname:window.location.pathname}function r(t){var e=a();if(e)return s("?",e)?e:e+t;var n=window.location.href,o=n.indexOf("#");return-1===o?n:n.slice(0,o)}var a=t("@segment/canonical"),s=t("@ndhoule/includes"),c=t("component-url");e.exports=o},{"@ndhoule/includes":14,"@segment/canonical":338,"component-url":376}],30:[function(t,e,n){"use strict";function o(t){this.options(t)}var i=t("bind-all"),r=t("@ndhoule/defaults"),a=t("@segment/store");o.prototype.options=function(t){if(0===arguments.length)return this._options;t=t||{};r(t,{enabled:!0});this.enabled=t.enabled&&a.enabled;this._options=t};o.prototype.set=function(t,e){return!!this.enabled&&a.set(t,e)};o.prototype.get=function(t){return this.enabled?a.get(t):null};o.prototype.remove=function(t){return!!this.enabled&&a.remove(t)};e.exports=i(new o);e.exports.Store=o},{"@ndhoule/defaults":7,"@segment/store":357,"bind-all":363}],31:[function(t,e,n){"use strict";function o(t){this.defaults=o.defaults;this.debug=s;i.call(this,t)}var i=t("./entity"),r=t("bind-all"),a=t("./cookie"),s=t("debug")("analytics:user"),c=t("inherits"),p=t("component-cookie"),u=t("uuid");o.defaults={persist:!0,cookie:{key:"ajs_user_id",oldKey:"ajs_user"},localStorage:{key:"ajs_user_traits"}};c(o,i);o.prototype.id=function(t){var e=this._getId(),n=i.prototype.id.apply(this,arguments);if(null==e)return n;e!=t&&t&&this.anonymousId(null);return n};o.prototype.anonymousId=function(t){var e=this.storage();if(arguments.length){e.set("ajs_anonymous_id",t);return this}t=e.get("ajs_anonymous_id");if(t)return t;t=p("_sio");if(t){t=t.split("----")[0];e.set("ajs_anonymous_id",t);e.remove("_sio");return t}t=u.v4();e.set("ajs_anonymous_id",t);return e.get("ajs_anonymous_id")};o.prototype.logout=function(){i.prototype.logout.call(this);this.anonymousId(null)};o.prototype.load=function(){this._loadOldCookie()||i.prototype.load.call(this)};o.prototype._loadOldCookie=function(){var t=a.get(this._options.cookie.oldKey);if(!t)return!1;this.id(t.id);this.traits(t.traits);a.remove(this._options.cookie.oldKey);return!0};e.exports=r(new o);e.exports.User=o},{"./cookie":23,"./entity":24,"bind-all":363,"component-cookie":366,"debug":378,"inherits":386,"uuid":440}],32:[function(t,e,n){e.exports={"_args":[[{"raw":"@segment/analytics.js-core@^3.0.0","scope":"@segment","escapedName":"@segment%2fanalytics.js-core","name":"@segment/analytics.js-core","rawSpec":"^3.0.0","spec":">=3.0.0 <4.0.0","type":"range"},"/home/ubuntu/analytics.js-private"]],"_from":"@segment/analytics.js-core@>=3.0.0 <4.0.0","_id":"@segment/analytics.js-core@3.0.0","_inCache":!0,"_location":"/@segment/analytics.js-core","_nodeVersion":"4.4.5","_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/analytics.js-core-3.0.0.tgz_1464222726516_0.005199481267482042"},"_npmUser":{"name":"segment","email":"tools+npm@segment.com"},"_npmVersion":"2.15.5","_phantomChildren":{},"_requested":{"raw":"@segment/analytics.js-core@^3.0.0","scope":"@segment","escapedName":"@segment%2fanalytics.js-core","name":"@segment/analytics.js-core","rawSpec":"^3.0.0","spec":">=3.0.0 <4.0.0","type":"range"},"_requiredBy":["#DEV:/"],"_resolved":"https://registry.npmjs.org/@segment/analytics.js-core/-/analytics.js-core-3.0.0.tgz","_shasum":"166e682023e6086d41e53abe5cddb23bf02b14ed","_shrinkwrap":null,"_spec":"@segment/analytics.js-core@^3.0.0","_where":"/home/ubuntu/analytics.js-private","author":{"name":"Segment","email":"friends@segment.com"},"bugs":{"url":"https://github.com/segmentio/analytics.js-core/issues"},"dependencies":{"@ndhoule/after":"^1.0.0","@ndhoule/clone":"^1.0.0","@ndhoule/defaults":"^2.0.1","@ndhoule/each":"^2.0.1","@ndhoule/extend":"^2.0.0","@ndhoule/foldl":"^2.0.1","@ndhoule/includes":"^2.0.1","@ndhoule/keys":"^2.0.0","@ndhoule/map":"^2.0.1","@ndhoule/pick":"^2.0.0","@segment/canonical":"^1.0.0","@segment/is-meta":"^1.0.0","@segment/isodate":"^1.0.2","@segment/isodate-traverse":"^1.0.1","@segment/prevent-default":"^1.0.0","@segment/store":"^1.3.20","@segment/top-domain":"^3.0.0","bind-all":"^1.0.0","component-cookie":"^1.1.2","component-emitter":"^1.2.1","component-event":"^0.1.4","component-querystring":"^2.0.0","component-type":"^1.2.1","component-url":"^0.2.1","debug":"^0.7.4","inherits":"^2.0.1","install":"^0.7.3","is":"^3.1.0","json3":"^3.3.2","new-date":"^1.0.0","next-tick":"^0.2.2","segmentio-facade":"^3.0.2","uuid":"^2.0.2"},"description":"The hassle-free way to integrate analytics into any web application.","devDependencies":{"@segment/analytics.js-integration":"^2.0.0","@segment/eslint-config":"^3.1.1","browserify":"^13.0.0","browserify-istanbul":"^2.0.0","compat-trigger-event":"^1.0.0","component-each":"^0.2.6","eslint":"^2.9.0","eslint-plugin-mocha":"^2.2.0","eslint-plugin-require-path-exists":"^1.1.5","istanbul":"^0.4.3","jquery":"^1.12.3","karma":"^0.13.22","karma-browserify":"^5.0.4","karma-chrome-launcher":"^1.0.1","karma-coverage":"^1.0.0","karma-junit-reporter":"^1.0.0","karma-mocha":"^1.0.1","karma-phantomjs-launcher":"^1.0.0","karma-sauce-launcher":"^1.0.0","karma-spec-reporter":"0.0.26","mocha":"^2.2.5","phantomjs-prebuilt":"^2.1.7","proclaim":"^3.4.1","sinon":"^1.7.3","watchify":"^3.7.0"},"directories":{},"dist":{"shasum":"166e682023e6086d41e53abe5cddb23bf02b14ed","tarball":"https://registry.npmjs.org/@segment/analytics.js-core/-/analytics.js-core-3.0.0.tgz"},"homepage":"https://github.com/segmentio/analytics.js-core#readme","keywords":["analytics","analytics.js","segment","segment.io"],"license":"SEE LICENSE IN LICENSE","main":"lib/index.js","maintainers":[{"name":"segment","email":"tools+npm@segment.com"}],"name":"@segment/analytics.js-core","optionalDependencies":{},"readme":"ERROR: No README data found!","repository":{"type":"git","url":"git+https://github.com/segmentio/analytics.js-core.git"},"scripts":{"test":"make test"},"version":"3.0.0"}},{}],33:[function(t,e,n){;var i=t("@segment/analytics.js-integration");e.exports=function(){};e.exports.Integration=i("empty");},{"@ndhoule/each":9,"@segment/analytics.js-integration":332}],34:[function(t,e,n){;var m=t("@segment/analytics.js-integration");e.exports=function(){};e.exports.Integration=m("empty");},{"@ndhoule/each":9,"@segment/analytics.js-integration":35,"@segment/to-iso-string":358,"@segment/trample":360,"obj-case":404,"segmentio-facade":418}],35:[function(t,e,n){"use strict";function o(t){function e(n){if(n&&n.addIntegration)return n.addIntegration(e);this.debug=a("analytics:integration:"+p(t));this.options=s(r(n)||{},this.defaults);this._queue=[];this.once("ready",i(this,this.flush));e.emit("construct",this);this.ready=i(this,this.ready);this._wrapInitialize();this._wrapPage();this._wrapTrack()}e.prototype.defaults={};e.prototype.globals=[];e.prototype.templates={};e.prototype.name=t;c(e,d);c(e.prototype,u);return e}var i=t("component-bind"),r=t("@ndhoule/clone"),a=t("debug"),s=t("@ndhoule/defaults"),c=t("@ndhoule/extend"),p=t("slug-component"),u=t("./protos"),d=t("./statics");e.exports=o},{"./protos":36,"./statics":37,"@ndhoule/clone":6,"@ndhoule/defaults":7,"@ndhoule/extend":12,"component-bind":364,"debug":39,"slug-component":424}],36:[function(t,e,n){"use strict";function o(t){return m.array(t)?l(i,t)?"mixed":"array":m.object(t)?"map":"unknown"}function i(t){return!!m.object(t)&&(!!m.string(t.key)&&!!b.call(t,"value"))}function r(t,e){e=e||function(){};var n=new Image;n.onerror=a(e,"failed to load pixel",n);n.onload=function(){e()};n.src=t.src;n.width=1;n.height=1;return n}function a(t,e,n){return function(o){o=o||window.event;var i=new Error(e);i.event=o;i.source=n;t(i)}}function s(t,e){return g(function(t,n,o){t[o]=n.replace(/\{\{\ *(\w+)\ *\}\}/g,function(t,n){return e[n]});return t},{},t.attrs)}var c=t("component-emitter"),p=t("@ndhoule/after"),u=t("@ndhoule/each"),d=t("analytics-events"),l=t("@ndhoule/every"),f=t("@segment/fmt"),g=t("@ndhoule/foldl"),m=t("is"),h=t("load-iframe"),y=t("@segment/load-script"),v=t("next-tick"),w=t("to-no-case"),b=Object.prototype.hasOwnProperty,_=function(){},k=window.onerror;c(n);n.initialize=function(){var t=this.ready;v(t)};n.loaded=function(){return!1};n.page=function(t){};n.track=function(t){};n.map=function(t,e){var n=w(e),i=o(t);return"unknown"===i?[]:g(function(t,e,o){var r,a;if("map"===i){r=o;a=e}if("array"===i){r=e;a=e}if("mixed"===i){r=e.key;a=e.value}w(r)===n&&t.push(a);return t},[],t)};n.invoke=function(t){if(this[t]){var e=Array.prototype.slice.call(arguments,1);if(!this._ready)return this.queue(t,e);var n;try{this.debug("%s with %o",t,e);n=this[t].apply(this,e)}catch(o){this.debug("error %o calling %s with %o",o,t,e)}return n}};n.queue=function(t,e){this._queue.push({method:t,args:e})};n.flush=function(){this._ready=!0;var t=this;u(function(e){t[e.method].apply(t,e.args)},this._queue);this._queue.length=0};n.reset=function(){for(var t=0;t=31||"undefined"!=typeof navigator&&navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function r(t){var e=this.useColors;t[0]=(e?"%c":"")+this.namespace+(e?" %c":" ")+t[0]+(e?"%c ":" ")+"+"+n.humanize(this.diff);if(e){var o="color: "+this.color;t.splice(1,0,o,"color: inherit");var i=0,r=0;t[0].replace(/%[a-zA-Z%]/g,function(t){if("%%"!==t){i++;"%c"===t&&(r=i)}});t.splice(r,0,o)}}function a(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(t){try{null==t?n.storage.removeItem("debug"):n.storage.debug=t}catch(e){}}function c(){var t;try{t=n.storage.debug}catch(e){}!t&&void 0!==o&&"env"in o&&(t=o.env.DEBUG);return t}n=e.exports=t("./debug");n.log=a;n.formatArgs=r;n.save=s;n.load=c;n.useColors=i;n.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}();n.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];n.formatters.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}};n.enable(c())}).call(this,t("_process"))},{"./debug":40,"_process":410}],40:[function(t,e,n){function o(t){var e,o=0;for(e in t){o=(o<<5)-o+t.charCodeAt(e);o|=0}return n.colors[Math.abs(o)%n.colors.length]}function i(t){function e(){if(e.enabled){var t=e,o=+new Date,i=o-(p||o);t.diff=i;t.prev=p;t.curr=o;p=o;for(var r=new Array(arguments.length),a=0;a').mapping("events");a.prototype.initialize=function(){var t=this.loaded,e=this.ready;this.load(function(){r(t,e)})};a.prototype.loaded=function(){return!(!document.body||!window.google_trackConversion)};a.prototype.page=function(t){var e=this.options.remarketing,n=this.options.conversionId,o=t.properties();window.google_trackConversion({google_conversion_id:n,google_custom_params:{},google_remarketing_only:!1});e&&window.google_trackConversion({google_conversion_id:n,google_custom_params:o,google_remarketing_only:!0})};a.prototype.track=function(t){var e=this.options.conversionId,n=t.properties(),i=this.options.remarketing,r=this.events(t.event()),a=t.revenue()||0,s=this.options.whitelist.indexOf(t.event())>-1,c=!1;o(function(t){delete n.revenue;window.google_trackConversion({google_conversion_id:e,google_custom_params:n,google_conversion_language:"en",google_conversion_format:"3",google_conversion_color:"ffffff",google_conversion_label:t,google_conversion_value:a,google_remarketing_only:!1});if(!c&&i){window.google_trackConversion({google_conversion_id:e,google_custom_params:n,google_remarketing_only:!0});c=!0}},r);!c&&s&&window.google_trackConversion({google_conversion_id:e,google_custom_params:n,google_remarketing_only:!0})};},{"@ndhoule/each":9,"@segment/analytics.js-integration":332,"do-when":379}],50:[function(t,e,n){;var o=t("@segment/analytics.js-integration");e.exports=function(){};e.exports.Integration=o("empty");},{"@segment/analytics.js-integration":332}],51:[function(t,e,n){;var c=t("@segment/analytics.js-integration");e.exports=function(){};e.exports.Integration=c("empty");},{"@segment/analytics.js-integration":332}],52:[function(t,e,n){;"use strict";var o=t("component-bind"),i=t("@segment/analytics.js-integration"),r=t("@segment/top-domain"),a=t("do-when"),s=t("is"),c=t("@ndhoule/each"),p="function"==typeof window.define&&window.define.amd,u="//d24n15hnbwhuhn.cloudfront.net/libs/amplitude-3.4.0-min.gz.js",d=e.exports=i("Amplitude").global("amplitude").option("apiKey","").option("trackAllPages",!1).option("trackNamedPages",!0).option("trackCategorizedPages",!0).option("trackUtmProperties",!0).option("trackReferrer",!1).option("batchEvents",!1).option("eventUploadThreshold",30).option("eventUploadPeriodMillis",3e4).option("useLogRevenueV2",!1).option("forceHttps",!1).option("trackGclid",!1).option("saveParamsReferrerOncePerSession",!0).option("deviceIdFromUrlParam",!1).option("mapQueryParams",{}).tag(' \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/theme-monokai.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/theme-monokai.js deleted file mode 100644 index c911e75..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/theme-monokai.js +++ /dev/null @@ -1 +0,0 @@ -define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}) \ No newline at end of file diff --git a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/track.js b/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/track.js deleted file mode 100644 index 458ceae..0000000 --- a/Sources/webAduc/Documentation/Utilisation de Twig, un moteur de templates !_fichiers/track.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function c(a){if(document.cookie.length>0){c_start=document.cookie.indexOf(a+"=");if(c_start!=-1)return c_start=c_start+a.length+1,c_end=document.cookie.indexOf(";",c_start),c_end==-1&&(c_end=document.cookie.length),unescape(document.cookie.substring(c_start,c_end))}return""}function d(a,b,d){var e=document.location.host.toLowerCase().split(":")[0],f=e.split("."),g=[];if(f.length==1){var h=new Date;h.setDate(h.getDate()+d),document.cookie=a+"="+escape(b)+(d==null?"":";expires="+h.toUTCString())+";path=/"}else for(var i=f.length-1;i>=0;i--){g.push(f[i]);var j="."+g.slice().reverse().join("."),h=new Date;h.setDate(h.getDate()+d),document.cookie=a+"="+escape(b)+(d==null?"":";expires="+h.toUTCString())+";domain="+j+";path=/";if(c(a)==b)break}}function e(a){return f(a)==="function"}function f(a){return a==null?String(a):b[Object.prototype.toString.call(a)]||"object"}function g(b){var c=[],d=function(a,b){b=e(b)?b():b,c[c.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};for(var f in b)b.hasOwnProperty(f)&&h(f,b[f],d);return c.join("&").replace(a,"+")}function h(a,b,c){if(b!=null&&typeof b=="object")for(var d in b)b.hasOwnProperty(d)&&h(a+"["+d+"]",b[d]==null?"":b[d],c);else c(a,b)}function i(){var a=function(){return((1+Math.random())*65536|0).toString(16).substring(1)};return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}function j(){var a=c(_cio.cookieNamespace);return a||(a=i(),d(_cio.cookieNamespace,a,1)),a}function k(){return c(_cio.cookieNamespace+"id")}function l(a,b){var c,d,e=document.getElementById("cio-tracker");return e&&(d=e.getAttribute("data-site-id"),c=e.src.replace("assets.customer.io","track.customer.io"),c=c.replace("/assets/track.js","/events/"+a+".gif"),c=c.replace("/assets_dev/track.js","/events/"+a+".gif"),c=c.replace(/\/events\/.*\.gif/,"/events/"+a+".gif"),c=c.replace(/^(http|https):/,""),c=c.replace(/^\/\//,""),b.site_id=d,b.timestamp=(new Date).getTime(),c+="?"+g(b)),"https://"+c}function m(a,b){b.s=j(),b.c=k();var c=new Image;c.src=l(a,b),_cio.images.push(c)}function n(a,b){_cio.pageHasLoaded?m(a,b):setTimeout(function(){n(a,b)},50)}var a=/%20/g,b={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object"};if(f(_cio)=="array"){var o=_cio.slice(0);_cio={images:[],pageHasLoaded:!1,cookieNamespace:"_cio",load:function(){_cio.pageHasLoaded=!0},push:function(a){var b=a.shift();_cio[b].apply(this,a)},identify:function(a){var b=c(_cio.cookieNamespace+"id"),e=a.id||a.id_secure;b&&b!=e&&(guid=i(),d(_cio.cookieNamespace,guid,1)),d(_cio.cookieNamespace+"id",e,1),n("identify",{user:a})},sidentify:function(a){a._secure=!0,_cio.identify(a)},track:function(a,b){n("event",{name:a,data:b||{}})},page:function(a,b){n("page",{name:a,data:b||{}})},cookie:function(a){_cio.cookieNamespace=a}},function(){var a={width:window.innerWidth,height:window.innerHeight};document.referrer&&document.referrer!=""&&(a.referrer=document.referrer),_cio.page(document.location.href,a)}();for(var p=0;p0&&t-1 in e)}function s(e,t,n){if(ce.isFunction(t))return ce.grep(e,(function(e,r){return!!t.call(e,r,e)!==n}));if(t.nodeType)return ce.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(_e.test(t))return ce.filter(t,e,n);t=ce.filter(t,e)}return ce.grep(e,(function(e){return re.call(t,e)>-1!==n}))}function u(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function c(e){var t={};return ce.each(e.match(ke)||[],(function(e,n){t[n]=!0})),t}function l(){Z.removeEventListener("DOMContentLoaded",l),n.removeEventListener("load",l),ce.ready()}function f(){this.expando=ce.expando+f.uid++}function p(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Ae,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Re.test(n)?ce.parseJSON(n):n)}catch(e){}je.set(e,t,n)}else n=void 0;return n}function h(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),c=n&&n[3]||(ce.cssNumber[t]?"":"px"),l=(ce.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ce.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ce.style(e,t,l+c);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function d(e,t){var n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&ce.nodeName(e,t)?ce.merge([e],n):n}function v(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(c=ce.contains(o.ownerDocument,o),a=d(f.appendChild(o),"script"),c&&v(a),n)for(l=0;o=a[l++];)Ue.test(o.type||"")&&n.push(o);return f}function g(){return!0}function y(){return!1}function _(){try{return Z.activeElement}catch(e){}}function b(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)b(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=y;else if(!i)return e;return 1===o&&(a=i,i=function(e){return ce().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=ce.guid++)),e.each((function(){ce.event.add(this,t,i,r,n)}))}function w(e,t){return ce.nodeName(e,"table")&&ce.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function x(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function C(e){var t=Ye.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function E(e,t){var n,r,i,o,a,s,u,c;if(1===t.nodeType){if(Oe.hasData(e)&&(o=Oe.access(e),a=Oe.set(t,o),c=o.events)){delete a.handle,a.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!se.checkClone&&$e.test(h))return e.each((function(i){var o=e.eq(i);v&&(t[0]=h.call(this,i,o.html())),S(o,t,n,r)}));if(f&&(i=m(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(a=ce.map(d(i,"script"),x),s=a.length;l")).appendTo(t.documentElement),t=Qe[0].contentDocument,t.write(),t.close(),n=P(e,t),Qe.detach()),Ge[e]=n),n}function j(e,t,n){var r,i,o,a,s=e.style;return n=n||et(e),a=n?n.getPropertyValue(t)||n[t]:void 0,""!==a&&void 0!==a||ce.contains(e.ownerDocument,e)||(a=ce.style(e,t)),n&&!se.pixelMarginRight()&&Ze.test(a)&&Je.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),void 0!==a?a+"":a}function R(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function A(e){if(e in st)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=at.length;n--;)if(e=at[n]+t,e in st)return e}function N(e,t,n){var r=Me.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function M(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;o<4;o+=2)"margin"===n&&(a+=ce.css(e,n+De[o],!0,i)),r?("content"===n&&(a-=ce.css(e,"padding"+De[o],!0,i)),"margin"!==n&&(a-=ce.css(e,"border"+De[o]+"Width",!0,i))):(a+=ce.css(e,"padding"+De[o],!0,i),"padding"!==n&&(a+=ce.css(e,"border"+De[o]+"Width",!0,i)));return a}function D(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=et(e),a="border-box"===ce.css(e,"boxSizing",!1,o);if(i<=0||null==i){if(i=j(e,t,o),(i<0||null==i)&&(i=e.style[t]),Ze.test(i))return i;r=a&&(se.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+M(e,t,n||(a?"border":"content"),r,o)+"px"}function F(e,t){for(var n,r,i,o=[],a=0,s=e.length;a=0&&n=0},isPlainObject:function(e){var t;if("object"!==ce.type(e)||e.nodeType||ce.isWindow(e))return!1;if(e.constructor&&!ae.call(e,"constructor")&&!ae.call(e.constructor.prototype||{},"isPrototypeOf"))return!1;for(t in e);return void 0===t||ae.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ie[oe.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;e=ce.trim(e),e&&(1===e.indexOf("use strict")?(t=Z.createElement("script"),t.text=e,Z.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(fe,"ms-").replace(pe,he)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,r=0;if(a(e))for(n=e.length;rx.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[U]=!0,e}function i(e){var t=A.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)x.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||$)-(~e.sourceIndex||$);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r((function(t){return t=+t,r((function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}function l(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function f(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(a[c]=f))}}else _=m(_===a?_.splice(d,_.length):_),o?o(null,a,_,u):J.apply(a,_)}))}function y(e){for(var t,n,r,i=e.length,o=x.relative[e[0].type],a=o||x.relative[" "],s=o?1:0,u=h((function(e){return e===t}),a,!0),c=h((function(e){return ee(t,e)>-1}),a,!0),l=[function(e,n,r){var i=!o&&(r||n!==P)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];s1&&d(l),s>1&&p(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,o=e.length>0,a=function(r,a,s,u,c){var l,f,p,h=0,d="0",v=r&&[],g=[],y=P,_=r||o&&x.find.TAG("*",c),b=q+=null==y?1:Math.random()||.1,w=_.length;for(c&&(P=a===A||a||c);d!==w&&null!=(l=_[d]);d++){if(o&&l){for(f=0,a||l.ownerDocument===A||(R(l),s=!M);p=e[f++];)if(p(l,a||A,s)){u.push(l);break}c&&(q=b)}i&&((l=!p&&l)&&h--,r&&v.push(l))}if(h+=d,i&&d!==h){for(f=0;p=n[f++];)p(v,g,a,s);if(r){if(h>0)for(;d--;)v[d]||g[d]||(g[d]=Q.call(u));g=m(g)}J.apply(u,g),c&&!r&&g.length>0&&h+n.length>1&&t.uniqueSort(u)}return c&&(q=b,P=y),v};return i?r(a):a}var b,w,x,C,E,k,S,T,P,O,j,R,A,N,M,D,F,I,L,U="sizzle"+1*new Date,H=e.document,q=0,z=0,B=n(),W=n(),V=n(),K=function(e,t){return e===t&&(j=!0),0},$=1<<31,Y={}.hasOwnProperty,X=[],Q=X.pop,G=X.push,J=X.push,Z=X.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),pe=new RegExp("^"+re+"$"),he={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},de=/^(?:input|select|textarea|button)$/i,ve=/^h\d$/i,me=/^[^{]+\{\s*\[native \w/,ge=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,_e=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},xe=function(){R()};try{J.apply(X=Z.call(H.childNodes),H.childNodes),X[H.childNodes.length].nodeType}catch(e){J={apply:X.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},R=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:H;return r!==A&&9===r.nodeType&&r.documentElement?(A=r,N=A.documentElement,M=!E(A),(n=A.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",xe,!1):n.attachEvent&&n.attachEvent("onunload",xe)),w.attributes=i((function(e){return e.className="i",!e.getAttribute("className")})),w.getElementsByTagName=i((function(e){return e.appendChild(A.createComment("")),!e.getElementsByTagName("*").length})),w.getElementsByClassName=me.test(A.getElementsByClassName),w.getById=i((function(e){return N.appendChild(e).id=U,!A.getElementsByName||!A.getElementsByName(U).length})),w.getById?(x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&M){var n=t.getElementById(e);return n?[n]:[]}},x.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute("id")===t}}):(delete x.find.ID,x.filter.ID=function(e){var t=e.replace(be,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),x.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=w.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&M)return t.getElementsByClassName(e)},F=[],D=[],(w.qsa=me.test(A.querySelectorAll))&&(i((function(e){N.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&D.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||D.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+U+"-]").length||D.push("~="),e.querySelectorAll(":checked").length||D.push(":checked"),e.querySelectorAll("a#"+U+"+*").length||D.push(".#.+[+~]")})),i((function(e){var t=A.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&D.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||D.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),D.push(",.*:")}))),(w.matchesSelector=me.test(I=N.matches||N.webkitMatchesSelector||N.mozMatchesSelector||N.oMatchesSelector||N.msMatchesSelector))&&i((function(e){w.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),F.push("!=",oe)})),D=D.length&&new RegExp(D.join("|")),F=F.length&&new RegExp(F.join("|")),t=me.test(N.compareDocumentPosition),L=t||me.test(N.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===A||e.ownerDocument===H&&L(H,e)?-1:t===A||t.ownerDocument===H&&L(H,t)?1:O?ee(O,e)-ee(O,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===A?-1:t===A?1:i?-1:o?1:O?ee(O,e)-ee(O,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===H?-1:u[r]===H?1:0},A):A},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==A&&R(e),n=n.replace(le,"='$1']"),w.matchesSelector&&M&&!V[n+" "]&&(!F||!F.test(n))&&(!D||!D.test(n)))try{var r=I.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,A,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==A&&R(e),L(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==A&&R(e);var n=x.attrHandle[t.toLowerCase()],r=n&&Y.call(x.attrHandle,t.toLowerCase())?n(e,t,!M):void 0;return void 0!==r?r:w.attributes||!M?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!w.detectDuplicates,O=!w.sortStable&&e.slice(0),e.sort(K),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return O=null,e},C=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},x=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||"").replace(be,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=B[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&B(e,(function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,p,h,d,v=o!==a?"nextSibling":"previousSibling",m=t.parentNode,g=s&&t.nodeName.toLowerCase(),y=!u&&!s,_=!1;if(m){if(o){for(;v;){for(p=t;p=p[v];)if(s?p.nodeName.toLowerCase()===g:1===p.nodeType)return!1;d=v="only"===e&&!d&&"nextSibling"}return!0}if(d=[a?m.firstChild:m.lastChild],a&&y){for(p=m,f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],h=c[0]===q&&c[1],_=h&&c[2],p=h&&m.childNodes[h];p=++h&&p&&p[v]||(_=h=0)||d.pop();)if(1===p.nodeType&&++_&&p===t){l[e]=[q,h,_];break}}else if(y&&(p=t,f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],h=c[0]===q&&c[1],_=h),_===!1)for(;(p=++h&&p&&p[v]||(_=h=0)||d.pop())&&((s?p.nodeName.toLowerCase()!==g:1!==p.nodeType)||!++_||(y&&(f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[e]=[q,_]),p!==t)););return _-=i,_===r||_%r===0&&_/r>=0}}},PSEUDO:function(e,n){var i,o=x.pseudos[e]||x.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[U]?o(n):o.length>1?(i=[e,e,"",n],x.setFilters.hasOwnProperty(e.toLowerCase())?r((function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])})):function(e){return o(e,0,i)}):o}},pseudos:{not:r((function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[U]?r((function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}})),has:r((function(e){return function(n){return t(e,n).length>0}})),contains:r((function(e){return e=e.replace(be,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}})),lang:r((function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,we).toLowerCase(),function(t){var n;do if(n=M?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===N},focus:function(e){return e===A.activeElement&&(!A.hasFocus||A.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!x.pseudos.empty(e)},header:function(e){return ve.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c((function(){return[0]})),last:c((function(e,t){return[t-1]})),eq:c((function(e,t,n){return[n<0?n+t:n]})),even:c((function(e,t){for(var n=0;n=0;)e.push(r);return e})),gt:c((function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&M&&x.relative[o[1].type]){if(t=(x.find.ID(a.matches[0].replace(be,we),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=he.needsContext.test(e)?0:o.length;i--&&(a=o[i],!x.relative[s=a.type]);)if((u=x.find[s])&&(r=u(a.matches[0].replace(be,we),ye.test(o[0].type)&&l(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return J.apply(n,r),n;break}}return(c||S(e,f))(r,t,!M,n,!t||ye.test(e)&&l(t.parentNode)||t),n},w.sortStable=U.split("").sort(K).join("")===U,w.detectDuplicates=!!j,R(),w.sortDetached=i((function(e){return 1&e.compareDocumentPosition(A.createElement("div"))})),i((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||o("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),w.attributes&&i((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||o("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),i((function(e){return null==e.getAttribute("disabled")}))||o(te,(function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),t})(n);ce.find=de,ce.expr=de.selectors,ce.expr[":"]=ce.expr.pseudos,ce.uniqueSort=ce.unique=de.uniqueSort,ce.text=de.getText,ce.isXMLDoc=de.isXML,ce.contains=de.contains;var ve=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},me=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},ge=ce.expr.match.needsContext,ye=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,_e=/^.[^:#\[\.,]*$/;ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,(function(e){return 1===e.nodeType})))},ce.fn.extend({find:function(e){var t,n=this.length,r=[],i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter((function(){for(t=0;t1?ce.unique(r):r),r.selector=this.selector?this.selector+" "+e:e,r},filter:function(e){return this.pushStack(s(this,e||[],!1))},not:function(e){return this.pushStack(s(this,e||[],!0))},is:function(e){return!!s(this,"string"==typeof e&&ge.test(e)?ce(e):e||[],!1).length}});var be,we=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,xe=ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||be,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:we.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:Z,!0)),ye.test(r[1])&&ce.isPlainObject(t))for(r in t)ce.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=Z.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=Z,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):ce.isFunction(e)?void 0!==n.ready?n.ready(e):e(ce):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),ce.makeArray(e,this))};xe.prototype=ce.fn,be=ce(Z);var Ce=/^(?:parents|prev(?:Until|All))/,Ee={children:!0,contents:!0,next:!0,prev:!0};ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?re.call(ce(e),this[0]):re.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ve(e,"parentNode")},parentsUntil:function(e,t,n){return ve(e,"parentNode",n)},next:function(e){return u(e,"nextSibling")},prev:function(e){return u(e,"previousSibling")},nextAll:function(e){return ve(e,"nextSibling")},prevAll:function(e){return ve(e,"previousSibling")},nextUntil:function(e,t,n){return ve(e,"nextSibling",n)},prevUntil:function(e,t,n){return ve(e,"previousSibling",n)},siblings:function(e){return me((e.parentNode||{}).firstChild,e)},children:function(e){return me(e.firstChild)},contents:function(e){return e.contentDocument||ce.merge([],e.childNodes)}},(function(e,t){ce.fn[e]=function(n,r){var i=ce.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ce.filter(r,i)),this.length>1&&(Ee[e]||ce.uniqueSort(i),Ce.test(e)&&i.reverse()),this.pushStack(i)}}));var ke=/\S+/g;ce.Callbacks=function(e){e="string"==typeof e?c(e):ce.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?ce.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ce.extend({Deferred:function(e){var t=[["resolve","done",ce.Callbacks("once memory"),"resolved"],["reject","fail",ce.Callbacks("once memory"),"rejected"],["notify","progress",ce.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return ce.Deferred((function(n){ce.each(t,(function(t,o){var a=ce.isFunction(e[t])&&e[t];i[o[1]]((function(){var e=a&&a.apply(this,arguments);e&&ce.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===r?n.promise():this,a?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?ce.extend(e,r):r}},i={};return r.pipe=r.then,ce.each(t,(function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add((function(){n=s}),t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith})),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ee.call(arguments),a=o.length,s=1!==a||e&&ce.isFunction(e.promise)?a:0,u=1===s?e:ce.Deferred(),c=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ee.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);i0||(Se.resolveWith(Z,[ce]),ce.fn.triggerHandler&&(ce(Z).triggerHandler("ready"),ce(Z).off("ready"))))}}),ce.ready.promise=function(e){return Se||(Se=ce.Deferred(),"complete"===Z.readyState||"loading"!==Z.readyState&&!Z.documentElement.doScroll?n.setTimeout(ce.ready):(Z.addEventListener("DOMContentLoaded",l),n.addEventListener("load",l))),Se.promise(e)},ce.ready.promise();var Te=function(e,t,n,r,i,o,a){var s=0,u=e.length,c=null==n;if("object"===ce.type(n)){i=!0;for(s in n)Te(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,ce.isFunction(r)||(a=!0),c&&(a?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ce(e),n)})),t))for(;s-1&&void 0!==n&&je.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){je.remove(this,e)}))}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Oe.get(e,t),n&&(!r||ce.isArray(n)?r=Oe.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t),a=function(){ce.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Oe.get(e,n)||Oe.access(e,n,{empty:ce.Callbacks("once memory").add((function(){Oe.remove(e,[t+"queue",n])}))})}}),ce.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length",""],thead:[1,"
    ","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};He.optgroup=He.option,He.tbody=He.tfoot=He.colgroup=He.caption=He.thead,He.th=He.td;var qe=/<|&#?\w+;/;!(function(){var e=Z.createDocumentFragment(),t=e.appendChild(Z.createElement("div")),n=Z.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),se.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",se.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue})();var ze=/^key/,Be=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,We=/^([^.]*)(?:\.(.+)|)/;ce.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,c,l,f,p,h,d,v,m=Oe.get(e);if(m)for(n.handler&&(o=n,n=o.handler,i=o.selector),n.guid||(n.guid=ce.guid++),(u=m.events)||(u=m.events={}),(a=m.handle)||(a=m.handle=function(t){return"undefined"!=typeof ce&&ce.event.triggered!==t.type?ce.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(ke)||[""],c=t.length;c--;)s=We.exec(t[c])||[],h=v=s[1],d=(s[2]||"").split(".").sort(),h&&(f=ce.event.special[h]||{},h=(i?f.delegateType:f.bindType)||h,f=ce.event.special[h]||{},l=ce.extend({type:h,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:d.join(".")},o),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,a)!==!1||e.addEventListener&&e.addEventListener(h,a)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,l):p.push(l),ce.event.global[h]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,c,l,f,p,h,d,v,m=Oe.hasData(e)&&Oe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(ke)||[""],c=t.length;c--;)if(s=We.exec(t[c])||[],h=v=s[1],d=(s[2]||"").split(".").sort(),h){for(f=ce.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],s=s[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)l=p[o],!i&&v!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(o,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));a&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||ce.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)ce.event.remove(e,h+t[c],n,r,!0);ce.isEmptyObject(u)&&Oe.remove(e,"handle events")}},dispatch:function(e){e=ce.event.fix(e);var t,n,r,i,o,a=[],s=ee.call(arguments),u=(Oe.get(this,"events")||{})[e.type]||[],c=ce.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(a=ce.event.handlers.call(this,e,u),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(r=[],n=0;n-1:ce.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s]*)\/>/gi,Ke=/\s*$/g;ce.extend({htmlPrefilter:function(e){return e.replace(Ve,"<$1>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=ce.contains(e.ownerDocument,e);if(!(se.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=d(s),o=d(e),r=0,i=o.length;r0&&v(a,!u&&d(e,"script")),s},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if(Pe(n)){if(t=n[Oe.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[Oe.expando]=void 0}n[je.expando]&&(n[je.expando]=void 0)}}}),ce.fn.extend({domManip:S,detach:function(e){return T(this,e,!0)},remove:function(e){return T(this,e)},text:function(e){return Te(this,(function(e){return void 0===e?ce.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return S(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=w(this,e);t.appendChild(e)}}))},prepend:function(){return S(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=w(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return S(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return S(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(d(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return ce.clone(this,e,t)}))},html:function(e){return Te(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ke.test(e)&&!He[(Le.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n1)},show:function(){return F(this,!0)},hide:function(){return F(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){Fe(this)?ce(this).show():ce(this).hide()}))}}),ce.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ce.cssProps[e.prop]]&&!ce.cssHooks[e.prop]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=I.prototype.init,ce.fx.step={};var ut,ct,lt=/^(?:toggle|show|hide)$/,ft=/queueHooks$/;ce.Animation=ce.extend(B,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return h(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ce.isFunction(e)?(t=e,e=["*"]):e=e.match(ke);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each((function(){ce.removeAttr(this,e)}))}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(t=t.toLowerCase(),i=ce.attrHooks[t]||(ce.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ce.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!se.radioValue&&"radio"===t&&ce.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(ke);if(o&&1===e.nodeType)for(;n=o[i++];)r=ce.propFix[n]||n,ce.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)}}),pt={set:function(e,t,n){return t===!1?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ht[t]||ce.find.attr;ht[t]=function(e,t,r){var i,o;return r||(o=ht[t],ht[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,ht[t]=o),i}}));var dt=/^(?:input|select|textarea|button)$/i,vt=/^(?:a|area)$/i;ce.fn.extend({prop:function(e,t){return Te(this,ce.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[ce.propFix[e]||e]}))}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||vt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),se.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){ce.propFix[this.toLowerCase()]=this}));var mt=/[\t\r\n\f]/g;ce.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(ce.isFunction(e))return this.each((function(t){ce(this).addClass(e.call(this,t,W(this)))}));if("string"==typeof e&&e)for(t=e.match(ke)||[];n=this[u++];)if(i=W(n),r=1===n.nodeType&&(" "+i+" ").replace(mt," ")){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");s=ce.trim(r),i!==s&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(ce.isFunction(e))return this.each((function(t){ce(this).removeClass(e.call(this,t,W(this)))}));if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(ke)||[];n=this[u++];)if(i=W(n),r=1===n.nodeType&&(" "+i+" ").replace(mt," ")){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");s=ce.trim(r),i!==s&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ce.isFunction(e)?this.each((function(n){ce(this).toggleClass(e.call(this,n,W(this),t),t)})):this.each((function(){var t,r,i,o;if("string"===n)for(r=0,i=ce(this),o=e.match(ke)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=W(this),t&&Oe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Oe.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+W(n)+" ").replace(mt," ").indexOf(t)>-1)return!0;return!1}});var gt=/\r/g,yt=/[\x20\t\r\n\f]+/g;ce.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ce.isFunction(e),this.each((function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ce(this).val()):e,null==i?i="":"number"==typeof i?i+="":ce.isArray(i)&&(i=ce.map(i,(function(e){return null==e?"":e+""}))),t=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))}));if(i)return t=ce.valHooks[i.type]||ce.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(gt,""):null==n?"":n)}}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:ce.trim(ce.text(e)).replace(yt," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||i<0,a=o?null:[],s=o?i+1:r.length,u=i<0?s:o?i:0;u-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],(function(){ce.valHooks[this]={set:function(e,t){if(ce.isArray(t))return e.checked=ce.inArray(ce(e).val(),t)>-1}},se.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}));var _t=/^(?:focusinfocus|focusoutblur)$/;ce.extend(ce.event,{trigger:function(e,t,r,i){var o,a,s,u,c,l,f,p=[r||Z],h=ae.call(e,"type")?e.type:e,d=ae.call(e,"namespace")?e.namespace.split("."):[];if(a=s=r=r||Z,3!==r.nodeType&&8!==r.nodeType&&!_t.test(h+ce.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,e=e[ce.expando]?e:new ce.Event(h,"object"==typeof e&&e),e.isTrigger=i?2:3,e.namespace=d.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:ce.makeArray(t,[e]),f=ce.event.special[h]||{},i||!f.trigger||f.trigger.apply(r,t)!==!1)){if(!i&&!f.noBubble&&!ce.isWindow(r)){for(u=f.delegateType||h,_t.test(u+h)||(a=a.parentNode);a;a=a.parentNode)p.push(a),s=a;s===(r.ownerDocument||Z)&&p.push(s.defaultView||s.parentWindow||n)}for(o=0;(a=p[o++])&&!e.isPropagationStopped();)e.type=o>1?u:f.bindType||h,l=(Oe.get(a,"events")||{})[e.type]&&Oe.get(a,"handle"),l&&l.apply(a,t),l=c&&a[c],l&&l.apply&&Pe(a)&&(e.result=l.apply(a,t),e.result===!1&&e.preventDefault());return e.type=h,i||e.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),t)!==!1||!Pe(r)||c&&ce.isFunction(r[h])&&!ce.isWindow(r)&&(s=r[c],s&&(r[c]=null),ce.event.triggered=h,r[h](),ce.event.triggered=void 0,s&&(r[c]=s)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each((function(){ce.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}}),ce.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),(function(e,t){ce.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),ce.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),se.focusin="onfocusin"in n,se.focusin||ce.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){ce.event.simulate(t,e.target,ce.event.fix(e))};ce.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Oe.access(r,t);i||r.addEventListener(e,n,!0),Oe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Oe.access(r,t)-1;i?Oe.access(r,t,i):(r.removeEventListener(e,n,!0),Oe.remove(r,t))}}}));var bt=n.location,wt=ce.now(),xt=/\?/;ce.parseJSON=function(e){return JSON.parse(e+"")},ce.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||ce.error("Invalid XML: "+e),t};var Ct=/#.*$/,Et=/([?&])_=[^&]*/,kt=/^(.*?):[ \t]*([^\r\n]*)$/gm,St=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Tt=/^(?:GET|HEAD)$/,Pt=/^\/\//,Ot={},jt={},Rt="*/".concat("*"),At=Z.createElement("a");At.href=bt.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:St.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":ce.parseJSON,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$($(e,ce.ajaxSettings),t):$(ce.ajaxSettings,e)},ajaxPrefilter:V(Ot),ajaxTransport:V(jt),ajax:function(e,t){function r(e,t,r,s){var c,f,y,_,w,C=t;2!==b&&(b=2,u&&n.clearTimeout(u),i=void 0,a=s||"",x.readyState=e>0?4:0,c=e>=200&&e<300||304===e,r&&(_=Y(p,x,r)),_=X(p,_,x,c),c?(p.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(ce.lastModified[o]=w),w=x.getResponseHeader("etag"),w&&(ce.etag[o]=w)),204===e||"HEAD"===p.type?C="nocontent":304===e?C="notmodified":(C=_.state,f=_.data,y=_.error,c=!y)):(y=C,!e&&C||(C="error",e<0&&(e=0))),x.status=e,x.statusText=(t||C)+"",c?v.resolveWith(h,[f,C,x]):v.rejectWith(h,[x,C,y]),x.statusCode(g),g=void 0,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[x,p,c?f:y]),m.fireWith(h,[x,C]),l&&(d.trigger("ajaxComplete",[x,p]),--ce.active||ce.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,a,s,u,c,l,f,p=ce.ajaxSetup({},t),h=p.context||p,d=p.context&&(h.nodeType||h.jquery)?ce(h):ce.event,v=ce.Deferred(),m=ce.Callbacks("once memory"),g=p.statusCode||{},y={},_={},b=0,w="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!s)for(s={};t=kt.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=_[n]=_[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)g[t]=[g[t],e[t]];else x.always(e[x.status]);return this},abort:function(e){var t=e||w;return i&&i.abort(t),r(0,t),this}};if(v.promise(x).complete=m.add,x.success=x.done,x.error=x.fail,p.url=((e||p.url||bt.href)+"").replace(Ct,"").replace(Pt,bt.protocol+"//"),p.type=t.method||t.type||p.method||p.type,p.dataTypes=ce.trim(p.dataType||"*").toLowerCase().match(ke)||[""],null==p.crossDomain){c=Z.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=At.protocol+"//"+At.host!=c.protocol+"//"+c.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=ce.param(p.data,p.traditional)),K(Ot,p,t,x),2===b)return x;l=ce.event&&p.global,l&&0===ce.active++&&ce.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Tt.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(xt.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=Et.test(o)?o.replace(Et,"$1_="+wt++):o+(xt.test(o)?"&":"?")+"_="+wt++)),p.ifModified&&(ce.lastModified[o]&&x.setRequestHeader("If-Modified-Since",ce.lastModified[o]),ce.etag[o]&&x.setRequestHeader("If-None-Match",ce.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||t.contentType)&&x.setRequestHeader("Content-Type",p.contentType),x.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Rt+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)x.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(h,x,p)===!1||2===b))return x.abort();w="abort";for(f in{success:1,error:1,complete:1})x[f](p[f]);if(i=K(jt,p,t,x)){if(x.readyState=1,l&&d.trigger("ajaxSend",[x,p]),2===b)return x;p.async&&p.timeout>0&&(u=n.setTimeout((function(){x.abort("timeout")}),p.timeout));try{b=1,i.send(y,r)}catch(e){if(!(b<2))throw e;r(-1,e)}}else r(-1,"No Transport");return x},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],(function(e,t){ce[t]=function(e,n,r,i){return ce.isFunction(n)&&(i=i||r,r=n,n=void 0),ce.ajax(ce.extend({url:e,type:t,dataType:i,data:n,success:r},ce.isPlainObject(e)&&e))}})),ce._evalUrl=function(e){return ce.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},ce.fn.extend({wrapAll:function(e){var t;return ce.isFunction(e)?this.each((function(t){ce(this).wrapAll(e.call(this,t))})):(this[0]&&(t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this)},wrapInner:function(e){return ce.isFunction(e)?this.each((function(t){ce(this).wrapInner(e.call(this,t))})):this.each((function(){var t=ce(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=ce.isFunction(e);return this.each((function(n){ce(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){ce.nodeName(this,"body")||ce(this).replaceWith(this.childNodes)})).end()}}),ce.expr.filters.hidden=function(e){return!ce.expr.filters.visible(e)},ce.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Nt=/%20/g,Mt=/\[\]$/,Dt=/\r?\n/g,Ft=/^(?:submit|button|image|reset|file)$/i,It=/^(?:input|select|textarea|keygen)/i;ce.param=function(e,t){var n,r=[],i=function(e,t){t=ce.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=ce.ajaxSettings&&ce.ajaxSettings.traditional),ce.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,(function(){i(this.name,this.value)}));else for(n in e)Q(n,e[n],t,i);return r.join("&").replace(Nt,"+")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&It.test(this.nodeName)&&!Ft.test(e)&&(this.checked||!Ie.test(e))})).map((function(e,t){var n=ce(this).val();return null==n?null:ce.isArray(n)?ce.map(n,(function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}})):{name:t.name,value:n.replace(Dt,"\r\n")}})).get()}}),ce.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Lt={0:200,1223:204},Ut=ce.ajaxSettings.xhr();se.cors=!!Ut&&"withCredentials"in Ut,se.ajax=Ut=!!Ut,ce.ajaxTransport((function(e){var t,r;if(se.cors||Ut&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"); -for(a in i)s.setRequestHeader(a,i[a]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Lt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=t("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout((function(){t&&r()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),ce.ajaxTransport("script",(function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ce(" - - - - - \ No newline at end of file diff --git a/Sources/webAduc/www/basic/root.json b/Sources/webAduc/www/basic/root.json deleted file mode 100644 index 8560404..0000000 --- a/Sources/webAduc/www/basic/root.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":1,"text":"Root node","children":[{"id":2,"text":"Child node 1"},{"id":3,"text":"Child node 2"}]}] \ No newline at end of file diff --git a/Sources/webAduc/www/fbrowser/data/.htaccess b/Sources/webAduc/www/fbrowser/data/.htaccess deleted file mode 100644 index 3418e55..0000000 --- a/Sources/webAduc/www/fbrowser/data/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all \ No newline at end of file diff --git a/Sources/webAduc/www/fbrowser/data/root/README.txt b/Sources/webAduc/www/fbrowser/data/root/README.txt deleted file mode 100644 index ad8b75d..0000000 --- a/Sources/webAduc/www/fbrowser/data/root/README.txt +++ /dev/null @@ -1 +0,0 @@ -Conteneur \ No newline at end of file diff --git a/Sources/webAduc/www/fbrowser/data/root/Test/Test.txt b/Sources/webAduc/www/fbrowser/data/root/Test/Test.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/webAduc/www/fbrowser/file_sprite.png b/Sources/webAduc/www/fbrowser/file_sprite.png deleted file mode 100644 index 5d68245..0000000 Binary files a/Sources/webAduc/www/fbrowser/file_sprite.png and /dev/null differ diff --git a/Sources/webAduc/www/fbrowser/index.php b/Sources/webAduc/www/fbrowser/index.php deleted file mode 100644 index 539f7e0..0000000 --- a/Sources/webAduc/www/fbrowser/index.php +++ /dev/null @@ -1,450 +0,0 @@ -base && strlen($this->base)) { - if(strpos($temp, $this->base) !== 0) { throw new Exception('Path is not inside base ('.$this->base.'): ' . $temp); } - } - return $temp; - } - protected function path($id) { - $id = str_replace('/', DIRECTORY_SEPARATOR, $id); - $id = trim($id, DIRECTORY_SEPARATOR); - $id = $this->real($this->base . DIRECTORY_SEPARATOR . $id); - return $id; - } - protected function id($path) { - $path = $this->real($path); - $path = substr($path, strlen($this->base)); - $path = str_replace(DIRECTORY_SEPARATOR, '/', $path); - $path = trim($path, '/'); - return strlen($path) ? $path : '/'; - } - - public function __construct($base) { - $this->base = $this->real($base); - if(!$this->base) { throw new Exception('Base directory does not exist'); } - } - public function lst($id, $with_root = false) { - $dir = $this->path($id); - $lst = @scandir($dir); - if(!$lst) { throw new Exception('Could not list path: ' . $dir); } - $res = array(); - foreach($lst as $item) { - if($item == '.' || $item == '..' || $item === null) { continue; } - $tmp = preg_match('([^ a-zа-я-_0-9.]+)ui', $item); - if($tmp === false || $tmp === 1) { continue; } - if(is_dir($dir . DIRECTORY_SEPARATOR . $item)) { - $res[] = array('text' => $item, 'children' => true, 'id' => $this->id($dir . DIRECTORY_SEPARATOR . $item), 'icon' => 'folder'); - } - else { - $res[] = array('text' => $item, 'children' => false, 'id' => $this->id($dir . DIRECTORY_SEPARATOR . $item), 'type' => 'file', 'icon' => 'file file-'.substr($item, strrpos($item,'.') + 1)); - } - } - if($with_root && $this->id($dir) === '/') { - $res = array(array('text' => basename($this->base), 'children' => $res, 'id' => '/', 'icon'=>'folder', 'state' => array('opened' => true, 'disabled' => true))); - } - return $res; - } - public function data($id) { - if(strpos($id, ":")) { - $id = array_map(array($this, 'id'), explode(':', $id)); - return array('type'=>'multiple', 'content'=> 'Multiple selected: ' . implode(' ', $id)); - } - $dir = $this->path($id); - if(is_dir($dir)) { - return array('type'=>'folder', 'content'=> $id); - } - if(is_file($dir)) { - $ext = strpos($dir, '.') !== FALSE ? substr($dir, strrpos($dir, '.') + 1) : ''; - $dat = array('type' => $ext, 'content' => ''); - switch($ext) { - case 'txt': - case 'text': - case 'md': - case 'js': - case 'json': - case 'css': - case 'html': - case 'htm': - case 'xml': - case 'c': - case 'cpp': - case 'h': - case 'sql': - case 'log': - case 'py': - case 'rb': - case 'htaccess': - case 'php': - $dat['content'] = file_get_contents($dir); - break; - case 'jpg': - case 'jpeg': - case 'gif': - case 'png': - case 'bmp': - $dat['content'] = 'data:'.finfo_file(finfo_open(FILEINFO_MIME_TYPE), $dir).';base64,'.base64_encode(file_get_contents($dir)); - break; - default: - $dat['content'] = 'File not recognized: '.$this->id($dir); - break; - } - return $dat; - } - throw new Exception('Not a valid selection: ' . $dir); - } - public function create($id, $name, $mkdir = false) { - $dir = $this->path($id); - if(preg_match('([^ a-zа-я-_0-9.]+)ui', $name) || !strlen($name)) { - throw new Exception('Invalid name: ' . $name); - } - if($mkdir) { - mkdir($dir . DIRECTORY_SEPARATOR . $name); - } - else { - file_put_contents($dir . DIRECTORY_SEPARATOR . $name, ''); - } - return array('id' => $this->id($dir . DIRECTORY_SEPARATOR . $name)); - } - public function rename($id, $name) { - $dir = $this->path($id); - if($dir === $this->base) { - throw new Exception('Cannot rename root'); - } - if(preg_match('([^ a-zа-я-_0-9.]+)ui', $name) || !strlen($name)) { - throw new Exception('Invalid name: ' . $name); - } - $new = explode(DIRECTORY_SEPARATOR, $dir); - array_pop($new); - array_push($new, $name); - $new = implode(DIRECTORY_SEPARATOR, $new); - if($dir !== $new) { - if(is_file($new) || is_dir($new)) { throw new Exception('Path already exists: ' . $new); } - rename($dir, $new); - } - return array('id' => $this->id($new)); - } - public function remove($id) { - $dir = $this->path($id); - if($dir === $this->base) { - throw new Exception('Cannot remove root'); - } - if(is_dir($dir)) { - foreach(array_diff(scandir($dir), array(".", "..")) as $f) { - $this->remove($this->id($dir . DIRECTORY_SEPARATOR . $f)); - } - rmdir($dir); - } - if(is_file($dir)) { - unlink($dir); - } - return array('status' => 'OK'); - } - public function move($id, $par) { - $dir = $this->path($id); - $par = $this->path($par); - $new = explode(DIRECTORY_SEPARATOR, $dir); - $new = array_pop($new); - $new = $par . DIRECTORY_SEPARATOR . $new; - rename($dir, $new); - return array('id' => $this->id($new)); - } - public function copy($id, $par) { - $dir = $this->path($id); - $par = $this->path($par); - $new = explode(DIRECTORY_SEPARATOR, $dir); - $new = array_pop($new); - $new = $par . DIRECTORY_SEPARATOR . $new; - if(is_file($new) || is_dir($new)) { throw new Exception('Path already exists: ' . $new); } - - if(is_dir($dir)) { - mkdir($new); - foreach(array_diff(scandir($dir), array(".", "..")) as $f) { - $this->copy($this->id($dir . DIRECTORY_SEPARATOR . $f), $this->id($new)); - } - } - if(is_file($dir)) { - copy($dir, $new); - } - return array('id' => $this->id($new)); - } -} - -if(isset($_GET['operation'])) { - $fs = new fs(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'root' . DIRECTORY_SEPARATOR); - try { - $rslt = null; - switch($_GET['operation']) { - case 'get_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $rslt = $fs->lst($node, (isset($_GET['id']) && $_GET['id'] === '#')); - break; - case "get_content": - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $rslt = $fs->data($node); - break; - case 'create_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $rslt = $fs->create($node, isset($_GET['text']) ? $_GET['text'] : '', (!isset($_GET['type']) || $_GET['type'] !== 'file')); - break; - case 'rename_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $rslt = $fs->rename($node, isset($_GET['text']) ? $_GET['text'] : ''); - break; - case 'delete_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $rslt = $fs->remove($node); - break; - case 'move_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $parn = isset($_GET['parent']) && $_GET['parent'] !== '#' ? $_GET['parent'] : '/'; - $rslt = $fs->move($node, $parn); - break; - case 'copy_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : '/'; - $parn = isset($_GET['parent']) && $_GET['parent'] !== '#' ? $_GET['parent'] : '/'; - $rslt = $fs->copy($node, $parn); - break; - default: - throw new Exception('Unsupported operation: ' . $_GET['operation']); - break; - } - header('Content-Type: application/json; charset=utf-8'); - echo json_encode($rslt); - } - catch (Exception $e) { - header($_SERVER["SERVER_PROTOCOL"] . ' 500 Server Error'); - header('Status: 500 Server Error'); - echo $e->getMessage(); - } - die(); -} -?> - - - - - - Title - - - - - -
    -
    -
    - - - -
    Select a file from the tree.
    -
    -
    - - - - - - \ No newline at end of file diff --git a/Sources/webAduc/www/layout.html b/Sources/webAduc/www/layout.html deleted file mode 100644 index e7c405d..0000000 --- a/Sources/webAduc/www/layout.html +++ /dev/null @@ -1,1369 +0,0 @@ - - - - - - - - - - - - - Interface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    - remove - drag -
    9 3
    -
    -
    -
    -
    - remove - drag - - - Position - - - Inverse - - -
    Navbar
    -
    - - - -
    -
    -
    - remove - drag - - Well - -
    Jumbotron
    -
    -
    -

    Hello, world!

    -

    This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.

    -

    Learn more

    -
    -
    -
    -
    -
    -
    -
    -
    - remove - drag -
    4 4 4
    -
    -
    -
    -
    - remove - drag -
    Text
    -
    -

    Heading

    -

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    -

    View details »

    -
    -
    -
    -
    -
    - remove - drag -
    Text
    -
    -

    Heading

    -

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    -

    View details »

    -
    -
    -
    -
    -
    - remove - drag -
    Text
    -
    -

    Heading

    -

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    -

    View details »

    -
    -
    -
    -
    -
    -
    - -
    - - -
    - - - - - - - - diff --git a/Sources/webAduc/www/login.js b/Sources/webAduc/www/login.js deleted file mode 100644 index eb5c3dd..0000000 --- a/Sources/webAduc/www/login.js +++ /dev/null @@ -1,47 +0,0 @@ -$(document).ready(function(){ - - $('input[type=password]').keyup(function() { - var pswd = $(this).val(); - - //validate the length - if ( pswd.length < 8 ) { - $('#length').removeClass('valid').addClass('invalid'); - } else { - $('#length').removeClass('invalid').addClass('valid'); - } - - //validate letter - if ( pswd.match(/[A-z]/) ) { - $('#letter').removeClass('invalid').addClass('valid'); - } else { - $('#letter').removeClass('valid').addClass('invalid'); - } - - //validate capital letter - if ( pswd.match(/[A-Z]/) ) { - $('#capital').removeClass('invalid').addClass('valid'); - } else { - $('#capital').removeClass('valid').addClass('invalid'); - } - - //validate number - if ( pswd.match(/\d/) ) { - $('#number').removeClass('invalid').addClass('valid'); - } else { - $('#number').removeClass('valid').addClass('invalid'); - } - - //validate space - if ( pswd.match(/[^a-zA-Z0-9\-\/]/) ) { - $('#space').removeClass('invalid').addClass('valid'); - } else { - $('#space').removeClass('valid').addClass('invalid'); - } - - }).focus(function() { - $('#pswd_info').show(); - }).blur(function() { - $('#pswd_info').hide(); - }); - -}); \ No newline at end of file diff --git a/Sources/webAduc/www/sitebrowser/class.db.php b/Sources/webAduc/www/sitebrowser/class.db.php deleted file mode 100644 index 639817c..0000000 --- a/Sources/webAduc/www/sitebrowser/class.db.php +++ /dev/null @@ -1,1082 +0,0 @@ -query('UPDATE table SET value = 1 WHERE id = ?', array(1)); -// get all results as array -$db->all('SELECT * FROM table WHERE id = ?', array(1), "array_key", bool_skip_key, "assoc"/"num"); -// get one result -$db->one('SELECT * FROM table WHERE id = ?', array(1), "assoc"/"num"); -// get a traversable object to pass to foreach, or use count(), or use direct access: [INDEX] -$db->get('SELECT * FROM table WHERE id = ?', array(1), "assoc"/"num")[1]; -*/ - -namespace -{ - class db - { - private function __construct() { - } - public function __clone() { - throw new \vakata\database\Exception('Cannot clone static DB'); - } - public static function get($settings = null) { - return new \vakata\database\DBC($settings); - } - public static function getc($settings = null, \vakata\cache\ICache $c = null) { - if($c === null) { $c = \vakata\cache\cache::inst(); } - return new \vakata\database\DBCCached($settings, $c); - } - } -} - -namespace vakata\database -{ - class Exception extends \Exception - { - } - - class Settings - { - public $type = null; - public $username = 'root'; - public $password = null; - public $database = null; - public $servername = 'localhost'; - public $serverport = null; - public $persist = false; - public $timezone = null; - public $charset = 'UTF8'; - - public function __construct($settings) { - $str = parse_url($settings); - if(!$str) { - throw new Exception('Malformed DB settings string: ' . $settings); - } - if(array_key_exists('scheme',$str)) { - $this->type = rawurldecode($str['scheme']); - } - if(array_key_exists('user',$str)) { - $this->username = rawurldecode($str['user']); - } - if(array_key_exists('pass',$str)) { - $this->password = rawurldecode($str['pass']); - } - if(array_key_exists('path',$str)) { - $this->database = trim(rawurldecode($str['path']),'/'); - } - if(array_key_exists('host',$str)) { - $this->servername = rawurldecode($str['host']); - } - if(array_key_exists('port',$str)) { - $this->serverport = rawurldecode($str['port']); - } - if(array_key_exists('query',$str)) { - parse_str($str['query'], $str); - $this->persist = (array_key_exists('persist', $str) && $str['persist'] === 'TRUE'); - if(array_key_exists('charset', $str)) { - $this->charset = $str['charset']; - } - if(array_key_exists('timezone', $str)) { - $this->timezone = $str['timezone']; - } - } - } - } - - interface IDB - { - public function connect(); - public function query($sql, $vars); - public function get($sql, $data, $key, $skip_key, $mode); - public function all($sql, $data, $key, $skip_key, $mode); - public function one($sql, $data, $mode); - public function raw($sql); - public function prepare($sql); - public function execute($data); - public function disconnect(); - } - - interface IDriver - { - public function prepare($sql); - public function execute($data); - public function query($sql, $data); - public function nextr($result); - public function seek($result, $row); - public function nf($result); - public function af(); - public function insert_id(); - public function real_query($sql); - public function get_settings(); - } - - abstract class ADriver implements IDriver - { - protected $lnk = null; - protected $settings = null; - - public function __construct(Settings $settings) { - $this->settings = $settings; - } - public function __destruct() { - if($this->is_connected()) { - $this->disconnect(); - } - } - public function get_settings() { - return $this->settings; - } - - public function connect() { - } - public function is_connected() { - return $this->lnk !== null; - } - public function disconnect() { - } - public function query($sql, $data = array()) { - return $this->execute($this->prepare($sql), $data); - } - public function prepare($sql) { - if(!$this->is_connected()) { $this->connect(); } - return $sql; - } - public function execute($sql, $data = array()) { - if(!$this->is_connected()) { $this->connect(); } - if(!is_array($data)) { $data = array(); } - $binder = '?'; - if(strpos($sql, $binder) !== false && is_array($data) && count($data)) { - $tmp = explode($binder, $sql); - if(!is_array($data)) { $data = array($data); } - $data = array_values($data); - if(count($data) >= count($tmp)) { $data = array_slice($data, 0, count($tmp)-1); } - $sql = $tmp[0]; - foreach($data as $i => $v) { - $sql .= $this->escape($v) . $tmp[($i + 1)]; - } - } - return $this->real_query($sql); - } - - public function real_query($sql) { - if(!$this->is_connected()) { $this->connect(); } - } - protected function escape($input) { - if(is_array($input)) { - foreach($input as $k => $v) { - $input[$k] = $this->escape($v); - } - return implode(',',$input); - } - if(is_string($input)) { - $input = addslashes($input); - return "'".$input."'"; - } - if(is_bool($input)) { - return $input === false ? 0 : 1; - } - if(is_null($input)) { - return 'NULL'; - } - return $input; - } - - public function nextr($result) {} - public function nf($result) {} - public function af() {} - public function insert_id() {} - public function seek($result, $row) {} - } - - class Result implements \Iterator, \ArrayAccess, \Countable - { - protected $all = null; - protected $rdy = false; - protected $rslt = null; - protected $mode = null; - protected $fake = null; - protected $skip = false; - - protected $fake_key = 0; - protected $real_key = 0; - public function __construct(Query $rslt, $key = null, $skip_key = false, $mode = 'assoc') { - $this->rslt = $rslt; - $this->mode = $mode; - $this->fake = $key; - $this->skip = $skip_key; - } - public function count() { - return $this->rdy ? count($this->all) : $this->rslt->nf(); - } - public function current() { - if(!$this->count()) { - return null; - } - if($this->rdy) { - return current($this->all); - } - $tmp = $this->rslt->row(); - $row = array(); - switch($this->mode) { - case 'num': - foreach($tmp as $k => $v) { - if(is_int($k)) { - $row[$k] = $v; - } - } - break; - case 'both': - $row = $tmp; - break; - case 'assoc': - default: - foreach($tmp as $k => $v) { - if(!is_int($k)) { - $row[$k] = $v; - } - } - break; - } - if($this->fake) { - $this->fake_key = $row[$this->fake]; - } - if($this->skip) { - unset($row[$this->fake]); - } - if(is_array($row) && count($row) === 1) { - $row = current($row); - } - return $row; - } - public function key() { - if($this->rdy) { - return key($this->all); - } - return $this->fake ? $this->fake_key : $this->real_key; - } - public function next() { - if($this->rdy) { - return next($this->all); - } - $this->rslt->nextr(); - $this->real_key++; - } - public function rewind() { - if($this->rdy) { - return reset($this->all); - } - if($this->real_key !== null) { - $this->rslt->seek(($this->real_key = 0)); - } - $this->rslt->nextr(); - } - public function valid() { - if($this->rdy) { - return current($this->all) !== false; - } - return $this->rslt->row() !== false && $this->rslt->row() !== null; - } - - public function one() { - $this->rewind(); - return $this->current(); - } - public function get() { - if(!$this->rdy) { - $this->all = array(); - foreach($this as $k => $v) { - $this->all[$k] = $v; - } - $this->rdy = true; - } - return $this->all; - } - public function offsetExists($offset) { - if($this->rdy) { - return isset($this->all[$offset]); - } - if($this->fake === null) { - return $this->rslt->seek(($this->real_key = $offset)); - } - $this->get(); - return isset($this->all[$offset]); - } - public function offsetGet($offset) { - if($this->rdy) { - return $this->all[$offset]; - } - if($this->fake === null) { - $this->rslt->seek(($this->real_key = $offset)); - $this->rslt->nextr(); - return $this->current(); - } - $this->get(); - return $this->all[$offset]; - } - public function offsetSet ($offset, $value ) { - throw new Exception('Cannot set result'); - } - public function offsetUnset ($offset) { - throw new Exception('Cannot unset result'); - } - public function __sleep() { - $this->get(); - return array('all', 'rdy', 'mode', 'fake', 'skip'); - } - public function __toString() { - return print_r($this->get(), true); - } - } - - class Query - { - protected $drv = null; - protected $sql = null; - protected $prp = null; - protected $rsl = null; - protected $row = null; - protected $num = null; - protected $aff = null; - protected $iid = null; - - public function __construct(IDriver $drv, $sql) { - $this->drv = $drv; - $this->sql = $sql; - $this->prp = $this->drv->prepare($sql); - } - public function execute($vars = array()) { - $this->rsl = $this->drv->execute($this->prp, $vars); - $this->num = (is_object($this->rsl) || is_resource($this->rsl)) && is_callable(array($this->drv, 'nf')) ? (int)@$this->drv->nf($this->rsl) : 0; - $this->aff = $this->drv->af(); - $this->iid = $this->drv->insert_id(); - return $this; - } - public function result($key = null, $skip_key = false, $mode = 'assoc') { - return new Result($this, $key, $skip_key, $mode); - } - public function row() { - return $this->row; - } - public function f($field) { - return $this->row[$field]; - } - public function nextr() { - $this->row = $this->drv->nextr($this->rsl); - return $this->row !== false && $this->row !== null; - } - public function seek($offset) { - return @$this->drv->seek($this->rsl, $offset) ? true : false; - } - public function nf() { - return $this->num; - } - public function af() { - return $this->aff; - } - public function insert_id() { - return $this->iid; - } - } - - class DBC implements IDB - { - protected $drv = null; - protected $que = null; - - public function __construct($drv = null) { - if(!$drv && defined('DATABASE')) { - $drv = DATABASE; - } - if(!$drv) { - $this->error('Could not create database (no settings)'); - } - if(is_string($drv)) { - $drv = new \vakata\database\Settings($drv); - } - if($drv instanceof Settings) { - $tmp = '\\vakata\\database\\' . $drv->type . '_driver'; - if(!class_exists($tmp)) { - $this->error('Could not create database (no driver: '.$drv->type.')'); - } - $drv = new $tmp($drv); - } - if(!($drv instanceof IDriver)) { - $this->error('Could not create database - wrong driver'); - } - $this->drv = $drv; - } - - public function connect() { - if(!$this->drv->is_connected()) { - try { - $this->drv->connect(); - } - catch (Exception $e) { - $this->error($e->getMessage(), 1); - } - } - return true; - } - public function disconnect() { - if($this->drv->is_connected()) { - $this->drv->disconnect(); - } - } - - public function prepare($sql) { - try { - $this->que = new Query($this->drv, $sql); - return $this->que; - } catch (Exception $e) { - $this->error($e->getMessage(), 2); - } - } - public function execute($data = array()) { - try { - return $this->que->execute($data); - } catch (Exception $e) { - $this->error($e->getMessage(), 3); - } - } - public function query($sql, $data = array()) { - try { - $this->que = new Query($this->drv, $sql); - return $this->que->execute($data); - } - catch (Exception $e) { - $this->error($e->getMessage(), 4); - } - } - public function get($sql, $data = array(), $key = null, $skip_key = false, $mode = 'assoc') { - return $this->query($sql, $data)->result($key, $skip_key, $mode); - } - public function all($sql, $data = array(), $key = null, $skip_key = false, $mode = 'assoc') { - return $this->get($sql, $data, $key, $skip_key, $mode)->get(); - } - public function one($sql, $data = array(), $mode = 'assoc') { - return $this->query($sql, $data)->result(null, false, $mode)->one(); - } - public function raw($sql) { - return $this->drv->real_query($sql); - } - public function get_driver() { - return $this->drv->get_settings()->type; - } - - public function __call($method, $args) { - if($this->que && is_callable(array($this->que, $method))) { - try { - return call_user_func_array(array($this->que, $method), $args); - } catch (Exception $e) { - $this->error($e->getMessage(), 5); - } - } - } - - protected final function error($error = '') { - $dirnm = defined('LOGROOT') ? LOGROOT : realpath(dirname(__FILE__)); - @file_put_contents( - $dirnm . DIRECTORY_SEPARATOR . '_errors_sql.log', - '[' . date('d-M-Y H:i:s') . '] ' . $this->settings->type . ' > ' . preg_replace("@[\s\r\n\t]+@", ' ', $error) . "\n", - FILE_APPEND - ); - throw new Exception($error); - } - } - - class DBCCached extends DBC - { - protected $cache_inst = null; - protected $cache_nmsp = null; - public function __construct($settings = null, \vakata\cache\ICache $c = null) { - parent::__construct($settings); - $this->cache_inst = $c; - $this->cache_nmsp = 'DBCCached_' . md5(serialize($this->drv->get_settings())); - } - public function cache($expires, $sql, $data = array(), $key = null, $skip_key = false, $mode = 'assoc') { - $arg = func_get_args(); - array_shift($arg); - $key = md5(serialize($arg)); - if(!$this->cache_inst) { - return call_user_func_array(array($this, 'all'), $arg); - } - - $tmp = $this->cache_inst->get($key, $this->cache_nmsp); - if(!$tmp) { - $this->cache_inst->prep($key, $this->cache_nmsp); - $tmp = call_user_func_array(array($this, 'all'), $arg); - $this->cache_inst->set($key, $tmp, $this->cache_nmsp, $expires); - } - return $tmp; - } - public function clear() { - if($this->cache_inst) { - $this->cache_inst->clear($this->cache_nmsp); - } - } - } - - class mysqli_driver extends ADriver - { - protected $iid = 0; - protected $aff = 0; - protected $mnd = false; - - public function __construct($settings) { - parent::__construct($settings); - if(!$this->settings->serverport) { $this->settings->serverport = 3306; } - $this->mnd = function_exists('mysqli_fetch_all'); - } - - public function connect() { - $this->lnk = new \mysqli( - ($this->settings->persist ? 'p:' : '') . $this->settings->servername, - $this->settings->username, - $this->settings->password, - $this->settings->database, - $this->settings->serverport - ); - if($this->lnk->connect_errno) { - throw new Exception('Connect error: ' . $this->lnk->connect_errno); - } - if(!$this->lnk->set_charset($this->settings->charset)) { - throw new Exception('Charset error: ' . $this->lnk->connect_errno); - } - if($this->settings->timezone) { - @$this->lnk->query("SET time_zone = '" . addslashes($this->settings->timezone) . "'"); - } - return true; - } - public function disconnect() { - if($this->is_connected()) { - @$this->lnk->close(); - } - } - public function real_query($sql) { - if(!$this->is_connected()) { $this->connect(); } - $temp = $this->lnk->query($sql); - if(!$temp) { - throw new Exception('Could not execute query : ' . $this->lnk->error . ' <'.$sql.'>'); - } - $this->iid = $this->lnk->insert_id; - $this->aff = $this->lnk->affected_rows; - return $temp; - } - public function nextr($result) { - if($this->mnd) { - return $result->fetch_array(MYSQLI_BOTH); - } - else { - $ref = $result->result_metadata(); - if(!$ref) { return false; } - $tmp = mysqli_fetch_fields($ref); - if(!$tmp) { return false; } - $ref = array(); - foreach($tmp as $col) { $ref[$col->name] = null; } - $tmp = array(); - foreach($ref as $k => $v) { $tmp[] =& $ref[$k]; } - if(!call_user_func_array(array($result, 'bind_result'), $tmp)) { return false; } - if(!$result->fetch()) { return false; } - $tmp = array(); - $i = 0; - foreach($ref as $k => $v) { $tmp[$i++] = $v; $tmp[$k] = $v; } - return $tmp; - } - } - public function seek($result, $row) { - $temp = $result->data_seek($row); - return $temp; - } - public function nf($result) { - return $result->num_rows; - } - public function af() { - return $this->aff; - } - public function insert_id() { - return $this->iid; - } - public function prepare($sql) { - if(!$this->is_connected()) { $this->connect(); } - $temp = $this->lnk->prepare($sql); - if(!$temp) { - throw new Exception('Could not prepare : ' . $this->lnk->error . ' <'.$sql.'>'); - } - return $temp; - } - public function execute($sql, $data = array()) { - if(!$this->is_connected()) { $this->connect(); } - if(!is_array($data)) { $data = array(); } - if(is_string($sql)) { - return parent::execute($sql, $data); - } - - $data = array_values($data); - if($sql->param_count) { - if(count($data) < $sql->param_count) { - throw new Exception('Prepared execute - not enough parameters.'); - } - $ref = array(''); - foreach($data as $i => $v) { - switch(gettype($v)) { - case "boolean": - case "integer": - $data[$i] = (int)$v; - $ref[0] .= 'i'; - $ref[$i+1] =& $data[$i]; - break; - case "double": - $ref[0] .= 'd'; - $ref[$i+1] =& $data[$i]; - break; - case "array": - $data[$i] = implode(',',$v); - $ref[0] .= 's'; - $ref[$i+1] =& $data[$i]; - break; - case "object": - case "resource": - $data[$i] = serialize($data[$i]); - $ref[0] .= 's'; - $ref[$i+1] =& $data[$i]; - break; - default: - $ref[0] .= 's'; - $ref[$i+1] =& $data[$i]; - break; - } - } - call_user_func_array(array($sql, 'bind_param'), $ref); - } - $rtrn = $sql->execute(); - if(!$this->mnd) { - $sql->store_result(); - } - if(!$rtrn) { - throw new Exception('Prepared execute error : ' . $this->lnk->error); - } - $this->iid = $this->lnk->insert_id; - $this->aff = $this->lnk->affected_rows; - if(!$this->mnd) { - return $sql->field_count ? $sql : $rtrn; - } - else { - return $sql->field_count ? $sql->get_result() : $rtrn; - } - } - - protected function escape($input) { - if(is_array($input)) { - foreach($input as $k => $v) { - $input[$k] = $this->escape($v); - } - return implode(',',$input); - } - if(is_string($input)) { - $input = $this->lnk->real_escape_string($input); - return "'".$input."'"; - } - if(is_bool($input)) { - return $input === false ? 0 : 1; - } - if(is_null($input)) { - return 'NULL'; - } - return $input; - } - } - - class mysql_driver extends ADriver - { - protected $iid = 0; - protected $aff = 0; - public function __construct($settings) { - parent::__construct($settings); - if(!$this->settings->serverport) { $this->settings->serverport = 3306; } - } - public function connect() { - $this->lnk = ($this->settings->persist) ? - @mysql_pconnect( - $this->settings->servername.':'.$this->settings->serverport, - $this->settings->username, - $this->settings->password - ) : - @mysql_connect( - $this->settings->servername.':'.$this->settings->serverport, - $this->settings->username, - $this->settings->password - ); - - if($this->lnk === false || !mysql_select_db($this->settings->database, $this->lnk) || !mysql_query("SET NAMES '".$this->settings->charset."'", $this->lnk)) { - throw new Exception('Connect error: ' . mysql_error()); - } - if($this->settings->timezone) { - @mysql_query("SET time_zone = '" . addslashes($this->settings->timezone) . "'", $this->lnk); - } - return true; - } - public function disconnect() { - if(is_resource($this->lnk)) { - mysql_close($this->lnk); - } - } - - public function real_query($sql) { - if(!$this->is_connected()) { $this->connect(); } - $temp = mysql_query($sql, $this->lnk); - if(!$temp) { - throw new Exception('Could not execute query : ' . mysql_error($this->lnk) . ' <'.$sql.'>'); - } - $this->iid = mysql_insert_id($this->lnk); - $this->aff = mysql_affected_rows($this->lnk); - return $temp; - } - public function nextr($result) { - return mysql_fetch_array($result, MYSQL_BOTH); - } - public function seek($result, $row) { - $temp = @mysql_data_seek($result, $row); - if(!$temp) { - //throw new Exception('Could not seek : ' . mysql_error($this->lnk)); - } - return $temp; - } - public function nf($result) { - return mysql_num_rows($result); - } - public function af() { - return $this->aff; - } - public function insert_id() { - return $this->iid; - } - - protected function escape($input) { - if(is_array($input)) { - foreach($input as $k => $v) { - $input[$k] = $this->escape($v); - } - return implode(',',$input); - } - if(is_string($input)) { - $input = mysql_real_escape_string($input, $this->lnk); - return "'".$input."'"; - } - if(is_bool($input)) { - return $input === false ? 0 : 1; - } - if(is_null($input)) { - return 'NULL'; - } - return $input; - } - } - - class postgre_driver extends ADriver - { - protected $iid = 0; - protected $aff = 0; - public function __construct($settings) { - parent::__construct($settings); - if(!$this->settings->serverport) { $this->settings->serverport = 5432; } - } - public function connect() { - $this->lnk = ($this->settings->persist) ? - @pg_pconnect( - "host=" . $this->settings->servername . " " . - "port=" . $this->settings->serverport . " " . - "user=" . $this->settings->username . " " . - "password=" . $this->settings->password . " " . - "dbname=" . $this->settings->database . " " . - "options='--client_encoding=".strtoupper($this->settings->charset)."' " - ) : - @pg_connect( - "host=" . $this->settings->servername . " " . - "port=" . $this->settings->serverport . " " . - "user=" . $this->settings->username . " " . - "password=" . $this->settings->password . " " . - "dbname=" . $this->settings->database . " " . - "options='--client_encoding=".strtoupper($this->settings->charset)."' " - ); - if($this->lnk === false) { - throw new Exception('Connect error'); - } - if($this->settings->timezone) { - @pg_query($this->lnk, "SET TIME ZONE '".addslashes($this->settings->timezone)."'"); - } - return true; - } - public function disconnect() { - if(is_resource($this->lnk)) { - pg_close($this->lnk); - } - } - public function real_query($sql) { - return $this->query($sql); - } - public function prepare($sql) { - if(!$this->is_connected()) { $this->connect(); } - $binder = '?'; - if(strpos($sql, $binder) !== false) { - $tmp = explode($binder, $sql); - $sql = $tmp[0]; - foreach($tmp as $i => $v) { - $sql .= '$' . ($i + 1); - if(isset($tmp[($i + 1)])) { - $sql .= $tmp[($i + 1)]; - } - } - } - return $sql; - } - public function execute($sql, $data = array()) { - if(!$this->is_connected()) { $this->connect(); } - if(!is_array($data)) { $data = array(); } - $temp = (is_array($data) && count($data)) ? pg_query_params($this->lnk, $sql, $data) : pg_query_params($this->lnk, $sql, array()); - if(!$temp) { - throw new Exception('Could not execute query : ' . pg_last_error($this->lnk) . ' <'.$sql.'>'); - } - if(preg_match('@^\s*(INSERT|REPLACE)\s+INTO@i', $sql)) { - $this->iid = pg_query($this->lnk, 'SELECT lastval()'); - $this->aff = pg_affected_rows($temp); - } - return $temp; - } - - public function nextr($result) { - return pg_fetch_array($result, NULL, PGSQL_BOTH); - } - public function seek($result, $row) { - $temp = @pg_result_seek($result, $row); - if(!$temp) { - //throw new Exception('Could not seek : ' . pg_last_error($this->lnk)); - } - return $temp; - } - public function nf($result) { - return pg_num_rows($result); - } - public function af() { - return $this->aff; - } - public function insert_id() { - return $this->iid; - } - - // Функция mysql_query? - // - http://okbob.blogspot.com/2009/08/mysql-functions-for-postgresql.html - // - http://www.xach.com/aolserver/mysql-to-postgresql.html - // - REPLACE unixtimestamp / limit / curdate - } - - class oracle_driver extends ADriver - { - protected $iid = 0; - protected $aff = 0; - - public function connect() { - $this->lnk = ($this->settings->persist) ? - @oci_pconnect($this->settings->username, $this->settings->password, $this->settings->servername, $this->settings->charset) : - @oci_connect ($this->settings->username, $this->settings->password, $this->settings->servername, $this->settings->charset); - if($this->lnk === false) { - throw new Exception('Connect error : ' . oci_error()); - } - if($this->settings->timezone) { - $this->real_query("ALTER session SET time_zone = '" . addslashes($this->settings->timezone) . "'"); - } - return true; - } - public function disconnect() { - if(is_resource($this->lnk)) { - oci_close($this->lnk); - } - } - public function real_query($sql) { - if(!$this->is_connected()) { $this->connect(); } - $temp = oci_parse($this->lnk, $sql); - if(!$temp || !oci_execute($temp)) { - throw new Exception('Could not execute real query : ' . oci_error($temp)); - } - $this->aff = oci_num_rows($temp); - return $temp; - } - - public function prepare($sql) { - if(!$this->is_connected()) { $this->connect(); } - $binder = '?'; - if(strpos($sql, $binder) !== false && $vars !== false) { - $tmp = explode($this->binder, $sql); - $sql = $tmp[0]; - foreach($tmp as $i => $v) { - $sql .= ':f' . $i; - if(isset($tmp[($i + 1)])) { - $sql .= $tmp[($i + 1)]; - } - } - } - return oci_parse($this->lnk, $sql); - } - public function execute($sql, $data = array()) { - if(!$this->is_connected()) { $this->connect(); } - if(!is_array($data)) { $data = array(); } - $data = array_values($data); - foreach($data as $i => $v) { - switch(gettype($v)) { - case "boolean": - case "integer": - $data[$i] = (int)$v; - oci_bind_by_name($sql, 'f'.$i, $data[$i], SQLT_INT); - break; - case "array": - $data[$i] = implode(',',$v); - oci_bind_by_name($sql, 'f'.$i, $data[$i]); - break; - case "object": - case "resource": - $data[$i] = serialize($data[$i]); - oci_bind_by_name($sql, 'f'.$i, $data[$i]); - break; - default: - oci_bind_by_name($sql, 'f'.$i, $data[$i]); - break; - } - } - $temp = oci_execute($sql); - if(!$temp) { - throw new Exception('Could not execute query : ' . oci_error($sql)); - } - $this->aff = oci_num_rows($sql); - - /* TO DO: get iid - if(!$seqname) { return $this->error('INSERT_ID not supported with no sequence.'); } - $stm = oci_parse($this->link, 'SELECT '.strtoupper(str_replace("'",'',$seqname)).'.CURRVAL FROM DUAL'); - oci_execute($stm, $sql); - $tmp = oci_fetch_array($stm); - $tmp = $tmp[0]; - oci_free_statement($stm); - */ - return $sql; - } - public function nextr($result) { - return oci_fetch_array($result, OCI_BOTH); - } - public function seek($result, $row) { - $cnt = 0; - while($cnt < $row) { - if(oci_fetch_array($result, OCI_BOTH) === false) { - return false; - } - $cnt++; - } - return true; - } - public function nf($result) { - return oci_num_rows($result); - } - public function af() { - return $this->aff; - } - public function insert_id() { - return $this->iid; - } - } - - class ibase_driver extends ADriver - { - protected $iid = 0; - protected $aff = 0; - public function __construct($settings) { - parent::__construct($settings); - if(!is_file($this->settings->database) && is_file('/'.$this->settings->database)) { - $this->settings->database = '/'.$this->settings->database; - } - $this->settings->servername = ($this->settings->servername === 'localhost' || $this->settings->servername === '127.0.0.1' || $this->settings->servername === '') ? - '' : - $this->settings->servername . ':'; - } - public function connect() { - $this->lnk = ($this->settings->persist) ? - @ibase_pconnect( - $this->settings->servername . $this->settings->database, - $this->settings->username, - $this->settings->password, - strtoupper($this->settings->charset) - ) : - @ibase_connect( - $this->settings->servername . $this->settings->database, - $this->settings->username, - $this->settings->password, - strtoupper($this->settings->charset) - ); - if($this->lnk === false) { - throw new Exception('Connect error: ' . ibase_errmsg()); - } - return true; - } - public function disconnect() { - if(is_resource($this->lnk)) { - ibase_close($this->lnk); - } - } - - public function real_query($sql) { - if(!$this->is_connected()) { $this->connect(); } - $temp = ibase_query($sql, $this->lnk); - if(!$temp) { - throw new Exception('Could not execute query : ' . ibase_errmsg() . ' <'.$sql.'>'); - } - //$this->iid = mysql_insert_id($this->lnk); - $this->aff = ibase_affected_rows($this->lnk); - return $temp; - } - public function prepare($sql) { - if(!$this->is_connected()) { $this->connect(); } - return ibase_prepare($this->lnk, $sql); - } - public function execute($sql, $data = array()) { - if(!$this->is_connected()) { $this->connect(); } - if(!is_array($data)) { $data = array(); } - $data = array_values($data); - foreach($data as $i => $v) { - switch(gettype($v)) { - case "boolean": - case "integer": - $data[$i] = (int)$v; - break; - case "array": - $data[$i] = implode(',',$v); - break; - case "object": - case "resource": - $data[$i] = serialize($data[$i]); - break; - } - } - array_unshift($data, $sql); - $temp = call_user_func_array("ibase_execute", $data); - if(!$temp) { - throw new Exception('Could not execute query : ' . ibase_errmsg() . ' <'.$sql.'>'); - } - $this->aff = ibase_affected_rows($this->lnk); - return $temp; - } - public function nextr($result) { - return ibase_fetch_assoc($result, IBASE_TEXT); - } - public function seek($result, $row) { - return false; - } - public function nf($result) { - return false; - } - public function af() { - return $this->aff; - } - public function insert_id() { - return $this->iid; - } - } -} diff --git a/Sources/webAduc/www/sitebrowser/class.tree.php b/Sources/webAduc/www/sitebrowser/class.tree.php deleted file mode 100644 index 3658d77..0000000 --- a/Sources/webAduc/www/sitebrowser/class.tree.php +++ /dev/null @@ -1,986 +0,0 @@ - 'structure', // the structure table (containing the id, left, right, level, parent_id and position fields) - 'data_table' => 'structure', // table for additional fields (apart from structure ones, can be the same as structure_table) - 'data2structure' => 'id', // which field from the data table maps to the structure table - 'structure' => array( // which field (value) maps to what in the structure (key) - 'id' => 'id', - 'left' => 'lft', - 'right' => 'rgt', - 'level' => 'lvl', - 'parent_id' => 'pid', - 'position' => 'pos' - ), - 'data' => array() // array of additional fields from the data table - ); - - public function __construct(\vakata\database\IDB $db, array $options = array()) { - $this->db = $db; - $this->options = array_merge($this->default, $options); - } - - public function get_node($id, $options = array()) { - $node = $this->db->one(" - SELECT - s.".implode(", s.", $this->options['structure']).", - d.".implode(", d.", $this->options['data'])." - FROM - ".$this->options['structure_table']." s, - ".$this->options['data_table']." d - WHERE - s.".$this->options['structure']['id']." = d.".$this->options['data2structure']." AND - s.".$this->options['structure']['id']." = ".(int)$id - ); - if(!$node) { - throw new Exception('Node does not exist'); - } - if(isset($options['with_children'])) { - $node['children'] = $this->get_children($id, isset($options['deep_children'])); - } - if(isset($options['with_path'])) { - $node['path'] = $this->get_path($id); - } - return $node; - } - - public function get_children($id, $recursive = false) { - $sql = false; - if($recursive) { - $node = $this->get_node($id); - $sql = " - SELECT - s.".implode(", s.", $this->options['structure']).", - d.".implode(", d.", $this->options['data'])." - FROM - ".$this->options['structure_table']." s, - ".$this->options['data_table']." d - WHERE - s.".$this->options['structure']['id']." = d.".$this->options['data2structure']." AND - s.".$this->options['structure']['left']." > ".(int)$node[$this->options['structure']['left']]." AND - s.".$this->options['structure']['right']." < ".(int)$node[$this->options['structure']['right']]." - ORDER BY - s.".$this->options['structure']['left']." - "; - } - else { - $sql = " - SELECT - s.".implode(", s.", $this->options['structure']).", - d.".implode(", d.", $this->options['data'])." - FROM - ".$this->options['structure_table']." s, - ".$this->options['data_table']." d - WHERE - s.".$this->options['structure']['id']." = d.".$this->options['data2structure']." AND - s.".$this->options['structure']['parent_id']." = ".(int)$id." - ORDER BY - s.".$this->options['structure']['position']." - "; - } - return $this->db->all($sql); - } - - public function get_path($id) { - $node = $this->get_node($id); - $sql = false; - if($node) { - $sql = " - SELECT - s.".implode(", s.", $this->options['structure']).", - d.".implode(", d.", $this->options['data'])." - FROM - ".$this->options['structure_table']." s, - ".$this->options['data_table']." d - WHERE - s.".$this->options['structure']['id']." = d.".$this->options['data2structure']." AND - s.".$this->options['structure']['left']." < ".(int)$node[$this->options['structure']['left']]." AND - s.".$this->options['structure']['right']." > ".(int)$node[$this->options['structure']['right']]." - ORDER BY - s.".$this->options['structure']['left']." - "; - } - return $sql ? $this->db->all($sql) : false; - } - - public function mk($parent, $position = 0, $data = array()) { - $parent = (int)$parent; - if($parent == 0) { throw new Exception('Parent is 0'); } - $parent = $this->get_node($parent, array('with_children'=> true)); - if(!$parent['children']) { $position = 0; } - if($parent['children'] && $position >= count($parent['children'])) { $position = count($parent['children']); } - - $sql = array(); - $par = array(); - - // PREPARE NEW PARENT - // update positions of all next elements - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$this->options['structure']["position"]." + 1 - WHERE - ".$this->options['structure']["parent_id"]." = ".(int)$parent[$this->options['structure']['id']]." AND - ".$this->options['structure']["position"]." >= ".$position." - "; - $par[] = false; - - // update left indexes - $ref_lft = false; - if(!$parent['children']) { - $ref_lft = $parent[$this->options['structure']["right"]]; - } - else if(!isset($parent['children'][$position])) { - $ref_lft = $parent[$this->options['structure']["right"]]; - } - else { - $ref_lft = $parent['children'][(int)$position][$this->options['structure']["left"]]; - } - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["left"]." = ".$this->options['structure']["left"]." + 2 - WHERE - ".$this->options['structure']["left"]." >= ".(int)$ref_lft." - "; - $par[] = false; - - // update right indexes - $ref_rgt = false; - if(!$parent['children']) { - $ref_rgt = $parent[$this->options['structure']["right"]]; - } - else if(!isset($parent['children'][$position])) { - $ref_rgt = $parent[$this->options['structure']["right"]]; - } - else { - $ref_rgt = $parent['children'][(int)$position][$this->options['structure']["left"]] + 1; - } - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["right"]." = ".$this->options['structure']["right"]." + 2 - WHERE - ".$this->options['structure']["right"]." >= ".(int)$ref_rgt." - "; - $par[] = false; - - // INSERT NEW NODE IN STRUCTURE - $sql[] = "INSERT INTO ".$this->options['structure_table']." (".implode(",", $this->options['structure']).") VALUES (?".str_repeat(',?', count($this->options['structure']) - 1).")"; - $tmp = array(); - foreach($this->options['structure'] as $k => $v) { - switch($k) { - case 'id': - $tmp[] = null; - break; - case 'left': - $tmp[] = (int)$ref_lft; - break; - case 'right': - $tmp[] = (int)$ref_lft + 1; - break; - case 'level': - $tmp[] = (int)$parent[$v] + 1; - break; - case 'parent_id': - $tmp[] = $parent[$this->options['structure']['id']]; - break; - case 'position': - $tmp[] = $position; - break; - default: - $tmp[] = null; - } - } - $par[] = $tmp; - - foreach($sql as $k => $v) { - try { - $this->db->query($v, $par[$k]); - } catch(Exception $e) { - $this->reconstruct(); - throw new Exception('Could not create'); - } - } - if($data && count($data)) { - $node = $this->db->insert_id(); - if(!$this->rn($node,$data)) { - $this->rm($node); - throw new Exception('Could not rename after create'); - } - } - return $node; - } - - public function mv($id, $parent, $position = 0) { - $id = (int)$id; - $parent = (int)$parent; - if($parent == 0 || $id == 0 || $id == 1) { - throw new Exception('Cannot move inside 0, or move root node'); - } - - $parent = $this->get_node($parent, array('with_children'=> true, 'with_path' => true)); - $id = $this->get_node($id, array('with_children'=> true, 'deep_children' => true, 'with_path' => true)); - if(!$parent['children']) { - $position = 0; - } - if($id[$this->options['structure']['parent_id']] == $parent[$this->options['structure']['id']] && $position > $id[$this->options['structure']['position']]) { - $position ++; - } - if($parent['children'] && $position >= count($parent['children'])) { - $position = count($parent['children']); - } - if($id[$this->options['structure']['left']] < $parent[$this->options['structure']['left']] && $id[$this->options['structure']['right']] > $parent[$this->options['structure']['right']]) { - throw new Exception('Could not move parent inside child'); - } - - $tmp = array(); - $tmp[] = (int)$id[$this->options['structure']["id"]]; - if($id['children'] && is_array($id['children'])) { - foreach($id['children'] as $c) { - $tmp[] = (int)$c[$this->options['structure']["id"]]; - } - } - $width = (int)$id[$this->options['structure']["right"]] - (int)$id[$this->options['structure']["left"]] + 1; - - $sql = array(); - - // PREPARE NEW PARENT - // update positions of all next elements - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$this->options['structure']["position"]." + 1 - WHERE - ".$this->options['structure']["id"]." != ".(int)$id[$this->options['structure']['id']]." AND - ".$this->options['structure']["parent_id"]." = ".(int)$parent[$this->options['structure']['id']]." AND - ".$this->options['structure']["position"]." >= ".$position." - "; - - // update left indexes - $ref_lft = false; - if(!$parent['children']) { - $ref_lft = $parent[$this->options['structure']["right"]]; - } - else if(!isset($parent['children'][$position])) { - $ref_lft = $parent[$this->options['structure']["right"]]; - } - else { - $ref_lft = $parent['children'][(int)$position][$this->options['structure']["left"]]; - } - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["left"]." = ".$this->options['structure']["left"]." + ".$width." - WHERE - ".$this->options['structure']["left"]." >= ".(int)$ref_lft." AND - ".$this->options['structure']["id"]." NOT IN(".implode(',',$tmp).") - "; - // update right indexes - $ref_rgt = false; - if(!$parent['children']) { - $ref_rgt = $parent[$this->options['structure']["right"]]; - } - else if(!isset($parent['children'][$position])) { - $ref_rgt = $parent[$this->options['structure']["right"]]; - } - else { - $ref_rgt = $parent['children'][(int)$position][$this->options['structure']["left"]] + 1; - } - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["right"]." = ".$this->options['structure']["right"]." + ".$width." - WHERE - ".$this->options['structure']["right"]." >= ".(int)$ref_rgt." AND - ".$this->options['structure']["id"]." NOT IN(".implode(',',$tmp).") - "; - - // MOVE THE ELEMENT AND CHILDREN - // left, right and level - $diff = $ref_lft - (int)$id[$this->options['structure']["left"]]; - - if($diff > 0) { $diff = $diff - $width; } - $ldiff = ((int)$parent[$this->options['structure']['level']] + 1) - (int)$id[$this->options['structure']['level']]; - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["right"]." = ".$this->options['structure']["right"]." + ".$diff.", - ".$this->options['structure']["left"]." = ".$this->options['structure']["left"]." + ".$diff.", - ".$this->options['structure']["level"]." = ".$this->options['structure']["level"]." + ".$ldiff." - WHERE ".$this->options['structure']["id"]." IN(".implode(',',$tmp).") - "; - // position and parent_id - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$position.", - ".$this->options['structure']["parent_id"]." = ".(int)$parent[$this->options['structure']["id"]]." - WHERE ".$this->options['structure']["id"]." = ".(int)$id[$this->options['structure']['id']]." - "; - - // CLEAN OLD PARENT - // position of all next elements - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$this->options['structure']["position"]." - 1 - WHERE - ".$this->options['structure']["parent_id"]." = ".(int)$id[$this->options['structure']["parent_id"]]." AND - ".$this->options['structure']["position"]." > ".(int)$id[$this->options['structure']["position"]]; - // left indexes - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["left"]." = ".$this->options['structure']["left"]." - ".$width." - WHERE - ".$this->options['structure']["left"]." > ".(int)$id[$this->options['structure']["right"]]." AND - ".$this->options['structure']["id"]." NOT IN(".implode(',',$tmp).") - "; - // right indexes - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["right"]." = ".$this->options['structure']["right"]." - ".$width." - WHERE - ".$this->options['structure']["right"]." > ".(int)$id[$this->options['structure']["right"]]." AND - ".$this->options['structure']["id"]." NOT IN(".implode(',',$tmp).") - "; - - foreach($sql as $k => $v) { - //echo preg_replace('@[\s\t]+@',' ',$v) ."\n"; - try { - $this->db->query($v); - } catch(Exception $e) { - $this->reconstruct(); - throw new Exception('Error moving'); - } - } - return true; - } - - public function cp($id, $parent, $position = 0) { - $id = (int)$id; - $parent = (int)$parent; - if($parent == 0 || $id == 0 || $id == 1) { - throw new Exception('Could not copy inside parent 0, or copy root nodes'); - } - - $parent = $this->get_node($parent, array('with_children'=> true, 'with_path' => true)); - $id = $this->get_node($id, array('with_children'=> true, 'deep_children' => true, 'with_path' => true)); - $old_nodes = $this->db->get(" - SELECT * FROM ".$this->options['structure_table']." - WHERE ".$this->options['structure']["left"]." > ".$id[$this->options['structure']["left"]]." AND ".$this->options['structure']["right"]." < ".$id[$this->options['structure']["right"]]." - ORDER BY ".$this->options['structure']["left"]." - "); - if(!$parent['children']) { - $position = 0; - } - if($id[$this->options['structure']['parent_id']] == $parent[$this->options['structure']['id']] && $position > $id[$this->options['structure']['position']]) { - //$position ++; - } - if($parent['children'] && $position >= count($parent['children'])) { - $position = count($parent['children']); - } - - $tmp = array(); - $tmp[] = (int)$id[$this->options['structure']["id"]]; - if($id['children'] && is_array($id['children'])) { - foreach($id['children'] as $c) { - $tmp[] = (int)$c[$this->options['structure']["id"]]; - } - } - $width = (int)$id[$this->options['structure']["right"]] - (int)$id[$this->options['structure']["left"]] + 1; - - $sql = array(); - - // PREPARE NEW PARENT - // update positions of all next elements - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$this->options['structure']["position"]." + 1 - WHERE - ".$this->options['structure']["parent_id"]." = ".(int)$parent[$this->options['structure']['id']]." AND - ".$this->options['structure']["position"]." >= ".$position." - "; - - // update left indexes - $ref_lft = false; - if(!$parent['children']) { - $ref_lft = $parent[$this->options['structure']["right"]]; - } - else if(!isset($parent['children'][$position])) { - $ref_lft = $parent[$this->options['structure']["right"]]; - } - else { - $ref_lft = $parent['children'][(int)$position][$this->options['structure']["left"]]; - } - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["left"]." = ".$this->options['structure']["left"]." + ".$width." - WHERE - ".$this->options['structure']["left"]." >= ".(int)$ref_lft." - "; - // update right indexes - $ref_rgt = false; - if(!$parent['children']) { - $ref_rgt = $parent[$this->options['structure']["right"]]; - } - else if(!isset($parent['children'][$position])) { - $ref_rgt = $parent[$this->options['structure']["right"]]; - } - else { - $ref_rgt = $parent['children'][(int)$position][$this->options['structure']["left"]] + 1; - } - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["right"]." = ".$this->options['structure']["right"]." + ".$width." - WHERE - ".$this->options['structure']["right"]." >= ".(int)$ref_rgt." - "; - - // MOVE THE ELEMENT AND CHILDREN - // left, right and level - $diff = $ref_lft - (int)$id[$this->options['structure']["left"]]; - - if($diff <= 0) { $diff = $diff - $width; } - $ldiff = ((int)$parent[$this->options['structure']['level']] + 1) - (int)$id[$this->options['structure']['level']]; - - // build all fields + data table - $fields = array_combine($this->options['structure'], $this->options['structure']); - unset($fields['id']); - $fields[$this->options['structure']["left"]] = $this->options['structure']["left"]." + ".$diff; - $fields[$this->options['structure']["right"]] = $this->options['structure']["right"]." + ".$diff; - $fields[$this->options['structure']["level"]] = $this->options['structure']["level"]." + ".$ldiff; - $sql[] = " - INSERT INTO ".$this->options['structure_table']." ( ".implode(',',array_keys($fields))." ) - SELECT ".implode(',',array_values($fields))." FROM ".$this->options['structure_table']." WHERE ".$this->options['structure']["id"]." IN (".implode(",", $tmp).") - ORDER BY ".$this->options['structure']["level"]." ASC"; - - foreach($sql as $k => $v) { - try { - $this->db->query($v); - } catch(Exception $e) { - $this->reconstruct(); - throw new Exception('Error copying'); - } - } - $iid = (int)$this->db->insert_id(); - - try { - $this->db->query(" - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$position.", - ".$this->options['structure']["parent_id"]." = ".(int)$parent[$this->options['structure']["id"]]." - WHERE ".$this->options['structure']["id"]." = ".$iid." - "); - } catch(Exception $e) { - $this->rm($iid); - $this->reconstruct(); - throw new Exception('Could not update adjacency after copy'); - } - $fields = $this->options['data']; - unset($fields['id']); - $update_fields = array(); - foreach($fields as $f) { - $update_fields[] = $f.'=VALUES('.$f.')'; - } - $update_fields = implode(',', $update_fields); - if(count($fields)) { - try { - $this->db->query(" - INSERT INTO ".$this->options['data_table']." (".$this->options['data2structure'].",".implode(",",$fields).") - SELECT ".$iid.",".implode(",",$fields)." FROM ".$this->options['data_table']." WHERE ".$this->options['data2structure']." = ".$id[$this->options['data2structure']]." - ON DUPLICATE KEY UPDATE ".$update_fields." - "); - } - catch(Exception $e) { - $this->rm($iid); - $this->reconstruct(); - throw new Exception('Could not update data after copy'); - } - } - - // manually fix all parent_ids and copy all data - $new_nodes = $this->db->get(" - SELECT * FROM ".$this->options['structure_table']." - WHERE ".$this->options['structure']["left"]." > ".$ref_lft." AND ".$this->options['structure']["right"]." < ".($ref_lft + $width - 1)." AND ".$this->options['structure']["id"]." != ".$iid." - ORDER BY ".$this->options['structure']["left"]." - "); - $parents = array(); - foreach($new_nodes as $node) { - if(!isset($parents[$node[$this->options['structure']["left"]]])) { $parents[$node[$this->options['structure']["left"]]] = $iid; } - for($i = $node[$this->options['structure']["left"]] + 1; $i < $node[$this->options['structure']["right"]]; $i++) { - $parents[$i] = $node[$this->options['structure']["id"]]; - } - } - $sql = array(); - foreach($new_nodes as $k => $node) { - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["parent_id"]." = ".$parents[$node[$this->options['structure']["left"]]]." - WHERE ".$this->options['structure']["id"]." = ".(int)$node[$this->options['structure']["id"]]." - "; - if(count($fields)) { - $up = ""; - foreach($fields as $f) - $sql[] = " - INSERT INTO ".$this->options['data_table']." (".$this->options['data2structure'].",".implode(",",$fields).") - SELECT ".(int)$node[$this->options['structure']["id"]].",".implode(",",$fields)." FROM ".$this->options['data_table']." - WHERE ".$this->options['data2structure']." = ".$old_nodes[$k][$this->options['structure']['id']]." - ON DUPLICATE KEY UPDATE ".$update_fields." - "; - } - } - //var_dump($sql); - foreach($sql as $k => $v) { - try { - $this->db->query($v); - } catch(Exception $e) { - $this->rm($iid); - $this->reconstruct(); - throw new Exception('Error copying'); - } - } - return $iid; - } - - public function rm($id) { - $id = (int)$id; - if(!$id || $id === 1) { throw new Exception('Could not create inside roots'); } - $data = $this->get_node($id, array('with_children' => true, 'deep_children' => true)); - $lft = (int)$data[$this->options['structure']["left"]]; - $rgt = (int)$data[$this->options['structure']["right"]]; - $pid = (int)$data[$this->options['structure']["parent_id"]]; - $pos = (int)$data[$this->options['structure']["position"]]; - $dif = $rgt - $lft + 1; - - $sql = array(); - // deleting node and its children from structure - $sql[] = " - DELETE FROM ".$this->options['structure_table']." - WHERE ".$this->options['structure']["left"]." >= ".(int)$lft." AND ".$this->options['structure']["right"]." <= ".(int)$rgt." - "; - // shift left indexes of nodes right of the node - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["left"]." = ".$this->options['structure']["left"]." - ".(int)$dif." - WHERE ".$this->options['structure']["left"]." > ".(int)$rgt." - "; - // shift right indexes of nodes right of the node and the node's parents - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["right"]." = ".$this->options['structure']["right"]." - ".(int)$dif." - WHERE ".$this->options['structure']["right"]." > ".(int)$lft." - "; - // Update position of siblings below the deleted node - $sql[] = " - UPDATE ".$this->options['structure_table']." - SET ".$this->options['structure']["position"]." = ".$this->options['structure']["position"]." - 1 - WHERE ".$this->options['structure']["parent_id"]." = ".$pid." AND ".$this->options['structure']["position"]." > ".(int)$pos." - "; - // delete from data table - if($this->options['data_table']) { - $tmp = array(); - $tmp[] = (int)$data['id']; - if($data['children'] && is_array($data['children'])) { - foreach($data['children'] as $v) { - $tmp[] = (int)$v['id']; - } - } - $sql[] = "DELETE FROM ".$this->options['data_table']." WHERE ".$this->options['data2structure']." IN (".implode(',',$tmp).")"; - } - - foreach($sql as $v) { - try { - $this->db->query($v); - } catch(Exception $e) { - $this->reconstruct(); - throw new Exception('Could not remove'); - } - } - return true; - } - - public function rn($id, $data) { - if(!(int)$this->db->one('SELECT 1 AS res FROM '.$this->options['structure_table'].' WHERE '.$this->options['structure']['id'].' = '.(int)$id)) { - throw new Exception('Could not rename non-existing node'); - } - $tmp = array(); - foreach($this->options['data'] as $v) { - if(isset($data[$v])) { - $tmp[$v] = $data[$v]; - } - } - if(count($tmp)) { - $tmp[$this->options['data2structure']] = $id; - $sql = " - INSERT INTO - ".$this->options['data_table']." (".implode(',', array_keys($tmp)).") - VALUES(?".str_repeat(',?', count($tmp) - 1).") - ON DUPLICATE KEY UPDATE - ".implode(' = ?, ', array_keys($tmp))." = ?"; - $par = array_merge(array_values($tmp), array_values($tmp)); - try { - $this->db->query($sql, $par); - } - catch(Exception $e) { - throw new Exception('Could not rename'); - } - } - return true; - } - - public function analyze($get_errors = false) { - $report = array(); - if((int)$this->db->one("SELECT COUNT(".$this->options['structure']["id"].") AS res FROM ".$this->options['structure_table']." WHERE ".$this->options['structure']["parent_id"]." = 0") !== 1) { - $report[] = "No or more than one root node."; - } - if((int)$this->db->one("SELECT ".$this->options['structure']["left"]." AS res FROM ".$this->options['structure_table']." WHERE ".$this->options['structure']["parent_id"]." = 0") !== 1) { - $report[] = "Root node's left index is not 1."; - } - if((int)$this->db->one(" - SELECT - COUNT(".$this->options['structure']['id'].") AS res - FROM ".$this->options['structure_table']." s - WHERE - ".$this->options['structure']["parent_id"]." != 0 AND - (SELECT COUNT(".$this->options['structure']['id'].") FROM ".$this->options['structure_table']." WHERE ".$this->options['structure']["id"]." = s.".$this->options['structure']["parent_id"].") = 0") > 0 - ) { - $report[] = "Missing parents."; - } - if( - (int)$this->db->one("SELECT MAX(".$this->options['structure']["right"].") AS res FROM ".$this->options['structure_table']) / 2 != - (int)$this->db->one("SELECT COUNT(".$this->options['structure']["id"].") AS res FROM ".$this->options['structure_table']) - ) { - $report[] = "Right index does not match node count."; - } - if( - (int)$this->db->one("SELECT COUNT(DISTINCT ".$this->options['structure']["right"].") AS res FROM ".$this->options['structure_table']) != - (int)$this->db->one("SELECT COUNT(DISTINCT ".$this->options['structure']["left"].") AS res FROM ".$this->options['structure_table']) - ) { - $report[] = "Duplicates in nested set."; - } - if( - (int)$this->db->one("SELECT COUNT(DISTINCT ".$this->options['structure']["id"].") AS res FROM ".$this->options['structure_table']) != - (int)$this->db->one("SELECT COUNT(DISTINCT ".$this->options['structure']["left"].") AS res FROM ".$this->options['structure_table']) - ) { - $report[] = "Left indexes not unique."; - } - if( - (int)$this->db->one("SELECT COUNT(DISTINCT ".$this->options['structure']["id"].") AS res FROM ".$this->options['structure_table']) != - (int)$this->db->one("SELECT COUNT(DISTINCT ".$this->options['structure']["right"].") AS res FROM ".$this->options['structure_table']) - ) { - $report[] = "Right indexes not unique."; - } - if( - (int)$this->db->one(" - SELECT - s1.".$this->options['structure']["id"]." AS res - FROM ".$this->options['structure_table']." s1, ".$this->options['structure_table']." s2 - WHERE - s1.".$this->options['structure']['id']." != s2.".$this->options['structure']['id']." AND - s1.".$this->options['structure']['left']." = s2.".$this->options['structure']['right']." - LIMIT 1") - ) { - $report[] = "Nested set - matching left and right indexes."; - } - if( - (int)$this->db->one(" - SELECT - ".$this->options['structure']["id"]." AS res - FROM ".$this->options['structure_table']." s - WHERE - ".$this->options['structure']['position']." >= ( - SELECT - COUNT(".$this->options['structure']["id"].") - FROM ".$this->options['structure_table']." - WHERE ".$this->options['structure']['parent_id']." = s.".$this->options['structure']['parent_id']." - ) - LIMIT 1") || - (int)$this->db->one(" - SELECT - s1.".$this->options['structure']["id"]." AS res - FROM ".$this->options['structure_table']." s1, ".$this->options['structure_table']." s2 - WHERE - s1.".$this->options['structure']['id']." != s2.".$this->options['structure']['id']." AND - s1.".$this->options['structure']['parent_id']." = s2.".$this->options['structure']['parent_id']." AND - s1.".$this->options['structure']['position']." = s2.".$this->options['structure']['position']." - LIMIT 1") - ) { - $report[] = "Positions not correct."; - } - if((int)$this->db->one(" - SELECT - COUNT(".$this->options['structure']["id"].") FROM ".$this->options['structure_table']." s - WHERE - ( - SELECT - COUNT(".$this->options['structure']["id"].") - FROM ".$this->options['structure_table']." - WHERE - ".$this->options['structure']["right"]." < s.".$this->options['structure']["right"]." AND - ".$this->options['structure']["left"]." > s.".$this->options['structure']["left"]." AND - ".$this->options['structure']["level"]." = s.".$this->options['structure']["level"]." + 1 - ) != - ( - SELECT - COUNT(*) - FROM ".$this->options['structure_table']." - WHERE - ".$this->options['structure']["parent_id"]." = s.".$this->options['structure']["id"]." - )") - ) { - $report[] = "Adjacency and nested set do not match."; - } - if( - $this->options['data_table'] && - (int)$this->db->one(" - SELECT - COUNT(".$this->options['structure']["id"].") AS res - FROM ".$this->options['structure_table']." s - WHERE - (SELECT COUNT(".$this->options['data2structure'].") FROM ".$this->options['data_table']." WHERE ".$this->options['data2structure']." = s.".$this->options['structure']["id"].") = 0 - ") - ) { - $report[] = "Missing records in data table."; - } - if( - $this->options['data_table'] && - (int)$this->db->one(" - SELECT - COUNT(".$this->options['data2structure'].") AS res - FROM ".$this->options['data_table']." s - WHERE - (SELECT COUNT(".$this->options['structure']["id"].") FROM ".$this->options['structure_table']." WHERE ".$this->options['structure']["id"]." = s.".$this->options['data2structure'].") = 0 - ") - ) { - $report[] = "Dangling records in data table."; - } - return $get_errors ? $report : count($report) == 0; - } - - public function reconstruct($analyze = true) { - if($analyze && $this->analyze()) { return true; } - - if(!$this->db->query("" . - "CREATE TEMPORARY TABLE temp_tree (" . - "".$this->options['structure']["id"]." INTEGER NOT NULL, " . - "".$this->options['structure']["parent_id"]." INTEGER NOT NULL, " . - "". $this->options['structure']["position"]." INTEGER NOT NULL" . - ") " - )) { return false; } - if(!$this->db->query("" . - "INSERT INTO temp_tree " . - "SELECT " . - "".$this->options['structure']["id"].", " . - "".$this->options['structure']["parent_id"].", " . - "".$this->options['structure']["position"]." " . - "FROM ".$this->options['structure_table']."" - )) { return false; } - - if(!$this->db->query("" . - "CREATE TEMPORARY TABLE temp_stack (" . - "".$this->options['structure']["id"]." INTEGER NOT NULL, " . - "".$this->options['structure']["left"]." INTEGER, " . - "".$this->options['structure']["right"]." INTEGER, " . - "".$this->options['structure']["level"]." INTEGER, " . - "stack_top INTEGER NOT NULL, " . - "".$this->options['structure']["parent_id"]." INTEGER, " . - "".$this->options['structure']["position"]." INTEGER " . - ") " - )) { return false; } - - $counter = 2; - if(!$this->db->query("SELECT COUNT(*) FROM temp_tree")) { - return false; - } - $this->db->nextr(); - $maxcounter = (int) $this->db->f(0) * 2; - $currenttop = 1; - if(!$this->db->query("" . - "INSERT INTO temp_stack " . - "SELECT " . - "".$this->options['structure']["id"].", " . - "1, " . - "NULL, " . - "0, " . - "1, " . - "".$this->options['structure']["parent_id"].", " . - "".$this->options['structure']["position"]." " . - "FROM temp_tree " . - "WHERE ".$this->options['structure']["parent_id"]." = 0" - )) { return false; } - if(!$this->db->query("DELETE FROM temp_tree WHERE ".$this->options['structure']["parent_id"]." = 0")) { - return false; - } - - while ($counter <= $maxcounter) { - if(!$this->db->query("" . - "SELECT " . - "temp_tree.".$this->options['structure']["id"]." AS tempmin, " . - "temp_tree.".$this->options['structure']["parent_id"]." AS pid, " . - "temp_tree.".$this->options['structure']["position"]." AS lid " . - "FROM temp_stack, temp_tree " . - "WHERE " . - "temp_stack.".$this->options['structure']["id"]." = temp_tree.".$this->options['structure']["parent_id"]." AND " . - "temp_stack.stack_top = ".$currenttop." " . - "ORDER BY temp_tree.".$this->options['structure']["position"]." ASC LIMIT 1" - )) { return false; } - - if($this->db->nextr()) { - $tmp = $this->db->f("tempmin"); - - $q = "INSERT INTO temp_stack (stack_top, ".$this->options['structure']["id"].", ".$this->options['structure']["left"].", ".$this->options['structure']["right"].", ".$this->options['structure']["level"].", ".$this->options['structure']["parent_id"].", ".$this->options['structure']["position"].") VALUES(".($currenttop + 1).", ".$tmp.", ".$counter.", NULL, ".$currenttop.", ".$this->db->f("pid").", ".$this->db->f("lid").")"; - if(!$this->db->query($q)) { - return false; - } - if(!$this->db->query("DELETE FROM temp_tree WHERE ".$this->options['structure']["id"]." = ".$tmp)) { - return false; - } - $counter++; - $currenttop++; - } - else { - if(!$this->db->query("" . - "UPDATE temp_stack SET " . - "".$this->options['structure']["right"]." = ".$counter.", " . - "stack_top = -stack_top " . - "WHERE stack_top = ".$currenttop - )) { return false; } - $counter++; - $currenttop--; - } - } - - $temp_fields = $this->options['structure']; - unset($temp_fields["parent_id"]); - unset($temp_fields["position"]); - unset($temp_fields["left"]); - unset($temp_fields["right"]); - unset($temp_fields["level"]); - if(count($temp_fields) > 1) { - if(!$this->db->query("" . - "CREATE TEMPORARY TABLE temp_tree2 " . - "SELECT ".implode(", ", $temp_fields)." FROM ".$this->options['structure_table']." " - )) { return false; } - } - if(!$this->db->query("TRUNCATE TABLE ".$this->options['structure_table']."")) { - return false; - } - if(!$this->db->query("" . - "INSERT INTO ".$this->options['structure_table']." (" . - "".$this->options['structure']["id"].", " . - "".$this->options['structure']["parent_id"].", " . - "".$this->options['structure']["position"].", " . - "".$this->options['structure']["left"].", " . - "".$this->options['structure']["right"].", " . - "".$this->options['structure']["level"]." " . - ") " . - "SELECT " . - "".$this->options['structure']["id"].", " . - "".$this->options['structure']["parent_id"].", " . - "".$this->options['structure']["position"].", " . - "".$this->options['structure']["left"].", " . - "".$this->options['structure']["right"].", " . - "".$this->options['structure']["level"]." " . - "FROM temp_stack " . - "ORDER BY ".$this->options['structure']["id"]."" - )) { - return false; - } - if(count($temp_fields) > 1) { - $sql = "" . - "UPDATE ".$this->options['structure_table']." v, temp_tree2 SET v.".$this->options['structure']["id"]." = v.".$this->options['structure']["id"]." "; - foreach($temp_fields as $k => $v) { - if($k == "id") continue; - $sql .= ", v.".$v." = temp_tree2.".$v." "; - } - $sql .= " WHERE v.".$this->options['structure']["id"]." = temp_tree2.".$this->options['structure']["id"]." "; - if(!$this->db->query($sql)) { - return false; - } - } - // fix positions - $nodes = $this->db->get("SELECT ".$this->options['structure']['id'].", ".$this->options['structure']['parent_id']." FROM ".$this->options['structure_table']." ORDER BY ".$this->options['structure']['parent_id'].", ".$this->options['structure']['position']); - $last_parent = false; - $last_position = false; - foreach($nodes as $node) { - if((int)$node[$this->options['structure']['parent_id']] !== $last_parent) { - $last_position = 0; - $last_parent = (int)$node[$this->options['structure']['parent_id']]; - } - $this->db->query("UPDATE ".$this->options['structure_table']." SET ".$this->options['structure']['position']." = ".$last_position." WHERE ".$this->options['structure']['id']." = ".(int)$node[$this->options['structure']['id']]); - $last_position++; - } - if($this->options['data_table'] != $this->options['structure_table']) { - // fix missing data records - $this->db->query(" - INSERT INTO - ".$this->options['data_table']." (".implode(',',$this->options['data']).") - SELECT ".$this->options['structure']['id']." ".str_repeat(", ".$this->options['structure']['id'], count($this->options['data']) - 1)." - FROM ".$this->options['structure_table']." s - WHERE (SELECT COUNT(".$this->options['data2structure'].") FROM ".$this->options['data_table']." WHERE ".$this->options['data2structure']." = s.".$this->options['structure']['id'].") = 0 " - ); - // remove dangling data records - $this->db->query(" - DELETE FROM - ".$this->options['data_table']." - WHERE - (SELECT COUNT(".$this->options['structure']['id'].") FROM ".$this->options['structure_table']." WHERE ".$this->options['structure']['id']." = ".$this->options['data_table'].".".$this->options['data2structure'].") = 0 - "); - } - return true; - } - - public function res($data = array()) { - if(!$this->db->query("TRUNCATE TABLE ".$this->options['structure_table'])) { return false; } - if(!$this->db->query("TRUNCATE TABLE ".$this->options['data_table'])) { return false; } - $sql = "INSERT INTO ".$this->options['structure_table']." (".implode(",", $this->options['structure']).") VALUES (?".str_repeat(',?', count($this->options['structure']) - 1).")"; - $par = array(); - foreach($this->options['structure'] as $k => $v) { - switch($k) { - case 'id': - $par[] = null; - break; - case 'left': - $par[] = 1; - break; - case 'right': - $par[] = 2; - break; - case 'level': - $par[] = 0; - break; - case 'parent_id': - $par[] = 0; - break; - case 'position': - $par[] = 0; - break; - default: - $par[] = null; - } - } - if(!$this->db->query($sql, $par)) { return false; } - $id = $this->db->insert_id(); - foreach($this->options['structure'] as $k => $v) { - if(!isset($data[$k])) { $data[$k] = null; } - } - return $this->rn($id, $data); - } - - public function dump() { - $nodes = $this->db->get(" - SELECT - s.".implode(", s.", $this->options['structure']).", - d.".implode(", d.", $this->options['data'])." - FROM - ".$this->options['structure_table']." s, - ".$this->options['data_table']." d - WHERE - s.".$this->options['structure']['id']." = d.".$this->options['data2structure']." - ORDER BY ".$this->options['structure']["left"] - ); - echo "\n\n"; - foreach($nodes as $node) { - echo str_repeat(" ",(int)$node[$this->options['structure']["level"]] * 2); - echo $node[$this->options['structure']["id"]]." ".$node["nm"]." (".$node[$this->options['structure']["left"]].",".$node[$this->options['structure']["right"]].",".$node[$this->options['structure']["level"]].",".$node[$this->options['structure']["parent_id"]].",".$node[$this->options['structure']["position"]].")" . "\n"; - } - echo str_repeat("-",40); - echo "\n\n"; - } -} \ No newline at end of file diff --git a/Sources/webAduc/www/sitebrowser/data.sql b/Sources/webAduc/www/sitebrowser/data.sql deleted file mode 100644 index 5888904..0000000 --- a/Sources/webAduc/www/sitebrowser/data.sql +++ /dev/null @@ -1,91 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.0.1 --- http://www.phpmyadmin.net --- --- Host: 127.0.0.1 --- Generation Time: Apr 15, 2014 at 05:14 PM --- Server version: 5.5.27 --- PHP Version: 5.4.7 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - --- --- Database: `test` --- - --- -------------------------------------------------------- - --- --- Table structure for table `tree_data` --- - -CREATE TABLE IF NOT EXISTS `tree_data` ( - `id` int(10) unsigned NOT NULL, - `nm` varchar(255) CHARACTER SET utf8 NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- --- Dumping data for table `tree_data` --- - -INSERT INTO `tree_data` (`id`, `nm`) VALUES -(1, 'root'), -(1063, 'Node 12'), -(1064, 'Node 2'), -(1065, 'Node 3'), -(1066, 'Node 4'), -(1067, 'Node 5'), -(1068, 'Node 6'), -(1069, 'Node 7'), -(1070, 'Node 8'), -(1071, 'Node 9'), -(1072, 'Node 9'), -(1073, 'Node 9'), -(1074, 'Node 9'), -(1075, 'Node 7'), -(1076, 'Node 8'), -(1077, 'Node 9'), -(1078, 'Node 9'), -(1079, 'Node 9'); - --- -------------------------------------------------------- - --- --- Table structure for table `tree_struct` --- - -CREATE TABLE IF NOT EXISTS `tree_struct` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `lft` int(10) unsigned NOT NULL, - `rgt` int(10) unsigned NOT NULL, - `lvl` int(10) unsigned NOT NULL, - `pid` int(10) unsigned NOT NULL, - `pos` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1083 ; - --- --- Dumping data for table `tree_struct` --- - -INSERT INTO `tree_struct` (`id`, `lft`, `rgt`, `lvl`, `pid`, `pos`) VALUES -(1, 1, 36, 0, 0, 0), -(1063, 2, 31, 1, 1, 0), -(1064, 3, 30, 2, 1063, 0), -(1065, 4, 29, 3, 1064, 0), -(1066, 5, 28, 4, 1065, 0), -(1067, 6, 19, 5, 1066, 0), -(1068, 7, 18, 6, 1067, 0), -(1069, 8, 17, 7, 1068, 0), -(1070, 9, 16, 8, 1069, 0), -(1071, 12, 13, 9, 1070, 1), -(1072, 14, 15, 9, 1070, 2), -(1073, 10, 11, 9, 1070, 0), -(1074, 32, 35, 1, 1, 1), -(1075, 20, 27, 5, 1066, 1), -(1076, 21, 26, 6, 1075, 0), -(1077, 24, 25, 7, 1076, 1), -(1078, 33, 34, 2, 1074, 0), -(1079, 22, 23, 7, 1076, 0); diff --git a/Sources/webAduc/www/sitebrowser/index.php b/Sources/webAduc/www/sitebrowser/index.php deleted file mode 100644 index 89657e2..0000000 --- a/Sources/webAduc/www/sitebrowser/index.php +++ /dev/null @@ -1,172 +0,0 @@ - 'tree_struct', 'data_table' => 'tree_data', 'data' => array('nm'))); - try { - $rslt = null; - switch($_GET['operation']) { - case 'analyze': - var_dump($fs->analyze(true)); - die(); - break; - case 'get_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? (int)$_GET['id'] : 0; - $temp = $fs->get_children($node); - $rslt = array(); - foreach($temp as $v) { - $rslt[] = array('id' => $v['id'], 'text' => $v['nm'], 'children' => ($v['rgt'] - $v['lft'] > 1)); - } - break; - case "get_content": - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? $_GET['id'] : 0; - $node = explode(':', $node); - if(count($node) > 1) { - $rslt = array('content' => 'Multiple selected'); - } - else { - $temp = $fs->get_node((int)$node[0], array('with_path' => true)); - $rslt = array('content' => 'Selected: /' . implode('/',array_map(function ($v) { return $v['nm']; }, $temp['path'])). '/'.$temp['nm']); - } - break; - case 'create_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? (int)$_GET['id'] : 0; - $temp = $fs->mk($node, isset($_GET['position']) ? (int)$_GET['position'] : 0, array('nm' => isset($_GET['text']) ? $_GET['text'] : 'New node')); - $rslt = array('id' => $temp); - break; - case 'rename_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? (int)$_GET['id'] : 0; - $rslt = $fs->rn($node, array('nm' => isset($_GET['text']) ? $_GET['text'] : 'Renamed node')); - break; - case 'delete_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? (int)$_GET['id'] : 0; - $rslt = $fs->rm($node); - break; - case 'move_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? (int)$_GET['id'] : 0; - $parn = isset($_GET['parent']) && $_GET['parent'] !== '#' ? (int)$_GET['parent'] : 0; - $rslt = $fs->mv($node, $parn, isset($_GET['position']) ? (int)$_GET['position'] : 0); - break; - case 'copy_node': - $node = isset($_GET['id']) && $_GET['id'] !== '#' ? (int)$_GET['id'] : 0; - $parn = isset($_GET['parent']) && $_GET['parent'] !== '#' ? (int)$_GET['parent'] : 0; - $rslt = $fs->cp($node, $parn, isset($_GET['position']) ? (int)$_GET['position'] : 0); - break; - default: - throw new Exception('Unsupported operation: ' . $_GET['operation']); - break; - } - header('Content-Type: application/json; charset=utf-8'); - echo json_encode($rslt); - } - catch (Exception $e) { - header($_SERVER["SERVER_PROTOCOL"] . ' 500 Server Error'); - header('Status: 500 Server Error'); - echo $e->getMessage(); - } - die(); -} -?> - - - - - - Title - - - - - -
    -
    -
    - - - -
    Select a node from the tree.
    -
    -
    - - - - - - diff --git a/Sources/webAduc/www/src/ajax.php b/Sources/webAduc/www/src/ajax.php index f1f4734..5aca809 100644 --- a/Sources/webAduc/www/src/ajax.php +++ b/Sources/webAduc/www/src/ajax.php @@ -1,10 +1,6 @@ i, .context-menu-icon.context-menu-icon--fa5.context-menu-hover > svg { + color: #fff; +} +.context-menu-icon.context-menu-icon--fa5.context-menu-disabled i, .context-menu-icon.context-menu-icon--fa5.context-menu-disabled svg { + color: #bbb; +} + +.context-menu-list { + position: absolute; + display: inline-block; + min-width: 13em; + max-width: 26em; + padding: .25em 0; + margin: .3em; + font-family: inherit; + font-size: inherit; + list-style-type: none; + background: #fff; + border: 1px solid #bebebe; + border-radius: .2em; + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5); + box-shadow: 0 2px 5px rgba(0, 0, 0, .5); +} + +.context-menu-item { + position: relative; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + padding: .2em 2em; + color: #2f2f2f; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; +} + +.context-menu-separator { + padding: 0; + margin: .35em 0; + border-bottom: 1px solid #e6e6e6; +} + +.context-menu-item > label > input, +.context-menu-item > label > textarea { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.context-menu-item.context-menu-hover { + color: #fff; + cursor: pointer; + background-color: #2980b9; +} + +.context-menu-item.context-menu-disabled { + color: #bbb; + cursor: default; + background-color: #fff; +} + +.context-menu-input.context-menu-hover { + color: #2f2f2f; + cursor: default; +} + +.context-menu-submenu:after { + position: absolute; + top: 50%; + right: .5em; + z-index: 1; + width: 0; + height: 0; + content: ''; + border-color: transparent transparent transparent #2f2f2f; + border-style: solid; + border-width: .25em 0 .25em .25em; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} + +/** + * Inputs + */ +.context-menu-item.context-menu-input { + padding: .3em .6em; +} + +/* vertically align inside labels */ +.context-menu-input > label > * { + vertical-align: top; +} + +/* position checkboxes and radios as icons */ +.context-menu-input > label > input[type="checkbox"], +.context-menu-input > label > input[type="radio"] { + position: relative; + top: .12em; + margin-right: .4em; +} + +.context-menu-input > label { + margin: 0; +} + +.context-menu-input > label, +.context-menu-input > label > input[type="text"], +.context-menu-input > label > textarea, +.context-menu-input > label > select { + display: block; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.context-menu-input > label > textarea { + height: 7em; +} + +.context-menu-item > .context-menu-list { + top: .3em; + /* re-positioned by js */ + right: -.3em; + display: none; +} + +.context-menu-item.context-menu-visible > .context-menu-list { + display: block; +} + +.context-menu-accesskey { + text-decoration: underline; +} diff --git a/Sources/webAduc/www/src/css/fontawesome.min.css b/Sources/webAduc/www/src/css/fontawesome.min.css new file mode 100644 index 0000000..8e36e25 --- /dev/null +++ b/Sources/webAduc/www/src/css/fontawesome.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file diff --git a/Sources/webAduc/www/src/fonts/context-menu-icons.eot b/Sources/webAduc/www/src/fonts/context-menu-icons.eot new file mode 100644 index 0000000..63f2b7e Binary files /dev/null and b/Sources/webAduc/www/src/fonts/context-menu-icons.eot differ diff --git a/Sources/webAduc/www/src/fonts/context-menu-icons.ttf b/Sources/webAduc/www/src/fonts/context-menu-icons.ttf new file mode 100644 index 0000000..fe7f51a Binary files /dev/null and b/Sources/webAduc/www/src/fonts/context-menu-icons.ttf differ diff --git a/Sources/webAduc/www/src/fonts/context-menu-icons.woff b/Sources/webAduc/www/src/fonts/context-menu-icons.woff new file mode 100644 index 0000000..6b56bec Binary files /dev/null and b/Sources/webAduc/www/src/fonts/context-menu-icons.woff differ diff --git a/Sources/webAduc/www/src/javascript/contextMenu.js b/Sources/webAduc/www/src/javascript/contextMenu.js new file mode 100644 index 0000000..9979dad --- /dev/null +++ b/Sources/webAduc/www/src/javascript/contextMenu.js @@ -0,0 +1,2128 @@ +/** + * jQuery contextMenu v2.7.1 - Plugin for simple contextMenu handling + * + * Version: v2.7.1 + * + * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF) + * Web: http://swisnl.github.io/jQuery-contextMenu/ + * + * Copyright (c) 2011-2018 SWIS BV and contributors + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * + * Date: 2018-11-29T10:56:47.758Z + */ + +// jscs:disable +/* jshint ignore:start */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node / CommonJS + factory(require('jquery')); + } else { + // Browser globals. + factory(jQuery); + } +})(function ($) { + + 'use strict'; + + // TODO: - + // ARIA stuff: menuitem, menuitemcheckbox und menuitemradio + // create structure if $.support[htmlCommand || htmlMenuitem] and !opt.disableNative + + // determine html5 compatibility + $.support.htmlMenuitem = ('HTMLMenuItemElement' in window); + $.support.htmlCommand = ('HTMLCommandElement' in window); + $.support.eventSelectstart = ('onselectstart' in document.documentElement); + /* // should the need arise, test for css user-select + $.support.cssUserSelect = (function(){ + var t = false, + e = document.createElement('div'); + + $.each('Moz|Webkit|Khtml|O|ms|Icab|'.split('|'), function(i, prefix) { + var propCC = prefix + (prefix ? 'U' : 'u') + 'serSelect', + prop = (prefix ? ('-' + prefix.toLowerCase() + '-') : '') + 'user-select'; + + e.style.cssText = prop + ': text;'; + if (e.style[propCC] == 'text') { + t = true; + return false; + } + + return true; + }); + + return t; + })(); + */ + + + if (!$.ui || !$.widget) { + // duck punch $.cleanData like jQueryUI does to get that remove event + $.cleanData = (function (orig) { + return function (elems) { + var events, elem, i; + for (i = 0; elems[i] != null; i++) { + elem = elems[i]; + try { + // Only trigger remove when necessary to save time + events = $._data(elem, 'events'); + if (events && events.remove) { + $(elem).triggerHandler('remove'); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch (e) { + } + } + orig(elems); + }; + })($.cleanData); + } + /* jshint ignore:end */ + // jscs:enable + + var // currently active contextMenu trigger + $currentTrigger = null, + // is contextMenu initialized with at least one menu? + initialized = false, + // window handle + $win = $(window), + // number of registered menus + counter = 0, + // mapping selector to namespace + namespaces = {}, + // mapping namespace to options + menus = {}, + // custom command type handlers + types = {}, + // default values + defaults = { + // selector of contextMenu trigger + selector: null, + // where to append the menu to + appendTo: null, + // method to trigger context menu ["right", "left", "hover"] + trigger: 'right', + // hide menu when mouse leaves trigger / menu elements + autoHide: false, + // ms to wait before showing a hover-triggered context menu + delay: 200, + // flag denoting if a second trigger should simply move (true) or rebuild (false) an open menu + // as long as the trigger happened on one of the trigger-element's child nodes + reposition: true, + // Flag denoting if a second trigger should close the menu, as long as + // the trigger happened on one of the trigger-element's child nodes. + // This overrides the reposition option. + hideOnSecondTrigger: false, + + //ability to select submenu + selectableSubMenu: false, + + // Default classname configuration to be able avoid conflicts in frameworks + classNames: { + hover: 'context-menu-hover', // Item hover + disabled: 'context-menu-disabled', // Item disabled + visible: 'context-menu-visible', // Item visible + notSelectable: 'context-menu-not-selectable', // Item not selectable + + icon: 'context-menu-icon', + iconEdit: 'context-menu-icon-edit', + iconCut: 'context-menu-icon-cut', + iconCopy: 'context-menu-icon-copy', + iconPaste: 'context-menu-icon-paste', + iconDelete: 'context-menu-icon-delete', + iconAdd: 'context-menu-icon-add', + iconQuit: 'context-menu-icon-quit', + iconLoadingClass: 'context-menu-icon-loading' + }, + + // determine position to show menu at + determinePosition: function ($menu) { + // position to the lower middle of the trigger element + if ($.ui && $.ui.position) { + // .position() is provided as a jQuery UI utility + // (...and it won't work on hidden elements) + $menu.css('display', 'block').position({ + my: 'center top', + at: 'center bottom', + of: this, + offset: '0 5', + collision: 'fit' + }).css('display', 'none'); + } else { + // determine contextMenu position + var offset = this.offset(); + offset.top += this.outerHeight(); + offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2; + $menu.css(offset); + } + }, + // position menu + position: function (opt, x, y) { + var offset; + // determine contextMenu position + if (!x && !y) { + opt.determinePosition.call(this, opt.$menu); + return; + } else if (x === 'maintain' && y === 'maintain') { + // x and y must not be changed (after re-show on command click) + offset = opt.$menu.position(); + } else { + // x and y are given (by mouse event) + var offsetParentOffset = opt.$menu.offsetParent().offset(); + offset = {top: y - offsetParentOffset.top, left: x -offsetParentOffset.left}; + } + + // correct offset if viewport demands it + var bottom = $win.scrollTop() + $win.height(), + right = $win.scrollLeft() + $win.width(), + height = opt.$menu.outerHeight(), + width = opt.$menu.outerWidth(); + + if (offset.top + height > bottom) { + offset.top -= height; + } + + if (offset.top < 0) { + offset.top = 0; + } + + if (offset.left + width > right) { + offset.left -= width; + } + + if (offset.left < 0) { + offset.left = 0; + } + + opt.$menu.css(offset); + }, + // position the sub-menu + positionSubmenu: function ($menu) { + if (typeof $menu === 'undefined') { + // When user hovers over item (which has sub items) handle.focusItem will call this. + // but the submenu does not exist yet if opt.items is a promise. just return, will + // call positionSubmenu after promise is completed. + return; + } + if ($.ui && $.ui.position) { + // .position() is provided as a jQuery UI utility + // (...and it won't work on hidden elements) + $menu.css('display', 'block').position({ + my: 'left top-5', + at: 'right top', + of: this, + collision: 'flipfit fit' + }).css('display', ''); + } else { + // determine contextMenu position + var offset = { + top: -9, + left: this.outerWidth() - 5 + }; + $menu.css(offset); + } + }, + // offset to add to zIndex + zIndex: 1, + // show hide animation settings + animation: { + duration: 50, + show: 'slideDown', + hide: 'slideUp' + }, + // events + events: { + preShow: $.noop, + show: $.noop, + hide: $.noop, + activated: $.noop + }, + // default callback + callback: null, + // list of contextMenu items + items: {} + }, + // mouse position for hover activation + hoveract = { + timer: null, + pageX: null, + pageY: null + }, + // determine zIndex + zindex = function ($t) { + var zin = 0, + $tt = $t; + + while (true) { + zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0); + $tt = $tt.parent(); + if (!$tt || !$tt.length || 'html body'.indexOf($tt.prop('nodeName').toLowerCase()) > -1) { + break; + } + } + return zin; + }, + // event handlers + handle = { + // abort anything + abortevent: function (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + }, + // contextmenu show dispatcher + contextmenu: function (e) { + var $this = $(this); + + //Show browser context-menu when preShow returns false + if (e.data.events.preShow($this,e) === false) { + return; + } + + // disable actual context-menu if we are using the right mouse button as the trigger + if (e.data.trigger === 'right') { + e.preventDefault(); + e.stopImmediatePropagation(); + } + + // abort native-triggered events unless we're triggering on right click + if ((e.data.trigger !== 'right' && e.data.trigger !== 'demand') && e.originalEvent) { + return; + } + + // Let the current contextmenu decide if it should show or not based on its own trigger settings + if (typeof e.mouseButton !== 'undefined' && e.data) { + if (!(e.data.trigger === 'left' && e.mouseButton === 0) && !(e.data.trigger === 'right' && e.mouseButton === 2)) { + // Mouse click is not valid. + return; + } + } + + // abort event if menu is visible for this trigger + if ($this.hasClass('context-menu-active')) { + return; + } + + if (!$this.hasClass('context-menu-disabled')) { + // theoretically need to fire a show event at + // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus + // var evt = jQuery.Event("show", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this }); + // e.data.$menu.trigger(evt); + + $currentTrigger = $this; + if (e.data.build) { + var built = e.data.build($currentTrigger, e); + // abort if build() returned false + if (built === false) { + return; + } + + // dynamically build menu on invocation + e.data = $.extend(true, {}, defaults, e.data, built || {}); + + // abort if there are no items to display + if (!e.data.items || $.isEmptyObject(e.data.items)) { + // Note: jQuery captures and ignores errors from event handlers + if (window.console) { + (console.error || console.log).call(console, 'No items specified to show in contextMenu'); + } + + throw new Error('No Items specified'); + } + + // backreference for custom command type creation + e.data.$trigger = $currentTrigger; + + op.create(e.data); + } + op.show.call($this, e.data, e.pageX, e.pageY); + } + }, + // contextMenu left-click trigger + click: function (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + $(this).trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY})); + }, + // contextMenu right-click trigger + mousedown: function (e) { + // register mouse down + var $this = $(this); + + // hide any previous menus + if ($currentTrigger && $currentTrigger.length && !$currentTrigger.is($this)) { + $currentTrigger.data('contextMenu').$menu.trigger('contextmenu:hide'); + } + + // activate on right click + if (e.button === 2) { + $currentTrigger = $this.data('contextMenuActive', true); + } + }, + // contextMenu right-click trigger + mouseup: function (e) { + // show menu + var $this = $(this); + if ($this.data('contextMenuActive') && $currentTrigger && $currentTrigger.length && $currentTrigger.is($this) && !$this.hasClass('context-menu-disabled')) { + e.preventDefault(); + e.stopImmediatePropagation(); + $currentTrigger = $this; + $this.trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY})); + } + + $this.removeData('contextMenuActive'); + }, + // contextMenu hover trigger + mouseenter: function (e) { + var $this = $(this), + $related = $(e.relatedTarget), + $document = $(document); + + // abort if we're coming from a menu + if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) { + return; + } + + // abort if a menu is shown + if ($currentTrigger && $currentTrigger.length) { + return; + } + + hoveract.pageX = e.pageX; + hoveract.pageY = e.pageY; + hoveract.data = e.data; + $document.on('mousemove.contextMenuShow', handle.mousemove); + hoveract.timer = setTimeout(function () { + hoveract.timer = null; + $document.off('mousemove.contextMenuShow'); + $currentTrigger = $this; + $this.trigger($.Event('contextmenu', { + data: hoveract.data, + pageX: hoveract.pageX, + pageY: hoveract.pageY + })); + }, e.data.delay); + }, + // contextMenu hover trigger + mousemove: function (e) { + hoveract.pageX = e.pageX; + hoveract.pageY = e.pageY; + }, + // contextMenu hover trigger + mouseleave: function (e) { + // abort if we're leaving for a menu + var $related = $(e.relatedTarget); + if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) { + return; + } + + try { + clearTimeout(hoveract.timer); + } catch (e) { + } + + hoveract.timer = null; + }, + // click on layer to hide contextMenu + layerClick: function (e) { + var $this = $(this), + root = $this.data('contextMenuRoot'), + button = e.button, + x = e.pageX, + y = e.pageY, + fakeClick = x === undefined, + target, + offset; + + e.preventDefault(); + + setTimeout(function () { + // If the click is not real, things break: https://github.com/swisnl/jQuery-contextMenu/issues/132 + if(fakeClick){ + if (root !== null && typeof root !== 'undefined' && root.$menu !== null && typeof root.$menu !== 'undefined') { + root.$menu.trigger('contextmenu:hide'); + } + return; + } + + var $window; + var triggerAction = ((root.trigger === 'left' && button === 0) || (root.trigger === 'right' && button === 2)); + + // find the element that would've been clicked, wasn't the layer in the way + if (document.elementFromPoint && root.$layer) { + root.$layer.hide(); + target = document.elementFromPoint(x - $win.scrollLeft(), y - $win.scrollTop()); + + // also need to try and focus this element if we're in a contenteditable area, + // as the layer will prevent the browser mouse action we want + if (target.isContentEditable) { + var range = document.createRange(), + sel = window.getSelection(); + range.selectNode(target); + range.collapse(true); + sel.removeAllRanges(); + sel.addRange(range); + } + $(target).trigger(e); + root.$layer.show(); + } + + if (root.hideOnSecondTrigger && triggerAction && root.$menu !== null && typeof root.$menu !== 'undefined') { + root.$menu.trigger('contextmenu:hide'); + return; + } + + if (root.reposition && triggerAction) { + if (document.elementFromPoint) { + if (root.$trigger.is(target)) { + root.position.call(root.$trigger, root, x, y); + return; + } + } else { + offset = root.$trigger.offset(); + $window = $(window); + // while this looks kinda awful, it's the best way to avoid + // unnecessarily calculating any positions + offset.top += $window.scrollTop(); + if (offset.top <= e.pageY) { + offset.left += $window.scrollLeft(); + if (offset.left <= e.pageX) { + offset.bottom = offset.top + root.$trigger.outerHeight(); + if (offset.bottom >= e.pageY) { + offset.right = offset.left + root.$trigger.outerWidth(); + if (offset.right >= e.pageX) { + // reposition + root.position.call(root.$trigger, root, x, y); + return; + } + } + } + } + } + } + + if (target && triggerAction) { + root.$trigger.one('contextmenu:hidden', function () { + $(target).contextMenu({x: x, y: y, button: button}); + }); + } + + if (root !== null && typeof root !== 'undefined' && root.$menu !== null && typeof root.$menu !== 'undefined') { + root.$menu.trigger('contextmenu:hide'); + } + }, 50); + }, + // key handled :hover + keyStop: function (e, opt) { + if (!opt.isInput) { + e.preventDefault(); + } + + e.stopPropagation(); + }, + key: function (e) { + + var opt = {}; + + // Only get the data from $currentTrigger if it exists + if ($currentTrigger) { + opt = $currentTrigger.data('contextMenu') || {}; + } + // If the trigger happen on a element that are above the contextmenu do this + if (typeof opt.zIndex === 'undefined') { + opt.zIndex = 0; + } + var targetZIndex = 0; + var getZIndexOfTriggerTarget = function (target) { + if (target.style.zIndex !== '') { + targetZIndex = target.style.zIndex; + } else { + if (target.offsetParent !== null && typeof target.offsetParent !== 'undefined') { + getZIndexOfTriggerTarget(target.offsetParent); + } + else if (target.parentElement !== null && typeof target.parentElement !== 'undefined') { + getZIndexOfTriggerTarget(target.parentElement); + } + } + }; + getZIndexOfTriggerTarget(e.target); + // If targetZIndex is heigher then opt.zIndex dont progress any futher. + // This is used to make sure that if you are using a dialog with a input / textarea / contenteditable div + // and its above the contextmenu it wont steal keys events + if (opt.$menu && parseInt(targetZIndex,10) > parseInt(opt.$menu.css("zIndex"),10)) { + return; + } + switch (e.keyCode) { + case 9: + case 38: // up + handle.keyStop(e, opt); + // if keyCode is [38 (up)] or [9 (tab) with shift] + if (opt.isInput) { + if (e.keyCode === 9 && e.shiftKey) { + e.preventDefault(); + if (opt.$selected) { + opt.$selected.find('input, textarea, select').blur(); + } + if (opt.$menu !== null && typeof opt.$menu !== 'undefined') { + opt.$menu.trigger('prevcommand'); + } + return; + } else if (e.keyCode === 38 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') { + // checkboxes don't capture this key + e.preventDefault(); + return; + } + } else if (e.keyCode !== 9 || e.shiftKey) { + if (opt.$menu !== null && typeof opt.$menu !== 'undefined') { + opt.$menu.trigger('prevcommand'); + } + return; + } + break; + // omitting break; + // case 9: // tab - reached through omitted break; + case 40: // down + handle.keyStop(e, opt); + if (opt.isInput) { + if (e.keyCode === 9) { + e.preventDefault(); + if (opt.$selected) { + opt.$selected.find('input, textarea, select').blur(); + } + if (opt.$menu !== null && typeof opt.$menu !== 'undefined') { + opt.$menu.trigger('nextcommand'); + } + return; + } else if (e.keyCode === 40 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') { + // checkboxes don't capture this key + e.preventDefault(); + return; + } + } else { + if (opt.$menu !== null && typeof opt.$menu !== 'undefined') { + opt.$menu.trigger('nextcommand'); + } + return; + } + break; + + case 37: // left + handle.keyStop(e, opt); + if (opt.isInput || !opt.$selected || !opt.$selected.length) { + break; + } + + if (!opt.$selected.parent().hasClass('context-menu-root')) { + var $parent = opt.$selected.parent().parent(); + opt.$selected.trigger('contextmenu:blur'); + opt.$selected = $parent; + return; + } + break; + + case 39: // right + handle.keyStop(e, opt); + if (opt.isInput || !opt.$selected || !opt.$selected.length) { + break; + } + + var itemdata = opt.$selected.data('contextMenu') || {}; + if (itemdata.$menu && opt.$selected.hasClass('context-menu-submenu')) { + opt.$selected = null; + itemdata.$selected = null; + itemdata.$menu.trigger('nextcommand'); + return; + } + break; + + case 35: // end + case 36: // home + if (opt.$selected && opt.$selected.find('input, textarea, select').length) { + return; + } else { + (opt.$selected && opt.$selected.parent() || opt.$menu) + .children(':not(.' + opt.classNames.disabled + ', .' + opt.classNames.notSelectable + ')')[e.keyCode === 36 ? 'first' : 'last']() + .trigger('contextmenu:focus'); + e.preventDefault(); + return; + } + break; + + case 13: // enter + handle.keyStop(e, opt); + if (opt.isInput) { + if (opt.$selected && !opt.$selected.is('textarea, select')) { + e.preventDefault(); + return; + } + break; + } + if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) { + opt.$selected.trigger('mouseup'); + } + return; + + case 32: // space + case 33: // page up + case 34: // page down + // prevent browser from scrolling down while menu is visible + handle.keyStop(e, opt); + return; + + case 27: // esc + handle.keyStop(e, opt); + if (opt.$menu !== null && typeof opt.$menu !== 'undefined') { + opt.$menu.trigger('contextmenu:hide'); + } + return; + + default: // 0-9, a-z + var k = (String.fromCharCode(e.keyCode)).toUpperCase(); + if (opt.accesskeys && opt.accesskeys[k]) { + // according to the specs accesskeys must be invoked immediately + opt.accesskeys[k].$node.trigger(opt.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup'); + return; + } + break; + } + // pass event to selected item, + // stop propagation to avoid endless recursion + e.stopPropagation(); + if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) { + opt.$selected.trigger(e); + } + }, + // select previous possible command in menu + prevItem: function (e) { + e.stopPropagation(); + var opt = $(this).data('contextMenu') || {}; + var root = $(this).data('contextMenuRoot') || {}; + + // obtain currently selected menu + if (opt.$selected) { + var $s = opt.$selected; + opt = opt.$selected.parent().data('contextMenu') || {}; + opt.$selected = $s; + } + + var $children = opt.$menu.children(), + $prev = !opt.$selected || !opt.$selected.prev().length ? $children.last() : opt.$selected.prev(), + $round = $prev; + + // skip disabled or hidden elements + while ($prev.hasClass(root.classNames.disabled) || $prev.hasClass(root.classNames.notSelectable) || $prev.is(':hidden')) { + if ($prev.prev().length) { + $prev = $prev.prev(); + } else { + $prev = $children.last(); + } + if ($prev.is($round)) { + // break endless loop + return; + } + } + + // leave current + if (opt.$selected) { + handle.itemMouseleave.call(opt.$selected.get(0), e); + } + + // activate next + handle.itemMouseenter.call($prev.get(0), e); + + // focus input + var $input = $prev.find('input, textarea, select'); + if ($input.length) { + $input.focus(); + } + }, + // select next possible command in menu + nextItem: function (e) { + e.stopPropagation(); + var opt = $(this).data('contextMenu') || {}; + var root = $(this).data('contextMenuRoot') || {}; + + // obtain currently selected menu + if (opt.$selected) { + var $s = opt.$selected; + opt = opt.$selected.parent().data('contextMenu') || {}; + opt.$selected = $s; + } + + var $children = opt.$menu.children(), + $next = !opt.$selected || !opt.$selected.next().length ? $children.first() : opt.$selected.next(), + $round = $next; + + // skip disabled + while ($next.hasClass(root.classNames.disabled) || $next.hasClass(root.classNames.notSelectable) || $next.is(':hidden')) { + if ($next.next().length) { + $next = $next.next(); + } else { + $next = $children.first(); + } + if ($next.is($round)) { + // break endless loop + return; + } + } + + // leave current + if (opt.$selected) { + handle.itemMouseleave.call(opt.$selected.get(0), e); + } + + // activate next + handle.itemMouseenter.call($next.get(0), e); + + // focus input + var $input = $next.find('input, textarea, select'); + if ($input.length) { + $input.focus(); + } + }, + // flag that we're inside an input so the key handler can act accordingly + focusInput: function () { + var $this = $(this).closest('.context-menu-item'), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + root.$selected = opt.$selected = $this; + root.isInput = opt.isInput = true; + }, + // flag that we're inside an input so the key handler can act accordingly + blurInput: function () { + var $this = $(this).closest('.context-menu-item'), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + root.isInput = opt.isInput = false; + }, + // :hover on menu + menuMouseenter: function () { + var root = $(this).data().contextMenuRoot; + root.hovering = true; + }, + // :hover on menu + menuMouseleave: function (e) { + var root = $(this).data().contextMenuRoot; + if (root.$layer && root.$layer.is(e.relatedTarget)) { + root.hovering = false; + } + }, + // :hover done manually so key handling is possible + itemMouseenter: function (e) { + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + root.hovering = true; + + // abort if we're re-entering + if (e && root.$layer && root.$layer.is(e.relatedTarget)) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + + // make sure only one item is selected + (opt.$menu ? opt : root).$menu + .children('.' + root.classNames.hover).trigger('contextmenu:blur') + .children('.hover').trigger('contextmenu:blur'); + + if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) { + opt.$selected = null; + return; + } + + + $this.trigger('contextmenu:focus'); + }, + // :hover done manually so key handling is possible + itemMouseleave: function (e) { + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + if (root !== opt && root.$layer && root.$layer.is(e.relatedTarget)) { + if (typeof root.$selected !== 'undefined' && root.$selected !== null) { + root.$selected.trigger('contextmenu:blur'); + } + e.preventDefault(); + e.stopImmediatePropagation(); + root.$selected = opt.$selected = opt.$node; + return; + } + + if(opt && opt.$menu && opt.$menu.hasClass('context-menu-visible')){ + return; + } + + $this.trigger('contextmenu:blur'); + }, + // contextMenu item click + itemClick: function (e) { + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot, + key = data.contextMenuKey, + callback; + + // abort if the key is unknown or disabled or is a menu + if (!opt.items[key] || $this.is('.' + root.classNames.disabled + ', .context-menu-separator, .' + root.classNames.notSelectable) || ($this.is('.context-menu-submenu') && root.selectableSubMenu === false )) { + return; + } + + e.preventDefault(); + e.stopImmediatePropagation(); + + if ($.isFunction(opt.callbacks[key]) && Object.prototype.hasOwnProperty.call(opt.callbacks, key)) { + // item-specific callback + callback = opt.callbacks[key]; + } else if ($.isFunction(root.callback)) { + // default callback + callback = root.callback; + } else { + // no callback, no action + return; + } + + // hide menu if callback doesn't stop that + if (callback.call(root.$trigger, key, root, e) !== false) { + root.$menu.trigger('contextmenu:hide'); + } else if (root.$menu.parent().length) { + op.update.call(root.$trigger, root); + } + }, + // ignore click events on input elements + inputClick: function (e) { + e.stopImmediatePropagation(); + }, + // hide + hideMenu: function (e, data) { + var root = $(this).data('contextMenuRoot'); + op.hide.call(root.$trigger, root, data && data.force); + }, + // focus + focusItem: function (e) { + e.stopPropagation(); + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) { + return; + } + + $this + .addClass([root.classNames.hover, root.classNames.visible].join(' ')) + // select other items and included items + .parent().find('.context-menu-item').not($this) + .removeClass(root.classNames.visible) + .filter('.' + root.classNames.hover) + .trigger('contextmenu:blur'); + + // remember selected + opt.$selected = root.$selected = $this; + + + if(opt && opt.$node && opt.$node.hasClass('context-menu-submenu')){ + opt.$node.addClass(root.classNames.hover); + } + + // position sub-menu - do after show so dumb $.ui.position can keep up + if (opt.$node) { + root.positionSubmenu.call(opt.$node, opt.$menu); + } + }, + // blur + blurItem: function (e) { + e.stopPropagation(); + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + if (opt.autoHide) { // for tablets and touch screens this needs to remain + $this.removeClass(root.classNames.visible); + } + $this.removeClass(root.classNames.hover); + opt.$selected = null; + } + }, + // operations + op = { + show: function (opt, x, y) { + var $trigger = $(this), + css = {}; + + // hide any open menus + $('#context-menu-layer').trigger('mousedown'); + + // backreference for callbacks + opt.$trigger = $trigger; + + // show event + if (opt.events.show.call($trigger, opt) === false) { + $currentTrigger = null; + return; + } + + // create or update context menu + var hasVisibleItems = op.update.call($trigger, opt); + if (hasVisibleItems === false) { + $currentTrigger = null; + return; + } + + // position menu + opt.position.call($trigger, opt, x, y); + + // make sure we're in front + if (opt.zIndex) { + var additionalZValue = opt.zIndex; + // If opt.zIndex is a function, call the function to get the right zIndex. + if (typeof opt.zIndex === 'function') { + additionalZValue = opt.zIndex.call($trigger, opt); + } + css.zIndex = zindex($trigger) + additionalZValue; + } + + // add layer + op.layer.call(opt.$menu, opt, css.zIndex); + + // adjust sub-menu zIndexes + opt.$menu.find('ul').css('zIndex', css.zIndex + 1); + + // position and show context menu + opt.$menu.css(css)[opt.animation.show](opt.animation.duration, function () { + $trigger.trigger('contextmenu:visible'); + + op.activated(opt); + opt.events.activated(opt); + }); + // make options available and set state + $trigger + .data('contextMenu', opt) + .addClass('context-menu-active'); + + // register key handler + $(document).off('keydown.contextMenu').on('keydown.contextMenu', handle.key); + // register autoHide handler + if (opt.autoHide) { + // mouse position handler + $(document).on('mousemove.contextMenuAutoHide', function (e) { + // need to capture the offset on mousemove, + // since the page might've been scrolled since activation + var pos = $trigger.offset(); + pos.right = pos.left + $trigger.outerWidth(); + pos.bottom = pos.top + $trigger.outerHeight(); + + if (opt.$layer && !opt.hovering && (!(e.pageX >= pos.left && e.pageX <= pos.right) || !(e.pageY >= pos.top && e.pageY <= pos.bottom))) { + /* Additional hover check after short time, you might just miss the edge of the menu */ + setTimeout(function () { + if (!opt.hovering && opt.$menu !== null && typeof opt.$menu !== 'undefined') { + opt.$menu.trigger('contextmenu:hide'); + } + }, 50); + } + }); + } + }, + hide: function (opt, force) { + var $trigger = $(this); + if (!opt) { + opt = $trigger.data('contextMenu') || {}; + } + + // hide event + if (!force && opt.events && opt.events.hide.call($trigger, opt) === false) { + return; + } + + // remove options and revert state + $trigger + .removeData('contextMenu') + .removeClass('context-menu-active'); + + if (opt.$layer) { + // keep layer for a bit so the contextmenu event can be aborted properly by opera + setTimeout((function ($layer) { + return function () { + $layer.remove(); + }; + })(opt.$layer), 10); + + try { + delete opt.$layer; + } catch (e) { + opt.$layer = null; + } + } + + // remove handle + $currentTrigger = null; + // remove selected + opt.$menu.find('.' + opt.classNames.hover).trigger('contextmenu:blur'); + opt.$selected = null; + // collapse all submenus + opt.$menu.find('.' + opt.classNames.visible).removeClass(opt.classNames.visible); + // unregister key and mouse handlers + // $(document).off('.contextMenuAutoHide keydown.contextMenu'); // http://bugs.jquery.com/ticket/10705 + $(document).off('.contextMenuAutoHide').off('keydown.contextMenu'); + // hide menu + if (opt.$menu) { + opt.$menu[opt.animation.hide](opt.animation.duration, function () { + // tear down dynamically built menu after animation is completed. + if (opt.build) { + opt.$menu.remove(); + $.each(opt, function (key) { + switch (key) { + case 'ns': + case 'selector': + case 'build': + case 'trigger': + return true; + + default: + opt[key] = undefined; + try { + delete opt[key]; + } catch (e) { + } + return true; + } + }); + } + + setTimeout(function () { + $trigger.trigger('contextmenu:hidden'); + }, 10); + }); + } + }, + create: function (opt, root) { + if (typeof root === 'undefined') { + root = opt; + } + + // create contextMenu + opt.$menu = $('
      ').addClass(opt.className || '').data({ + 'contextMenu': opt, + 'contextMenuRoot': root + }); + + $.each(['callbacks', 'commands', 'inputs'], function (i, k) { + opt[k] = {}; + if (!root[k]) { + root[k] = {}; + } + }); + + if (!root.accesskeys) { + root.accesskeys = {}; + } + + function createNameNode(item) { + var $name = $(''); + if (item._accesskey) { + if (item._beforeAccesskey) { + $name.append(document.createTextNode(item._beforeAccesskey)); + } + $('') + .addClass('context-menu-accesskey') + .text(item._accesskey) + .appendTo($name); + if (item._afterAccesskey) { + $name.append(document.createTextNode(item._afterAccesskey)); + } + } else { + if (item.isHtmlName) { + // restrict use with access keys + if (typeof item.accesskey !== 'undefined') { + throw new Error('accesskeys are not compatible with HTML names and cannot be used together in the same item'); + } + $name.html(item.name); + } else { + $name.text(item.name); + } + } + return $name; + } + + // create contextMenu items + $.each(opt.items, function (key, item) { + var $t = $('
    • ').addClass(item.className || ''), + $label = null, + $input = null; + + // iOS needs to see a click-event bound to an element to actually + // have the TouchEvents infrastructure trigger the click event + $t.on('click', $.noop); + + // Make old school string seperator a real item so checks wont be + // akward later. + // And normalize 'cm_separator' into 'cm_seperator'. + if (typeof item === 'string' || item.type === 'cm_separator') { + item = {type: 'cm_seperator'}; + } + + item.$node = $t.data({ + 'contextMenu': opt, + 'contextMenuRoot': root, + 'contextMenuKey': key + }); + + // register accesskey + // NOTE: the accesskey attribute should be applicable to any element, but Safari5 and Chrome13 still can't do that + if (typeof item.accesskey !== 'undefined') { + var aks = splitAccesskey(item.accesskey); + for (var i = 0, ak; ak = aks[i]; i++) { + if (!root.accesskeys[ak]) { + root.accesskeys[ak] = item; + var matched = item.name.match(new RegExp('^(.*?)(' + ak + ')(.*)$', 'i')); + if (matched) { + item._beforeAccesskey = matched[1]; + item._accesskey = matched[2]; + item._afterAccesskey = matched[3]; + } + break; + } + } + } + + if (item.type && types[item.type]) { + // run custom type handler + types[item.type].call($t, item, opt, root); + // register commands + $.each([opt, root], function (i, k) { + k.commands[key] = item; + // Overwrite only if undefined or the item is appended to the root. This so it + // doesn't overwrite callbacks of root elements if the name is the same. + if ($.isFunction(item.callback) && (typeof k.callbacks[key] === 'undefined' || typeof opt.type === 'undefined')) { + k.callbacks[key] = item.callback; + } + }); + } else { + // add label for input + if (item.type === 'cm_seperator') { + $t.addClass('context-menu-separator ' + root.classNames.notSelectable); + } else if (item.type === 'html') { + $t.addClass('context-menu-html ' + root.classNames.notSelectable); + } else if (item.type !== 'sub' && item.type) { + $label = $('').appendTo($t); + createNameNode(item).appendTo($label); + + $t.addClass('context-menu-input'); + opt.hasTypes = true; + $.each([opt, root], function (i, k) { + k.commands[key] = item; + k.inputs[key] = item; + }); + } else if (item.items) { + item.type = 'sub'; + } + + switch (item.type) { + case 'cm_seperator': + break; + + case 'text': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .val(item.value || '') + .appendTo($label); + break; + + case 'textarea': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .val(item.value || '') + .appendTo($label); + + if (item.height) { + $input.height(item.height); + } + break; + + case 'checkbox': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .val(item.value || '') + .prop('checked', !!item.selected) + .prependTo($label); + break; + + case 'radio': + $input = $('') + .attr('name', 'context-menu-input-' + item.radio) + .val(item.value || '') + .prop('checked', !!item.selected) + .prependTo($label); + break; + + case 'select': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .appendTo($label); + if (item.options) { + $.each(item.options, function (value, text) { + $('').val(value).text(text).appendTo($input); + }); + $input.val(item.selected); + } + break; + + case 'sub': + createNameNode(item).appendTo($t); + item.appendTo = item.$node; + $t.data('contextMenu', item).addClass('context-menu-submenu'); + item.callback = null; + + // If item contains items, and this is a promise, we should create it later + // check if subitems is of type promise. If it is a promise we need to create + // it later, after promise has been resolved. + if ('function' === typeof item.items.then) { + // probably a promise, process it, when completed it will create the sub menu's. + op.processPromises(item, root, item.items); + } else { + // normal submenu. + op.create(item, root); + } + break; + + case 'html': + $(item.html).appendTo($t); + break; + + default: + $.each([opt, root], function (i, k) { + k.commands[key] = item; + // Overwrite only if undefined or the item is appended to the root. This so it + // doesn't overwrite callbacks of root elements if the name is the same. + if ($.isFunction(item.callback) && (typeof k.callbacks[key] === 'undefined' || typeof opt.type === 'undefined')) { + k.callbacks[key] = item.callback; + } + }); + createNameNode(item).appendTo($t); + break; + } + + // disable key listener in + if (item.type && item.type !== 'sub' && item.type !== 'html' && item.type !== 'cm_seperator') { + $input + .on('focus', handle.focusInput) + .on('blur', handle.blurInput); + + if (item.events) { + $input.on(item.events, opt); + } + } + + // add icons + if (item.icon) { + if ($.isFunction(item.icon)) { + item._icon = item.icon.call(this, this, $t, key, item); + } else { + if (typeof(item.icon) === 'string' && ( + item.icon.substring(0, 4) === 'fab ' + || item.icon.substring(0, 4) === 'fas ' + || item.icon.substring(0, 4) === 'far ' + || item.icon.substring(0, 4) === 'fal ') + ) { + // to enable font awesome + $t.addClass(root.classNames.icon + ' ' + root.classNames.icon + '--fa5'); + item._icon = $(''); + } else if (typeof(item.icon) === 'string' && item.icon.substring(0, 3) === 'fa-') { + item._icon = root.classNames.icon + ' ' + root.classNames.icon + '--fa fa ' + item.icon; + } else { + item._icon = root.classNames.icon + ' ' + root.classNames.icon + '-' + item.icon; + } + } + + if(typeof(item._icon) === "string"){ + $t.addClass(item._icon); + } else { + $t.prepend(item._icon); + } + } + } + + // cache contained elements + item.$input = $input; + item.$label = $label; + + // attach item to menu + $t.appendTo(opt.$menu); + + // Disable text selection + if (!opt.hasTypes && $.support.eventSelectstart) { + // browsers support user-select: none, + // IE has a special event for text-selection + // browsers supporting neither will not be preventing text-selection + $t.on('selectstart.disableTextSelect', handle.abortevent); + } + }); + // attach contextMenu to (to bypass any possible overflow:hidden issues on parents of the trigger element) + if (!opt.$node) { + opt.$menu.css('display', 'none').addClass('context-menu-root'); + } + opt.$menu.appendTo(opt.appendTo || document.body); + }, + resize: function ($menu, nested) { + var domMenu; + // determine widths of submenus, as CSS won't grow them automatically + // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100; + // kinda sucks hard... + + // determine width of absolutely positioned element + $menu.css({position: 'absolute', display: 'block'}); + // don't apply yet, because that would break nested elements' widths + $menu.data('width', + (domMenu = $menu.get(0)).getBoundingClientRect ? + Math.ceil(domMenu.getBoundingClientRect().width) : + $menu.outerWidth() + 1); // outerWidth() returns rounded pixels + // reset styles so they allow nested elements to grow/shrink naturally + $menu.css({ + position: 'static', + minWidth: '0px', + maxWidth: '100000px' + }); + // identify width of nested menus + $menu.find('> li > ul').each(function () { + op.resize($(this), true); + }); + // reset and apply changes in the end because nested + // elements' widths wouldn't be calculatable otherwise + if (!nested) { + $menu.find('ul').addBack().css({ + position: '', + display: '', + minWidth: '', + maxWidth: '' + }).outerWidth(function () { + return $(this).data('width'); + }); + } + }, + update: function (opt, root) { + var $trigger = this; + if (typeof root === 'undefined') { + root = opt; + op.resize(opt.$menu); + } + + var hasVisibleItems = false; + + // re-check disabled for each item + opt.$menu.children().each(function () { + var $item = $(this), + key = $item.data('contextMenuKey'), + item = opt.items[key], + disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true, + visible; + if ($.isFunction(item.visible)) { + visible = item.visible.call($trigger, key, root); + } else if (typeof item.visible !== 'undefined') { + visible = item.visible === true; + } else { + visible = true; + } + + if (visible) { + hasVisibleItems = true; + } + + $item[visible ? 'show' : 'hide'](); + + // dis- / enable item + $item[disabled ? 'addClass' : 'removeClass'](root.classNames.disabled); + + if ($.isFunction(item.icon)) { + $item.removeClass(item._icon); + var iconResult = item.icon.call(this, $trigger, $item, key, item); + if(typeof(iconResult) === "string"){ + $item.addClass(iconResult); + } else { + $item.prepend(iconResult); + } + } + + if (item.type) { + // dis- / enable input elements + $item.find('input, select, textarea').prop('disabled', disabled); + + // update input states + switch (item.type) { + case 'text': + case 'textarea': + item.$input.val(item.value || ''); + break; + + case 'checkbox': + case 'radio': + item.$input.val(item.value || '').prop('checked', !!item.selected); + break; + + case 'select': + item.$input.val((item.selected === 0 ? "0" : item.selected) || ''); + break; + } + } + + if (item.$menu) { + // update sub-menu + var subMenuHasVisibleItems = op.update.call($trigger, item, root); + if (subMenuHasVisibleItems) { + hasVisibleItems = true; + } + } + }); + return hasVisibleItems; + }, + layer: function (opt, zIndex) { + // add transparent layer for click area + // filter and background for Internet Explorer, Issue #23 + var $layer = opt.$layer = $('
      ') + .css({ + height: $win.height(), + width: $win.width(), + display: 'block', + position: 'fixed', + 'z-index': zIndex, + top: 0, + left: 0, + opacity: 0, + filter: 'alpha(opacity=0)', + 'background-color': '#000' + }) + .data('contextMenuRoot', opt) + .insertBefore(this) + .on('contextmenu', handle.abortevent) + .on('mousedown', handle.layerClick); + + // IE6 doesn't know position:fixed; + if (typeof document.body.style.maxWidth === 'undefined') { // IE6 doesn't support maxWidth + $layer.css({ + 'position': 'absolute', + 'height': $(document).height() + }); + } + + return $layer; + }, + processPromises: function (opt, root, promise) { + // Start + opt.$node.addClass(root.classNames.iconLoadingClass); + + function completedPromise(opt, root, items) { + // Completed promise (dev called promise.resolve). We now have a list of items which can + // be used to create the rest of the context menu. + if (typeof items === 'undefined') { + // Null result, dev should have checked + errorPromise(undefined);//own error object + } + finishPromiseProcess(opt, root, items); + } + + function errorPromise(opt, root, errorItem) { + // User called promise.reject() with an error item, if not, provide own error item. + if (typeof errorItem === 'undefined') { + errorItem = { + "error": { + name: "No items and no error item", + icon: "context-menu-icon context-menu-icon-quit" + } + }; + if (window.console) { + (console.error || console.log).call(console, 'When you reject a promise, provide an "items" object, equal to normal sub-menu items'); + } + } else if (typeof errorItem === 'string') { + errorItem = {"error": {name: errorItem}}; + } + finishPromiseProcess(opt, root, errorItem); + } + + function finishPromiseProcess(opt, root, items) { + if (typeof root.$menu === 'undefined' || !root.$menu.is(':visible')) { + return; + } + opt.$node.removeClass(root.classNames.iconLoadingClass); + opt.items = items; + op.create(opt, root, true); // Create submenu + op.update(opt, root); // Correctly update position if user is already hovered over menu item + root.positionSubmenu.call(opt.$node, opt.$menu); // positionSubmenu, will only do anything if user already hovered over menu item that just got new subitems. + } + + // Wait for promise completion. .then(success, error, notify) (we don't track notify). Bind the opt + // and root to avoid scope problems + promise.then(completedPromise.bind(this, opt, root), errorPromise.bind(this, opt, root)); + }, + // operation that will run after contextMenu showed on screen + activated: function(opt){ + var $menu = opt.$menu; + var $menuOffset = $menu.offset(); + var winHeight = $(window).height(); + var winScrollTop = $(window).scrollTop(); + var menuHeight = $menu.height(); + if(menuHeight > winHeight){ + $menu.css({ + 'height' : winHeight + 'px', + 'overflow-x': 'hidden', + 'overflow-y': 'auto', + 'top': winScrollTop + 'px' + }); + } else if(($menuOffset.top < winScrollTop) || ($menuOffset.top + menuHeight > winScrollTop + winHeight)){ + $menu.css({ + 'top': winScrollTop + 'px' + }); + } + } + }; + + // split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key + function splitAccesskey(val) { + var t = val.split(/\s+/); + var keys = []; + + for (var i = 0, k; k = t[i]; i++) { + k = k.charAt(0).toUpperCase(); // first character only + // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it. + // a map to look up already used access keys would be nice + keys.push(k); + } + + return keys; + } + +// handle contextMenu triggers + $.fn.contextMenu = function (operation) { + var $t = this, $o = operation; + if (this.length > 0) { // this is not a build on demand menu + if (typeof operation === 'undefined') { + this.first().trigger('contextmenu'); + } else if (typeof operation.x !== 'undefined' && typeof operation.y !== 'undefined') { + this.first().trigger($.Event('contextmenu', { + pageX: operation.x, + pageY: operation.y, + mouseButton: operation.button + })); + } else if (operation === 'hide') { + var $menu = this.first().data('contextMenu') ? this.first().data('contextMenu').$menu : null; + if ($menu) { + $menu.trigger('contextmenu:hide'); + } + } else if (operation === 'destroy') { + $.contextMenu('destroy', {context: this}); + } else if ($.isPlainObject(operation)) { + operation.context = this; + $.contextMenu('create', operation); + } else if (operation) { + this.removeClass('context-menu-disabled'); + } else if (!operation) { + this.addClass('context-menu-disabled'); + } + } else { + $.each(menus, function () { + if (this.selector === $t.selector) { + $o.data = this; + + $.extend($o.data, {trigger: 'demand'}); + } + }); + + handle.contextmenu.call($o.target, $o); + } + + return this; + }; + + // manage contextMenu instances + $.contextMenu = function (operation, options) { + if (typeof operation !== 'string') { + options = operation; + operation = 'create'; + } + + if (typeof options === 'string') { + options = {selector: options}; + } else if (typeof options === 'undefined') { + options = {}; + } + + // merge with default options + var o = $.extend(true, {}, defaults, options || {}); + var $document = $(document); + var $context = $document; + var _hasContext = false; + + if (!o.context || !o.context.length) { + o.context = document; + } else { + // you never know what they throw at you... + $context = $(o.context).first(); + o.context = $context.get(0); + _hasContext = !$(o.context).is(document); + } + + switch (operation) { + + case 'update': + // Updates visibility and such + if(_hasContext){ + op.update($context); + } else { + for(var menu in menus){ + if(menus.hasOwnProperty(menu)){ + op.update(menus[menu]); + } + } + } + break; + + case 'create': + // no selector no joy + if (!o.selector) { + throw new Error('No selector specified'); + } + // make sure internal classes are not bound to + if (o.selector.match(/.context-menu-(list|item|input)($|\s)/)) { + throw new Error('Cannot bind to selector "' + o.selector + '" as it contains a reserved className'); + } + if (!o.build && (!o.items || $.isEmptyObject(o.items))) { + throw new Error('No Items specified'); + } + counter++; + o.ns = '.contextMenu' + counter; + if (!_hasContext) { + namespaces[o.selector] = o.ns; + } + menus[o.ns] = o; + + // default to right click + if (!o.trigger) { + o.trigger = 'right'; + } + + if (!initialized) { + var itemClick = o.itemClickEvent === 'click' ? 'click.contextMenu' : 'mouseup.contextMenu'; + var contextMenuItemObj = { + // 'mouseup.contextMenu': handle.itemClick, + // 'click.contextMenu': handle.itemClick, + 'contextmenu:focus.contextMenu': handle.focusItem, + 'contextmenu:blur.contextMenu': handle.blurItem, + 'contextmenu.contextMenu': handle.abortevent, + 'mouseenter.contextMenu': handle.itemMouseenter, + 'mouseleave.contextMenu': handle.itemMouseleave + }; + contextMenuItemObj[itemClick] = handle.itemClick; + // make sure item click is registered first + $document + .on({ + 'contextmenu:hide.contextMenu': handle.hideMenu, + 'prevcommand.contextMenu': handle.prevItem, + 'nextcommand.contextMenu': handle.nextItem, + 'contextmenu.contextMenu': handle.abortevent, + 'mouseenter.contextMenu': handle.menuMouseenter, + 'mouseleave.contextMenu': handle.menuMouseleave + }, '.context-menu-list') + .on('mouseup.contextMenu', '.context-menu-input', handle.inputClick) + .on(contextMenuItemObj, '.context-menu-item'); + + initialized = true; + } + + // engage native contextmenu event + $context + .on('contextmenu' + o.ns, o.selector, o, handle.contextmenu); + + if (_hasContext) { + // add remove hook, just in case + $context.on('remove' + o.ns, function () { + $(this).contextMenu('destroy'); + }); + } + + switch (o.trigger) { + case 'hover': + $context + .on('mouseenter' + o.ns, o.selector, o, handle.mouseenter) + .on('mouseleave' + o.ns, o.selector, o, handle.mouseleave); + break; + + case 'left': + $context.on('click' + o.ns, o.selector, o, handle.click); + break; + case 'touchstart': + $context.on('touchstart' + o.ns, o.selector, o, handle.click); + break; + /* + default: + // http://www.quirksmode.org/dom/events/contextmenu.html + $document + .on('mousedown' + o.ns, o.selector, o, handle.mousedown) + .on('mouseup' + o.ns, o.selector, o, handle.mouseup); + break; + */ + } + + // create menu + if (!o.build) { + op.create(o); + } + break; + + case 'destroy': + var $visibleMenu; + if (_hasContext) { + // get proper options + var context = o.context; + $.each(menus, function (ns, o) { + + if (!o) { + return true; + } + + // Is this menu equest to the context called from + if (!$(context).is(o.selector)) { + return true; + } + + $visibleMenu = $('.context-menu-list').filter(':visible'); + if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is($(o.context).find(o.selector))) { + $visibleMenu.trigger('contextmenu:hide', {force: true}); + } + + try { + if (menus[o.ns].$menu) { + menus[o.ns].$menu.remove(); + } + + delete menus[o.ns]; + } catch (e) { + menus[o.ns] = null; + } + + $(o.context).off(o.ns); + + return true; + }); + } else if (!o.selector) { + $document.off('.contextMenu .contextMenuAutoHide'); + $.each(menus, function (ns, o) { + $(o.context).off(o.ns); + }); + + namespaces = {}; + menus = {}; + counter = 0; + initialized = false; + + $('#context-menu-layer, .context-menu-list').remove(); + } else if (namespaces[o.selector]) { + $visibleMenu = $('.context-menu-list').filter(':visible'); + if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is(o.selector)) { + $visibleMenu.trigger('contextmenu:hide', {force: true}); + } + + try { + if (menus[namespaces[o.selector]].$menu) { + menus[namespaces[o.selector]].$menu.remove(); + } + + delete menus[namespaces[o.selector]]; + } catch (e) { + menus[namespaces[o.selector]] = null; + } + + $document.off(namespaces[o.selector]); + } + break; + + case 'html5': + // if and are not handled by the browser, + // or options was a bool true, + // initialize $.contextMenu for them + if ((!$.support.htmlCommand && !$.support.htmlMenuitem) || (typeof options === 'boolean' && options)) { + $('menu[type="context"]').each(function () { + if (this.id) { + $.contextMenu({ + selector: '[contextmenu=' + this.id + ']', + items: $.contextMenu.fromMenu(this) + }); + } + }).css('display', 'none'); + } + break; + + default: + throw new Error('Unknown operation "' + operation + '"'); + } + + return this; + }; + +// import values into commands + $.contextMenu.setInputValues = function (opt, data) { + if (typeof data === 'undefined') { + data = {}; + } + + $.each(opt.inputs, function (key, item) { + switch (item.type) { + case 'text': + case 'textarea': + item.value = data[key] || ''; + break; + + case 'checkbox': + item.selected = data[key] ? true : false; + break; + + case 'radio': + item.selected = (data[item.radio] || '') === item.value; + break; + + case 'select': + item.selected = data[key] || ''; + break; + } + }); + }; + +// export values from commands + $.contextMenu.getInputValues = function (opt, data) { + if (typeof data === 'undefined') { + data = {}; + } + + $.each(opt.inputs, function (key, item) { + switch (item.type) { + case 'text': + case 'textarea': + case 'select': + data[key] = item.$input.val(); + break; + + case 'checkbox': + data[key] = item.$input.prop('checked'); + break; + + case 'radio': + if (item.$input.prop('checked')) { + data[item.radio] = item.value; + } + break; + } + }); + + return data; + }; + +// find