Add the new version of the website
Change-Id: Ice04264fb74dd18b93b07b15cdf3209e21a27061
Signed-off-by: Stéphane Bégaudeau <stephane.begaudeau@obeo.fr>
diff --git a/_index.html b/_index.html
deleted file mode 100644
index 24211e5..0000000
--- a/_index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<div id="midcolumn">
- <h1>Acceleo</h1>
-
- <div id="overview_prezi" class="homeitem3col">
- <script>
- if (document.cookie.indexOf('eclipse_cookieconsent_status') > -1) {
- jQuery("div").html('<iframe id="iframe_container" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" width="550" height="400" src="https://prezi.com/embed/x6hayuahe6xm/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&landing_data=bHVZZmNaNDBIWmlSa1k1MmNRK3VoaXFhTktOYzU5Ynl1eWtiVVRLK2V4VTRzaXZPRmFEaFNGMWdvUEdCWk1oYTVVND0&landing_sign=og5Hwo_QhZhYTA8Cr4ZJmKvuZhc_L2CLj45TqDl3fMQ#"></iframe>');
- } else {
- var p = document.createElement('p');
- p.innerHTML="Please, allow Cookies & Eclipse Foundation Privacy Policy below to be able to load the Acceleo overview prezi presentation.";
- document.getElementById("overview_prezi").appendChild(p);
- }
- </script>
- </div>
-
- <div class="homeitem3col">
- <h3>About Acceleo</h3>
- <p>
- <a href="http://wiki.eclipse.org/Acceleo">Acceleo</a> is a pragmatic implementation of the <a href="http://www.omg.org/">Object Management Group (OMG)</a> <a href="http://www.omg.org/spec/MOFM2T/1.0/">MOF Model to Text Language (MTL)</a> standard. You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.
- </p>
- <p>
- Acceleo is the result of several man-years of R&D started in the French company Obeo. Junction between the OMG MTL standard, its team's experience with industrial code generation and the latest research advances into the M2T field, it offers outstanding advantages : High ability to customize, Interoperability, Easy kick off, and much more!
- </p>
- </div>
-
- <div class="homeitem3col">
- <h3>User Experience</h3>
- <p>
- The Acceleo generation module Editor supports the user with most of the features you would expect from modern IDEs : content assist, quick outline, navigation links to the declaration of model elements, template elements and variables, quick fixes, refactoring, syntax highlighting, occurences highlighting... and so much more!
- </p>
- </div>
-
- <div class="homeitem3col">
- <h3>Discovering features...</h3>
- <p>
- Read the <a href="/acceleo/support">documentation</a> and join the discussion on the <a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" rel="nofollow">newsgroup</a>.
- </p>
- </div>
-</div>
-
-<div id="rightcolumn">
- <div class="sideitem" id="obeo">
- <a href="http://www.obeo.fr" title="Main Obeo website"><img src="images/logo/logo_obeo.png"/></a>
- </div>
-
- <div class="sideitem">
- <h6>Get Acceleo</h6>
- <ul>
- <li><a href="https://marketplace.eclipse.org/content/acceleo#undefined">Install Acceleo</a> from the marketplace,</li>
- <li><a href="http://eclipse.org/acceleo/downloads/">Download Acceleo</a> from the update sites.</li>
-
- </ul>
- </div>
-</div>
diff --git a/_projectCommon.php b/_projectCommon.php
deleted file mode 100644
index aceb0f1..0000000
--- a/_projectCommon.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
- # Set the theme for your project's web pages.
- # See the Committer Tools "How Do I" for list of themes
- # https://dev.eclipse.org/committers/
- # Optional: defaults to system theme
- $theme = "solstice";
-
- # Define your project-wide Nav bars here.
- # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
- # these are optional
-
- $Menu->setMenuItemList(array());
- $Menu->addMenuItem("Home", "/acceleo", "_self");
- $Menu->addMenuItem("Download", "/acceleo/downloads", "_self");
- $Menu->addMenuItem("Support", "/acceleo/support", "_self");
- $Menu->addMenuItem("Developers", "/acceleo/developers", "_self");
- $Menu->addMenuItem("Awards", "/acceleo/awards", "_self");
-
- $Nav->setLinkList(array());
- $Nav->addNavSeparator("About this project", "https://projects.eclipse.org/projects/modeling.acceleo", "", 1 );
- $Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/Acceleo", "_self", 2);
- $Nav->addCustomNav("Newsgroup", "http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&", "_self", 2);
- $Nav->addCustomNav("Project Plan", "https://projects.eclipse.org/projects/modeling.m2t.acceleo/documentation", "_self", 2);
- $Nav->addCustomNav("Bugs", "https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced", "_self", 2);
- $Nav->addCustomNav("File a Bug", "https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Acceleo", "_self", 2);
-
- $Nav->addNavSeparator("Developers", "https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer", "", 1 );
- $Nav->addCustomNav("Git", "http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/", "_self", 2);
- $Nav->addCustomNav("Gerrit", "https://git.eclipse.org/r/#/admin/projects/acceleo/org.eclipse.acceleo", "_self", 2);
- $Nav->addCustomNav("Mailing List", "https://dev.eclipse.org/mailman/listinfo/m2t-dev", "_self", 2);
-
- $Nav->addNavSeparator("Related Projects", "https://www.eclipse.org/modeling", "", 1 );
- $Nav->addCustomNav("EMF", "https://www.eclipse.org/modeling/emf", "_self", 2);
- $Nav->addCustomNav("Sirius", "https://www.eclipse.org/sirius", "_self", 2);
-
- # $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/acceleo/style_acceleo.css"/>' . "\n\t");
-
- $App->Promotion = TRUE;
- $App->SetGoogleAnalyticsTrackingCode("UA-16777490-1");
-?>
diff --git a/assets/css/bootstrap.css b/assets/css/bootstrap.css
deleted file mode 100644
index 7d519a6..0000000
--- a/assets/css/bootstrap.css
+++ /dev/null
@@ -1,3363 +0,0 @@
-/*!
- * Bootstrap v2.0.0
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
- display: block;
-}
-audio, canvas, video {
- display: inline-block;
- *display: inline;
- *zoom: 1;
-}
-audio:not([controls]) {
- display: none;
-}
-html {
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-a:hover, a:active {
- outline: 0;
-}
-sub, sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -0.5em;
-}
-sub {
- bottom: -0.25em;
-}
-img {
- max-width: 100%;
- height: auto;
- border: 0;
- -ms-interpolation-mode: bicubic;
-}
-button,
-input,
-select,
-textarea {
- margin: 0;
- font-size: 100%;
- vertical-align: middle;
-}
-button, input {
- *overflow: visible;
- line-height: normal;
-}
-button::-moz-focus-inner, input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- cursor: pointer;
- -webkit-appearance: button;
-}
-input[type="search"] {
- -webkit-appearance: textfield;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
- -webkit-appearance: none;
-}
-textarea {
- overflow: auto;
- vertical-align: top;
-}
-body {
- margin: 0;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- line-height: 18px;
- color: #333333;
- background-color: #ffffff;
-}
-a {
- color: #0088cc;
- text-decoration: none;
-}
-a:hover {
- color: #005580;
- text-decoration: underline;
-}
-.row {
- margin-left: -20px;
- *zoom: 1;
-}
-.row:before, .row:after {
- display: table;
- content: "";
-}
-.row:after {
- clear: both;
-}
-[class*="span"] {
- float: left;
- margin-left: 20px;
-}
-.span1 {
- width: 60px;
-}
-.span2 {
- width: 140px;
-}
-.span3 {
- width: 220px;
-}
-.span4 {
- width: 300px;
-}
-.span5 {
- width: 380px;
-}
-.span6 {
- width: 460px;
-}
-.span7 {
- width: 540px;
-}
-.span8 {
- width: 620px;
-}
-.span9 {
- width: 700px;
-}
-.span10 {
- width: 780px;
-}
-.span11 {
- width: 860px;
-}
-.span12, .container {
- width: 940px;
-}
-.offset1 {
- margin-left: 100px;
-}
-.offset2 {
- margin-left: 180px;
-}
-.offset3 {
- margin-left: 260px;
-}
-.offset4 {
- margin-left: 340px;
-}
-.offset5 {
- margin-left: 420px;
-}
-.offset6 {
- margin-left: 500px;
-}
-.offset7 {
- margin-left: 580px;
-}
-.offset8 {
- margin-left: 660px;
-}
-.offset9 {
- margin-left: 740px;
-}
-.offset10 {
- margin-left: 820px;
-}
-.offset11 {
- margin-left: 900px;
-}
-.row-fluid {
- width: 100%;
- *zoom: 1;
-}
-.row-fluid:before, .row-fluid:after {
- display: table;
- content: "";
-}
-.row-fluid:after {
- clear: both;
-}
-.row-fluid > [class*="span"] {
- float: left;
- margin-left: 2.127659574%;
-}
-.row-fluid > [class*="span"]:first-child {
- margin-left: 0;
-}
-.row-fluid .span1 {
- width: 6.382978723%;
-}
-.row-fluid .span2 {
- width: 14.89361702%;
-}
-.row-fluid .span3 {
- width: 23.404255317%;
-}
-.row-fluid .span4 {
- width: 31.914893614%;
-}
-.row-fluid .span5 {
- width: 40.425531911%;
-}
-.row-fluid .span6 {
- width: 48.93617020799999%;
-}
-.row-fluid .span7 {
- width: 57.446808505%;
-}
-.row-fluid .span8 {
- width: 65.95744680199999%;
-}
-.row-fluid .span9 {
- width: 74.468085099%;
-}
-.row-fluid .span10 {
- width: 82.97872339599999%;
-}
-.row-fluid .span11 {
- width: 91.489361693%;
-}
-.row-fluid .span12 {
- width: 99.99999998999999%;
-}
-.container {
- width: 940px;
- margin-left: auto;
- margin-right: auto;
- *zoom: 1;
-}
-.container:before, .container:after {
- display: table;
- content: "";
-}
-.container:after {
- clear: both;
-}
-.container-fluid {
- padding-left: 20px;
- padding-right: 20px;
- *zoom: 1;
-}
-.container-fluid:before, .container-fluid:after {
- display: table;
- content: "";
-}
-.container-fluid:after {
- clear: both;
-}
-p {
- margin: 0 0 9px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- line-height: 18px;
-}
-p small {
- font-size: 11px;
- color: #999999;
-}
-.lead {
- margin-bottom: 18px;
- font-size: 20px;
- font-weight: 200;
- line-height: 27px;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 0;
- font-weight: bold;
- color: #333333;
- text-rendering: optimizelegibility;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
- font-weight: normal;
- color: #999999;
-}
-h1 {
- font-size: 30px;
- line-height: 36px;
-}
-h1 small {
- font-size: 18px;
-}
-h2 {
- font-size: 24px;
- line-height: 36px;
-}
-h2 small {
- font-size: 18px;
-}
-h3 {
- line-height: 27px;
- font-size: 18px;
-}
-h3 small {
- font-size: 14px;
-}
-h4, h5, h6 {
- line-height: 18px;
-}
-h4 {
- font-size: 14px;
-}
-h4 small {
- font-size: 12px;
-}
-h5 {
- font-size: 12px;
-}
-h6 {
- font-size: 11px;
- color: #999999;
- text-transform: uppercase;
-}
-.page-header {
- padding-bottom: 17px;
- margin: 18px 0;
- border-bottom: 1px solid #eeeeee;
-}
-.page-header h1 {
- line-height: 1;
-}
-ul, ol {
- padding: 0;
- margin: 0 0 9px 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin-bottom: 0;
-}
-ul {
- list-style: disc;
-}
-ol {
- list-style: decimal;
-}
-li {
- line-height: 18px;
-}
-ul.unstyled {
- margin-left: 0;
- list-style: none;
-}
-dl {
- margin-bottom: 18px;
-}
-dt, dd {
- line-height: 18px;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 9px;
-}
-hr {
- margin: 18px 0;
- border: 0;
- border-top: 1px solid #e5e5e5;
- border-bottom: 1px solid #ffffff;
-}
-strong {
- font-weight: bold;
-}
-em {
- font-style: italic;
-}
-.muted {
- color: #999999;
-}
-abbr {
- font-size: 90%;
- text-transform: uppercase;
- border-bottom: 1px dotted #ddd;
- cursor: help;
-}
-blockquote {
- padding: 0 0 0 15px;
- margin: 0 0 18px;
- border-left: 5px solid #eeeeee;
-}
-blockquote p {
- margin-bottom: 0;
- font-size: 16px;
- font-weight: 300;
- line-height: 22.5px;
-}
-blockquote small {
- display: block;
- line-height: 18px;
- color: #999999;
-}
-blockquote small:before {
- content: '\2014 \00A0';
-}
-blockquote.pull-right {
- float: right;
- padding-left: 0;
- padding-right: 15px;
- border-left: 0;
- border-right: 5px solid #eeeeee;
-}
-blockquote.pull-right p, blockquote.pull-right small {
- text-align: right;
-}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
- content: "";
-}
-address {
- display: block;
- margin-bottom: 18px;
- line-height: 18px;
- font-style: normal;
-}
-small {
- font-size: 100%;
-}
-cite {
- font-style: normal;
-}
-code, pre {
- padding: 0 3px 2px;
- font-family: Menlo, Monaco, "Courier New", monospace;
- font-size: 12px;
- color: #333333;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-code {
- padding: 3px 4px;
- color: #d14;
- background-color: #f7f7f9;
- border: 1px solid #e1e1e8;
-}
-pre {
- display: block;
- padding: 8.5px;
- margin: 0 0 9px;
- font-size: 12px;
- line-height: 18px;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- white-space: pre;
- white-space: pre-wrap;
- word-break: break-all;
-}
-pre.prettyprint {
- margin-bottom: 18px;
-}
-pre code {
- padding: 0;
- background-color: transparent;
-}
-form {
- margin: 0 0 18px;
-}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 27px;
- font-size: 19.5px;
- line-height: 36px;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #eee;
-}
-label,
-input,
-button,
-select,
-textarea {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- font-weight: normal;
- line-height: 18px;
-}
-label {
- display: block;
- margin-bottom: 5px;
- color: #333333;
-}
-input,
-textarea,
-select,
-.uneditable-input {
- display: inline-block;
- width: 210px;
- height: 18px;
- padding: 4px;
- margin-bottom: 9px;
- font-size: 13px;
- line-height: 18px;
- color: #555555;
- border: 1px solid #ccc;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.uneditable-textarea {
- width: auto;
- height: auto;
-}
-label input, label textarea, label select {
- display: block;
-}
-input[type="image"], input[type="checkbox"], input[type="radio"] {
- width: auto;
- height: auto;
- padding: 0;
- margin: 3px 0;
- *margin-top: 0;
- /* IE7 */
-
- line-height: normal;
- border: 0;
- cursor: pointer;
- border-radius: 0 \0/;
-}
-input[type="file"] {
- padding: initial;
- line-height: initial;
- border: initial;
- background-color: #ffffff;
- background-color: initial;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-input[type="button"], input[type="reset"], input[type="submit"] {
- width: auto;
- height: auto;
-}
-select, input[type="file"] {
- height: 28px;
- /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
- *margin-top: 4px;
- /* For IE7, add top margin to align select with labels */
-
- line-height: 28px;
-}
-select {
- width: 220px;
- background-color: #ffffff;
-}
-select[multiple], select[size] {
- height: auto;
-}
-input[type="image"] {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-textarea {
- height: auto;
-}
-input[type="hidden"] {
- display: none;
-}
-.radio, .checkbox {
- padding-left: 18px;
-}
-.radio input[type="radio"], .checkbox input[type="checkbox"] {
- float: left;
- margin-left: -18px;
-}
-.controls > .radio:first-child, .controls > .checkbox:first-child {
- padding-top: 5px;
-}
-.radio.inline, .checkbox.inline {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
-}
-.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
- margin-left: 10px;
-}
-.controls > .radio.inline:first-child, .controls > .checkbox.inline:first-child {
- padding-top: 0;
-}
-input, textarea {
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
- -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
- -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
- -o-transition: border linear 0.2s, box-shadow linear 0.2s;
- transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-input:focus, textarea:focus {
- border-color: rgba(82, 168, 236, 0.8);
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- outline: 0;
- outline: thin dotted \9;
- /* IE6-8 */
-
-}
-input[type="file"]:focus, input[type="checkbox"]:focus, select:focus {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.input-mini {
- width: 60px;
-}
-.input-small {
- width: 90px;
-}
-.input-medium {
- width: 150px;
-}
-.input-large {
- width: 210px;
-}
-.input-xlarge {
- width: 270px;
-}
-.input-xxlarge {
- width: 530px;
-}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input {
- float: none;
- margin-left: 0;
-}
-input.span1, textarea.span1, .uneditable-input.span1 {
- width: 50px;
-}
-input.span2, textarea.span2, .uneditable-input.span2 {
- width: 130px;
-}
-input.span3, textarea.span3, .uneditable-input.span3 {
- width: 210px;
-}
-input.span4, textarea.span4, .uneditable-input.span4 {
- width: 290px;
-}
-input.span5, textarea.span5, .uneditable-input.span5 {
- width: 370px;
-}
-input.span6, textarea.span6, .uneditable-input.span6 {
- width: 450px;
-}
-input.span7, textarea.span7, .uneditable-input.span7 {
- width: 530px;
-}
-input.span8, textarea.span8, .uneditable-input.span8 {
- width: 610px;
-}
-input.span9, textarea.span9, .uneditable-input.span9 {
- width: 690px;
-}
-input.span10, textarea.span10, .uneditable-input.span10 {
- width: 770px;
-}
-input.span11, textarea.span11, .uneditable-input.span11 {
- width: 850px;
-}
-input.span12, textarea.span12, .uneditable-input.span12 {
- width: 930px;
-}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
- background-color: #f5f5f5;
- border-color: #ddd;
- cursor: not-allowed;
-}
-.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline {
- color: #c09853;
-}
-.control-group.warning input, .control-group.warning select, .control-group.warning textarea {
- color: #c09853;
- border-color: #c09853;
-}
-.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus {
- border-color: #a47e3c;
- -webkit-box-shadow: 0 0 6px #dbc59e;
- -moz-box-shadow: 0 0 6px #dbc59e;
- box-shadow: 0 0 6px #dbc59e;
-}
-.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on {
- color: #c09853;
- background-color: #fcf8e3;
- border-color: #c09853;
-}
-.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline {
- color: #b94a48;
-}
-.control-group.error input, .control-group.error select, .control-group.error textarea {
- color: #b94a48;
- border-color: #b94a48;
-}
-.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus {
- border-color: #953b39;
- -webkit-box-shadow: 0 0 6px #d59392;
- -moz-box-shadow: 0 0 6px #d59392;
- box-shadow: 0 0 6px #d59392;
-}
-.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #b94a48;
-}
-.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline {
- color: #468847;
-}
-.control-group.success input, .control-group.success select, .control-group.success textarea {
- color: #468847;
- border-color: #468847;
-}
-.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus {
- border-color: #356635;
- -webkit-box-shadow: 0 0 6px #7aba7b;
- -moz-box-shadow: 0 0 6px #7aba7b;
- box-shadow: 0 0 6px #7aba7b;
-}
-.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on {
- color: #468847;
- background-color: #dff0d8;
- border-color: #468847;
-}
-input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid {
- color: #b94a48;
- border-color: #ee5f5b;
-}
-input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus {
- border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
- box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
- padding: 17px 20px 18px;
- margin-top: 18px;
- margin-bottom: 18px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
-}
-.uneditable-input {
- display: block;
- background-color: #ffffff;
- border-color: #eee;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- cursor: not-allowed;
-}
-:-moz-placeholder {
- color: #999999;
-}
-::-webkit-input-placeholder {
- color: #999999;
-}
-.help-block {
- margin-top: 5px;
- margin-bottom: 0;
- color: #999999;
-}
-.help-inline {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- margin-bottom: 9px;
- vertical-align: middle;
- padding-left: 5px;
-}
-.input-prepend, .input-append {
- margin-bottom: 5px;
- *zoom: 1;
-}
-.input-prepend:before,
-.input-append:before,
-.input-prepend:after,
-.input-append:after {
- display: table;
- content: "";
-}
-.input-prepend:after, .input-append:after {
- clear: both;
-}
-.input-prepend input,
-.input-append input,
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-.input-prepend input:focus,
-.input-append input:focus,
-.input-prepend .uneditable-input:focus,
-.input-append .uneditable-input:focus {
- position: relative;
- z-index: 2;
-}
-.input-prepend .uneditable-input, .input-append .uneditable-input {
- border-left-color: #ccc;
-}
-.input-prepend .add-on, .input-append .add-on {
- float: left;
- display: block;
- width: auto;
- min-width: 16px;
- height: 18px;
- margin-right: -1px;
- padding: 4px 5px;
- font-weight: normal;
- line-height: 18px;
- color: #999999;
- text-align: center;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-.input-prepend .active, .input-append .active {
- background-color: #a9dba9;
- border-color: #46a546;
-}
-.input-prepend .add-on {
- *margin-top: 1px;
- /* IE6-7 */
-
-}
-.input-append input, .input-append .uneditable-input {
- float: left;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-.input-append .uneditable-input {
- border-right-color: #ccc;
-}
-.input-append .add-on {
- margin-right: 0;
- margin-left: -1px;
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-.input-append input:first-child {
- *margin-left: -160px;
-}
-.input-append input:first-child + .add-on {
- *margin-left: -21px;
-}
-.search-query {
- padding-left: 14px;
- padding-right: 14px;
- margin-bottom: 0;
- -webkit-border-radius: 14px;
- -moz-border-radius: 14px;
- border-radius: 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input {
- display: inline-block;
- margin-bottom: 0;
-}
-.form-search label,
-.form-inline label,
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
- display: inline-block;
-}
-.form-search .input-append .add-on,
-.form-inline .input-prepend .add-on,
-.form-search .input-append .add-on,
-.form-inline .input-prepend .add-on {
- vertical-align: middle;
-}
-.control-group {
- margin-bottom: 9px;
-}
-.form-horizontal legend + .control-group {
- margin-top: 18px;
- -webkit-margin-top-collapse: separate;
-}
-.form-horizontal .control-group {
- margin-bottom: 18px;
- *zoom: 1;
-}
-.form-horizontal .control-group:before, .form-horizontal .control-group:after {
- display: table;
- content: "";
-}
-.form-horizontal .control-group:after {
- clear: both;
-}
-.form-horizontal .control-group > label {
- float: left;
- width: 140px;
- padding-top: 5px;
- text-align: right;
-}
-.form-horizontal .controls {
- margin-left: 160px;
-}
-.form-horizontal .form-actions {
- padding-left: 160px;
-}
-table {
- max-width: 100%;
- border-collapse: collapse;
- border-spacing: 0;
-}
-.table {
- width: 100%;
- margin-bottom: 18px;
-}
-.table th, .table td {
- padding: 8px;
- line-height: 18px;
- text-align: left;
- border-top: 1px solid #ddd;
-}
-.table th {
- font-weight: bold;
- vertical-align: bottom;
-}
-.table td {
- vertical-align: top;
-}
-.table thead:first-child tr th, .table thead:first-child tr td {
- border-top: 0;
-}
-.table tbody + tbody {
- border-top: 2px solid #ddd;
-}
-.table-condensed th, .table-condensed td {
- padding: 4px 5px;
-}
-.table-bordered {
- border: 1px solid #ddd;
- border-collapse: separate;
- *border-collapse: collapsed;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.table-bordered th + th,
-.table-bordered td + td,
-.table-bordered th + td,
-.table-bordered td + th {
- border-left: 1px solid #ddd;
-}
-.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td {
- border-top: 0;
-}
-.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child {
- -webkit-border-radius: 4px 0 0 0;
- -moz-border-radius: 4px 0 0 0;
- border-radius: 4px 0 0 0;
-}
-.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child {
- -webkit-border-radius: 0 4px 0 0;
- -moz-border-radius: 0 4px 0 0;
- border-radius: 0 4px 0 0;
-}
-.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child {
- -webkit-border-radius: 0 0 0 4px;
- -moz-border-radius: 0 0 0 4px;
- border-radius: 0 0 0 4px;
-}
-.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child {
- -webkit-border-radius: 0 0 4px 0;
- -moz-border-radius: 0 0 4px 0;
- border-radius: 0 0 4px 0;
-}
-.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th {
- background-color: #f9f9f9;
-}
-table .span1 {
- float: none;
- width: 44px;
- margin-left: 0;
-}
-table .span2 {
- float: none;
- width: 124px;
- margin-left: 0;
-}
-table .span3 {
- float: none;
- width: 204px;
- margin-left: 0;
-}
-table .span4 {
- float: none;
- width: 284px;
- margin-left: 0;
-}
-table .span5 {
- float: none;
- width: 364px;
- margin-left: 0;
-}
-table .span6 {
- float: none;
- width: 444px;
- margin-left: 0;
-}
-table .span7 {
- float: none;
- width: 524px;
- margin-left: 0;
-}
-table .span8 {
- float: none;
- width: 604px;
- margin-left: 0;
-}
-table .span9 {
- float: none;
- width: 684px;
- margin-left: 0;
-}
-table .span10 {
- float: none;
- width: 764px;
- margin-left: 0;
-}
-table .span11 {
- float: none;
- width: 844px;
- margin-left: 0;
-}
-table .span12 {
- float: none;
- width: 924px;
- margin-left: 0;
-}
-[class*="icon-"] {
- display: inline-block;
- width: 14px;
- height: 14px;
- vertical-align: text-top;
- background-image: url(../img/glyphicons-halflings.png);
- background-position: 14px 14px;
- background-repeat: no-repeat;
- *margin-right: .3em;
-}
-[class*="icon-"]:last-child {
- *margin-left: 0;
-}
-.icon-white {
- background-image: url(../img/glyphicons-halflings-white.png);
-}
-.icon-glass {
- background-position: 0 0;
-}
-.icon-music {
- background-position: -24px 0;
-}
-.icon-search {
- background-position: -48px 0;
-}
-.icon-envelope {
- background-position: -72px 0;
-}
-.icon-heart {
- background-position: -96px 0;
-}
-.icon-star {
- background-position: -120px 0;
-}
-.icon-star-empty {
- background-position: -144px 0;
-}
-.icon-user {
- background-position: -168px 0;
-}
-.icon-film {
- background-position: -192px 0;
-}
-.icon-th-large {
- background-position: -216px 0;
-}
-.icon-th {
- background-position: -240px 0;
-}
-.icon-th-list {
- background-position: -264px 0;
-}
-.icon-ok {
- background-position: -288px 0;
-}
-.icon-remove {
- background-position: -312px 0;
-}
-.icon-zoom-in {
- background-position: -336px 0;
-}
-.icon-zoom-out {
- background-position: -360px 0;
-}
-.icon-off {
- background-position: -384px 0;
-}
-.icon-signal {
- background-position: -408px 0;
-}
-.icon-cog {
- background-position: -432px 0;
-}
-.icon-trash {
- background-position: -456px 0;
-}
-.icon-home {
- background-position: 0 -24px;
-}
-.icon-file {
- background-position: -24px -24px;
-}
-.icon-time {
- background-position: -48px -24px;
-}
-.icon-road {
- background-position: -72px -24px;
-}
-.icon-download-alt {
- background-position: -96px -24px;
-}
-.icon-download {
- background-position: -120px -24px;
-}
-.icon-upload {
- background-position: -144px -24px;
-}
-.icon-inbox {
- background-position: -168px -24px;
-}
-.icon-play-circle {
- background-position: -192px -24px;
-}
-.icon-repeat {
- background-position: -216px -24px;
-}
-.icon-refresh {
- background-position: -240px -24px;
-}
-.icon-list-alt {
- background-position: -264px -24px;
-}
-.icon-lock {
- background-position: -287px -24px;
-}
-.icon-flag {
- background-position: -312px -24px;
-}
-.icon-headphones {
- background-position: -336px -24px;
-}
-.icon-volume-off {
- background-position: -360px -24px;
-}
-.icon-volume-down {
- background-position: -384px -24px;
-}
-.icon-volume-up {
- background-position: -408px -24px;
-}
-.icon-qrcode {
- background-position: -432px -24px;
-}
-.icon-barcode {
- background-position: -456px -24px;
-}
-.icon-tag {
- background-position: 0 -48px;
-}
-.icon-tags {
- background-position: -25px -48px;
-}
-.icon-book {
- background-position: -48px -48px;
-}
-.icon-bookmark {
- background-position: -72px -48px;
-}
-.icon-print {
- background-position: -96px -48px;
-}
-.icon-camera {
- background-position: -120px -48px;
-}
-.icon-font {
- background-position: -144px -48px;
-}
-.icon-bold {
- background-position: -167px -48px;
-}
-.icon-italic {
- background-position: -192px -48px;
-}
-.icon-text-height {
- background-position: -216px -48px;
-}
-.icon-text-width {
- background-position: -240px -48px;
-}
-.icon-align-left {
- background-position: -264px -48px;
-}
-.icon-align-center {
- background-position: -288px -48px;
-}
-.icon-align-right {
- background-position: -312px -48px;
-}
-.icon-align-justify {
- background-position: -336px -48px;
-}
-.icon-list {
- background-position: -360px -48px;
-}
-.icon-indent-left {
- background-position: -384px -48px;
-}
-.icon-indent-right {
- background-position: -408px -48px;
-}
-.icon-facetime-video {
- background-position: -432px -48px;
-}
-.icon-picture {
- background-position: -456px -48px;
-}
-.icon-pencil {
- background-position: 0 -72px;
-}
-.icon-map-marker {
- background-position: -24px -72px;
-}
-.icon-adjust {
- background-position: -48px -72px;
-}
-.icon-tint {
- background-position: -72px -72px;
-}
-.icon-edit {
- background-position: -96px -72px;
-}
-.icon-share {
- background-position: -120px -72px;
-}
-.icon-check {
- background-position: -144px -72px;
-}
-.icon-move {
- background-position: -168px -72px;
-}
-.icon-step-backward {
- background-position: -192px -72px;
-}
-.icon-fast-backward {
- background-position: -216px -72px;
-}
-.icon-backward {
- background-position: -240px -72px;
-}
-.icon-play {
- background-position: -264px -72px;
-}
-.icon-pause {
- background-position: -288px -72px;
-}
-.icon-stop {
- background-position: -312px -72px;
-}
-.icon-forward {
- background-position: -336px -72px;
-}
-.icon-fast-forward {
- background-position: -360px -72px;
-}
-.icon-step-forward {
- background-position: -384px -72px;
-}
-.icon-eject {
- background-position: -408px -72px;
-}
-.icon-chevron-left {
- background-position: -432px -72px;
-}
-.icon-chevron-right {
- background-position: -456px -72px;
-}
-.icon-plus-sign {
- background-position: 0 -96px;
-}
-.icon-minus-sign {
- background-position: -24px -96px;
-}
-.icon-remove-sign {
- background-position: -48px -96px;
-}
-.icon-ok-sign {
- background-position: -72px -96px;
-}
-.icon-question-sign {
- background-position: -96px -96px;
-}
-.icon-info-sign {
- background-position: -120px -96px;
-}
-.icon-screenshot {
- background-position: -144px -96px;
-}
-.icon-remove-circle {
- background-position: -168px -96px;
-}
-.icon-ok-circle {
- background-position: -192px -96px;
-}
-.icon-ban-circle {
- background-position: -216px -96px;
-}
-.icon-arrow-left {
- background-position: -240px -96px;
-}
-.icon-arrow-right {
- background-position: -264px -96px;
-}
-.icon-arrow-up {
- background-position: -289px -96px;
-}
-.icon-arrow-down {
- background-position: -312px -96px;
-}
-.icon-share-alt {
- background-position: -336px -96px;
-}
-.icon-resize-full {
- background-position: -360px -96px;
-}
-.icon-resize-small {
- background-position: -384px -96px;
-}
-.icon-plus {
- background-position: -408px -96px;
-}
-.icon-minus {
- background-position: -433px -96px;
-}
-.icon-asterisk {
- background-position: -456px -96px;
-}
-.icon-exclamation-sign {
- background-position: 0 -120px;
-}
-.icon-gift {
- background-position: -24px -120px;
-}
-.icon-leaf {
- background-position: -48px -120px;
-}
-.icon-fire {
- background-position: -72px -120px;
-}
-.icon-eye-open {
- background-position: -96px -120px;
-}
-.icon-eye-close {
- background-position: -120px -120px;
-}
-.icon-warning-sign {
- background-position: -144px -120px;
-}
-.icon-plane {
- background-position: -168px -120px;
-}
-.icon-calendar {
- background-position: -192px -120px;
-}
-.icon-random {
- background-position: -216px -120px;
-}
-.icon-comment {
- background-position: -240px -120px;
-}
-.icon-magnet {
- background-position: -264px -120px;
-}
-.icon-chevron-up {
- background-position: -288px -120px;
-}
-.icon-chevron-down {
- background-position: -313px -119px;
-}
-.icon-retweet {
- background-position: -336px -120px;
-}
-.icon-shopping-cart {
- background-position: -360px -120px;
-}
-.icon-folder-close {
- background-position: -384px -120px;
-}
-.icon-folder-open {
- background-position: -408px -120px;
-}
-.icon-resize-vertical {
- background-position: -432px -119px;
-}
-.icon-resize-horizontal {
- background-position: -456px -118px;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-toggle {
- *margin-bottom: -3px;
-}
-.dropdown-toggle:active, .open .dropdown-toggle {
- outline: 0;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- text-indent: -99999px;
- *text-indent: 0;
- vertical-align: top;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 4px solid #000000;
- opacity: 0.3;
- filter: alpha(opacity=30);
- content: "\2193";
-}
-.dropdown .caret {
- margin-top: 8px;
- margin-left: 2px;
-}
-.dropdown:hover .caret, .open.dropdown .caret {
- opacity: 1;
- filter: alpha(opacity=100);
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- float: left;
- display: none;
- min-width: 160px;
- max-width: 220px;
- _width: 160px;
- padding: 4px 0;
- margin: 0;
- list-style: none;
- background-color: #ffffff;
- border-color: #ccc;
- border-color: rgba(0, 0, 0, 0.2);
- border-style: solid;
- border-width: 1px;
- -webkit-border-radius: 0 0 5px 5px;
- -moz-border-radius: 0 0 5px 5px;
- border-radius: 0 0 5px 5px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
- *border-right-width: 2px;
- *border-bottom-width: 2px;
-}
-.dropdown-menu.bottom-up {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 5px 1px;
- overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
- *width: 100%;
- *margin: -5px 0 5px;
-}
-.dropdown-menu a {
- display: block;
- padding: 3px 15px;
- clear: both;
- font-weight: normal;
- line-height: 18px;
- color: #555555;
- white-space: nowrap;
-}
-.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
- color: #ffffff;
- text-decoration: none;
- background-color: #0088cc;
-}
-.dropdown.open {
- *z-index: 1000;
-}
-.dropdown.open .dropdown-toggle {
- color: #ffffff;
- background: #ccc;
- background: rgba(0, 0, 0, 0.3);
-}
-.dropdown.open .dropdown-menu {
- display: block;
-}
-.typeahead {
- margin-top: 2px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #eee;
- border: 1px solid rgba(0, 0, 0, 0.05);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
-}
-.fade {
- -webkit-transition: opacity 0.15s linear;
- -moz-transition: opacity 0.15s linear;
- -ms-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
- opacity: 0;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- -webkit-transition: height 0.35s ease;
- -moz-transition: height 0.35s ease;
- -ms-transition: height 0.35s ease;
- -o-transition: height 0.35s ease;
- transition: height 0.35s ease;
- position: relative;
- overflow: hidden;
- height: 0;
-}
-.collapse.in {
- height: auto;
-}
-.close {
- float: right;
- font-size: 20px;
- font-weight: bold;
- line-height: 18px;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-.close:hover {
- color: #000000;
- text-decoration: none;
- opacity: 0.4;
- filter: alpha(opacity=40);
- cursor: pointer;
-}
-.btn {
- display: inline-block;
- padding: 4px 10px 4px;
- font-size: 13px;
- line-height: 18px;
- color: #333333;
- text-align: center;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
- background-color: #fafafa;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
- background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
- background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
- background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
- background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
- background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
- background-repeat: no-repeat;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
- border: 1px solid #ccc;
- border-bottom-color: #bbb;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- cursor: pointer;
- *margin-left: .3em;
-}
-.btn:first-child {
- *margin-left: 0;
-}
-.btn:hover {
- color: #333333;
- text-decoration: none;
- background-color: #e6e6e6;
- background-position: 0 -15px;
- -webkit-transition: background-position 0.1s linear;
- -moz-transition: background-position 0.1s linear;
- -ms-transition: background-position 0.1s linear;
- -o-transition: background-position 0.1s linear;
- transition: background-position 0.1s linear;
-}
-.btn:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn.active, .btn:active {
- background-image: none;
- -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- background-color: #e6e6e6;
- background-color: #d9d9d9 \9;
- color: rgba(0, 0, 0, 0.5);
- outline: 0;
-}
-.btn.disabled, .btn[disabled] {
- cursor: default;
- background-image: none;
- background-color: #e6e6e6;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-.btn-large {
- padding: 9px 14px;
- font-size: 15px;
- line-height: normal;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-.btn-large .icon {
- margin-top: 1px;
-}
-.btn-small {
- padding: 5px 9px;
- font-size: 11px;
- line-height: 16px;
-}
-.btn-small .icon {
- margin-top: -1px;
-}
-.btn-primary,
-.btn-primary:hover,
-.btn-warning,
-.btn-warning:hover,
-.btn-danger,
-.btn-danger:hover,
-.btn-success,
-.btn-success:hover,
-.btn-info,
-.btn-info:hover {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- color: #ffffff;
-}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active {
- color: rgba(255, 255, 255, 0.75);
-}
-.btn-primary {
- background-color: #006dcc;
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
- background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
- background-image: linear-gradient(top, #0088cc, #0044cc);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
- border-color: #0044cc #0044cc #002a80;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-primary:hover,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
- background-color: #0044cc;
-}
-.btn-primary:active, .btn-primary.active {
- background-color: #003399 \9;
-}
-.btn-warning {
- background-color: #faa732;
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-image: -ms-linear-gradient(top, #fbb450, #f89406);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(top, #fbb450, #f89406);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
- border-color: #f89406 #f89406 #ad6704;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-warning:hover,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
- background-color: #f89406;
-}
-.btn-warning:active, .btn-warning.active {
- background-color: #c67605 \9;
-}
-.btn-danger {
- background-color: #da4f49;
- background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: linear-gradient(top, #ee5f5b, #bd362f);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
- border-color: #bd362f #bd362f #802420;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-danger:hover,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
- background-color: #bd362f;
-}
-.btn-danger:active, .btn-danger.active {
- background-color: #942a25 \9;
-}
-.btn-success {
- background-color: #5bb75b;
- background-image: -moz-linear-gradient(top, #62c462, #51a351);
- background-image: -ms-linear-gradient(top, #62c462, #51a351);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
- background-image: -webkit-linear-gradient(top, #62c462, #51a351);
- background-image: -o-linear-gradient(top, #62c462, #51a351);
- background-image: linear-gradient(top, #62c462, #51a351);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
- border-color: #51a351 #51a351 #387038;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-success:hover,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
- background-color: #51a351;
-}
-.btn-success:active, .btn-success.active {
- background-color: #408140 \9;
-}
-.btn-info {
- background-color: #49afcd;
- background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
- background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: linear-gradient(top, #5bc0de, #2f96b4);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
- border-color: #2f96b4 #2f96b4 #1f6377;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-info:hover,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
- background-color: #2f96b4;
-}
-.btn-info:active, .btn-info.active {
- background-color: #24748c \9;
-}
-button.btn, input[type="submit"].btn {
- *padding-top: 2px;
- *padding-bottom: 2px;
-}
-button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-button.btn.large, input[type="submit"].btn.large {
- *padding-top: 7px;
- *padding-bottom: 7px;
-}
-button.btn.small, input[type="submit"].btn.small {
- *padding-top: 3px;
- *padding-bottom: 3px;
-}
-.btn-group {
- position: relative;
- *zoom: 1;
- *margin-left: .3em;
-}
-.btn-group:before, .btn-group:after {
- display: table;
- content: "";
-}
-.btn-group:after {
- clear: both;
-}
-.btn-group:first-child {
- *margin-left: 0;
-}
-.btn-group + .btn-group {
- margin-left: 5px;
-}
-.btn-toolbar {
- margin-top: 9px;
- margin-bottom: 9px;
-}
-.btn-toolbar .btn-group {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
-}
-.btn-group .btn {
- position: relative;
- float: left;
- margin-left: -1px;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.btn-group .btn:first-child {
- margin-left: 0;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- border-bottom-left-radius: 4px;
-}
-.btn-group .btn:last-child, .btn-group .dropdown-toggle {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- border-bottom-right-radius: 4px;
-}
-.btn-group .btn.large:first-child {
- margin-left: 0;
- -webkit-border-top-left-radius: 6px;
- -moz-border-radius-topleft: 6px;
- border-top-left-radius: 6px;
- -webkit-border-bottom-left-radius: 6px;
- -moz-border-radius-bottomleft: 6px;
- border-bottom-left-radius: 6px;
-}
-.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
- -webkit-border-top-right-radius: 6px;
- -moz-border-radius-topright: 6px;
- border-top-right-radius: 6px;
- -webkit-border-bottom-right-radius: 6px;
- -moz-border-radius-bottomright: 6px;
- border-bottom-right-radius: 6px;
-}
-.btn-group .btn:hover,
-.btn-group .btn:focus,
-.btn-group .btn:active,
-.btn-group .btn.active {
- z-index: 2;
-}
-.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- *padding-top: 5px;
- *padding-bottom: 5px;
-}
-.btn-group.open {
- *z-index: 1000;
-}
-.btn-group.open .dropdown-menu {
- display: block;
- margin-top: 1px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-.btn-group.open .dropdown-toggle {
- background-image: none;
- -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.btn .caret {
- margin-top: 7px;
- margin-left: 0;
-}
-.btn:hover .caret, .open.btn-group .caret {
- opacity: 1;
- filter: alpha(opacity=100);
-}
-.btn-primary .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret {
- border-top-color: #ffffff;
- opacity: 0.75;
- filter: alpha(opacity=75);
-}
-.btn-small .caret {
- margin-top: 4px;
-}
-.alert {
- padding: 8px 35px 8px 14px;
- margin-bottom: 18px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- background-color: #fcf8e3;
- border: 1px solid #fbeed5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.alert, .alert-heading {
- color: #c09853;
-}
-.alert .close {
- position: relative;
- top: -2px;
- right: -21px;
- line-height: 18px;
-}
-.alert-success {
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.alert-success, .alert-success .alert-heading {
- color: #468847;
-}
-.alert-danger, .alert-error {
- background-color: #f2dede;
- border-color: #eed3d7;
-}
-.alert-danger,
-.alert-error,
-.alert-danger .alert-heading,
-.alert-error .alert-heading {
- color: #b94a48;
-}
-.alert-info {
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.alert-info, .alert-info .alert-heading {
- color: #3a87ad;
-}
-.alert-block {
- padding-top: 14px;
- padding-bottom: 14px;
-}
-.alert-block > p, .alert-block > ul {
- margin-bottom: 0;
-}
-.alert-block p + p {
- margin-top: 5px;
-}
-.nav {
- margin-left: 0;
- margin-bottom: 18px;
- list-style: none;
-}
-.nav > li > a {
- display: block;
-}
-.nav > li > a:hover {
- text-decoration: none;
- background-color: #eeeeee;
-}
-.nav-list {
- padding-left: 14px;
- padding-right: 14px;
- margin-bottom: 0;
-}
-.nav-list > li > a, .nav-list .nav-header {
- display: block;
- padding: 3px 15px;
- margin-left: -15px;
- margin-right: -15px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-.nav-list .nav-header {
- font-size: 11px;
- font-weight: bold;
- line-height: 18px;
- color: #999999;
- text-transform: uppercase;
-}
-.nav-list > li + .nav-header {
- margin-top: 9px;
-}
-.nav-list .active > a {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
- background-color: #0088cc;
-}
-.nav-list .icon {
- margin-right: 2px;
-}
-.nav-tabs, .nav-pills {
- *zoom: 1;
-}
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
- display: table;
- content: "";
-}
-.nav-tabs:after, .nav-pills:after {
- clear: both;
-}
-.nav-tabs > li, .nav-pills > li {
- float: left;
-}
-.nav-tabs > li > a, .nav-pills > li > a {
- padding-right: 12px;
- padding-left: 12px;
- margin-right: 2px;
- line-height: 14px;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- padding-top: 9px;
- padding-bottom: 9px;
- border: 1px solid transparent;
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #dddddd;
-}
-.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
- color: #555555;
- background-color: #ffffff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
-}
-.nav-pills > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- margin-top: 2px;
- margin-bottom: 2px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-.nav-pills .active > a, .nav-pills .active > a:hover {
- color: #ffffff;
- background-color: #0088cc;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li > a {
- margin-right: 0;
-}
-.nav-tabs.nav-stacked {
- border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
- border: 1px solid #ddd;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.nav-tabs.nav-stacked > li:first-child > a {
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs.nav-stacked > li:last-child > a {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-.nav-tabs.nav-stacked > li > a:hover {
- border-color: #ddd;
- z-index: 2;
-}
-.nav-pills.nav-stacked > li > a {
- margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
- margin-bottom: 1px;
-}
-.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
- margin-top: 1px;
- border-width: 1px;
-}
-.nav-pills .dropdown-menu {
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
- border-top-color: #0088cc;
- margin-top: 6px;
-}
-.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
- border-top-color: #005580;
-}
-.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret {
- border-top-color: #333333;
-}
-.nav > .dropdown.active > a:hover {
- color: #000000;
- cursor: pointer;
-}
-.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover {
- color: #ffffff;
- background-color: #999999;
- border-color: #999999;
-}
-.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
- border-top-color: #ffffff;
- opacity: 1;
- filter: alpha(opacity=100);
-}
-.tabs-stacked .open > a:hover {
- border-color: #999999;
-}
-.tabbable {
- *zoom: 1;
-}
-.tabbable:before, .tabbable:after {
- display: table;
- content: "";
-}
-.tabbable:after {
- clear: both;
-}
-.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
- border-bottom: 0;
-}
-.tab-content > .tab-pane, .pill-content > .pill-pane {
- display: none;
-}
-.tab-content > .active, .pill-content > .active {
- display: block;
-}
-.tabs-below .nav-tabs {
- border-top: 1px solid #ddd;
-}
-.tabs-below .nav-tabs > li {
- margin-top: -1px;
- margin-bottom: 0;
-}
-.tabs-below .nav-tabs > li > a {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-.tabs-below .nav-tabs > li > a:hover {
- border-bottom-color: transparent;
- border-top-color: #ddd;
-}
-.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
- border-color: transparent #ddd #ddd #ddd;
-}
-.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
- float: none;
-}
-.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
- min-width: 74px;
- margin-right: 0;
- margin-bottom: 3px;
-}
-.tabs-left .nav-tabs {
- float: left;
- margin-right: 19px;
- border-right: 1px solid #ddd;
-}
-.tabs-left .nav-tabs > li > a {
- margin-right: -1px;
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-.tabs-left .nav-tabs > li > a:hover {
- border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-}
-.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
- border-color: #ddd transparent #ddd #ddd;
- *border-right-color: #ffffff;
-}
-.tabs-right .nav-tabs {
- float: right;
- margin-left: 19px;
- border-left: 1px solid #ddd;
-}
-.tabs-right .nav-tabs > li > a {
- margin-left: -1px;
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.tabs-right .nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #eeeeee #dddddd;
-}
-.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
- border-color: #ddd #ddd #ddd transparent;
- *border-left-color: #ffffff;
-}
-.navbar {
- overflow: visible;
- margin-bottom: 18px;
-}
-.navbar-inner {
- padding-left: 20px;
- padding-right: 20px;
- background-color: #2c2c2c;
- background-image: -moz-linear-gradient(top, #333333, #222222);
- background-image: -ms-linear-gradient(top, #333333, #222222);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
- background-image: -webkit-linear-gradient(top, #333333, #222222);
- background-image: -o-linear-gradient(top, #333333, #222222);
- background-image: linear-gradient(top, #333333, #222222);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-.btn-navbar {
- display: none;
- float: right;
- padding: 7px 10px;
- margin-left: 5px;
- margin-right: 5px;
- background-color: #2c2c2c;
- background-image: -moz-linear-gradient(top, #333333, #222222);
- background-image: -ms-linear-gradient(top, #333333, #222222);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
- background-image: -webkit-linear-gradient(top, #333333, #222222);
- background-image: -o-linear-gradient(top, #333333, #222222);
- background-image: linear-gradient(top, #333333, #222222);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
- border-color: #222222 #222222 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-}
-.btn-navbar:hover,
-.btn-navbar:active,
-.btn-navbar.active,
-.btn-navbar.disabled,
-.btn-navbar[disabled] {
- background-color: #222222;
-}
-.btn-navbar:active, .btn-navbar.active {
- background-color: #080808 \9;
-}
-.btn-navbar .icon-bar {
- display: block;
- width: 18px;
- height: 2px;
- background-color: #f5f5f5;
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- border-radius: 1px;
- -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-}
-.btn-navbar .icon-bar + .icon-bar {
- margin-top: 3px;
-}
-.nav-collapse.collapse {
- height: auto;
-}
-.navbar .brand:hover {
- text-decoration: none;
-}
-.navbar .brand {
- float: left;
- display: block;
- padding: 8px 20px 12px;
- margin-left: -20px;
- font-size: 20px;
- font-weight: 200;
- line-height: 1;
- color: #ffffff;
-}
-.navbar .navbar-text {
- margin-bottom: 0;
- line-height: 40px;
- color: #999999;
-}
-.navbar .navbar-text a:hover {
- color: #ffffff;
- background-color: transparent;
-}
-.navbar .btn, .navbar .btn-group {
- margin-top: 5px;
-}
-.navbar .btn-group .btn {
- margin-top: 0;
-}
-.navbar-form {
- margin-bottom: 0;
- *zoom: 1;
-}
-.navbar-form:before, .navbar-form:after {
- display: table;
- content: "";
-}
-.navbar-form:after {
- clear: both;
-}
-.navbar-form input, .navbar-form select {
- display: inline-block;
- margin-top: 5px;
- margin-bottom: 0;
-}
-.navbar-form .radio, .navbar-form .checkbox {
- margin-top: 5px;
-}
-.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] {
- margin-top: 3px;
-}
-.navbar-search {
- position: relative;
- float: left;
- margin-top: 6px;
- margin-bottom: 0;
-}
-.navbar-search .search-query {
- padding: 4px 9px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- font-weight: normal;
- line-height: 1;
- color: #ffffff;
- color: rgba(255, 255, 255, 0.75);
- background: #666;
- background: rgba(255, 255, 255, 0.3);
- border: 1px solid #111;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
- -webkit-transition: none;
- -moz-transition: none;
- -ms-transition: none;
- -o-transition: none;
- transition: none;
-}
-.navbar-search .search-query :-moz-placeholder {
- color: #eeeeee;
-}
-.navbar-search .search-query::-webkit-input-placeholder {
- color: #eeeeee;
-}
-.navbar-search .search-query:hover {
- color: #ffffff;
- background-color: #999999;
- background-color: rgba(255, 255, 255, 0.5);
-}
-.navbar-search .search-query:focus, .navbar-search .search-query.focused {
- padding: 5px 10px;
- color: #333333;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #ffffff;
- border: 0;
- -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- outline: 0;
-}
-.navbar-fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-.navbar-fixed-top .navbar-inner {
- padding-left: 0;
- padding-right: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.navbar .nav {
- position: relative;
- left: 0;
- display: block;
- float: left;
- margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
- float: right;
-}
-.navbar .nav > li {
- display: block;
- float: left;
-}
-.navbar .nav > li > a {
- float: none;
- padding: 10px 10px 11px;
- line-height: 19px;
- color: #999999;
- text-decoration: none;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-.navbar .nav > li > a:hover {
- background-color: transparent;
- color: #ffffff;
- text-decoration: none;
-}
-.navbar .nav .active > a, .navbar .nav .active > a:hover {
- color: #ffffff;
- text-decoration: none;
- background-color: #222222;
- background-color: rgba(0, 0, 0, 0.5);
-}
-.navbar .divider-vertical {
- height: 40px;
- width: 1px;
- margin: 0 9px;
- overflow: hidden;
- background-color: #222222;
- border-right: 1px solid #333333;
-}
-.navbar .nav.pull-right {
- margin-left: 10px;
- margin-right: 0;
-}
-.navbar .dropdown-menu {
- margin-top: 1px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.navbar .dropdown-menu:before {
- content: '';
- display: inline-block;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid #ccc;
- border-bottom-color: rgba(0, 0, 0, 0.2);
- position: absolute;
- top: -7px;
- left: 9px;
-}
-.navbar .dropdown-menu:after {
- content: '';
- display: inline-block;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 6px solid #ffffff;
- position: absolute;
- top: -6px;
- left: 10px;
-}
-.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
- border-top-color: #ffffff;
-}
-.navbar .nav .active .caret {
- opacity: 1;
- filter: alpha(opacity=100);
-}
-.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle {
- background-color: transparent;
-}
-.navbar .nav .active > .dropdown-toggle:hover {
- color: #ffffff;
-}
-.navbar .nav.pull-right .dropdown-menu {
- left: auto;
- right: 0;
-}
-.navbar .nav.pull-right .dropdown-menu:before {
- left: auto;
- right: 12px;
-}
-.navbar .nav.pull-right .dropdown-menu:after {
- left: auto;
- right: 13px;
-}
-.breadcrumb {
- padding: 7px 14px;
- margin: 0 0 18px;
- background-color: #fbfbfb;
- background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
- background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: linear-gradient(top, #ffffff, #f5f5f5);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
- border: 1px solid #ddd;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
- -moz-box-shadow: inset 0 1px 0 #ffffff;
- box-shadow: inset 0 1px 0 #ffffff;
-}
-.breadcrumb li {
- display: inline;
- text-shadow: 0 1px 0 #ffffff;
-}
-.breadcrumb .divider {
- padding: 0 5px;
- color: #999999;
-}
-.breadcrumb .active a {
- color: #333333;
-}
-.pagination {
- height: 36px;
- margin: 18px 0;
-}
-.pagination ul {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- margin-left: 0;
- margin-bottom: 0;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.pagination li {
- display: inline;
-}
-.pagination a {
- float: left;
- padding: 0 14px;
- line-height: 34px;
- text-decoration: none;
- border: 1px solid #ddd;
- border-left-width: 0;
-}
-.pagination a:hover, .pagination .active a {
- background-color: #f5f5f5;
-}
-.pagination .active a {
- color: #999999;
- cursor: default;
-}
-.pagination .disabled a, .pagination .disabled a:hover {
- color: #999999;
- background-color: transparent;
- cursor: default;
-}
-.pagination li:first-child a {
- border-left-width: 1px;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-.pagination li:last-child a {
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-.pagination-centered {
- text-align: center;
-}
-.pagination-right {
- text-align: right;
-}
-.pager {
- margin-left: 0;
- margin-bottom: 18px;
- list-style: none;
- text-align: center;
- *zoom: 1;
-}
-.pager:before, .pager:after {
- display: table;
- content: "";
-}
-.pager:after {
- clear: both;
-}
-.pager li {
- display: inline;
-}
-.pager a {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-.pager a:hover {
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.pager .next a {
- float: right;
-}
-.pager .previous a {
- float: left;
-}
-.modal-open .dropdown-menu {
- z-index: 2050;
-}
-.modal-open .dropdown.open {
- *z-index: 2050;
-}
-.modal-open .popover {
- z-index: 2060;
-}
-.modal-open .tooltip {
- z-index: 2070;
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-.modal-backdrop.fade {
- opacity: 0;
-}
-.modal-backdrop, .modal-backdrop.fade.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-.modal {
- position: fixed;
- top: 50%;
- left: 50%;
- z-index: 1050;
- max-height: 500px;
- overflow: auto;
- width: 560px;
- margin: -250px 0 0 -280px;
- background-color: #ffffff;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, 0.3);
- *border: 1px solid #999;
- /* IE6-7 */
-
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
-}
-.modal.fade {
- -webkit-transition: opacity .3s linear, top .3s ease-out;
- -moz-transition: opacity .3s linear, top .3s ease-out;
- -ms-transition: opacity .3s linear, top .3s ease-out;
- -o-transition: opacity .3s linear, top .3s ease-out;
- transition: opacity .3s linear, top .3s ease-out;
- top: -25%;
-}
-.modal.fade.in {
- top: 50%;
-}
-.modal-header {
- padding: 9px 15px;
- border-bottom: 1px solid #eee;
-}
-.modal-header .close {
- margin-top: 2px;
-}
-.modal-body {
- padding: 15px;
-}
-.modal-footer {
- padding: 14px 15px 15px;
- margin-bottom: 0;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
- -moz-box-shadow: inset 0 1px 0 #ffffff;
- box-shadow: inset 0 1px 0 #ffffff;
- *zoom: 1;
-}
-.modal-footer:before, .modal-footer:after {
- display: table;
- content: "";
-}
-.modal-footer:after {
- clear: both;
-}
-.modal-footer .btn {
- float: right;
- margin-left: 5px;
- margin-bottom: 0;
-}
-.tooltip {
- position: absolute;
- z-index: 1020;
- display: block;
- visibility: visible;
- padding: 5px;
- font-size: 11px;
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.tooltip.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-.tooltip.top {
- margin-top: -2px;
-}
-.tooltip.right {
- margin-left: 2px;
-}
-.tooltip.bottom {
- margin-top: 2px;
-}
-.tooltip.left {
- margin-left: -2px;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 5px solid #000000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-left: 5px solid #000000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 5px solid #000000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-right: 5px solid #000000;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #ffffff;
- text-align: center;
- text-decoration: none;
- background-color: #000000;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1010;
- display: none;
- padding: 5px;
-}
-.popover.top {
- margin-top: -5px;
-}
-.popover.right {
- margin-left: 5px;
-}
-.popover.bottom {
- margin-top: 5px;
-}
-.popover.left {
- margin-left: -5px;
-}
-.popover.top .arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 5px solid #000000;
-}
-.popover.right .arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-right: 5px solid #000000;
-}
-.popover.bottom .arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 5px solid #000000;
-}
-.popover.left .arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-left: 5px solid #000000;
-}
-.popover .arrow {
- position: absolute;
- width: 0;
- height: 0;
-}
-.popover-inner {
- padding: 3px;
- width: 280px;
- overflow: hidden;
- background: #000000;
- background: rgba(0, 0, 0, 0.8);
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-}
-.popover-title {
- padding: 9px 15px;
- line-height: 1;
- background-color: #f5f5f5;
- border-bottom: 1px solid #eee;
- -webkit-border-radius: 3px 3px 0 0;
- -moz-border-radius: 3px 3px 0 0;
- border-radius: 3px 3px 0 0;
-}
-.popover-content {
- padding: 14px;
- background-color: #ffffff;
- -webkit-border-radius: 0 0 3px 3px;
- -moz-border-radius: 0 0 3px 3px;
- border-radius: 0 0 3px 3px;
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
-}
-.popover-content p, .popover-content ul, .popover-content ol {
- margin-bottom: 0;
-}
-.thumbnails {
- margin-left: -20px;
- list-style: none;
- *zoom: 1;
-}
-.thumbnails:before, .thumbnails:after {
- display: table;
- content: "";
-}
-.thumbnails:after {
- clear: both;
-}
-.thumbnails > li {
- float: left;
- margin: 0 0 18px 20px;
-}
-.thumbnail {
- display: block;
- padding: 4px;
- line-height: 1;
- border: 1px solid #ddd;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-a.thumbnail:hover {
- border-color: #0088cc;
- -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-.thumbnail > img {
- display: block;
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
-}
-.thumbnail .caption {
- padding: 9px;
-}
-.label {
- padding: 1px 3px 2px;
- font-size: 9.75px;
- font-weight: bold;
- color: #ffffff;
- text-transform: uppercase;
- background-color: #999999;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.label-important {
- background-color: #b94a48;
-}
-.label-warning {
- background-color: #f89406;
-}
-.label-success {
- background-color: #468847;
-}
-.label-info {
- background-color: #3a87ad;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
-}
-@-moz-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
-}
-.progress {
- overflow: hidden;
- height: 18px;
- margin-bottom: 18px;
- background-color: #f7f7f7;
- background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
- background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.progress .bar {
- width: 0%;
- height: 18px;
- color: #ffffff;
- font-size: 12px;
- text-align: center;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #0e90d2;
- background-image: -moz-linear-gradient(top, #149bdf, #0480be);
- background-image: -ms-linear-gradient(top, #149bdf, #0480be);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
- background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
- background-image: -o-linear-gradient(top, #149bdf, #0480be);
- background-image: linear-gradient(top, #149bdf, #0480be);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: width 0.6s ease;
- -moz-transition: width 0.6s ease;
- -ms-transition: width 0.6s ease;
- -o-transition: width 0.6s ease;
- transition: width 0.6s ease;
-}
-.progress-striped .bar {
- background-color: #62c462;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- -moz-background-size: 40px 40px;
- -o-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .bar {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -moz-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-danger .bar {
- background-color: #dd514c;
- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: linear-gradient(top, #ee5f5b, #c43c35);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-}
-.progress-danger.progress-striped .bar {
- background-color: #ee5f5b;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-success .bar {
- background-color: #5eb95e;
- background-image: -moz-linear-gradient(top, #62c462, #57a957);
- background-image: -ms-linear-gradient(top, #62c462, #57a957);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
- background-image: -webkit-linear-gradient(top, #62c462, #57a957);
- background-image: -o-linear-gradient(top, #62c462, #57a957);
- background-image: linear-gradient(top, #62c462, #57a957);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-}
-.progress-success.progress-striped .bar {
- background-color: #62c462;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-info .bar {
- background-color: #4bb1cf;
- background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
- background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
- background-image: linear-gradient(top, #5bc0de, #339bb9);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
-}
-.progress-info.progress-striped .bar {
- background-color: #5bc0de;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.accordion {
- margin-bottom: 18px;
-}
-.accordion-group {
- margin-bottom: 2px;
- border: 1px solid #e5e5e5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.accordion-heading {
- border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
- display: block;
- padding: 8px 15px;
-}
-.accordion-inner {
- padding: 9px 15px;
- border-top: 1px solid #e5e5e5;
-}
-.carousel {
- position: relative;
- margin-bottom: 18px;
- line-height: 1;
-}
-.carousel-inner {
- overflow: hidden;
- width: 100%;
- position: relative;
-}
-.carousel .item {
- display: none;
- position: relative;
- -webkit-transition: 0.6s ease-in-out left;
- -moz-transition: 0.6s ease-in-out left;
- -ms-transition: 0.6s ease-in-out left;
- -o-transition: 0.6s ease-in-out left;
- transition: 0.6s ease-in-out left;
-}
-.carousel .item > img {
- display: block;
- line-height: 1;
-}
-.carousel .active, .carousel .next, .carousel .prev {
- display: block;
-}
-.carousel .active {
- left: 0;
-}
-.carousel .next, .carousel .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel .next {
- left: 100%;
-}
-.carousel .prev {
- left: -100%;
-}
-.carousel .next.left, .carousel .prev.right {
- left: 0;
-}
-.carousel .active.left {
- left: -100%;
-}
-.carousel .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 40%;
- left: 15px;
- width: 40px;
- height: 40px;
- margin-top: -20px;
- font-size: 60px;
- font-weight: 100;
- line-height: 30px;
- color: #ffffff;
- text-align: center;
- background: #222222;
- border: 3px solid #ffffff;
- -webkit-border-radius: 23px;
- -moz-border-radius: 23px;
- border-radius: 23px;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-.carousel-control.right {
- left: auto;
- right: 15px;
-}
-.carousel-control:hover {
- color: #ffffff;
- text-decoration: none;
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-.carousel-caption {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 10px 15px 5px;
- background: #333333;
- background: rgba(0, 0, 0, 0.75);
-}
-.carousel-caption h4, .carousel-caption p {
- color: #ffffff;
-}
-.hero-unit {
- padding: 60px;
- margin-bottom: 30px;
- background-color: #f5f5f5;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.hero-unit h1 {
- margin-bottom: 0;
- font-size: 60px;
- line-height: 1;
- letter-spacing: -1px;
-}
-.hero-unit p {
- font-size: 18px;
- font-weight: 200;
- line-height: 27px;
-}
-.pull-right {
- float: right;
-}
-.pull-left {
- float: left;
-}
-.hide {
- display: none;
-}
-.show {
- display: block;
-}
-.invisible {
- visibility: hidden;
-}
diff --git a/assets/css/docs.css b/assets/css/docs.css
deleted file mode 100644
index ab9a080..0000000
--- a/assets/css/docs.css
+++ /dev/null
@@ -1,252 +0,0 @@
-body {
- position: relative;
- background-color: #fff;
- background-repeat: repeat-x;
- background-position: 0 40px;
-}
-
-section {
- padding-top: 30px;
-}
-
-hr.soften {
- height: 1px;
- margin: 54px 0;
- background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- border: 0;
-}
-
-.jumbotron {
- position: relative;
-}
-.jumbotron h1 {
- margin-bottom: 9px;
- font-size: 81px;
- letter-spacing: -1px;
- line-height: 1;
-}
-.jumbotron p {
- margin-bottom: 18px;
- font-size: 25px;
- font-weight: 300;
- line-height: 36px;
- color: #333;
-}
-.jumbotron .btn-large {
- font-size: 20px;
- font-weight: normal;
- padding: 14px 24px;
- margin-right: 10px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.jumbotron .download-info {
- font-size: 16px;
- color: #999;
-}
-
-/* Masthead (docs home) */
-.masthead {
- padding-top: 36px;
- margin-bottom: 72px;
-}
-.masthead h1,
-.masthead p {
- text-align: center;
-}
-.masthead h1 {
- margin-bottom: 18px;
-}
-.masthead p {
- margin: 0 5% 18px;
- font-size: 30px;
- line-height: 36px;
-}
-
-.subhead {
- padding-top: 40px;
- padding-bottom: 0;
- border-bottom: 0;
-}
-.subhead h1,
-.subhead p {
- margin-right: 0;
-}
-.subhead h1 {
- font-size: 54px;
-}
-
-.subnav {
- width: 100%;
- height: 36px;
- background-color: #eeeeee; /* Old browsers */
- background-repeat: repeat-x; /* Repeat the gradient */
- background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */
- background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */
- background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */
- background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */
- border: 1px solid #e5e5e5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.subnav .nav {
- margin-bottom: 0;
-}
-.subnav .nav > li > a {
- margin: 0;
- padding-top: 11px;
- padding-bottom: 11px;
- border-left: 1px solid #f5f5f5;
- border-right: 1px solid #e5e5e5;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.subnav .nav > .active > a,
-.subnav .nav > .active > a:hover {
- padding-left: 13px;
- color: #777;
- background-color: #e9e9e9;
- border-right-color: #ddd;
- border-left: 0;
- -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
- -moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
- box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
-}
-.subnav .nav > .active > a .caret,
-.subnav .nav > .active > a:hover .caret {
- border-top-color: #777;
-}
-.subnav .nav > li:first-child > a,
-.subnav .nav > li:first-child > a:hover {
- border-left: 0;
- padding-left: 12px;
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-.subnav .nav > li:last-child > a {
- border-right: 0;
-}
-.subnav .dropdown-menu {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-
-.quick-links {
- min-height: 30px;
- padding: 5px 20px;
- margin: 36px 0;
- list-style: none;
- text-align: center;
- overflow: hidden;
-}
-.quick-links li {
- display: inline;
- margin: 0 5px;
-}
-.quick-links .divider {
- color: #999;
-}
-
-.marketing .row {
- margin-bottom: 9px;
-}
-.marketing h1 {
- margin: 36px 0 27px;
- font-size: 40px;
- font-weight: 300;
- text-align: center;
-}
-.marketing h2,
-.marketing h3 {
- font-weight: 300;
-}
-.marketing h2 {
- font-size: 22px;
-}
-.marketing p {
- margin-right: 10px;
-}
-.marketing .bs-icon {
- float: left;
- margin: 7px 10px 0 0;
- opacity: .8;
-}
-.marketing .small-bs-icon {
- float: left;
- margin: 4px 5px 0 0;
-}
-
-.footer {
- margin-top: 45px;
- padding: 35px 0 36px;
- border-top: 1px solid #e5e5e5;
-}
-.footer p {
- margin-bottom: 0;
- color: #555;
-}
-
-pre.prettyprint {
- overflow: hidden;
-}
-
-.browser-support {
- max-width: 100%;
-}
-
-h2 + table,
-h3 + table,
-h4 + table,
-h2 + .row {
- margin-top: 5px;
-}
-
-form.well {
- padding: 14px;
-}
-
-/* Tighten up spacing */
-.well hr {
- margin: 18px 0;
-}
-
-.recommended {
- color: #468847;
- background-color: #DFF0D8;
-}
-
-code,pre {
- color: #25587E;
-}
-
-code {
- background-color: #fafafc !important;
- border: none !important;
-}
-
-.label-danger {
- background-color: #d9534f;
-}
-
-body, p, li {
- line-height: 20px;
- font-size: 16px;
- margin-bottom: 24px;
-}
-
-li {
- line-height: 18px;
- font-size: 16px;
- margin-bottom: 10px;
-}
diff --git a/assets/js/bootstrap/bootstrap.js b/assets/js/bootstrap/bootstrap.js
deleted file mode 100644
index 49aceca..0000000
--- a/assets/js/bootstrap/bootstrap.js
+++ /dev/null
@@ -1,1734 +0,0 @@
-/* ===================================================
- * bootstrap-transition.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#transitions
- * ===================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-!function( $ ) {
-
- $(function () {
-
- "use strict"
-
- /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
- * ======================================================= */
-
- $.support.transition = (function () {
- var thisBody = document.body || document.documentElement
- , thisStyle = thisBody.style
- , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
-
- return support && {
- end: (function () {
- var transitionEnd = "TransitionEnd"
- if ( $.browser.webkit ) {
- transitionEnd = "webkitTransitionEnd"
- } else if ( $.browser.mozilla ) {
- transitionEnd = "transitionend"
- } else if ( $.browser.opera ) {
- transitionEnd = "oTransitionEnd"
- }
- return transitionEnd
- }())
- }
- })()
-
- })
-
-}( window.jQuery )
-
-/* =========================================================
- * bootstrap-modal.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#modals
- * =========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
-
-
-!function( $ ){
-
- "use strict"
-
- /* MODAL CLASS DEFINITION
- * ====================== */
-
- var Modal = function ( content, options ) {
- this.options = options
- this.$element = $(content)
- .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
- }
-
- Modal.prototype = {
-
- constructor: Modal
-
- , toggle: function () {
- return this[!this.isShown ? 'show' : 'hide']()
- }
-
- , show: function () {
- var that = this
-
- if (this.isShown) return
-
- $('body').addClass('modal-open')
-
- this.isShown = true
- this.$element.trigger('show')
-
- escape.call(this)
- backdrop.call(this, function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
-
- that.$element
- .show()
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element.addClass('in')
-
- transition ?
- that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
- that.$element.trigger('shown')
-
- })
- }
-
- , hide: function ( e ) {
- e && e.preventDefault()
-
- if (!this.isShown) return
-
- var that = this
- this.isShown = false
-
- $('body').removeClass('modal-open')
-
- escape.call(this)
-
- this.$element
- .trigger('hide')
- .removeClass('in')
-
- $.support.transition && this.$element.hasClass('fade') ?
- hideWithTransition.call(this) :
- hideModal.call(this)
- }
-
- }
-
-
- /* MODAL PRIVATE METHODS
- * ===================== */
-
- function hideWithTransition() {
- var that = this
- , timeout = setTimeout(function () {
- that.$element.off($.support.transition.end)
- hideModal.call(that)
- }, 500)
-
- this.$element.one($.support.transition.end, function () {
- clearTimeout(timeout)
- hideModal.call(that)
- })
- }
-
- function hideModal( that ) {
- this.$element
- .hide()
- .trigger('hidden')
-
- backdrop.call(this)
- }
-
- function backdrop( callback ) {
- var that = this
- , animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(document.body)
-
- if (this.options.backdrop != 'static') {
- this.$backdrop.click($.proxy(this.hide, this))
- }
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- doAnimate ?
- this.$backdrop.one($.support.transition.end, callback) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- $.support.transition && this.$element.hasClass('fade')?
- this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
- removeBackdrop.call(this)
-
- } else if (callback) {
- callback()
- }
- }
-
- function removeBackdrop() {
- this.$backdrop.remove()
- this.$backdrop = null
- }
-
- function escape() {
- var that = this
- if (this.isShown && this.options.keyboard) {
- $(document).on('keyup.dismiss.modal', function ( e ) {
- e.which == 27 && that.hide()
- })
- } else if (!this.isShown) {
- $(document).off('keyup.dismiss.modal')
- }
- }
-
-
- /* MODAL PLUGIN DEFINITION
- * ======================= */
-
- $.fn.modal = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('modal')
- , options = $.extend({}, $.fn.modal.defaults, typeof option == 'object' && option)
- if (!data) $this.data('modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option]()
- else if (options.show) data.show()
- })
- }
-
- $.fn.modal.defaults = {
- backdrop: true
- , keyboard: true
- , show: true
- }
-
- $.fn.modal.Constructor = Modal
-
-
- /* MODAL DATA-API
- * ============== */
-
- $(function () {
- $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
- var $this = $(this), href
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
-
- e.preventDefault()
- $target.modal(option)
- })
- })
-
-}( window.jQuery )
-
-/* ============================================================
- * bootstrap-dropdown.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function( $ ){
-
- "use strict"
-
- /* DROPDOWN CLASS DEFINITION
- * ========================= */
-
- var toggle = '[data-toggle="dropdown"]'
- , Dropdown = function ( element ) {
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
- $('html').on('click.dropdown.data-api', function () {
- $el.parent().removeClass('open')
- })
- }
-
- Dropdown.prototype = {
-
- constructor: Dropdown
-
- , toggle: function ( e ) {
- var $this = $(this)
- , selector = $this.attr('data-target')
- , $parent
- , isActive
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
-
- $parent = $(selector)
- $parent.length || ($parent = $this.parent())
-
- isActive = $parent.hasClass('open')
-
- clearMenus()
- !isActive && $parent.toggleClass('open')
-
- return false
- }
-
- }
-
- function clearMenus() {
- $(toggle).parent().removeClass('open')
- }
-
-
- /* DROPDOWN PLUGIN DEFINITION
- * ========================== */
-
- $.fn.dropdown = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('dropdown')
- if (!data) $this.data('dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- $.fn.dropdown.Constructor = Dropdown
-
-
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
- * =================================== */
-
- $(function () {
- $('html').on('click.dropdown.data-api', clearMenus)
- $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- })
-
-}( window.jQuery )
-
-/* =============================================================
- * bootstrap-scrollspy.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================== */
-
-!function ( $ ) {
-
- "use strict"
-
- /* SCROLLSPY CLASS DEFINITION
- * ========================== */
-
- function ScrollSpy( element, options) {
- var process = $.proxy(this.process, this)
- , $element = $(element).is('body') ? $(window) : $(element)
- , href
- this.options = $.extend({}, $.fn.scrollspy.defaults, options)
- this.$scrollElement = $element.on('scroll.scroll.data-api', process)
- this.selector = (this.options.target
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- || '') + ' .nav li > a'
- this.$body = $('body').on('click.scroll.data-api', this.selector, process)
- this.refresh()
- this.process()
- }
-
- ScrollSpy.prototype = {
-
- constructor: ScrollSpy
-
- , refresh: function () {
- this.targets = this.$body
- .find(this.selector)
- .map(function () {
- var href = $(this).attr('href')
- return /^#\w/.test(href) && $(href).length ? href : null
- })
-
- this.offsets = $.map(this.targets, function (id) {
- return $(id).position().top
- })
- }
-
- , process: function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- , offsets = this.offsets
- , targets = this.targets
- , activeTarget = this.activeTarget
- , i
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate( targets[i] )
- }
- }
-
- , activate: function (target) {
- var active
-
- this.activeTarget = target
-
- this.$body
- .find(this.selector).parent('.active')
- .removeClass('active')
-
- active = this.$body
- .find(this.selector + '[href="' + target + '"]')
- .parent('li')
- .addClass('active')
-
- if ( active.parent('.dropdown-menu') ) {
- active.closest('li.dropdown').addClass('active')
- }
- }
-
- }
-
-
- /* SCROLLSPY PLUGIN DEFINITION
- * =========================== */
-
- $.fn.scrollspy = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('scrollspy')
- , options = typeof option == 'object' && option
- if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.scrollspy.Constructor = ScrollSpy
-
- $.fn.scrollspy.defaults = {
- offset: 10
- }
-
-
- /* SCROLLSPY DATA-API
- * ================== */
-
- $(function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- $spy.scrollspy($spy.data())
- })
- })
-
-}( window.jQuery )
-
-/* ========================================================
- * bootstrap-tab.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#tabs
- * ========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ======================================================== */
-
-
-!function( $ ){
-
- "use strict"
-
- /* TAB CLASS DEFINITION
- * ==================== */
-
- var Tab = function ( element ) {
- this.element = $(element)
- }
-
- Tab.prototype = {
-
- constructor: Tab
-
- , show: function () {
- var $this = this.element
- , $ul = $this.closest('ul:not(.dropdown-menu)')
- , selector = $this.attr('data-target')
- , previous
- , $target
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
-
- if ( $this.parent('li').hasClass('active') ) return
-
- previous = $ul.find('.active a').last()[0]
-
- $this.trigger({
- type: 'show'
- , relatedTarget: previous
- })
-
- $target = $(selector)
-
- this.activate($this.parent('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $this.trigger({
- type: 'shown'
- , relatedTarget: previous
- })
- })
- }
-
- , activate: function ( element, container, callback) {
- var $active = container.find('> .active')
- , transition = callback
- && $.support.transition
- && $active.hasClass('fade')
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
-
- element.addClass('active')
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if ( element.parent('.dropdown-menu') ) {
- element.closest('li.dropdown').addClass('active')
- }
-
- callback && callback()
- }
-
- transition ?
- $active.one($.support.transition.end, next) :
- next()
-
- $active.removeClass('in')
- }
- }
-
-
- /* TAB PLUGIN DEFINITION
- * ===================== */
-
- $.fn.tab = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tab')
- if (!data) $this.data('tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.tab.Constructor = Tab
-
-
- /* TAB DATA-API
- * ============ */
-
- $(function () {
- $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
- e.preventDefault()
- $(this).tab('show')
- })
- })
-
-}( window.jQuery )
-
-/* ===========================================================
- * bootstrap-tooltip.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-!function( $ ) {
-
- "use strict"
-
- /* TOOLTIP PUBLIC CLASS DEFINITION
- * =============================== */
-
- var Tooltip = function ( element, options ) {
- this.init('tooltip', element, options)
- }
-
- Tooltip.prototype = {
-
- constructor: Tooltip
-
- , init: function ( type, element, options ) {
- var eventIn
- , eventOut
-
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.enabled = true
-
- if (this.options.trigger != 'manual') {
- eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
- eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
- this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- , getOptions: function ( options ) {
- options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay
- , hide: options.delay
- }
- }
-
- return options
- }
-
- , enter: function ( e ) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
- if (!self.options.delay || !self.options.delay.show) {
- self.show()
- } else {
- self.hoverState = 'in'
- setTimeout(function() {
- if (self.hoverState == 'in') {
- self.show()
- }
- }, self.options.delay.show)
- }
- }
-
- , leave: function ( e ) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
- if (!self.options.delay || !self.options.delay.hide) {
- self.hide()
- } else {
- self.hoverState = 'out'
- setTimeout(function() {
- if (self.hoverState == 'out') {
- self.hide()
- }
- }, self.options.delay.hide)
- }
- }
-
- , show: function () {
- var $tip
- , inside
- , pos
- , actualWidth
- , actualHeight
- , placement
- , tp
-
- if (this.hasContent() && this.enabled) {
- $tip = this.tip()
- this.setContent()
-
- if (this.options.animation) {
- $tip.addClass('fade')
- }
-
- placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- inside = /in/.test(placement)
-
- $tip
- .remove()
- .css({ top: 0, left: 0, display: 'block' })
- .appendTo(inside ? this.$element : document.body)
-
- pos = this.getPosition(inside)
-
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
-
- switch (inside ? placement.split(' ')[1] : placement) {
- case 'bottom':
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'top':
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'left':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
- break
- case 'right':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
- break
- }
-
- $tip
- .css(tp)
- .addClass(placement)
- .addClass('in')
- }
- }
-
- , setContent: function () {
- var $tip = this.tip()
- $tip.find('.tooltip-inner').html(this.getTitle())
- $tip.removeClass('fade in top bottom left right')
- }
-
- , hide: function () {
- var that = this
- , $tip = this.tip()
-
- $tip.removeClass('in')
-
- function removeWithAnimation() {
- var timeout = setTimeout(function () {
- $tip.off($.support.transition.end).remove()
- }, 500)
-
- $tip.one($.support.transition.end, function () {
- clearTimeout(timeout)
- $tip.remove()
- })
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- removeWithAnimation() :
- $tip.remove()
- }
-
- , fixTitle: function () {
- var $e = this.$element
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
- }
- }
-
- , hasContent: function () {
- return this.getTitle()
- }
-
- , getPosition: function (inside) {
- return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
- width: this.$element[0].offsetWidth
- , height: this.$element[0].offsetHeight
- })
- }
-
- , getTitle: function () {
- var title
- , $e = this.$element
- , o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- title = title.toString().replace(/(^\s*|\s*$)/, "")
-
- return title
- }
-
- , tip: function () {
- return this.$tip = this.$tip || $(this.options.template)
- }
-
- , validate: function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
- }
-
- , enable: function () {
- this.enabled = true
- }
-
- , disable: function () {
- this.enabled = false
- }
-
- , toggleEnabled: function () {
- this.enabled = !this.enabled
- }
-
- , toggle: function () {
- this[this.tip().hasClass('in') ? 'hide' : 'show']()
- }
-
- }
-
-
- /* TOOLTIP PLUGIN DEFINITION
- * ========================= */
-
- $.fn.tooltip = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tooltip')
- , options = typeof option == 'object' && option
- if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.tooltip.Constructor = Tooltip
-
- $.fn.tooltip.defaults = {
- animation: true
- , delay: 0
- , selector: false
- , placement: 'top'
- , trigger: 'hover'
- , title: ''
- , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
- }
-
-}( window.jQuery )
-
-/* ===========================================================
- * bootstrap-popover.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#popovers
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * =========================================================== */
-
-
-!function( $ ) {
-
- "use strict"
-
- var Popover = function ( element, options ) {
- this.init('popover', element, options)
- }
-
- /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
- ========================================== */
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
-
- constructor: Popover
-
- , setContent: function () {
- var $tip = this.tip()
- , title = this.getTitle()
- , content = this.getContent()
-
- $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
- $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
-
- $tip.removeClass('fade top bottom left right in')
- }
-
- , hasContent: function () {
- return this.getTitle() || this.getContent()
- }
-
- , getContent: function () {
- var content
- , $e = this.$element
- , o = this.options
-
- content = $e.attr('data-content')
- || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
-
- content = content.toString().replace(/(^\s*|\s*$)/, "")
-
- return content
- }
-
- , tip: function() {
- if (!this.$tip) {
- this.$tip = $(this.options.template)
- }
- return this.$tip
- }
-
- })
-
-
- /* POPOVER PLUGIN DEFINITION
- * ======================= */
-
- $.fn.popover = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('popover')
- , options = typeof option == 'object' && option
- if (!data) $this.data('popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.popover.Constructor = Popover
-
- $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
- placement: 'right'
- , content: ''
- , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
- })
-
-}( window.jQuery )
-
-/* ==========================================================
- * bootstrap-alert.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#alerts
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function( $ ){
-
- "use strict"
-
- /* ALERT CLASS DEFINITION
- * ====================== */
-
- var dismiss = '[data-dismiss="alert"]'
- , Alert = function ( el ) {
- $(el).on('click', dismiss, this.close)
- }
-
- Alert.prototype = {
-
- constructor: Alert
-
- , close: function ( e ) {
- var $this = $(this)
- , selector = $this.attr('data-target')
- , $parent
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
-
- $parent = $(selector)
- $parent.trigger('close')
-
- e && e.preventDefault()
-
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
- $parent.removeClass('in')
-
- function removeElement() {
- $parent.remove()
- $parent.trigger('closed')
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent.on($.support.transition.end, removeElement) :
- removeElement()
- }
-
- }
-
-
- /* ALERT PLUGIN DEFINITION
- * ======================= */
-
- $.fn.alert = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('alert')
- if (!data) $this.data('alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- $.fn.alert.Constructor = Alert
-
-
- /* ALERT DATA-API
- * ============== */
-
- $(function () {
- $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
- })
-
-}( window.jQuery )
-
-/* ============================================================
- * bootstrap-button.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#buttons
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
- "use strict"
-
- /* BUTTON PUBLIC CLASS DEFINITION
- * ============================== */
-
- var Button = function ( element, options ) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.button.defaults, options)
- }
-
- Button.prototype = {
-
- constructor: Button
-
- , setState: function ( state ) {
- var d = 'disabled'
- , $el = this.$element
- , data = $el.data()
- , val = $el.is('input') ? 'val' : 'html'
-
- state = state + 'Text'
- data.resetText || $el.data('resetText', $el[val]())
-
- $el[val](data[state] || this.options[state])
-
- // push to event loop to allow forms to submit
- setTimeout(function () {
- state == 'loadingText' ?
- $el.addClass(d).attr(d, d) :
- $el.removeClass(d).removeAttr(d)
- }, 0)
- }
-
- , toggle: function () {
- var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
-
- $parent && $parent
- .find('.active')
- .removeClass('active')
-
- this.$element.toggleClass('active')
- }
-
- }
-
-
- /* BUTTON PLUGIN DEFINITION
- * ======================== */
-
- $.fn.button = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('button')
- , options = typeof option == 'object' && option
- if (!data) $this.data('button', (data = new Button(this, options)))
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
-
- $.fn.button.defaults = {
- loadingText: 'loading...'
- }
-
- $.fn.button.Constructor = Button
-
-
- /* BUTTON DATA-API
- * =============== */
-
- $(function () {
- $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
- $(e.target).button('toggle')
- })
- })
-
-}( window.jQuery )
-
-/* =============================================================
- * bootstrap-collapse.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#collapse
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
- "use strict"
-
- var Collapse = function ( element, options ) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.collapse.defaults, options)
-
- if (this.options["parent"]) {
- this.$parent = $(this.options["parent"])
- }
-
- this.options.toggle && this.toggle()
- }
-
- Collapse.prototype = {
-
- constructor: Collapse
-
- , dimension: function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- , show: function () {
- var dimension = this.dimension()
- , scroll = $.camelCase(['scroll', dimension].join('-'))
- , actives = this.$parent && this.$parent.find('.in')
- , hasData
-
- if (actives && actives.length) {
- hasData = actives.data('collapse')
- actives.collapse('hide')
- hasData || actives.data('collapse', null)
- }
-
- this.$element[dimension](0)
- this.transition('addClass', 'show', 'shown')
- this.$element[dimension](this.$element[0][scroll])
-
- }
-
- , hide: function () {
- var dimension = this.dimension()
- this.reset(this.$element[dimension]())
- this.transition('removeClass', 'hide', 'hidden')
- this.$element[dimension](0)
- }
-
- , reset: function ( size ) {
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- [dimension](size || 'auto')
- [0].offsetWidth
-
- this.$element.addClass('collapse')
- }
-
- , transition: function ( method, startEvent, completeEvent ) {
- var that = this
- , complete = function () {
- if (startEvent == 'show') that.reset()
- that.$element.trigger(completeEvent)
- }
-
- this.$element
- .trigger(startEvent)
- [method]('in')
-
- $.support.transition && this.$element.hasClass('collapse') ?
- this.$element.one($.support.transition.end, complete) :
- complete()
- }
-
- , toggle: function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- }
-
- /* COLLAPSIBLE PLUGIN DEFINITION
- * ============================== */
-
- $.fn.collapse = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('collapse')
- , options = typeof option == 'object' && option
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.collapse.defaults = {
- toggle: true
- }
-
- $.fn.collapse.Constructor = Collapse
-
-
- /* COLLAPSIBLE DATA-API
- * ==================== */
-
- $(function () {
- $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
- var $this = $(this), href
- , target = $this.attr('data-target')
- || e.preventDefault()
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
- $(target).collapse(option)
- })
- })
-
-}( window.jQuery )
-
-/* ==========================================================
- * bootstrap-carousel.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#carousel
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function( $ ){
-
- "use strict"
-
- /* CAROUSEL CLASS DEFINITION
- * ========================= */
-
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.carousel.defaults, options)
- this.options.slide && this.slide(this.options.slide)
- }
-
- Carousel.prototype = {
-
- cycle: function () {
- this.interval = setInterval($.proxy(this.next, this), this.options.interval)
- return this
- }
-
- , to: function (pos) {
- var $active = this.$element.find('.active')
- , children = $active.parent().children()
- , activePos = children.index($active)
- , that = this
-
- if (pos > (children.length - 1) || pos < 0) return
-
- if (this.sliding) {
- return this.$element.one('slid', function () {
- that.to(pos)
- })
- }
-
- if (activePos == pos) {
- return this.pause().cycle()
- }
-
- return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
- }
-
- , pause: function () {
- clearInterval(this.interval)
- return this
- }
-
- , next: function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- , prev: function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- , slide: function (type, next) {
- var $active = this.$element.find('.active')
- , $next = next || $active[type]()
- , isCycling = this.interval
- , direction = type == 'next' ? 'left' : 'right'
- , fallback = type == 'next' ? 'first' : 'last'
- , that = this
-
- this.sliding = true
-
- isCycling && this.pause()
-
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
- if (!$.support.transition && this.$element.hasClass('slide')) {
- this.$element.trigger('slide')
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger('slid')
- } else {
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- this.$element.trigger('slide')
- this.$element.one($.support.transition.end, function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () { that.$element.trigger('slid') }, 0)
- })
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
- }
-
-
- /* CAROUSEL PLUGIN DEFINITION
- * ========================== */
-
- $.fn.carousel = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('carousel')
- , options = typeof option == 'object' && option
- if (!data) $this.data('carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (typeof option == 'string' || (option = options.slide)) data[option]()
- else data.cycle()
- })
- }
-
- $.fn.carousel.defaults = {
- interval: 5000
- }
-
- $.fn.carousel.Constructor = Carousel
-
-
- /* CAROUSEL DATA-API
- * ================= */
-
- $(function () {
- $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
- var $this = $(this), href
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
- $target.carousel(options)
- e.preventDefault()
- })
- })
-
-}( window.jQuery )
-
-/* =============================================================
- * bootstrap-typeahead.js v2.0.0
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
- "use strict"
-
- var Typeahead = function ( element, options ) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
- this.matcher = this.options.matcher || this.matcher
- this.sorter = this.options.sorter || this.sorter
- this.highlighter = this.options.highlighter || this.highlighter
- this.$menu = $(this.options.menu).appendTo('body')
- this.source = this.options.source
- this.shown = false
- this.listen()
- }
-
- Typeahead.prototype = {
-
- constructor: Typeahead
-
- , select: function () {
- var val = this.$menu.find('.active').attr('data-value')
- this.$element.val(val)
- return this.hide()
- }
-
- , show: function () {
- var pos = $.extend({}, this.$element.offset(), {
- height: this.$element[0].offsetHeight
- })
-
- this.$menu.css({
- top: pos.top + pos.height
- , left: pos.left
- })
-
- this.$menu.show()
- this.shown = true
- return this
- }
-
- , hide: function () {
- this.$menu.hide()
- this.shown = false
- return this
- }
-
- , lookup: function (event) {
- var that = this
- , items
- , q
-
- this.query = this.$element.val()
-
- if (!this.query) {
- return this.shown ? this.hide() : this
- }
-
- items = $.grep(this.source, function (item) {
- if (that.matcher(item)) return item
- })
-
- items = this.sorter(items)
-
- if (!items.length) {
- return this.shown ? this.hide() : this
- }
-
- return this.render(items.slice(0, this.options.items)).show()
- }
-
- , matcher: function (item) {
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
- }
-
- , sorter: function (items) {
- var beginswith = []
- , caseSensitive = []
- , caseInsensitive = []
- , item
-
- while (item = items.shift()) {
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
- else caseInsensitive.push(item)
- }
-
- return beginswith.concat(caseSensitive, caseInsensitive)
- }
-
- , highlighter: function (item) {
- return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
- return '<strong>' + match + '</strong>'
- })
- }
-
- , render: function (items) {
- var that = this
-
- items = $(items).map(function (i, item) {
- i = $(that.options.item).attr('data-value', item)
- i.find('a').html(that.highlighter(item))
- return i[0]
- })
-
- items.first().addClass('active')
- this.$menu.html(items)
- return this
- }
-
- , next: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , next = active.next()
-
- if (!next.length) {
- next = $(this.$menu.find('li')[0])
- }
-
- next.addClass('active')
- }
-
- , prev: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , prev = active.prev()
-
- if (!prev.length) {
- prev = this.$menu.find('li').last()
- }
-
- prev.addClass('active')
- }
-
- , listen: function () {
- this.$element
- .on('blur', $.proxy(this.blur, this))
- .on('keypress', $.proxy(this.keypress, this))
- .on('keyup', $.proxy(this.keyup, this))
-
- if ($.browser.webkit || $.browser.msie) {
- this.$element.on('keydown', $.proxy(this.keypress, this))
- }
-
- this.$menu
- .on('click', $.proxy(this.click, this))
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
- }
-
- , keyup: function (e) {
- e.stopPropagation()
- e.preventDefault()
-
- switch(e.keyCode) {
- case 40: // down arrow
- case 38: // up arrow
- break
-
- case 9: // tab
- case 13: // enter
- if (!this.shown) return
- this.select()
- break
-
- case 27: // escape
- this.hide()
- break
-
- default:
- this.lookup()
- }
-
- }
-
- , keypress: function (e) {
- e.stopPropagation()
- if (!this.shown) return
-
- switch(e.keyCode) {
- case 9: // tab
- case 13: // enter
- case 27: // escape
- e.preventDefault()
- break
-
- case 38: // up arrow
- e.preventDefault()
- this.prev()
- break
-
- case 40: // down arrow
- e.preventDefault()
- this.next()
- break
- }
- }
-
- , blur: function (e) {
- var that = this
- e.stopPropagation()
- e.preventDefault()
- setTimeout(function () { that.hide() }, 150)
- }
-
- , click: function (e) {
- e.stopPropagation()
- e.preventDefault()
- this.select()
- }
-
- , mouseenter: function (e) {
- this.$menu.find('.active').removeClass('active')
- $(e.currentTarget).addClass('active')
- }
-
- }
-
-
- /* TYPEAHEAD PLUGIN DEFINITION
- * =========================== */
-
- $.fn.typeahead = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('typeahead')
- , options = typeof option == 'object' && option
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.typeahead.defaults = {
- source: []
- , items: 8
- , menu: '<ul class="typeahead dropdown-menu"></ul>'
- , item: '<li><a href="#"></a></li>'
- }
-
- $.fn.typeahead.Constructor = Typeahead
-
-
- /* TYPEAHEAD DATA-API
- * ================== */
-
- $(function () {
- $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
- var $this = $(this)
- if ($this.data('typeahead')) return
- e.preventDefault()
- $this.typeahead($this.data())
- })
- })
-
-}( window.jQuery )
diff --git a/assets/js/jquery/jquery-1.7.1.js b/assets/js/jquery/jquery-1.7.1.js
deleted file mode 100644
index 74ce411..0000000
--- a/assets/js/jquery/jquery-1.7.1.js
+++ /dev/null
@@ -1,9266 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Nov 21 21:11:03 2011 -0500
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
- navigator = window.navigator,
- location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- trimLeft = /^\s+/,
- trimRight = /\s+$/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
- // Useragent RegExp
- rwebkit = /(webkit)[ \/]([\w.]+)/,
- ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
- rmsie = /(msie) ([\w.]+)/,
- rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
- // Matches dashed string for camelizing
- rdashAlpha = /-([a-z]|[0-9])/ig,
- rmsPrefix = /^-ms-/,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return ( letter + "" ).toUpperCase();
- },
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // The deferred used on DOM ready
- readyList,
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- trim = String.prototype.trim,
- indexOf = Array.prototype.indexOf,
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context && document.body ) {
- this.context = document;
- this[0] = document.body;
- this.selector = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = quickExpr.exec( selector );
- }
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = ( context ? context.ownerDocument || context : document );
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.7.1",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = this.constructor();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // Add the callback
- readyList.add( fn );
-
- return this;
- },
-
- eq: function( i ) {
- i = +i;
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.fireWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).off( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyList ) {
- return;
- }
-
- readyList = jQuery.Callbacks( "once memory" );
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- // A crude way of determining if an object is a window
- isWindow: function( obj ) {
- return obj && typeof obj === "object" && "setInterval" in obj;
- },
-
- isNumeric: function( obj ) {
- return !isNaN( parseFloat(obj) ) && isFinite( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return ( new Function( "return " + data ) )();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction( object );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return object;
- },
-
- // Use native String.trim function wherever possible
- trim: trim ?
- function( text ) {
- return text == null ?
- "" :
- trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type( array );
-
- if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array, i ) {
- var len;
-
- if ( array ) {
- if ( indexOf ) {
- return indexOf.call( array, elem, i );
- }
-
- len = array.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in array && array[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length,
- j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [], retVal;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key, ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- if ( typeof context === "string" ) {
- var tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- var args = slice.call( arguments, 2 ),
- proxy = function() {
- return fn.apply( context, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Mutifunctional method to get and set values to a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
-
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- jQuery.access( elems, k, key[k], exec, fn, value );
- }
- return elems;
- }
-
- // Setting one attribute
- if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
-
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
-
- return elems;
- }
-
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
- },
-
- now: function() {
- return ( new Date() ).getTime();
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = rwebkit.exec( ua ) ||
- ropera.exec( ua ) ||
- rmsie.exec( ua ) ||
- ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- sub: function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
- },
-
- browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
- var object = flagsCache[ flags ] = {},
- i, length;
- flags = flags.split( /\s+/ );
- for ( i = 0, length = flags.length; i < length; i++ ) {
- object[ flags[i] ] = true;
- }
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * flags: an optional list of space-separated flags that will change how
- * the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
- // Convert flags from String-formatted to Object-formatted
- // (we check in cache first)
- flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
- var // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = [],
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list is currently firing
- firing,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // Add one or several callbacks to the list
- add = function( args ) {
- var i,
- length,
- elem,
- type,
- actual;
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = jQuery.type( elem );
- if ( type === "array" ) {
- // Inspect recursively
- add( elem );
- } else if ( type === "function" ) {
- // Add if not in unique mode and callback is not in
- if ( !flags.unique || !self.has( elem ) ) {
- list.push( elem );
- }
- }
- }
- },
- // Fire callbacks
- fire = function( context, args ) {
- args = args || [];
- memory = !flags.memory || [ context, args ];
- firing = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
- memory = true; // Mark as halted
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( !flags.once ) {
- if ( stack && stack.length ) {
- memory = stack.shift();
- self.fireWith( memory[ 0 ], memory[ 1 ] );
- }
- } else if ( memory === true ) {
- self.disable();
- } else {
- list = [];
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- var length = list.length;
- add( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away, unless previous
- // firing was halted (stopOnFalse)
- } else if ( memory && memory !== true ) {
- firingStart = length;
- fire( memory[ 0 ], memory[ 1 ] );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- var args = arguments,
- argIndex = 0,
- argLength = args.length;
- for ( ; argIndex < argLength ; argIndex++ ) {
- for ( var i = 0; i < list.length; i++ ) {
- if ( args[ argIndex ] === list[ i ] ) {
- // Handle firingIndex and firingLength
- if ( firing ) {
- if ( i <= firingLength ) {
- firingLength--;
- if ( i <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- // Remove the element
- list.splice( i--, 1 );
- // If we have some unicity property then
- // we only need to do this once
- if ( flags.unique ) {
- break;
- }
- }
- }
- }
- }
- return this;
- },
- // Control if a given callback is in the list
- has: function( fn ) {
- if ( list ) {
- var i = 0,
- length = list.length;
- for ( ; i < length; i++ ) {
- if ( fn === list[ i ] ) {
- return true;
- }
- }
- }
- return false;
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory || memory === true ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( stack ) {
- if ( firing ) {
- if ( !flags.once ) {
- stack.push( [ context, args ] );
- }
- } else if ( !( flags.once && memory ) ) {
- fire( context, args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!memory;
- }
- };
-
- return self;
-};
-
-
-
-
-var // Static reference to slice
- sliceDeferred = [].slice;
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var doneList = jQuery.Callbacks( "once memory" ),
- failList = jQuery.Callbacks( "once memory" ),
- progressList = jQuery.Callbacks( "memory" ),
- state = "pending",
- lists = {
- resolve: doneList,
- reject: failList,
- notify: progressList
- },
- promise = {
- done: doneList.add,
- fail: failList.add,
- progress: progressList.add,
-
- state: function() {
- return state;
- },
-
- // Deprecated
- isResolved: doneList.fired,
- isRejected: failList.fired,
-
- then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
- deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
- return this;
- },
- always: function() {
- deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
- return this;
- },
- pipe: function( fnDone, fnFail, fnProgress ) {
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( {
- done: [ fnDone, "resolve" ],
- fail: [ fnFail, "reject" ],
- progress: [ fnProgress, "notify" ]
- }, function( handler, data ) {
- var fn = data[ 0 ],
- action = data[ 1 ],
- returned;
- if ( jQuery.isFunction( fn ) ) {
- deferred[ handler ](function() {
- returned = fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
- } else {
- newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
- }
- });
- } else {
- deferred[ handler ]( newDefer[ action ] );
- }
- });
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- if ( obj == null ) {
- obj = promise;
- } else {
- for ( var key in promise ) {
- obj[ key ] = promise[ key ];
- }
- }
- return obj;
- }
- },
- deferred = promise.promise({}),
- key;
-
- for ( key in lists ) {
- deferred[ key ] = lists[ key ].fire;
- deferred[ key + "With" ] = lists[ key ].fireWith;
- }
-
- // Handle state
- deferred.done( function() {
- state = "resolved";
- }, failList.disable, progressList.lock ).fail( function() {
- state = "rejected";
- }, doneList.disable, progressList.lock );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( firstParam ) {
- var args = sliceDeferred.call( arguments, 0 ),
- i = 0,
- length = args.length,
- pValues = new Array( length ),
- count = length,
- pCount = length,
- deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
- firstParam :
- jQuery.Deferred(),
- promise = deferred.promise();
- function resolveFunc( i ) {
- return function( value ) {
- args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- if ( !( --count ) ) {
- deferred.resolveWith( deferred, args );
- }
- };
- }
- function progressFunc( i ) {
- return function( value ) {
- pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- deferred.notifyWith( promise, pValues );
- };
- }
- if ( length > 1 ) {
- for ( ; i < length; i++ ) {
- if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
- args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
- } else {
- --count;
- }
- }
- if ( !count ) {
- deferred.resolveWith( deferred, args );
- }
- } else if ( deferred !== firstParam ) {
- deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
- }
- return promise;
- }
-});
-
-
-
-
-jQuery.support = (function() {
-
- var support,
- all,
- a,
- select,
- opt,
- input,
- marginDiv,
- fragment,
- tds,
- events,
- eventName,
- i,
- isSupported,
- div = document.createElement( "div" ),
- documentElement = document.documentElement;
-
- // Preliminary tests
- div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
- all = div.getElementsByTagName( "*" );
- a = div.getElementsByTagName( "a" )[ 0 ];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return {};
- }
-
- // First batch of supports tests
- select = document.createElement( "select" );
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName( "input" )[ 0 ];
-
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Tests for enctype support on a form(#6743)
- enctype: !!document.createElement("form").enctype,
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", function() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).fireEvent( "onclick" );
- }
-
- // Check if a radio maintains its value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute("type", "radio");
- support.radioValue = input.value === "t";
-
- input.setAttribute("checked", "checked");
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.lastChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- fragment.removeChild( input );
- fragment.appendChild( div );
-
- div.innerHTML = "";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- if ( window.getComputedStyle ) {
- marginDiv = document.createElement( "div" );
- marginDiv.style.width = "0";
- marginDiv.style.marginRight = "0";
- div.style.width = "2px";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
- }
-
- // Technique from Juriy Zaytsev
- // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for( i in {
- submit: 1,
- change: 1,
- focusin: 1
- }) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- fragment.removeChild( div );
-
- // Null elements to avoid leaks in IE
- fragment = select = opt = marginDiv = div = input = null;
-
- // Run tests that need a body at doc ready
- jQuery(function() {
- var container, outer, inner, table, td, offsetSupport,
- conMarginTop, ptlm, vb, style, html,
- body = document.getElementsByTagName("body")[0];
-
- if ( !body ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- conMarginTop = 1;
- ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
- vb = "visibility:hidden;border:0;";
- style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
- html = "<div " + style + "><div></div></div>" +
- "<table " + style + " cellpadding='0' cellspacing='0'>" +
- "<tr><td></td></tr></table>";
-
- container = document.createElement("div");
- container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
- body.insertBefore( container, body.firstChild );
-
- // Construct the test element
- div = document.createElement("div");
- container.appendChild( div );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName( "td" );
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE <= 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
- // Figure out if the W3C box model works as expected
- div.innerHTML = "";
- div.style.width = div.style.paddingLeft = "1px";
- jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
-
- if ( typeof div.style.zoom !== "undefined" ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.style.display = "inline";
- div.style.zoom = 1;
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "";
- div.innerHTML = "<div style='width:4px;'></div>";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
- }
-
- div.style.cssText = ptlm + vb;
- div.innerHTML = html;
-
- outer = div.firstChild;
- inner = outer.firstChild;
- td = outer.nextSibling.firstChild.firstChild;
-
- offsetSupport = {
- doesNotAddBorder: ( inner.offsetTop !== 5 ),
- doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
- };
-
- inner.style.position = "fixed";
- inner.style.top = "20px";
-
- // safari subtracts parent border width here which is 5px
- offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
- inner.style.position = inner.style.top = "";
-
- outer.style.overflow = "hidden";
- outer.style.position = "relative";
-
- offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
- offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
- body.removeChild( container );
- div = container = null;
-
- jQuery.extend( support, offsetSupport );
- });
-
- return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
- rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- // Please use with caution
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var privateCache, thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
- isEvents = name === "events";
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ internalKey ] = id = ++jQuery.uuid;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // Avoids exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- privateCache = thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Users should not attempt to inspect the internal events object using jQuery.data,
- // it is undocumented and subject to change. But does anyone listen? No.
- if ( isEvents && !thisCache[ name ] ) {
- return privateCache.events;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i, l,
-
- // Reference to internal data cache key
- internalKey = jQuery.expando,
-
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
-
- // See jQuery.data for more information
- id = isNode ? elem[ internalKey ] : internalKey;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split( " " );
- }
- }
- }
-
- for ( i = 0, l = name.length; i < l; i++ ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject(cache[ id ]) ) {
- return;
- }
- }
-
- // Browsers that fail expando deletion also refuse to delete expandos on
- // the window, but it will allow it on all other JS objects; other browsers
- // don't care
- // Ensure that `cache` is not a window object #10080
- if ( jQuery.support.deleteExpando || !cache.setInterval ) {
- delete cache[ id ];
- } else {
- cache[ id ] = null;
- }
-
- // We destroyed the cache and need to eliminate the expando on the node to avoid
- // false lookups in the cache for entries that no longer exist
- if ( isNode ) {
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( jQuery.support.deleteExpando ) {
- delete elem[ internalKey ];
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( internalKey );
- } else {
- elem[ internalKey ] = null;
- }
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- if ( elem.nodeName ) {
- var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- if ( match ) {
- return !(match === true || elem.getAttribute("classid") !== match);
- }
- }
-
- return true;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var parts, attr, name,
- data = null;
-
- if ( typeof key === "undefined" ) {
- if ( this.length ) {
- data = jQuery.data( this[0] );
-
- if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
- attr = this[0].attributes;
- for ( var i = 0, l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( this[0], name, data[ name ] );
- }
- }
- jQuery._data( this[0], "parsedAttrs", true );
- }
- }
-
- return data;
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- // Try to fetch any internally stored data first
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- data = dataAttr( this[0], key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
-
- } else {
- return this.each(function() {
- var self = jQuery( this ),
- args = [ parts[0], value ];
-
- self.triggerHandler( "setData" + parts[1] + "!", args );
- jQuery.data( this, key, value );
- self.triggerHandler( "changeData" + parts[1] + "!", args );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- jQuery.isNumeric( data ) ? parseFloat( data ) :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- for ( var name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
- var deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- defer = jQuery._data( elem, deferDataKey );
- if ( defer &&
- ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
- ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
- // Give room for hard-coded callbacks to fire first
- // and eventually mark/queue something else on the element
- setTimeout( function() {
- if ( !jQuery._data( elem, queueDataKey ) &&
- !jQuery._data( elem, markDataKey ) ) {
- jQuery.removeData( elem, deferDataKey, true );
- defer.fire();
- }
- }, 0 );
- }
-}
-
-jQuery.extend({
-
- _mark: function( elem, type ) {
- if ( elem ) {
- type = ( type || "fx" ) + "mark";
- jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
- }
- },
-
- _unmark: function( force, elem, type ) {
- if ( force !== true ) {
- type = elem;
- elem = force;
- force = false;
- }
- if ( elem ) {
- type = type || "fx";
- var key = type + "mark",
- count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
- if ( count ) {
- jQuery._data( elem, key, count );
- } else {
- jQuery.removeData( elem, key, true );
- handleQueueMarkDefer( elem, type, "mark" );
- }
- }
- },
-
- queue: function( elem, type, data ) {
- var q;
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- q = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- q.push( data );
- }
- }
- return q || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift(),
- hooks = {};
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- jQuery._data( elem, type + ".run", hooks );
- fn.call( elem, function() {
- jQuery.dequeue( elem, type );
- }, hooks );
- }
-
- if ( !queue.length ) {
- jQuery.removeData( elem, type + "queue " + type + ".run", true );
- handleQueueMarkDefer( elem, type, "queue" );
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, object ) {
- if ( typeof type !== "string" ) {
- object = type;
- type = undefined;
- }
- type = type || "fx";
- var defer = jQuery.Deferred(),
- elements = this,
- i = elements.length,
- count = 1,
- deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- tmp;
- function resolve() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- }
- while( i-- ) {
- if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
- ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
- jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
- jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
- count++;
- tmp.add( resolve );
- }
- }
- resolve();
- return defer.promise();
- }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea)?$/i,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- getSetAttribute = jQuery.support.getSetAttribute,
- nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.prop );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classNames, i, l, elem,
- setClass, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call(this, j, this.className) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- classNames = value.split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className && classNames.length === 1 ) {
- elem.className = value;
-
- } else {
- setClass = " " + elem.className + " ";
-
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
- setClass += classNames[ c ] + " ";
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classNames, i, l, elem, className, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call(this, j, this.className) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- classNames = ( value || "" ).split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- className = (" " + elem.className + " ").replace( rclass, " " );
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[ c ] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var self = jQuery(this), val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value, i, max, option,
- index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- i = one ? index : 0;
- max = one ? index + 1 : options.length;
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
- if ( one && !values.length && options.length ) {
- return jQuery( options[ index ] ).val();
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attr: function( elem, name, value, pass ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery( elem )[ name ]( value );
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( notxml ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, "" + value );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var propName, attrNames, name, l,
- i = 0;
-
- if ( value && elem.nodeType === 1 ) {
- attrNames = value.toLowerCase().split( rspace );
- l = attrNames.length;
-
- for ( ; i < l; i++ ) {
- name = attrNames[ i ];
-
- if ( name ) {
- propName = jQuery.propFix[ name ] || name;
-
- // See #9699 for explanation of this approach (setting first, then removal)
- jQuery.attr( elem, name, "" );
- elem.removeAttribute( getSetAttribute ? name : propName );
-
- // Set corresponding property to false for boolean attributes
- if ( rboolean.test( name ) && propName in elem ) {
- elem[ propName ] = false;
- }
- }
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- // Use the value property for back compat
- // Use the nodeHook for button elements in IE6/7 (#1954)
- value: {
- get: function( elem, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.get( elem, name );
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.set( elem, value, name );
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return ( elem[ name ] = value );
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode,
- property = jQuery.prop( elem, name );
- return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- fixSpecified = {
- name: true,
- id: true
- };
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- ret = elem.getAttributeNode( name );
- return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
- ret.nodeValue :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- ret = document.createAttribute( name );
- elem.setAttributeNode( ret );
- }
- return ( ret.nodeValue = value + "" );
- }
- };
-
- // Apply the nodeHook to tabindex
- jQuery.attrHooks.tabindex.set = nodeHook.set;
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- get: nodeHook.get,
- set: function( elem, value, name ) {
- if ( value === "" ) {
- value = "false";
- }
- nodeHook.set( elem, value, name );
- }
- };
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = "" + value );
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- });
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
- rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
- rhoverHack = /\bhover(\.\S+)?\b/,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
- quickParse = function( selector ) {
- var quick = rquickIs.exec( selector );
- if ( quick ) {
- // 0 1 2 3
- // [ _, tag, id, class ]
- quick[1] = ( quick[1] || "" ).toLowerCase();
- quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
- }
- return quick;
- },
- quickIs = function( elem, m ) {
- var attrs = elem.attributes || {};
- return (
- (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
- (!m[2] || (attrs.id || {}).value === m[2]) &&
- (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
- );
- },
- hoverHack = function( events ) {
- return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
- };
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- add: function( elem, types, handler, data, selector ) {
-
- var elemData, eventHandle, events,
- t, tns, type, namespaces, handleObj,
- handleObjIn, quick, handlers, special;
-
- // Don't attach events to noData or text/comment nodes (allow plain objects tho)
- if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- events = elemData.events;
- if ( !events ) {
- elemData.events = events = {};
- }
- eventHandle = elemData.handle;
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = jQuery.trim( hoverHack(types) ).split( " " );
- for ( t = 0; t < types.length; t++ ) {
-
- tns = rtypenamespace.exec( types[t] ) || [];
- type = tns[1];
- namespaces = ( tns[2] || "" ).split( "." ).sort();
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: tns[1],
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- quick: quickParse( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- handlers = events[ type ];
- if ( !handlers ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
- t, tns, type, origType, namespaces, origCount,
- j, events, special, handle, eventType, handleObj;
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
- for ( t = 0; t < types.length; t++ ) {
- tns = rtypenamespace.exec( types[t] ) || [];
- type = origType = tns[1];
- namespaces = tns[2];
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector? special.delegateType : special.bindType ) || type;
- eventType = events[ type ] || [];
- origCount = eventType.length;
- namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
- // Remove matching events
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- eventType.splice( j--, 1 );
-
- if ( handleObj.selector ) {
- eventType.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( eventType.length === 0 && origCount !== eventType.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery.removeData( elem, [ "events", "handle" ], true );
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Don't do events on text and comment nodes
- if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
- return;
- }
-
- // Event object or event type
- var type = event.type || event,
- namespaces = [],
- cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "!" ) >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf( "." ) >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.isTrigger = true;
- event.exclusive = exclusive;
- event.namespace = namespaces.join( "." );
- event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
- ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
- // Handle a global trigger
- if ( !elem ) {
-
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- cache = jQuery.cache;
- for ( i in cache ) {
- if ( cache[ i ].events && cache[ i ].events[ type ] ) {
- jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
- }
- }
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data != null ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- eventPath = [[ elem, special.bindType || type ]];
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
- old = null;
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push([ cur, bubbleType ]);
- old = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( old && old === elem.ownerDocument ) {
- eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
- }
- }
-
- // Fire handlers on the event path
- for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
- cur = eventPath[i][0];
- event.type = eventPath[i][1];
-
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
- // Note that this is a bare JS function and not a jQuery handler
- handle = ontype && cur[ ontype ];
- if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
- event.preventDefault();
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- // IE<9 dies on focus/blur to hidden element (#1486)
- if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( old ) {
- elem[ ontype ] = old;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event || window.event );
-
- var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
- delegateCount = handlers.delegateCount,
- args = [].slice.call( arguments, 0 ),
- run_all = !event.exclusive && !event.namespace,
- handlerQueue = [],
- i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Determine handlers that should run if there are delegated events
- // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
-
- // Pregenerate a single jQuery object for reuse with .is()
- jqcur = jQuery(this);
- jqcur.context = this.ownerDocument || this;
-
- for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
- selMatch = {};
- matches = [];
- jqcur[0] = cur;
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
- sel = handleObj.selector;
-
- if ( selMatch[ sel ] === undefined ) {
- selMatch[ sel ] = (
- handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
- );
- }
- if ( selMatch[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, matches: matches });
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( handlers.length > delegateCount ) {
- handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
- }
-
- // Run delegates first; they may want to stop propagation beneath us
- for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
- matched = handlerQueue[ i ];
- event.currentTarget = matched.elem;
-
- for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
- handleObj = matched.matches[ j ];
-
- // Triggered event must either 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
- props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var eventDoc, doc, body,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop,
- originalEvent = event,
- fixHook = jQuery.event.fixHooks[ event.type ] || {},
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = jQuery.Event( originalEvent );
-
- for ( i = copy.length; i; ) {
- prop = copy[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Target should not be a text node (#504, Safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
- if ( event.metaKey === undefined ) {
- event.metaKey = event.ctrlKey;
- }
-
- return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
- },
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady
- },
-
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
-
- focus: {
- delegateType: "focusin"
- },
- blur: {
- delegateType: "focusout"
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- { type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj,
- selector = handleObj.selector,
- ret;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !form._submit_attached ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- });
- form._submit_attached = true;
- }
- });
- // return undefined since we don't need an event listener
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- jQuery.event.simulate( "change", this, event, true );
- }
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- elem._change_attached = true;
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0,
- handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on.call( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- var handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( var type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- live: function( types, data, fn ) {
- jQuery( this.context ).on( types, this.selector, data, fn );
- return this;
- },
- die: function( types, fn ) {
- jQuery( this.context ).off( types, this.selector || "**", fn );
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-jQuery.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( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-
- if ( rkeyEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
- }
-
- if ( rmouseEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
- }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- expando = "sizcache" + (Math.random() + '').replace('.', ''),
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rReturn = /\r\n/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context, seed );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set, seed );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set, i, len, match, type, left;
-
- if ( !expr ) {
- return [];
- }
-
- for ( i = 0, len = Expr.order.length; i < len; i++ ) {
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- type, found, item, filter, left,
- i, pass,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- filter = Expr.filter[ type ];
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- pass = not ^ found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
- var i, node,
- nodeType = elem.nodeType,
- ret = "";
-
- if ( nodeType ) {
- if ( nodeType === 1 || nodeType === 9 ) {
- // Use textContent || innerText for elements
- if ( typeof elem.textContent === 'string' ) {
- return elem.textContent;
- } else if ( typeof elem.innerText === 'string' ) {
- // Replace IE's carriage returns
- return elem.innerText.replace( rReturn, '' );
- } else {
- // Traverse it's children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- } else {
-
- // If no nodeType, this is expected to be an array
- for ( i = 0; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- if ( node.nodeType !== 8 ) {
- ret += getText( node );
- }
- }
- }
- return ret;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var first, last,
- doneName, parent, cache,
- count, diff,
- type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- first = match[2];
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- doneName = match[0];
- parent = elem.parentNode;
-
- if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
- count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent[ expando ] = doneName;
- }
-
- diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Sizzle.attr ?
- Sizzle.attr( elem, name ) :
- Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- !type && Sizzle.attr ?
- result != null :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet, seed );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- isSimple = /^.[^:#\[\.,]*$/,
- slice = Array.prototype.slice,
- POS = jQuery.expr.match.POS,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var self = this,
- i, l;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- var ret = this.pushStack( "", "find", selector ),
- length, n, r;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && (
- typeof selector === "string" ?
- // If this is a positional selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- POS.test( selector ) ?
- jQuery( selector, this.context ).index( this[0] ) >= 0 :
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var ret = [], i, l, cur = this[0];
-
- // Array (deprecated as of jQuery 1.7)
- if ( jQuery.isArray( selectors ) ) {
- var level = 1;
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( i = 0; i < selectors.length; i++ ) {
-
- if ( jQuery( cur ).is( selectors[ i ] ) ) {
- ret.push({ selector: selectors[ i ], elem: cur, level: level });
- }
- }
-
- cur = cur.parentNode;
- level++;
- }
-
- return ret;
- }
-
- // String
- var pos = POS.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- cur = this[i];
-
- while ( cur ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
-
- } else {
- cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
- break;
- }
- }
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, slice.call( arguments ).join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return ( elem === qualifier ) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
- });
-}
-
-
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style)/i,
- rnocache = /<(?:script|object|embed|option|style)/i,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- },
- safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( text ) {
- if ( jQuery.isFunction(text) ) {
- return this.each(function(i) {
- var self = jQuery( this );
-
- self.text( text.call(this, i, self.text()) );
- });
- }
-
- if ( typeof text !== "object" && text !== undefined ) {
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
- }
-
- return jQuery.text( this );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery.clean( arguments );
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery.clean(arguments) );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- if ( value === undefined ) {
- return this[0] && this[0].nodeType === 1 ?
- this[0].innerHTML.replace(rinlinejQuery, "") :
- null;
-
- // See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
- !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
- value = value.replace(rxhtmlTag, "<$1></$2>");
-
- try {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( this[i].nodeType === 1 ) {
- jQuery.cleanData( this[i].getElementsByTagName("*") );
- this[i].innerHTML = value;
- }
- }
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {
- this.empty().append( value );
- }
-
- } else if ( jQuery.isFunction( value ) ) {
- this.each(function(i){
- var self = jQuery( this );
-
- self.html( value.call(this, i, self.html()) );
- });
-
- } else {
- this.empty().append( value );
- }
-
- return this;
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, fragment, parent,
- value = args[0],
- scripts = [];
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = jQuery.buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- // Make sure that we do not leak memory by inadvertently discarding
- // the original fragment (which might have attached data) instead of
- // using it; in addition, use the original fragment object for the last
- // item instead of first because it can end up being emptied incorrectly
- // in certain situations (Bug #8070).
- // Fragments from the fragment cache must always be cloned and never used
- // in place.
- results.cacheable || ( l > 1 && i < lastIndex ) ?
- jQuery.clone( fragment, true, true ) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, evalScript );
- }
- }
-
- return this;
- }
-});
-
-function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 fail to clone children inside object elements that use
- // the proprietary classid attribute value (rather than the type
- // attribute) to identify the type of content to display
- if ( nodeName === "object" ) {
- dest.outerHTML = src.outerHTML;
-
- } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
- if ( src.checked ) {
- dest.defaultChecked = dest.checked = src.checked;
- }
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults, doc,
- first = args[ 0 ];
-
- // nodes may contain either an explicit document object,
- // a jQuery collection or context object.
- // If nodes[0] contains a valid object to assign to doc
- if ( nodes && nodes[0] ) {
- doc = nodes[0].ownerDocument || nodes[0];
- }
-
- // Ensure that an attr object doesn't incorrectly stand in as a document object
- // Chrome and Firefox seem to allow this to occur and will throw exception
- // Fixes #8950
- if ( !doc.createDocumentFragment ) {
- doc = document;
- }
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
- if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
- first.charAt(0) === "<" && !rnocache.test( first ) &&
- (jQuery.support.checkClone || !rchecked.test( first )) &&
- (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
- cacheable = true;
-
- cacheresults = jQuery.fragments[ first ];
- if ( cacheresults && cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ first ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [],
- insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = ( i > 0 ? this.clone(true) : this ).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( typeof elem.getElementsByTagName !== "undefined" ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( typeof elem.querySelectorAll !== "undefined" ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( elem.type === "checkbox" || elem.type === "radio" ) {
- elem.defaultChecked = elem.checked;
- }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
- var nodeName = ( elem.nodeName || "" ).toLowerCase();
- if ( nodeName === "input" ) {
- fixDefaultChecked( elem );
- // Skip scripts, get other children
- } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
- var div = document.createElement( "div" );
- safeFragment.appendChild( div );
-
- div.innerHTML = elem.outerHTML;
- return div.firstChild;
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var srcElements,
- destElements,
- i,
- // IE<=8 does not properly clone detached, unknown element nodes
- clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
- elem.cloneNode( true ) :
- shimCloneNode( elem );
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- srcElements = destElements = null;
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var checkScriptType;
-
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- var ret = [], j;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
-
- // Append wrapper element to unknown element safe doc fragment
- if ( context === document ) {
- // Use the fragment we've already created for this document
- safeFragment.appendChild( div );
- } else {
- // Use a fragment created with the owner document
- createSafeFragment( context ).appendChild( div );
- }
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
- }
- }
-
- // Resets defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- var len;
- if ( !jQuery.support.appendChecked ) {
- if ( elem[0] && typeof (len = elem.length) === "number" ) {
- for ( j = 0; j < len; j++ ) {
- findInputs( elem[j] );
- }
- } else {
- findInputs( elem );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- checkScriptType = function( elem ) {
- return !elem.type || rscriptType.test( elem.type );
- };
- for ( i = 0; ret[i]; i++ ) {
- if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
- scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
- } else {
- if ( ret[i].nodeType === 1 ) {
- var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- }
- fragment.appendChild( ret[i] );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id,
- cache = jQuery.cache,
- special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- continue;
- }
-
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ];
-
- if ( data && data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
-
- // Null the DOM reference to avoid IE6/7/8 leak (#7054)
- if ( data.handle ) {
- data.handle.elem = null;
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-
-function evalScript( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- // fixed for IE9, see #8346
- rupper = /([A-Z]|^ms)/g,
- rnumpx = /^-?\d+(?:px)?$/i,
- rnum = /^-?\d/,
- rrelNum = /^([\-+])=([\-+.\de]+)/,
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssWidth = [ "Left", "Right" ],
- cssHeight = [ "Top", "Bottom" ],
- curCSS,
-
- getComputedStyle,
- currentStyle;
-
-jQuery.fn.css = function( name, value ) {
- // Setting 'undefined' is a no-op
- if ( arguments.length === 2 && value === undefined ) {
- return this;
- }
-
- return jQuery.access( this, name, value, true, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- });
-};
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity", "opacity" );
- return ret === "" ? "1" : ret;
-
- } else {
- return elem.style.opacity;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, origName = jQuery.camelCase( name ),
- style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
- name = jQuery.cssProps[ origName ] || origName;
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra ) {
- var ret, hooks;
-
- // Make sure that we're working with the right name
- name = jQuery.camelCase( name );
- hooks = jQuery.cssHooks[ name ];
- name = jQuery.cssProps[ name ] || name;
-
- // cssFloat needs a special treatment
- if ( name === "cssFloat" ) {
- name = "float";
- }
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
- return ret;
-
- // Otherwise, if a way to get the computed value exists, use that
- } else if ( curCSS ) {
- return curCSS( elem, name );
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
-
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
- }
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- var val;
-
- if ( computed ) {
- if ( elem.offsetWidth !== 0 ) {
- return getWH( elem, name, extra );
- } else {
- jQuery.swap( elem, cssShow, function() {
- val = getWH( elem, name, extra );
- });
- }
-
- return val;
- }
- },
-
- set: function( elem, value ) {
- if ( rnumpx.test( value ) ) {
- // ignore negative width and height values #1599
- value = parseFloat( value );
-
- if ( value >= 0 ) {
- return value + "px";
- }
-
- } else {
- return value;
- }
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( parseFloat( RegExp.$1 ) / 100 ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there there is no filter style applied in a css rule, we are done
- if ( currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery(function() {
- // This hook cannot be added until DOM ready because the support test
- // for it is not run until after DOM ready
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- var ret;
- jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- ret = curCSS( elem, "margin-right", "marginRight" );
- } else {
- ret = elem.style.marginRight;
- }
- });
- return ret;
- }
- };
- }
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, name ) {
- var ret, defaultView, computedStyle;
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- if ( (defaultView = elem.ownerDocument.defaultView) &&
- (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
- ret = computedStyle.getPropertyValue( name );
- if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- ret = jQuery.style( elem, name );
- }
- }
-
- return ret;
- };
-}
-
-if ( document.documentElement.currentStyle ) {
- currentStyle = function( elem, name ) {
- var left, rsLeft, uncomputed,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- style = elem.style;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret === null && style && (uncomputed = style[ name ]) ) {
- ret = uncomputed;
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-
- // Remember the original values
- left = style.left;
- rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ( ret || 0 );
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
- // Start with offset property
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- which = name === "width" ? cssWidth : cssHeight,
- i = 0,
- len = which.length;
-
- if ( val > 0 ) {
- if ( extra !== "border" ) {
- for ( ; i < len; i++ ) {
- if ( !extra ) {
- val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
- } else {
- val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
- }
- }
- }
-
- return val + "px";
- }
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, name );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ] || 0;
- }
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
-
- // Add padding, border, margin
- if ( extra ) {
- for ( ; i < len; i++ ) {
- val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
- if ( extra !== "padding" ) {
- val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
- }
- }
- }
-
- return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth,
- height = elem.offsetHeight;
-
- return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
- rspacesAjax = /\s+/,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Document location
- ajaxLocation,
-
- // Document location segments
- ajaxLocParts,
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
- i = 0,
- length = dataTypes.length,
- dataType,
- list,
- placeBefore;
-
- // For each dataType in the dataTypeExpression
- for ( ; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters ),
- selection;
-
- for ( ; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-}
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf( " " );
- if ( off >= 0 ) {
- var selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- // Complete callback (responseText is used internally)
- complete: function( jqXHR, status, responseText ) {
- // Store the response as specified by the jqXHR object
- responseText = jqXHR.responseText;
- // If successful, inject the HTML into all the matched elements
- if ( jqXHR.isResolved() ) {
- // #4825: Get the actual response in case
- // a dataFilter is present in ajaxSettings
- jqXHR.done(function( r ) {
- responseText = r;
- });
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div>")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- responseText );
- }
-
- if ( callback ) {
- self.each( callback, [ responseText, status, jqXHR ] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
-
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.on( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- if ( settings ) {
- // Building a settings object
- ajaxExtend( target, jQuery.ajaxSettings );
- } else {
- // Extending ajaxSettings
- settings = target;
- target = jQuery.ajaxSettings;
- }
- ajaxExtend( target, settings );
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": allTypes
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- context: true,
- url: true
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // ifModified key
- ifModifiedKey,
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // The jqXHR state
- state = 0,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || "abort";
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, nativeStatusText, responses, headers ) {
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- var isSuccess,
- success,
- error,
- statusText = nativeStatusText,
- response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
- lastModified,
- etag;
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ ifModifiedKey ] = lastModified;
- }
- if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ ifModifiedKey ] = etag;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- try {
- success = ajaxConvert( s, response );
- statusText = "success";
- isSuccess = true;
- } catch(e) {
- // We have a parsererror
- statusText = "parsererror";
- error = e;
- }
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.add;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for ( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.then( tmp, tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
- // Determine if a cross-domain request is in order
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefiler, stop there
- if ( state === 2 ) {
- return false;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already
- jqXHR.abort();
- return false;
-
- }
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- return jqXHR;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : value;
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
- }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- // Serialize object item.
- for ( var name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields,
- ct,
- type,
- finalDataType,
- firstDataType;
-
- // Fill responseXXX fields
- for ( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- var dataTypes = s.dataTypes,
- converters = {},
- i,
- key,
- length = dataTypes.length,
- tmp,
- // Current and previous dataTypes
- current = dataTypes[ 0 ],
- prev,
- // Conversion expression
- conversion,
- // Conversion function
- conv,
- // Conversion functions (transitive conversion)
- conv1,
- conv2;
-
- // For each dataType in the chain
- for ( i = 1; i < length; i++ ) {
-
- // Create converters map
- // with lowercased keys
- if ( i === 1 ) {
- for ( key in s.converters ) {
- if ( typeof key === "string" ) {
- converters[ key.toLowerCase() ] = s.converters[ key ];
- }
- }
- }
-
- // Get the dataTypes
- prev = current;
- current = dataTypes[ i ];
-
- // If current is auto dataType, update it to prev
- if ( current === "*" ) {
- current = prev;
- // If no auto and dataTypes are actually different
- } else if ( prev !== "*" && prev !== current ) {
-
- // Get the converter
- conversion = prev + " " + current;
- conv = converters[ conversion ] || converters[ "* " + current ];
-
- // If there is no direct converter, search transitively
- if ( !conv ) {
- conv2 = undefined;
- for ( conv1 in converters ) {
- tmp = conv1.split( " " );
- if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
- conv2 = converters[ tmp[1] + " " + current ];
- if ( conv2 ) {
- conv1 = converters[ conv1 ];
- if ( conv1 === true ) {
- conv = conv2;
- } else if ( conv2 === true ) {
- conv = conv1;
- }
- break;
- }
- }
- }
- }
- // If we found no converter, dispatch an error
- if ( !( conv || conv2 ) ) {
- jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
- }
- // If found converter is not an equivalence
- if ( conv !== true ) {
- // Convert with 1 or 2 converters accordingly
- response = conv ? conv( response ) : conv2( conv1(response) );
- }
- }
- }
- return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
- jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- return jQuery.expando + "_" + ( jsc++ );
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
- ( typeof s.data === "string" );
-
- if ( s.dataTypes[ 0 ] === "jsonp" ||
- s.jsonp !== false && ( jsre.test( s.url ) ||
- inspectData && jsre.test( s.data ) ) ) {
-
- var responseContainer,
- jsonpCallback = s.jsonpCallback =
- jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
- previous = window[ jsonpCallback ],
- url = s.url,
- data = s.data,
- replace = "$1" + jsonpCallback + "$2";
-
- if ( s.jsonp !== false ) {
- url = url.replace( jsre, replace );
- if ( s.url === url ) {
- if ( inspectData ) {
- data = data.replace( jsre, replace );
- }
- if ( s.data === data ) {
- // Add callback manually
- url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
- }
- }
- }
-
- s.url = url;
- s.data = data;
-
- // Install callback
- window[ jsonpCallback ] = function( response ) {
- responseContainer = [ response ];
- };
-
- // Clean-up function
- jqXHR.always(function() {
- // Set callback back to previous value
- window[ jsonpCallback ] = previous;
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( previous ) ) {
- window[ jsonpCallback ]( responseContainer[ 0 ] );
- }
- });
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( jsonpCallback + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0,
- xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var xhr = s.xhr(),
- handle,
- i;
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occured
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
- responses.text = xhr.responseText;
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- // if we're in sync mode or it's in cache
- // and has been retrieved directly (IE6 & IE7)
- // we need to manually fire the callback
- if ( !s.async || xhr.readyState === 4 ) {
- callback();
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-
-
-
-
-var elemdisplay = {},
- iframe, iframeDoc,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ],
- fxNow;
-
-jQuery.fn.extend({
- show: function( speed, easing, callback ) {
- var elem, display;
-
- if ( speed || speed === 0 ) {
- return this.animate( genFx("show", 3), speed, easing, callback );
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- elem = this[ i ];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( display === "" && jQuery.css(elem, "display") === "none" ) {
- jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- elem = this[ i ];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
- }
- }
- }
-
- return this;
- }
- },
-
- hide: function( speed, easing, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, easing, callback);
-
- } else {
- var elem, display,
- i = 0,
- j = this.length;
-
- for ( ; i < j; i++ ) {
- elem = this[i];
- if ( elem.style ) {
- display = jQuery.css( elem, "display" );
-
- if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
- jQuery._data( elem, "olddisplay", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- if ( this[i].style ) {
- this[i].style.display = "none";
- }
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2, callback ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2, callback);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, easing, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, easing, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed( speed, easing, callback );
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete, [ false ] );
- }
-
- // Do not change referenced properties as per-property easing will be lost
- prop = jQuery.extend( {}, prop );
-
- function doAnimation() {
- // XXX 'this' does not always have a nodeName when running the
- // test suite
-
- if ( optall.queue === false ) {
- jQuery._mark( this );
- }
-
- var opt = jQuery.extend( {}, optall ),
- isElement = this.nodeType === 1,
- hidden = isElement && jQuery(this).is(":hidden"),
- name, val, p, e,
- parts, start, end, unit,
- method;
-
- // will store per property easing and be used to determine when an animation is complete
- opt.animatedProperties = {};
-
- for ( p in prop ) {
-
- // property name normalization
- name = jQuery.camelCase( p );
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- }
-
- val = prop[ name ];
-
- // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
- if ( jQuery.isArray( val ) ) {
- opt.animatedProperties[ name ] = val[ 1 ];
- val = prop[ name ] = val[ 0 ];
- } else {
- opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
- }
-
- if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call( this );
- }
-
- if ( isElement && ( name === "height" || name === "width" ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- if ( jQuery.css( this, "display" ) === "inline" &&
- jQuery.css( this, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
- this.style.display = "inline-block";
-
- } else {
- this.style.zoom = 1;
- }
- }
- }
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- for ( p in prop ) {
- e = new jQuery.fx( this, opt, p );
- val = prop[ p ];
-
- if ( rfxtypes.test( val ) ) {
-
- // Tracks whether to show or hide based on private
- // data attached to the element
- method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
- if ( method ) {
- jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
- e[ method ]();
- } else {
- e[ val ]();
- }
-
- } else {
- parts = rfxnum.exec( val );
- start = e.cur();
-
- if ( parts ) {
- end = parseFloat( parts[2] );
- unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- jQuery.style( this, p, (end || 1) + unit);
- start = ( (end || 1) / e.cur() ) * start;
- jQuery.style( this, p, start + unit);
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- }
-
- // For JS strict compliance
- return true;
- }
-
- return optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
-
- stop: function( type, clearQueue, gotoEnd ) {
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var index,
- hadTimers = false,
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- // clear marker counters if we know they won't be
- if ( !gotoEnd ) {
- jQuery._unmark( true, this );
- }
-
- function stopQueue( elem, data, index ) {
- var hooks = data[ index ];
- jQuery.removeData( elem, index, true );
- hooks.stop( gotoEnd );
- }
-
- if ( type == null ) {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
- stopQueue( this, data, index );
- }
- }
- } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
- stopQueue( this, data, index );
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- if ( gotoEnd ) {
-
- // force the next step to be the last
- timers[ index ]( true );
- } else {
- timers[ index ].saveState();
- }
- hadTimers = true;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( !( gotoEnd && hadTimers ) ) {
- jQuery.dequeue( this, type );
- }
- });
- }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx( "show", 1 ),
- slideUp: genFx( "hide", 1 ),
- slideToggle: genFx( "toggle", 1 ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function( noUnmark ) {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- } else if ( noUnmark !== false ) {
- jQuery._unmark( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p, n, firstNum, diff ) {
- return firstNum + diff * p;
- },
- swing: function( p, n, firstNum, diff ) {
- return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- options.orig = options.orig || {};
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
- },
-
- // Get the current size
- cur: function() {
- if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var parsed,
- r = jQuery.css( this.elem, this.prop );
- // Empty strings, null, undefined and "auto" are converted to 0,
- // complex values such as "rotate(1rad)" are returned as is,
- // simple values such as "10px" are parsed to Float.
- return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- var self = this,
- fx = jQuery.fx;
-
- this.startTime = fxNow || createFxNow();
- this.end = to;
- this.now = this.start = from;
- this.pos = this.state = 0;
- this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
- function t( gotoEnd ) {
- return self.step( gotoEnd );
- }
-
- t.queue = this.options.queue;
- t.elem = this.elem;
- t.saveState = function() {
- if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
- jQuery._data( self.elem, "fxshow" + self.prop, self.start );
- }
- };
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval( fx.tick, fx.interval );
- }
- },
-
- // Simple 'show' function
- show: function() {
- var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
- // Remember where we started, so that we can go back to it later
- this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any flash of content
- if ( dataShow !== undefined ) {
- // This show is picking up where a previous hide or show left off
- this.custom( this.cur(), dataShow );
- } else {
- this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
- }
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom( this.cur(), 0 );
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var p, n, complete,
- t = fxNow || createFxNow(),
- done = true,
- elem = this.elem,
- options = this.options;
-
- if ( gotoEnd || t >= options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- options.animatedProperties[ this.prop ] = true;
-
- for ( p in options.animatedProperties ) {
- if ( options.animatedProperties[ p ] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- // Reset the overflow
- if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
- jQuery.each( [ "", "X", "Y" ], function( index, value ) {
- elem.style[ "overflow" + value ] = options.overflow[ index ];
- });
- }
-
- // Hide the element if the "hide" operation was done
- if ( options.hide ) {
- jQuery( elem ).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( options.hide || options.show ) {
- for ( p in options.animatedProperties ) {
- jQuery.style( elem, p, options.orig[ p ] );
- jQuery.removeData( elem, "fxshow" + p, true );
- // Toggle data is no longer needed
- jQuery.removeData( elem, "toggle" + p, true );
- }
- }
-
- // Execute the complete function
- // in the event that the complete function throws an exception
- // we must ensure it won't be called twice. #5684
-
- complete = options.complete;
- if ( complete ) {
-
- options.complete = false;
- complete.call( elem );
- }
- }
-
- return false;
-
- } else {
- // classical easing cannot be used with an Infinity duration
- if ( options.duration == Infinity ) {
- this.now = t;
- } else {
- n = t - this.startTime;
- this.state = n / options.duration;
-
- // Perform the easing function, defaults to swing
- this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
- this.now = this.start + ( (this.end - this.start) * this.pos );
- }
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- interval: 13,
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style( fx.elem, "opacity", fx.now );
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = fx.now + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-// Adds width/height step functions
-// Do not set anything below 0
-jQuery.each([ "width", "height" ], function( i, prop ) {
- jQuery.fx.step[ prop ] = function( fx ) {
- jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
- };
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
- if ( !elemdisplay[ nodeName ] ) {
-
- var body = document.body,
- elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
- display = elem.css( "display" );
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // No iframe to use yet, so create it
- if ( !iframe ) {
- iframe = document.createElement( "iframe" );
- iframe.frameBorder = iframe.width = iframe.height = 0;
- }
-
- body.appendChild( iframe );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
- // document to it; WebKit & Firefox won't allow reusing the iframe document.
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
- iframeDoc.close();
- }
-
- elem = iframeDoc.createElement( nodeName );
-
- iframeDoc.body.appendChild( elem );
-
- display = jQuery.css( elem, "display" );
- body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
- rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
- jQuery.fn.offset = function( options ) {
- var elem = this[0], box;
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- try {
- box = elem.getBoundingClientRect();
- } catch(e) {}
-
- var doc = elem.ownerDocument,
- docElem = doc.documentElement;
-
- // Make sure we're not dealing with a disconnected DOM node
- if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
- }
-
- var body = doc.body,
- win = getWindow(doc),
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
- scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
- top = box.top + scrollTop - clientTop,
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- var computedStyle,
- offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- doc = elem.ownerDocument,
- docElem = doc.documentElement,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.offset = {
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
-
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
- var method = "scroll" + name;
-
- jQuery.fn[ method ] = function( val ) {
- var elem, win;
-
- if ( val === undefined ) {
- elem = this[ 0 ];
-
- if ( !elem ) {
- return null;
- }
-
- win = getWindow( elem );
-
- // Return the scroll offset
- return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
-
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
-
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery( win ).scrollLeft(),
- i ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- this[ method ] = val;
- }
- });
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
- var type = name.toLowerCase();
-
- // innerHeight and innerWidth
- jQuery.fn[ "inner" + name ] = function() {
- var elem = this[0];
- return elem ?
- elem.style ?
- parseFloat( jQuery.css( elem, type, "padding" ) ) :
- this[ type ]() :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn[ "outer" + name ] = function( margin ) {
- var elem = this[0];
- return elem ?
- elem.style ?
- parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
- this[ type ]() :
- null;
- };
-
- jQuery.fn[ type ] = function( size ) {
- // Get window width or height
- var elem = this[0];
- if ( !elem ) {
- return size == null ? null : this;
- }
-
- if ( jQuery.isFunction( size ) ) {
- return this.each(function( i ) {
- var self = jQuery( this );
- self[ type ]( size.call( this, i, self[ type ]() ) );
- });
- }
-
- if ( jQuery.isWindow( elem ) ) {
- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
- var docElemProp = elem.document.documentElement[ "client" + name ],
- body = elem.document.body;
- return elem.document.compatMode === "CSS1Compat" && docElemProp ||
- body && body[ "client" + name ] || docElemProp;
-
- // Get document width or height
- } else if ( elem.nodeType === 9 ) {
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- return Math.max(
- elem.documentElement["client" + name],
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
- elem.body["offset" + name], elem.documentElement["offset" + name]
- );
-
- // Get or set width or height on the element
- } else if ( size === undefined ) {
- var orig = jQuery.css( elem, type ),
- ret = parseFloat( orig );
-
- return jQuery.isNumeric( ret ) ? ret : orig;
-
- // Set the width or height on the element (default to pixels if value is unitless)
- } else {
- return this.css( type, typeof size === "string" ? size : size + "px" );
- }
- };
-
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
- define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
\ No newline at end of file
diff --git a/assets/pics/AQL_overview.png b/assets/pics/AQL_overview.png
deleted file mode 100644
index 8abd117..0000000
--- a/assets/pics/AQL_overview.png
+++ /dev/null
Binary files differ
diff --git a/assets/pics/econtainer-eallcontents-select-name-startswith.jpg b/assets/pics/econtainer-eallcontents-select-name-startswith.jpg
deleted file mode 100644
index 7b30637..0000000
--- a/assets/pics/econtainer-eallcontents-select-name-startswith.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/econtainer-einverse-usecase.jpg b/assets/pics/econtainer-einverse-usecase.jpg
deleted file mode 100644
index 38735c2..0000000
--- a/assets/pics/econtainer-einverse-usecase.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/family_ecore.png b/assets/pics/family_ecore.png
deleted file mode 100644
index a642eab..0000000
--- a/assets/pics/family_ecore.png
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-class.jpg b/assets/pics/self-econtainer-class.jpg
deleted file mode 100644
index db9afc5..0000000
--- a/assets/pics/self-econtainer-class.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-econtainer.jpg b/assets/pics/self-econtainer-econtainer.jpg
deleted file mode 100644
index 16d0c49..0000000
--- a/assets/pics/self-econtainer-econtainer.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-einverse-packagedelement.jpg b/assets/pics/self-econtainer-einverse-packagedelement.jpg
deleted file mode 100644
index 81de31c..0000000
--- a/assets/pics/self-econtainer-einverse-packagedelement.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-einverse.jpg b/assets/pics/self-econtainer-einverse.jpg
deleted file mode 100644
index 991bd8f..0000000
--- a/assets/pics/self-econtainer-einverse.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model-eallcontents-components.jpg b/assets/pics/self-econtainer-model-eallcontents-components.jpg
deleted file mode 100644
index e108488..0000000
--- a/assets/pics/self-econtainer-model-eallcontents-components.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model-eallcontents-usecases.jpg b/assets/pics/self-econtainer-model-eallcontents-usecases.jpg
deleted file mode 100644
index c243a17..0000000
--- a/assets/pics/self-econtainer-model-eallcontents-usecases.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model-eallcontents.jpg b/assets/pics/self-econtainer-model-eallcontents.jpg
deleted file mode 100644
index 92961aa..0000000
--- a/assets/pics/self-econtainer-model-eallcontents.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-model.jpg b/assets/pics/self-econtainer-model.jpg
deleted file mode 100644
index 5e45d6e..0000000
--- a/assets/pics/self-econtainer-model.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer-siblings.jpg b/assets/pics/self-econtainer-siblings.jpg
deleted file mode 100644
index e78208e..0000000
--- a/assets/pics/self-econtainer-siblings.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainer.jpg b/assets/pics/self-econtainer.jpg
deleted file mode 100644
index d7bba0d..0000000
--- a/assets/pics/self-econtainer.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtainerorself.jpg b/assets/pics/self-econtainerorself.jpg
deleted file mode 100644
index 5ea20a4..0000000
--- a/assets/pics/self-econtainerorself.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents-select-name-id.jpg b/assets/pics/self-econtents-select-name-id.jpg
deleted file mode 100644
index 44c7b83..0000000
--- a/assets/pics/self-econtents-select-name-id.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents-select-name-notid.jpg b/assets/pics/self-econtents-select-name-notid.jpg
deleted file mode 100644
index 8e98738..0000000
--- a/assets/pics/self-econtents-select-name-notid.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents-select-visibility.jpg b/assets/pics/self-econtents-select-visibility.jpg
deleted file mode 100644
index 4874695..0000000
--- a/assets/pics/self-econtents-select-visibility.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self-econtents.jpg b/assets/pics/self-econtents.jpg
deleted file mode 100644
index f18ecaf..0000000
--- a/assets/pics/self-econtents.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg b/assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg
deleted file mode 100644
index 5f52fbd..0000000
--- a/assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/self.jpg b/assets/pics/self.jpg
deleted file mode 100644
index e9186ab..0000000
--- a/assets/pics/self.jpg
+++ /dev/null
Binary files differ
diff --git a/assets/pics/simple-uml-ecore.jpg b/assets/pics/simple-uml-ecore.jpg
deleted file mode 100644
index abfe035..0000000
--- a/assets/pics/simple-uml-ecore.jpg
+++ /dev/null
Binary files differ
diff --git a/awards/_index.html b/awards/_index.html
deleted file mode 100644
index 2e8f552..0000000
--- a/awards/_index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<div id="midcolumn">
- <h1>Awards</h1>
-
- <div class="homeitem3col">
- <h3>Open Innovation Award 2010</h3>
- <a href="http://www.obeo.fr/pages/news/en#041010"><img src="../images/openInnovationAward.png" width="155" height="101" /></a>
- <br />
- <p style="text-align:justify">Obeo wins the Open Innovation Award with the presentation of the Acceleo project at the Open
- World Forum 2010. This award is given to recognize the most innovative and game-changer open source solution in its
- marketplace.
- </p>
- <p>
- Acceleo, selected from 13 top nominees, received one of five prestigious trophies at the closing ceremony
- of the Open World Forum, awarded by a jury consisting of leading international experts in the world of open source.
- More information about the Demo Cup: <a href="http://www.openworldforum.org/connect/awards">http://www.openworldforum.org/connect/awards</a>
- </p>
- <p>
- After the Eclipse Community Award in 2009, this prize recognizes the constant efforts of the Acceleo team & community to provide a quality tool.
- </p>
- </div>
- <div class="homeitem3col">
- <h3>Best Open Source Eclipse-Based Developer Tool 2009</h3>
- <a href="http://www.eclipse.org/org/press-release/20090323_AwardsWinners.php"><img src="http://www.eclipse.org/images/awards/winner09.jpg" /></a>
- <br />
- <p>
- This award recognizes Top Technologies in the Eclipse Community. <a href="http://www.eclipse.org/org/press-release/20090323_AwardsWinners.php">More information about this award.</a>
- </p>
- </div>
-</div>
\ No newline at end of file
diff --git a/awards/index.php b/awards/index.php
deleted file mode 100644
index bda377f..0000000
--- a/awards/index.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
- $App = new App();
- $Nav = new Nav();
- $Menu = new Menu();
-
- include($App->getProjectCommon());
-
- $pageTitle = "Awards";
-
- $html = file_get_contents('_index.html');
-
- # Generate the web page
- $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/common_assets/css/animate.css b/common_assets/css/animate.css
new file mode 100644
index 0000000..60f0c96
--- /dev/null
+++ b/common_assets/css/animate.css
@@ -0,0 +1,2744 @@
+@charset "UTF-8";
+
+
+/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license
+
+Copyright (c) 2013 Daniel Eden
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+.animated {
+ -webkit-animation-duration: 1s;
+ animation-duration: 1s;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.animated.hinge {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s;
+}
+
+@-webkit-keyframes bounce {
+ 0%, 20%, 50%, 80%, 100% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 40% {
+ -webkit-transform: translateY(-30px);
+ transform: translateY(-30px);
+ }
+
+ 60% {
+ -webkit-transform: translateY(-15px);
+ transform: translateY(-15px);
+ }
+}
+
+@keyframes bounce {
+ 0%, 20%, 50%, 80%, 100% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 40% {
+ -webkit-transform: translateY(-30px);
+ -ms-transform: translateY(-30px);
+ transform: translateY(-30px);
+ }
+
+ 60% {
+ -webkit-transform: translateY(-15px);
+ -ms-transform: translateY(-15px);
+ transform: translateY(-15px);
+ }
+}
+
+.bounce {
+ -webkit-animation-name: bounce;
+ animation-name: bounce;
+}
+
+@-webkit-keyframes flash {
+ 0%, 50%, 100% {
+ opacity: 1;
+ }
+
+ 25%, 75% {
+ opacity: 0;
+ }
+}
+
+@keyframes flash {
+ 0%, 50%, 100% {
+ opacity: 1;
+ }
+
+ 25%, 75% {
+ opacity: 0;
+ }
+}
+
+.flash {
+ -webkit-animation-name: flash;
+ animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes pulse {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 50% {
+ -webkit-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+
+ 100% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+@keyframes pulse {
+ 0% {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 50% {
+ -webkit-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+
+ 100% {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+.pulse {
+ -webkit-animation-name: pulse;
+ animation-name: pulse;
+}
+
+@-webkit-keyframes shake {
+ 0%, 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 10%, 30%, 50%, 70%, 90% {
+ -webkit-transform: translateX(-10px);
+ transform: translateX(-10px);
+ }
+
+ 20%, 40%, 60%, 80% {
+ -webkit-transform: translateX(10px);
+ transform: translateX(10px);
+ }
+}
+
+@keyframes shake {
+ 0%, 100% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 10%, 30%, 50%, 70%, 90% {
+ -webkit-transform: translateX(-10px);
+ -ms-transform: translateX(-10px);
+ transform: translateX(-10px);
+ }
+
+ 20%, 40%, 60%, 80% {
+ -webkit-transform: translateX(10px);
+ -ms-transform: translateX(10px);
+ transform: translateX(10px);
+ }
+}
+
+.shake {
+ -webkit-animation-name: shake;
+ animation-name: shake;
+}
+
+@-webkit-keyframes swing {
+ 20% {
+ -webkit-transform: rotate(15deg);
+ transform: rotate(15deg);
+ }
+
+ 40% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg);
+ }
+
+ 60% {
+ -webkit-transform: rotate(5deg);
+ transform: rotate(5deg);
+ }
+
+ 80% {
+ -webkit-transform: rotate(-5deg);
+ transform: rotate(-5deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+}
+
+@keyframes swing {
+ 20% {
+ -webkit-transform: rotate(15deg);
+ -ms-transform: rotate(15deg);
+ transform: rotate(15deg);
+ }
+
+ 40% {
+ -webkit-transform: rotate(-10deg);
+ -ms-transform: rotate(-10deg);
+ transform: rotate(-10deg);
+ }
+
+ 60% {
+ -webkit-transform: rotate(5deg);
+ -ms-transform: rotate(5deg);
+ transform: rotate(5deg);
+ }
+
+ 80% {
+ -webkit-transform: rotate(-5deg);
+ -ms-transform: rotate(-5deg);
+ transform: rotate(-5deg);
+ }
+
+ 100% {
+ -webkit-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+}
+
+.swing {
+ -webkit-transform-origin: top center;
+ -ms-transform-origin: top center;
+ transform-origin: top center;
+ -webkit-animation-name: swing;
+ animation-name: swing;
+}
+
+@-webkit-keyframes tada {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 10%, 20% {
+ -webkit-transform: scale(0.9) rotate(-3deg);
+ transform: scale(0.9) rotate(-3deg);
+ }
+
+ 30%, 50%, 70%, 90% {
+ -webkit-transform: scale(1.1) rotate(3deg);
+ transform: scale(1.1) rotate(3deg);
+ }
+
+ 40%, 60%, 80% {
+ -webkit-transform: scale(1.1) rotate(-3deg);
+ transform: scale(1.1) rotate(-3deg);
+ }
+
+ 100% {
+ -webkit-transform: scale(1) rotate(0);
+ transform: scale(1) rotate(0);
+ }
+}
+
+@keyframes tada {
+ 0% {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 10%, 20% {
+ -webkit-transform: scale(0.9) rotate(-3deg);
+ -ms-transform: scale(0.9) rotate(-3deg);
+ transform: scale(0.9) rotate(-3deg);
+ }
+
+ 30%, 50%, 70%, 90% {
+ -webkit-transform: scale(1.1) rotate(3deg);
+ -ms-transform: scale(1.1) rotate(3deg);
+ transform: scale(1.1) rotate(3deg);
+ }
+
+ 40%, 60%, 80% {
+ -webkit-transform: scale(1.1) rotate(-3deg);
+ -ms-transform: scale(1.1) rotate(-3deg);
+ transform: scale(1.1) rotate(-3deg);
+ }
+
+ 100% {
+ -webkit-transform: scale(1) rotate(0);
+ -ms-transform: scale(1) rotate(0);
+ transform: scale(1) rotate(0);
+ }
+}
+
+.tada {
+ -webkit-animation-name: tada;
+ animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes wobble {
+ 0% {
+ -webkit-transform: translateX(0%);
+ transform: translateX(0%);
+ }
+
+ 15% {
+ -webkit-transform: translateX(-25%) rotate(-5deg);
+ transform: translateX(-25%) rotate(-5deg);
+ }
+
+ 30% {
+ -webkit-transform: translateX(20%) rotate(3deg);
+ transform: translateX(20%) rotate(3deg);
+ }
+
+ 45% {
+ -webkit-transform: translateX(-15%) rotate(-3deg);
+ transform: translateX(-15%) rotate(-3deg);
+ }
+
+ 60% {
+ -webkit-transform: translateX(10%) rotate(2deg);
+ transform: translateX(10%) rotate(2deg);
+ }
+
+ 75% {
+ -webkit-transform: translateX(-5%) rotate(-1deg);
+ transform: translateX(-5%) rotate(-1deg);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0%);
+ transform: translateX(0%);
+ }
+}
+
+@keyframes wobble {
+ 0% {
+ -webkit-transform: translateX(0%);
+ -ms-transform: translateX(0%);
+ transform: translateX(0%);
+ }
+
+ 15% {
+ -webkit-transform: translateX(-25%) rotate(-5deg);
+ -ms-transform: translateX(-25%) rotate(-5deg);
+ transform: translateX(-25%) rotate(-5deg);
+ }
+
+ 30% {
+ -webkit-transform: translateX(20%) rotate(3deg);
+ -ms-transform: translateX(20%) rotate(3deg);
+ transform: translateX(20%) rotate(3deg);
+ }
+
+ 45% {
+ -webkit-transform: translateX(-15%) rotate(-3deg);
+ -ms-transform: translateX(-15%) rotate(-3deg);
+ transform: translateX(-15%) rotate(-3deg);
+ }
+
+ 60% {
+ -webkit-transform: translateX(10%) rotate(2deg);
+ -ms-transform: translateX(10%) rotate(2deg);
+ transform: translateX(10%) rotate(2deg);
+ }
+
+ 75% {
+ -webkit-transform: translateX(-5%) rotate(-1deg);
+ -ms-transform: translateX(-5%) rotate(-1deg);
+ transform: translateX(-5%) rotate(-1deg);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0%);
+ -ms-transform: translateX(0%);
+ transform: translateX(0%);
+ }
+}
+
+.wobble {
+ -webkit-animation-name: wobble;
+ animation-name: wobble;
+}
+
+@-webkit-keyframes bounceIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(.3);
+ transform: scale(.3);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: scale(1.05);
+ transform: scale(1.05);
+ }
+
+ 70% {
+ -webkit-transform: scale(.9);
+ transform: scale(.9);
+ }
+
+ 100% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+@keyframes bounceIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(.3);
+ -ms-transform: scale(.3);
+ transform: scale(.3);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: scale(1.05);
+ -ms-transform: scale(1.05);
+ transform: scale(1.05);
+ }
+
+ 70% {
+ -webkit-transform: scale(.9);
+ -ms-transform: scale(.9);
+ transform: scale(.9);
+ }
+
+ 100% {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+.bounceIn {
+ -webkit-animation-name: bounceIn;
+ animation-name: bounceIn;
+}
+
+@-webkit-keyframes bounceInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateY(30px);
+ transform: translateY(30px);
+ }
+
+ 80% {
+ -webkit-transform: translateY(-10px);
+ transform: translateY(-10px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes bounceInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ -ms-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateY(30px);
+ -ms-transform: translateY(30px);
+ transform: translateY(30px);
+ }
+
+ 80% {
+ -webkit-transform: translateY(-10px);
+ -ms-transform: translateY(-10px);
+ transform: translateY(-10px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.bounceInDown {
+ -webkit-animation-name: bounceInDown;
+ animation-name: bounceInDown;
+}
+
+@-webkit-keyframes bounceInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateX(30px);
+ transform: translateX(30px);
+ }
+
+ 80% {
+ -webkit-transform: translateX(-10px);
+ transform: translateX(-10px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes bounceInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ -ms-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateX(30px);
+ -ms-transform: translateX(30px);
+ transform: translateX(30px);
+ }
+
+ 80% {
+ -webkit-transform: translateX(-10px);
+ -ms-transform: translateX(-10px);
+ transform: translateX(-10px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.bounceInLeft {
+ -webkit-animation-name: bounceInLeft;
+ animation-name: bounceInLeft;
+}
+
+@-webkit-keyframes bounceInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateX(-30px);
+ transform: translateX(-30px);
+ }
+
+ 80% {
+ -webkit-transform: translateX(10px);
+ transform: translateX(10px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes bounceInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ -ms-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateX(-30px);
+ -ms-transform: translateX(-30px);
+ transform: translateX(-30px);
+ }
+
+ 80% {
+ -webkit-transform: translateX(10px);
+ -ms-transform: translateX(10px);
+ transform: translateX(10px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.bounceInRight {
+ -webkit-animation-name: bounceInRight;
+ animation-name: bounceInRight;
+}
+
+@-webkit-keyframes bounceInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateY(-30px);
+ transform: translateY(-30px);
+ }
+
+ 80% {
+ -webkit-transform: translateY(10px);
+ transform: translateY(10px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes bounceInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ -ms-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translateY(-30px);
+ -ms-transform: translateY(-30px);
+ transform: translateY(-30px);
+ }
+
+ 80% {
+ -webkit-transform: translateY(10px);
+ -ms-transform: translateY(10px);
+ transform: translateY(10px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.bounceInUp {
+ -webkit-animation-name: bounceInUp;
+ animation-name: bounceInUp;
+}
+
+@-webkit-keyframes bounceOut {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 25% {
+ -webkit-transform: scale(.95);
+ transform: scale(.95);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale(.3);
+ transform: scale(.3);
+ }
+}
+
+@keyframes bounceOut {
+ 0% {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 25% {
+ -webkit-transform: scale(.95);
+ -ms-transform: scale(.95);
+ transform: scale(.95);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ transform: scale(1.1);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale(.3);
+ -ms-transform: scale(.3);
+ transform: scale(.3);
+ }
+}
+
+.bounceOut {
+ -webkit-animation-name: bounceOut;
+ animation-name: bounceOut;
+}
+
+@-webkit-keyframes bounceOutDown {
+ 0% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateY(-20px);
+ transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+}
+
+@keyframes bounceOutDown {
+ 0% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateY(-20px);
+ -ms-transform: translateY(-20px);
+ transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ -ms-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+}
+
+.bounceOutDown {
+ -webkit-animation-name: bounceOutDown;
+ animation-name: bounceOutDown;
+}
+
+@-webkit-keyframes bounceOutLeft {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+}
+
+@keyframes bounceOutLeft {
+ 0% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateX(20px);
+ -ms-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ -ms-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+}
+
+.bounceOutLeft {
+ -webkit-animation-name: bounceOutLeft;
+ animation-name: bounceOutLeft;
+}
+
+@-webkit-keyframes bounceOutRight {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateX(-20px);
+ transform: translateX(-20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+}
+
+@keyframes bounceOutRight {
+ 0% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateX(-20px);
+ -ms-transform: translateX(-20px);
+ transform: translateX(-20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ -ms-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+}
+
+.bounceOutRight {
+ -webkit-animation-name: bounceOutRight;
+ animation-name: bounceOutRight;
+}
+
+@-webkit-keyframes bounceOutUp {
+ 0% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+}
+
+@keyframes bounceOutUp {
+ 0% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 20% {
+ opacity: 1;
+ -webkit-transform: translateY(20px);
+ -ms-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ -ms-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+}
+
+.bounceOutUp {
+ -webkit-animation-name: bounceOutUp;
+ animation-name: bounceOutUp;
+}
+
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ animation-name: fadeIn;
+}
+
+@-webkit-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ -ms-transform: translateY(-20px);
+ transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ animation-name: fadeInDown;
+}
+
+@-webkit-keyframes fadeInDownBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes fadeInDownBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ -ms-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.fadeInDownBig {
+ -webkit-animation-name: fadeInDownBig;
+ animation-name: fadeInDownBig;
+}
+
+@-webkit-keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-20px);
+ transform: translateX(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-20px);
+ -ms-transform: translateX(-20px);
+ transform: translateX(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.fadeInLeft {
+ -webkit-animation-name: fadeInLeft;
+ animation-name: fadeInLeft;
+}
+
+@-webkit-keyframes fadeInLeftBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes fadeInLeftBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ -ms-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.fadeInLeftBig {
+ -webkit-animation-name: fadeInLeftBig;
+ animation-name: fadeInLeftBig;
+}
+
+@-webkit-keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(20px);
+ -ms-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.fadeInRight {
+ -webkit-animation-name: fadeInRight;
+ animation-name: fadeInRight;
+}
+
+@-webkit-keyframes fadeInRightBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes fadeInRightBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ -ms-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.fadeInRightBig {
+ -webkit-animation-name: fadeInRightBig;
+ animation-name: fadeInRightBig;
+}
+
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ -ms-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ animation-name: fadeInUp;
+}
+
+@-webkit-keyframes fadeInUpBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes fadeInUpBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ -ms-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.fadeInUpBig {
+ -webkit-animation-name: fadeInUpBig;
+ animation-name: fadeInUpBig;
+}
+
+@-webkit-keyframes fadeOut {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes fadeOut {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+}
+
+@keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ -ms-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+}
+
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ animation-name: fadeOutDown;
+}
+
+@-webkit-keyframes fadeOutDownBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+}
+
+@keyframes fadeOutDownBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(2000px);
+ -ms-transform: translateY(2000px);
+ transform: translateY(2000px);
+ }
+}
+
+.fadeOutDownBig {
+ -webkit-animation-name: fadeOutDownBig;
+ animation-name: fadeOutDownBig;
+}
+
+@-webkit-keyframes fadeOutLeft {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-20px);
+ transform: translateX(-20px);
+ }
+}
+
+@keyframes fadeOutLeft {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-20px);
+ -ms-transform: translateX(-20px);
+ transform: translateX(-20px);
+ }
+}
+
+.fadeOutLeft {
+ -webkit-animation-name: fadeOutLeft;
+ animation-name: fadeOutLeft;
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+}
+
+@keyframes fadeOutLeftBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ -ms-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+}
+
+.fadeOutLeftBig {
+ -webkit-animation-name: fadeOutLeftBig;
+ animation-name: fadeOutLeftBig;
+}
+
+@-webkit-keyframes fadeOutRight {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+}
+
+@keyframes fadeOutRight {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(20px);
+ -ms-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+}
+
+.fadeOutRight {
+ -webkit-animation-name: fadeOutRight;
+ animation-name: fadeOutRight;
+}
+
+@-webkit-keyframes fadeOutRightBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+}
+
+@keyframes fadeOutRightBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ -ms-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+}
+
+.fadeOutRightBig {
+ -webkit-animation-name: fadeOutRightBig;
+ animation-name: fadeOutRightBig;
+}
+
+@-webkit-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ transform: translateY(-20px);
+ }
+}
+
+@keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ -ms-transform: translateY(-20px);
+ transform: translateY(-20px);
+ }
+}
+
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ animation-name: fadeOutUp;
+}
+
+@-webkit-keyframes fadeOutUpBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+}
+
+@keyframes fadeOutUpBig {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ -ms-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+}
+
+.fadeOutUpBig {
+ -webkit-animation-name: fadeOutUpBig;
+ animation-name: fadeOutUpBig;
+}
+
+@-webkit-keyframes flip {
+ 0% {
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+ transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+ transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+ transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+ transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+ transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+}
+
+@keyframes flip {
+ 0% {
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+ -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+ transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+ -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+ transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+ -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+ transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+ -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+ transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+ -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+ transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+}
+
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ -ms-backface-visibility: visible;
+ backface-visibility: visible;
+ -webkit-animation-name: flip;
+ animation-name: flip;
+}
+
+@-webkit-keyframes flipInX {
+ 0% {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateX(-10deg);
+ transform: perspective(400px) rotateX(-10deg);
+ }
+
+ 70% {
+ -webkit-transform: perspective(400px) rotateX(10deg);
+ transform: perspective(400px) rotateX(10deg);
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateX(0deg);
+ transform: perspective(400px) rotateX(0deg);
+ opacity: 1;
+ }
+}
+
+@keyframes flipInX {
+ 0% {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ -ms-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateX(-10deg);
+ -ms-transform: perspective(400px) rotateX(-10deg);
+ transform: perspective(400px) rotateX(-10deg);
+ }
+
+ 70% {
+ -webkit-transform: perspective(400px) rotateX(10deg);
+ -ms-transform: perspective(400px) rotateX(10deg);
+ transform: perspective(400px) rotateX(10deg);
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateX(0deg);
+ -ms-transform: perspective(400px) rotateX(0deg);
+ transform: perspective(400px) rotateX(0deg);
+ opacity: 1;
+ }
+}
+
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInX;
+ animation-name: flipInX;
+}
+
+@-webkit-keyframes flipInY {
+ 0% {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateY(-10deg);
+ transform: perspective(400px) rotateY(-10deg);
+ }
+
+ 70% {
+ -webkit-transform: perspective(400px) rotateY(10deg);
+ transform: perspective(400px) rotateY(10deg);
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateY(0deg);
+ transform: perspective(400px) rotateY(0deg);
+ opacity: 1;
+ }
+}
+
+@keyframes flipInY {
+ 0% {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ -ms-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotateY(-10deg);
+ -ms-transform: perspective(400px) rotateY(-10deg);
+ transform: perspective(400px) rotateY(-10deg);
+ }
+
+ 70% {
+ -webkit-transform: perspective(400px) rotateY(10deg);
+ -ms-transform: perspective(400px) rotateY(10deg);
+ transform: perspective(400px) rotateY(10deg);
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateY(0deg);
+ -ms-transform: perspective(400px) rotateY(0deg);
+ transform: perspective(400px) rotateY(0deg);
+ opacity: 1;
+ }
+}
+
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInY;
+ animation-name: flipInY;
+}
+
+@-webkit-keyframes flipOutX {
+ 0% {
+ -webkit-transform: perspective(400px) rotateX(0deg);
+ transform: perspective(400px) rotateX(0deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes flipOutX {
+ 0% {
+ -webkit-transform: perspective(400px) rotateX(0deg);
+ -ms-transform: perspective(400px) rotateX(0deg);
+ transform: perspective(400px) rotateX(0deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateX(90deg);
+ -ms-transform: perspective(400px) rotateX(90deg);
+ transform: perspective(400px) rotateX(90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutX {
+ -webkit-animation-name: flipOutX;
+ animation-name: flipOutX;
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+}
+
+@-webkit-keyframes flipOutY {
+ 0% {
+ -webkit-transform: perspective(400px) rotateY(0deg);
+ transform: perspective(400px) rotateY(0deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes flipOutY {
+ 0% {
+ -webkit-transform: perspective(400px) rotateY(0deg);
+ -ms-transform: perspective(400px) rotateY(0deg);
+ transform: perspective(400px) rotateY(0deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: perspective(400px) rotateY(90deg);
+ -ms-transform: perspective(400px) rotateY(90deg);
+ transform: perspective(400px) rotateY(90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutY {
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipOutY;
+ animation-name: flipOutY;
+}
+
+@-webkit-keyframes lightSpeedIn {
+ 0% {
+ -webkit-transform: translateX(100%) skewX(-30deg);
+ transform: translateX(100%) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ -webkit-transform: translateX(-20%) skewX(30deg);
+ transform: translateX(-20%) skewX(30deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: translateX(0%) skewX(-15deg);
+ transform: translateX(0%) skewX(-15deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: translateX(0%) skewX(0deg);
+ transform: translateX(0%) skewX(0deg);
+ opacity: 1;
+ }
+}
+
+@keyframes lightSpeedIn {
+ 0% {
+ -webkit-transform: translateX(100%) skewX(-30deg);
+ -ms-transform: translateX(100%) skewX(-30deg);
+ transform: translateX(100%) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ -webkit-transform: translateX(-20%) skewX(30deg);
+ -ms-transform: translateX(-20%) skewX(30deg);
+ transform: translateX(-20%) skewX(30deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: translateX(0%) skewX(-15deg);
+ -ms-transform: translateX(0%) skewX(-15deg);
+ transform: translateX(0%) skewX(-15deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: translateX(0%) skewX(0deg);
+ -ms-transform: translateX(0%) skewX(0deg);
+ transform: translateX(0%) skewX(0deg);
+ opacity: 1;
+ }
+}
+
+.lightSpeedIn {
+ -webkit-animation-name: lightSpeedIn;
+ animation-name: lightSpeedIn;
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+}
+
+@-webkit-keyframes lightSpeedOut {
+ 0% {
+ -webkit-transform: translateX(0%) skewX(0deg);
+ transform: translateX(0%) skewX(0deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: translateX(100%) skewX(-30deg);
+ transform: translateX(100%) skewX(-30deg);
+ opacity: 0;
+ }
+}
+
+@keyframes lightSpeedOut {
+ 0% {
+ -webkit-transform: translateX(0%) skewX(0deg);
+ -ms-transform: translateX(0%) skewX(0deg);
+ transform: translateX(0%) skewX(0deg);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform: translateX(100%) skewX(-30deg);
+ -ms-transform: translateX(100%) skewX(-30deg);
+ transform: translateX(100%) skewX(-30deg);
+ opacity: 0;
+ }
+}
+
+.lightSpeedOut {
+ -webkit-animation-name: lightSpeedOut;
+ animation-name: lightSpeedOut;
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+}
+
+@-webkit-keyframes rotateIn {
+ 0% {
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(-200deg);
+ transform: rotate(-200deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateIn {
+ 0% {
+ -webkit-transform-origin: center center;
+ -ms-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(-200deg);
+ -ms-transform: rotate(-200deg);
+ transform: rotate(-200deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: center center;
+ -ms-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+.rotateIn {
+ -webkit-animation-name: rotateIn;
+ animation-name: rotateIn;
+}
+
+@-webkit-keyframes rotateInDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+.rotateInDownLeft {
+ -webkit-animation-name: rotateInDownLeft;
+ animation-name: rotateInDownLeft;
+}
+
+@-webkit-keyframes rotateInDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+.rotateInDownRight {
+ -webkit-animation-name: rotateInDownRight;
+ animation-name: rotateInDownRight;
+}
+
+@-webkit-keyframes rotateInUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+.rotateInUpLeft {
+ -webkit-animation-name: rotateInUpLeft;
+ animation-name: rotateInUpLeft;
+}
+
+@-webkit-keyframes rotateInUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+}
+
+.rotateInUpRight {
+ -webkit-animation-name: rotateInUpRight;
+ animation-name: rotateInUpRight;
+}
+
+@-webkit-keyframes rotateOut {
+ 0% {
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(200deg);
+ transform: rotate(200deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOut {
+ 0% {
+ -webkit-transform-origin: center center;
+ -ms-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: center center;
+ -ms-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: rotate(200deg);
+ -ms-transform: rotate(200deg);
+ transform: rotate(200deg);
+ opacity: 0;
+ }
+}
+
+.rotateOut {
+ -webkit-animation-name: rotateOut;
+ animation-name: rotateOut;
+}
+
+@-webkit-keyframes rotateOutDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownLeft {
+ -webkit-animation-name: rotateOutDownLeft;
+ animation-name: rotateOutDownLeft;
+}
+
+@-webkit-keyframes rotateOutDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownRight {
+ -webkit-animation-name: rotateOutDownRight;
+ animation-name: rotateOutDownRight;
+}
+
+@-webkit-keyframes rotateOutUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpLeft {
+ -webkit-animation-name: rotateOutUpLeft;
+ animation-name: rotateOutUpLeft;
+}
+
+@-webkit-keyframes rotateOutUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1;
+ }
+
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpRight {
+ -webkit-animation-name: rotateOutUpRight;
+ animation-name: rotateOutUpRight;
+}
+
+@-webkit-keyframes slideInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes slideInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ -ms-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+.slideInDown {
+ -webkit-animation-name: slideInDown;
+ animation-name: slideInDown;
+}
+
+@-webkit-keyframes slideInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes slideInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ -ms-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.slideInLeft {
+ -webkit-animation-name: slideInLeft;
+ animation-name: slideInLeft;
+}
+
+@-webkit-keyframes slideInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes slideInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ -ms-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.slideInRight {
+ -webkit-animation-name: slideInRight;
+ animation-name: slideInRight;
+}
+
+@-webkit-keyframes slideOutLeft {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+}
+
+@keyframes slideOutLeft {
+ 0% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(-2000px);
+ -ms-transform: translateX(-2000px);
+ transform: translateX(-2000px);
+ }
+}
+
+.slideOutLeft {
+ -webkit-animation-name: slideOutLeft;
+ animation-name: slideOutLeft;
+}
+
+@-webkit-keyframes slideOutRight {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+}
+
+@keyframes slideOutRight {
+ 0% {
+ -webkit-transform: translateX(0);
+ -ms-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(2000px);
+ -ms-transform: translateX(2000px);
+ transform: translateX(2000px);
+ }
+}
+
+.slideOutRight {
+ -webkit-animation-name: slideOutRight;
+ animation-name: slideOutRight;
+}
+
+@-webkit-keyframes slideOutUp {
+ 0% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+}
+
+@keyframes slideOutUp {
+ 0% {
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-2000px);
+ -ms-transform: translateY(-2000px);
+ transform: translateY(-2000px);
+ }
+}
+
+.slideOutUp {
+ -webkit-animation-name: slideOutUp;
+ animation-name: slideOutUp;
+}
+
+@-webkit-keyframes hinge {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%, 60% {
+ -webkit-transform: rotate(80deg);
+ transform: rotate(80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40% {
+ -webkit-transform: rotate(60deg);
+ transform: rotate(60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 80% {
+ -webkit-transform: rotate(60deg) translateY(0);
+ transform: rotate(60deg) translateY(0);
+ opacity: 1;
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 100% {
+ -webkit-transform: translateY(700px);
+ transform: translateY(700px);
+ opacity: 0;
+ }
+}
+
+@keyframes hinge {
+ 0% {
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%, 60% {
+ -webkit-transform: rotate(80deg);
+ -ms-transform: rotate(80deg);
+ transform: rotate(80deg);
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40% {
+ -webkit-transform: rotate(60deg);
+ -ms-transform: rotate(60deg);
+ transform: rotate(60deg);
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 80% {
+ -webkit-transform: rotate(60deg) translateY(0);
+ -ms-transform: rotate(60deg) translateY(0);
+ transform: rotate(60deg) translateY(0);
+ opacity: 1;
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 100% {
+ -webkit-transform: translateY(700px);
+ -ms-transform: translateY(700px);
+ transform: translateY(700px);
+ opacity: 0;
+ }
+}
+
+.hinge {
+ -webkit-animation-name: hinge;
+ animation-name: hinge;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-100%) rotate(-120deg);
+ transform: translateX(-100%) rotate(-120deg);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0px) rotate(0deg);
+ transform: translateX(0px) rotate(0deg);
+ }
+}
+
+@keyframes rollIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateX(-100%) rotate(-120deg);
+ -ms-transform: translateX(-100%) rotate(-120deg);
+ transform: translateX(-100%) rotate(-120deg);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateX(0px) rotate(0deg);
+ -ms-transform: translateX(0px) rotate(0deg);
+ transform: translateX(0px) rotate(0deg);
+ }
+}
+
+.rollIn {
+ -webkit-animation-name: rollIn;
+ animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollOut {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0px) rotate(0deg);
+ transform: translateX(0px) rotate(0deg);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(100%) rotate(120deg);
+ transform: translateX(100%) rotate(120deg);
+ }
+}
+
+@keyframes rollOut {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateX(0px) rotate(0deg);
+ -ms-transform: translateX(0px) rotate(0deg);
+ transform: translateX(0px) rotate(0deg);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateX(100%) rotate(120deg);
+ -ms-transform: translateX(100%) rotate(120deg);
+ transform: translateX(100%) rotate(120deg);
+ }
+}
+
+.rollOut {
+ -webkit-animation-name: rollOut;
+ animation-name: rollOut;
+}
diff --git a/common_assets/css/bootstrap.min.css b/common_assets/css/bootstrap.min.css
new file mode 100755
index 0000000..185ce53
--- /dev/null
+++ b/common_assets/css/bootstrap.min.css
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v4.0.0 (https://getbootstrap.com)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;/* font-family:inherit; */font-weight:500;line-height:1.2;color:inherit;}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/common_assets/css/styles.css b/common_assets/css/styles.css
new file mode 100644
index 0000000..a508572
--- /dev/null
+++ b/common_assets/css/styles.css
@@ -0,0 +1,533 @@
+html {
+}
+body {
+ font-family: 'Lato', sans-serif;
+ font-size: 16px;
+ color: #777;
+ font-weight: 400;
+ padding-top: 80px;
+}
+h1,h2,h3,h4,h5,h6 {
+ color: #261e58;
+ font-weight: bold;
+}
+p {
+ line-height: 22px;
+ font-size: 16px;
+ font-weight: 400;
+}
+ul {
+ list-style: square;
+}
+h1 {font-size: 38px;}
+
+#intro h1 {
+ text-transform: uppercase;
+}
+.span-left {
+ margin-left: 40px;
+}
+.span-right {
+ margin-right: 40px;
+}
+h2 {
+ font-size: 26px;
+}
+code {
+ color:#009db5;
+}
+.text-uppercase {
+ letter-spacing: 2px;
+}
+a, .linked_title a:hover{
+ color: #FBB800;
+ text-decoration: none;
+}
+a:hover, a:active, a:focus, #top-bar .main-menu li#dwnld > a:hover, .linked_title a,
+#top-bar .main-menu li#dwnld > a:focus {
+ text-decoration: none;
+ color: #261e58;
+ outline: 0;
+}
+.row {
+ padding: 20px 0;
+}
+.row img {
+ padding: 20px;}
+.pa1 {
+ padding: 10px;
+}
+.pa2 {
+ padding: 20px;
+}
+.pa3 {
+ padding: 20px;
+}
+.pa4 {
+ padding: 40px;
+}
+.bg_indigo a:hover {color:#fff;}
+.bg_indigo a:focus {color:#FBB800;}
+.bg_indigo .btn-default:hover {
+background-color: #fff;
+color: #261e58;
+}
+.btn {
+ font-size: 13px;
+ font-weight: 700;
+ padding: 16px 35px;
+ text-transform: uppercase;
+ margin-top: 30px;
+}
+.btn-default {
+ color: #fff;
+ background-color: #FBBF52;
+ border: 1px solid #FBBF52;
+ letter-spacing: 2px;
+}
+.btn-primary {
+ background-color: #fff;
+ color: #FBBF52;
+ border: 1px solid #FBBF52;
+ letter-spacing: 2px;
+}
+.btn-default.active, .btn-default.focus, .btn-default:active, .btn-default:focus, .btn-default:hover, .open>.dropdown-toggle.btn-default
+{
+ color: #FBBF52;
+ background-color: #261e58;
+ border: 1px solid #261e58;
+}
+.btn-primary:hover{
+ color: #FBBF52;
+ background-color: #261e58;
+}
+section {
+ padding: 40px;
+}
+.block-center {
+ float: none;
+ margin: 0 auto;
+}
+.left {
+ text-align: left;
+}
+.right {
+ text-align: right;
+}
+.title {
+ font-size: 30px;
+ line-height: 1.1;
+ font-weight: 300;
+ color: #261e58;
+ text-transform: uppercase;
+ margin-bottom: 20px;
+}
+.subtitle {
+ font-size: 24px;
+ font-weight: 600;
+ margin-bottom: 18px;
+ text-transform: uppercase;
+}
+.vcenter {
+ display: grid;
+ align-items: center;
+}
+.col-md-7 img {
+ width: 100%;
+}
+/* Menu - Navigation*/
+#top-bar {
+ background: #fff;
+ color: #fff;
+ -webkit-transition: all 0.2s ease-out 0s;
+ transition: all 0.2s ease-out 0s;
+ padding: 15px 0;
+ -webkit-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.1);
+ border-bottom: 1px solid #dedede;
+}
+#top-bar .navbar-nav > li > a:hover {
+ background: transparent;
+}
+#top-bar.animated-header {
+ padding: 20px 0;
+ background: #ffffff;
+ box-shadow: none;
+}
+#top-bar .main-menu li > a {
+ display: block;
+ color: #444;
+ padding: 10px 15px;
+}
+#top-bar .main-menu li, footer ul li {
+ position: relative;
+ list-style: none;
+ border-radius: 4px;
+}
+#top-bar .main-menu li a {
+ font-size: 14px;
+ font-weight: 500;
+ border-bottom: 2px solid transparent;
+ -webkit-transition: .3s all;
+ -o-transition: .3s all;
+ transition: .3s all;
+ text-transform: uppercase;
+}
+#top-bar .main-menu li a:hover {
+ color: #FBB800;
+}
+#top-bar .main-menu li#dwnld > a {
+ color: #FBB800;
+}
+#top-bar .main-menu li#dwnld > a:focus {
+background-color: transparent;
+}
+.navbar-header .navbar-brand {
+ padding: 5px 0;
+}
+.navbar-header .navbar-brand a {
+ height: auto;
+ display: inline-block;
+ margin-top: -10px;
+}
+.nav>li#dwnld {
+ background-color: #261e58;
+}
+.nav>li#dwnld:hover{
+ background-color: #FBB800;
+}
+.navbar-right .dropdown-menu {
+ right: auto;
+ left: 0;
+}
+.dropdown-menu > ul {
+ list-style: none;
+ padding: 15px;
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 0;
+ margin-top: -5px;
+ background: #fff;
+ background-color: #261e58;
+ box-shadow: 0 2px 0.09px rgba(0, 0, 0, 0.15);
+}
+.nav .open > a,
+.nav .open > a:focus {
+ background-color: transparent;
+}
+#top-bar .dropdown-menu > ul > li > a {
+ display: block;
+ font-size: 13px;
+ font-weight: 400;
+ line-height: normal;
+ text-decoration: none;
+ padding: 8px 0;
+ color: #fff;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
+/* Colors
+-----------*/
+.bg_indigo {
+ background: #261e58;
+}
+.bg_lightest_grey {
+ background: #f9f9f9;
+}
+.txt_indigo {
+ color: #261e58;
+}
+.txt_purple {
+ color: #7667A3;
+}
+.txt_yellow {
+ color: #FBB800;
+}
+.txt_lightest_grey {
+ color: #bdbdbd;
+}
+.txt_white {
+color: #fff !important;
+}
+.call-to-action {
+ background-size: cover;
+ background-attachment: fixed;
+ padding: 80px 0;
+ text-align: center;
+ position: relative;
+ color: #fff;
+}
+.call-to-action .block {
+ position: relative;
+ z-index: 99;
+ color: #fff;
+}
+.call-to-action .block h2 {
+ margin-bottom: 15px;
+ color: #fff;
+}
+.call-to-action .block p {
+ margin-top: 20px;
+}
+#feature {
+ padding: 80px 0;
+}
+#feature .media {
+ margin: 0px 0 70px 0;
+}
+#feature .media .media-left {
+ padding-right: 25px;
+}
+#feature h3 {
+ color: #000;
+ font-size: 18px;
+ text-transform: uppercase;
+ text-align: center;
+ margin-bottom: 20px;
+ margin: 0px 0px 15px;
+ font-weight: 400;
+}
+#feature p {
+ line-height: 25px;
+ font-size: 14px;
+ color: #777777;
+}
+#feature .icon {
+ text-decoration: none;
+ color: #fff;
+ background-color: #FBB800;
+ height: 100px;
+ text-align: center;
+ width: 100px;
+ font-size: 50px;
+ line-height: 100px;
+ overflow: hidden;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ -ms-border-radius: 50%;
+ -o-border-radius: 50%;
+ text-shadow: #00a4ba 1px 1px, #00a4ba 2px 2px, #00a4ba 3px 3px, #00a4ba 4px 4px, #00a4ba 5px 5px, #00a4ba 6px 6px, #00a4ba 7px 7px, #00a4ba 8px 8px, #00a4ba 9px 9px, #00a4ba 10px 10px, #00a4ba 11px 11px, #00a4ba 12px 12px, #00a4ba 13px 13px, #00a4ba 14px 14px, #00a4ba 15px 15px, #00a4ba 16px 16px, #00a4ba 17px 17px, #00a4ba 18px 18px, #00a4ba 19px 19px, #00a4ba 20px 20px, #00a4ba 21px 21px, #00a4ba 22px 22px, #00a4ba 23px 23px, #00a4ba 24px 24px, #00a4ba 25px 25px, #00a4ba 26px 26px, #00a4ba 27px 27px, #00a4ba 28px 28px, #00a4ba 29px 29px, #00a4ba 30px 30px, #00a4ba 31px 31px, #00a4ba 32px 32px, #00a4ba 33px 33px, #00a4ba 34px 34px, #00a4ba 35px 35px, #00a4ba 36px 36px, #00a4ba 37px 37px, #00a4ba 38px 38px, #00a4ba 39px 39px, #00a4ba 40px 40px, #00a4ba 41px 41px, #00a4ba 42px 42px, #00a4ba 43px 43px, #00a4ba 44px 44px, #00a4ba 45px 45px, #00a4ba 46px 46px, #00a4ba 47px 47px, #00a4ba 48px 48px, #00a4ba 49px 49px, #00a4ba 50px 50px, #00a4ba 51px 51px, #00a4ba 52px 52px, #00a4ba 53px 53px, #00a4ba 54px 54px, #00a4ba 55px 55px, #00a4ba 56px 56px, #00a4ba 57px 57px, #00a4ba 58px 58px, #00a4ba 59px 59px, #00a4ba 60px 60px, #00a4ba 61px 61px, #00a4ba 62px 62px, #00a4ba 63px 63px, #00a4ba 64px 64px, #00a4ba 65px 65px, #00a4ba 66px 66px, #00a4ba 67px 67px, #00a4ba 68px 68px, #00a4ba 69px 69px, #00a4ba 70px 70px, #00a4ba 71px 71px, #00a4ba 72px 72px, #00a4ba 73px 73px, #00a4ba 74px 74px, #00a4ba 75px 75px, #00a4ba 76px 76px, #00a4ba 77px 77px, #00a4ba 78px 78px, #00a4ba 79px 79px, #00a4ba 80px 80px, #00a4ba 81px 81px, #00a4ba 82px 82px, #00a4ba 83px 83px, #00a4ba 84px 84px, #00a4ba 85px 85px, #00a4ba 86px 86px, #00a4ba 87px 87px, #00a4ba 88px 88px, #00a4ba 89px 89px, #00a4ba 90px 90px, #00a4ba 91px 91px, #00a4ba 92px 92px, #00a4ba 93px 93px, #00a4ba 94px 94px, #00a4ba 95px 95px, #00a4ba 96px 96px, #00a4ba 97px 97px, #00a4ba 98px 98px, #00a4ba 99px 99px, #00a4ba 100px 100px;
+}
+::-webkit-input-placeholder { /* Chrome/Opera/Safari */
+ color: #bdbdbd;
+}
+::-moz-placeholder { /* Firefox 19+ */
+ color: #bdbdbd;
+}
+:-ms-input-placeholder { /* IE 10+ */
+ color: #bdbdbd;
+}
+:-moz-placeholder { /* Firefox 18- */
+ color: #bdbdbd;
+}
+#map-canvas {
+ width: 100%;
+ height: 350px;
+ background-color: #CCC;
+}
+/* Footer */
+footer {
+ background: #261e58;
+ padding: 25px 0;
+ color: #fff;
+ border-top: 1px solid #dedede;
+}
+footer h6{
+ color: #fff;
+ font-weight: bolder;
+ font-size: 18px;
+}
+footer #copyright {
+ font-size: 12px;
+ margin-bottom: 0;
+ margin-top: 10px;
+}
+footer .row img {
+ padding: 0;
+}
+footer ul {padding-left: 0;}
+footer a {
+ font-size: 12px;
+ font-weight: 100;
+ color:#fff;
+}
+footer a:hover {color:#ccc;}
+/*------*/
+.fancybox-close {
+ background: url("../images/icons/close.png") no-repeat scroll 0 0 transparent;
+ height: 50px;
+ right: 0;
+ top: 0;
+ width: 50px;
+}
+.fancybox-next span {
+ background: url("../images/icons/right.png") no-repeat scroll center center #261e58;
+ height: 50px;
+ width: 50px;
+ right: 0;
+}
+.fancybox-prev span {
+ background: url("../images/icons/left.png") no-repeat scroll center center #261e58;
+ height: 50px;
+ width: 50px;
+ left: 0;
+}
+.fancybox-title h3 {
+ font-size: 15px;
+ margin: 0;
+}
+.fancybox-title {
+ padding: 15px 8px;
+}
+.wrapper_404 h1 {
+ font-size: 200px;
+ color: #FBB800;
+ line-height: 1;
+}
+.wrapper_404 h2 {
+ font-size: 50px;
+ margin-top: 0;
+}
+.company-description {
+ margin-top: 80px;
+}
+.company-description .block h3 {
+ margin-top: 0;
+}
+.company-description .block p {
+ color: #727272;
+}
+.about-feature {
+ margin-top: 50px;
+}
+.about-feature .block {
+ color: #fff;
+ width: 33.33%;
+ padding: 5%;
+ float: left;
+}
+.about-feature .block p {
+ font-weight: 300;
+}
+.about-feature .about-feature-1 {
+ background: #FBB800;
+}
+.about-feature .about-feature-2 {
+ background: #00B0C7;
+}
+.about-feature .about-feature-3 {
+ background: #00A6BB;
+}
+article {
+ padding: 30px 0;
+}
+.gallery {
+ padding: 100px;
+}
+.gallery figure .buttons {
+ left: 40%;
+}
+#videos .video_thumbnail p a {
+ position: relative;
+ display: block;
+ opacity: 1;
+ -webkit-transition: .7s;
+ -o-transition: .7s;
+ transition: .7s;
+}
+#videos .video_thumbnail p a::before {
+ font: normal normal normal 14px/1 FontAwesome;
+ content: "\f16a";
+ color: #261e58;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ transform: translate(0, 0);
+ display: block;
+ position: absolute;
+ font-size: 40px;
+ opacity: 0.8;
+ top: 40%;
+ left: 43%;
+ z-index: 4;
+}
+#videos .video_thumbnail p a:hover::before {
+ color: #FBB800;
+ opacity: 1;
+}
+/* Tab Style
+------------- */
+.tab-content {
+ padding: 20px;
+ text-align: left;
+}
+.nav-tabs > li > a {
+ background: #dedede;
+ border: 1px solid transparent;
+ border-bottom: none;
+ padding: 10px 20px;
+ color: #fff;
+}
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+ color: #002b3c;
+}
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus, .nav-tabs > li a:hover {
+ background: #ffffff;
+ border: 1px solid #eeeeee;
+ border-bottom: none;
+ color: #002b3c;
+}
+.nav-tabs > li > a {
+ text-transform: uppercase;
+ font-size: 14px;
+}
+.tab-content img, .arcadia-content img{
+ margin: 40px 0;
+}
+/* Table Style
+--------------- */
+.table>tbody>tr>td {text-align: left;}
+/* Accordion Style
+--------------- */
+.dropdown_content {
+ margin-bottom: 20px;
+}
+.accordion h3 {
+ color: #FBB800;
+ margin-bottom: 5px;
+}
+.dropdown_content .fa-plus, .dropdown_content .fa-caret-down {
+ float: right;
+ font-size: 25px;
+ font-weight: initial;
+}
+.next-section .caret {
+margin-top: -87px;
+border-top: 20px solid;
+border-right: 45px solid rgba(0, 0, 0, 0);
+border-left: 45px solid rgba(0, 0, 0, 0);
+text-align: center;
+}
+.dropdown_content .accordion-group {
+ border-bottom: 1px solid #dedede;
+ padding: 20px 0;
+}
+.dropdown_content .accordion-inner {
+ padding-top: 20px;
+}
+/* Responsive
+------------- */
+@media only screen and (max-width: 767px) {
+.row img.responsive {
+ width: 100%;
+ height: 100%;
+}
+.row img {
+ padding: 20px 0;
+}
+.navbar-brand {padding-left: .75rem;}
+h1 {font-size: 31px;}
+h4 {font-size: 20px;}
+.title {font-size: 28px;}
+.btn {padding: 8px 18px;}
+.span-right {margin-right: 4px;}
+}
\ No newline at end of file
diff --git a/common_assets/images/logos/favicon_acceleo.ico b/common_assets/images/logos/favicon_acceleo.ico
new file mode 100644
index 0000000..1b951cc
--- /dev/null
+++ b/common_assets/images/logos/favicon_acceleo.ico
Binary files differ
diff --git a/common_assets/images/logos/icon_acceleo.png b/common_assets/images/logos/icon_acceleo.png
new file mode 100644
index 0000000..7ab56bf
--- /dev/null
+++ b/common_assets/images/logos/icon_acceleo.png
Binary files differ
diff --git a/common_assets/images/logos/logo-eclipse-foundation.png b/common_assets/images/logos/logo-eclipse-foundation.png
new file mode 100755
index 0000000..b03e103
--- /dev/null
+++ b/common_assets/images/logos/logo-eclipse-foundation.png
Binary files differ
diff --git a/common_assets/images/logos/logo_acceleo.png b/common_assets/images/logos/logo_acceleo.png
new file mode 100644
index 0000000..4231444
--- /dev/null
+++ b/common_assets/images/logos/logo_acceleo.png
Binary files differ
diff --git a/common_assets/images/logos/logo_emf.jpg b/common_assets/images/logos/logo_emf.jpg
new file mode 100644
index 0000000..e7b2dc9
--- /dev/null
+++ b/common_assets/images/logos/logo_emf.jpg
Binary files differ
diff --git a/common_assets/images/logos/logo_emf.png b/common_assets/images/logos/logo_emf.png
new file mode 100644
index 0000000..4b549cf
--- /dev/null
+++ b/common_assets/images/logos/logo_emf.png
Binary files differ
diff --git a/common_assets/images/logos/logo_obeo.png b/common_assets/images/logos/logo_obeo.png
new file mode 100644
index 0000000..28ab21f
--- /dev/null
+++ b/common_assets/images/logos/logo_obeo.png
Binary files differ
diff --git a/common_assets/images/logos/logo_sirius.png b/common_assets/images/logos/logo_sirius.png
new file mode 100644
index 0000000..003ec55
--- /dev/null
+++ b/common_assets/images/logos/logo_sirius.png
Binary files differ
diff --git a/common_assets/js/magnific-popup.min.js b/common_assets/js/magnific-popup.min.js
new file mode 100644
index 0000000..21de27e
--- /dev/null
+++ b/common_assets/js/magnific-popup.min.js
@@ -0,0 +1,4 @@
+/*! Magnific Popup - v0.9.7 - 2013-10-10
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2013 Dmitry Semenov; */
+(function(e){var t,n,i,o,r,a,s,l="Close",c="BeforeClose",d="AfterClose",u="BeforeAppend",p="MarkupParse",f="Open",m="Change",g="mfp",v="."+g,h="mfp-ready",C="mfp-removing",y="mfp-prevent-close",w=function(){},b=!!window.jQuery,I=e(window),x=function(e,n){t.ev.on(g+e+v,n)},k=function(t,n,i,o){var r=document.createElement("div");return r.className="mfp-"+t,i&&(r.innerHTML=i),o?n&&n.appendChild(r):(r=e(r),n&&r.appendTo(n)),r},T=function(n,i){t.ev.triggerHandler(g+n,i),t.st.callbacks&&(n=n.charAt(0).toLowerCase()+n.slice(1),t.st.callbacks[n]&&t.st.callbacks[n].apply(t,e.isArray(i)?i:[i]))},E=function(){(t.st.focus?t.content.find(t.st.focus).eq(0):t.wrap).focus()},S=function(n){return n===s&&t.currTemplate.closeBtn||(t.currTemplate.closeBtn=e(t.st.closeMarkup.replace("%title%",t.st.tClose)),s=n),t.currTemplate.closeBtn},P=function(){e.magnificPopup.instance||(t=new w,t.init(),e.magnificPopup.instance=t)},_=function(n){if(!e(n).hasClass(y)){var i=t.st.closeOnContentClick,o=t.st.closeOnBgClick;if(i&&o)return!0;if(!t.content||e(n).hasClass("mfp-close")||t.preloader&&n===t.preloader[0])return!0;if(n===t.content[0]||e.contains(t.content[0],n)){if(i)return!0}else if(o&&e.contains(document,n))return!0;return!1}},O=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1};w.prototype={constructor:w,init:function(){var n=navigator.appVersion;t.isIE7=-1!==n.indexOf("MSIE 7."),t.isIE8=-1!==n.indexOf("MSIE 8."),t.isLowIE=t.isIE7||t.isIE8,t.isAndroid=/android/gi.test(n),t.isIOS=/iphone|ipad|ipod/gi.test(n),t.supportsTransition=O(),t.probablyMobile=t.isAndroid||t.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),i=e(document.body),o=e(document),t.popupsCache={}},open:function(n){var i;if(n.isObj===!1){t.items=n.items.toArray(),t.index=0;var r,s=n.items;for(i=0;s.length>i;i++)if(r=s[i],r.parsed&&(r=r.el[0]),r===n.el[0]){t.index=i;break}}else t.items=e.isArray(n.items)?n.items:[n.items],t.index=n.index||0;if(t.isOpen)return t.updateItemHTML(),void 0;t.types=[],a="",t.ev=n.mainEl&&n.mainEl.length?n.mainEl.eq(0):o,n.key?(t.popupsCache[n.key]||(t.popupsCache[n.key]={}),t.currTemplate=t.popupsCache[n.key]):t.currTemplate={},t.st=e.extend(!0,{},e.magnificPopup.defaults,n),t.fixedContentPos="auto"===t.st.fixedContentPos?!t.probablyMobile:t.st.fixedContentPos,t.st.modal&&(t.st.closeOnContentClick=!1,t.st.closeOnBgClick=!1,t.st.showCloseBtn=!1,t.st.enableEscapeKey=!1),t.bgOverlay||(t.bgOverlay=k("bg").on("click"+v,function(){t.close()}),t.wrap=k("wrap").attr("tabindex",-1).on("click"+v,function(e){_(e.target)&&t.close()}),t.container=k("container",t.wrap)),t.contentContainer=k("content"),t.st.preloader&&(t.preloader=k("preloader",t.container,t.st.tLoading));var l=e.magnificPopup.modules;for(i=0;l.length>i;i++){var c=l[i];c=c.charAt(0).toUpperCase()+c.slice(1),t["init"+c].call(t)}T("BeforeOpen"),t.st.showCloseBtn&&(t.st.closeBtnInside?(x(p,function(e,t,n,i){n.close_replaceWith=S(i.type)}),a+=" mfp-close-btn-in"):t.wrap.append(S())),t.st.alignTop&&(a+=" mfp-align-top"),t.fixedContentPos?t.wrap.css({overflow:t.st.overflowY,overflowX:"hidden",overflowY:t.st.overflowY}):t.wrap.css({top:I.scrollTop(),position:"absolute"}),(t.st.fixedBgPos===!1||"auto"===t.st.fixedBgPos&&!t.fixedContentPos)&&t.bgOverlay.css({height:o.height(),position:"absolute"}),t.st.enableEscapeKey&&o.on("keyup"+v,function(e){27===e.keyCode&&t.close()}),I.on("resize"+v,function(){t.updateSize()}),t.st.closeOnContentClick||(a+=" mfp-auto-cursor"),a&&t.wrap.addClass(a);var d=t.wH=I.height(),u={};if(t.fixedContentPos&&t._hasScrollBar(d)){var m=t._getScrollbarSize();m&&(u.paddingRight=m)}t.fixedContentPos&&(t.isIE7?e("body, html").css("overflow","hidden"):u.overflow="hidden");var g=t.st.mainClass;return t.isIE7&&(g+=" mfp-ie7"),g&&t._addClassToMFP(g),t.updateItemHTML(),T("BuildControls"),e("html").css(u),t.bgOverlay.add(t.wrap).prependTo(document.body),t._lastFocusedEl=document.activeElement,setTimeout(function(){t.content?(t._addClassToMFP(h),E()):t.bgOverlay.addClass(h),o.on("focusin"+v,function(n){return n.target===t.wrap[0]||e.contains(t.wrap[0],n.target)?void 0:(E(),!1)})},16),t.isOpen=!0,t.updateSize(d),T(f),n},close:function(){t.isOpen&&(T(c),t.isOpen=!1,t.st.removalDelay&&!t.isLowIE&&t.supportsTransition?(t._addClassToMFP(C),setTimeout(function(){t._close()},t.st.removalDelay)):t._close())},_close:function(){T(l);var n=C+" "+h+" ";if(t.bgOverlay.detach(),t.wrap.detach(),t.container.empty(),t.st.mainClass&&(n+=t.st.mainClass+" "),t._removeClassFromMFP(n),t.fixedContentPos){var i={paddingRight:""};t.isIE7?e("body, html").css("overflow",""):i.overflow="",e("html").css(i)}o.off("keyup"+v+" focusin"+v),t.ev.off(v),t.wrap.attr("class","mfp-wrap").removeAttr("style"),t.bgOverlay.attr("class","mfp-bg"),t.container.attr("class","mfp-container"),!t.st.showCloseBtn||t.st.closeBtnInside&&t.currTemplate[t.currItem.type]!==!0||t.currTemplate.closeBtn&&t.currTemplate.closeBtn.detach(),t._lastFocusedEl&&e(t._lastFocusedEl).focus(),t.currItem=null,t.content=null,t.currTemplate=null,t.prevHeight=0,T(d)},updateSize:function(e){if(t.isIOS){var n=document.documentElement.clientWidth/window.innerWidth,i=window.innerHeight*n;t.wrap.css("height",i),t.wH=i}else t.wH=e||I.height();t.fixedContentPos||t.wrap.css("height",t.wH),T("Resize")},updateItemHTML:function(){var n=t.items[t.index];t.contentContainer.detach(),t.content&&t.content.detach(),n.parsed||(n=t.parseEl(t.index));var i=n.type;if(T("BeforeChange",[t.currItem?t.currItem.type:"",i]),t.currItem=n,!t.currTemplate[i]){var o=t.st[i]?t.st[i].markup:!1;T("FirstMarkupParse",o),t.currTemplate[i]=o?e(o):!0}r&&r!==n.type&&t.container.removeClass("mfp-"+r+"-holder");var a=t["get"+i.charAt(0).toUpperCase()+i.slice(1)](n,t.currTemplate[i]);t.appendContent(a,i),n.preloaded=!0,T(m,n),r=n.type,t.container.prepend(t.contentContainer),T("AfterChange")},appendContent:function(e,n){t.content=e,e?t.st.showCloseBtn&&t.st.closeBtnInside&&t.currTemplate[n]===!0?t.content.find(".mfp-close").length||t.content.append(S()):t.content=e:t.content="",T(u),t.container.addClass("mfp-"+n+"-holder"),t.contentContainer.append(t.content)},parseEl:function(n){var i=t.items[n],o=i.type;if(i=i.tagName?{el:e(i)}:{data:i,src:i.src},i.el){for(var r=t.types,a=0;r.length>a;a++)if(i.el.hasClass("mfp-"+r[a])){o=r[a];break}i.src=i.el.attr("data-mfp-src"),i.src||(i.src=i.el.attr("href"))}return i.type=o||t.st.type||"inline",i.index=n,i.parsed=!0,t.items[n]=i,T("ElementParse",i),t.items[n]},addGroup:function(e,n){var i=function(i){i.mfpEl=this,t._openClick(i,e,n)};n||(n={});var o="click.magnificPopup";n.mainEl=e,n.items?(n.isObj=!0,e.off(o).on(o,i)):(n.isObj=!1,n.delegate?e.off(o).on(o,n.delegate,i):(n.items=e,e.off(o).on(o,i)))},_openClick:function(n,i,o){var r=void 0!==o.midClick?o.midClick:e.magnificPopup.defaults.midClick;if(r||2!==n.which&&!n.ctrlKey&&!n.metaKey){var a=void 0!==o.disableOn?o.disableOn:e.magnificPopup.defaults.disableOn;if(a)if(e.isFunction(a)){if(!a.call(t))return!0}else if(a>I.width())return!0;n.type&&(n.preventDefault(),t.isOpen&&n.stopPropagation()),o.el=e(n.mfpEl),o.delegate&&(o.items=i.find(o.delegate)),t.open(o)}},updateStatus:function(e,i){if(t.preloader){n!==e&&t.container.removeClass("mfp-s-"+n),i||"loading"!==e||(i=t.st.tLoading);var o={status:e,text:i};T("UpdateStatus",o),e=o.status,i=o.text,t.preloader.html(i),t.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),t.container.addClass("mfp-s-"+e),n=e}},_addClassToMFP:function(e){t.bgOverlay.addClass(e),t.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),t.wrap.removeClass(e)},_hasScrollBar:function(e){return(t.isIE7?o.height():document.body.scrollHeight)>(e||I.height())},_parseMarkup:function(t,n,i){var o;i.data&&(n=e.extend(i.data,n)),T(p,[t,n,i]),e.each(n,function(e,n){if(void 0===n||n===!1)return!0;if(o=e.split("_"),o.length>1){var i=t.find(v+"-"+o[0]);if(i.length>0){var r=o[1];"replaceWith"===r?i[0]!==n[0]&&i.replaceWith(n):"img"===r?i.is("img")?i.attr("src",n):i.replaceWith('<img src="'+n+'" class="'+i.attr("class")+'" />'):i.attr(o[1],n)}}else t.find(v+"-"+e).html(n)})},_getScrollbarSize:function(){if(void 0===t.scrollbarSize){var e=document.createElement("div");e.id="mfp-sbm",e.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),t.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return t.scrollbarSize}},e.magnificPopup={instance:null,proto:w.prototype,modules:[],open:function(t,n){return P(),t=t?e.extend(!0,{},t):{},t.isObj=!0,t.index=n||0,this.instance.open(t)},close:function(){return e.magnificPopup.instance&&e.magnificPopup.instance.close()},registerModule:function(t,n){n.options&&(e.magnificPopup.defaults[t]=n.options),e.extend(this.proto,n.proto),this.modules.push(t)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">×</button>',tClose:"Close (Esc)",tLoading:"Loading..."}},e.fn.magnificPopup=function(n){P();var i=e(this);if("string"==typeof n)if("open"===n){var o,r=b?i.data("magnificPopup"):i[0].magnificPopup,a=parseInt(arguments[1],10)||0;r.items?o=r.items[a]:(o=i,r.delegate&&(o=o.find(r.delegate)),o=o.eq(a)),t._openClick({mfpEl:o},i,r)}else t.isOpen&&t[n].apply(t,Array.prototype.slice.call(arguments,1));else n=e.extend(!0,{},n),b?i.data("magnificPopup",n):i[0].magnificPopup=n,t.addGroup(i,n);return i};var z,M,B,H="inline",L=function(){B&&(M.after(B.addClass(z)).detach(),B=null)};e.magnificPopup.registerModule(H,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){t.types.push(H),x(l+"."+H,function(){L()})},getInline:function(n,i){if(L(),n.src){var o=t.st.inline,r=e(n.src);if(r.length){var a=r[0].parentNode;a&&a.tagName&&(M||(z=o.hiddenClass,M=k(z),z="mfp-"+z),B=r.after(M).detach().removeClass(z)),t.updateStatus("ready")}else t.updateStatus("error",o.tNotFound),r=e("<div>");return n.inlineElement=r,r}return t.updateStatus("ready"),t._parseMarkup(i,{},n),i}}});var A,F="ajax",j=function(){A&&i.removeClass(A)},N=function(){j(),t.req&&t.req.abort()};e.magnificPopup.registerModule(F,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){t.types.push(F),A=t.st.ajax.cursor,x(l+"."+F,N),x("BeforeChange."+F,N)},getAjax:function(n){A&&i.addClass(A),t.updateStatus("loading");var o=e.extend({url:n.src,success:function(i,o,r){var a={data:i,xhr:r};T("ParseAjax",a),t.appendContent(e(a.data),F),n.finished=!0,j(),E(),setTimeout(function(){t.wrap.addClass(h)},16),t.updateStatus("ready"),T("AjaxContentAdded")},error:function(){j(),n.finished=n.loadError=!0,t.updateStatus("error",t.st.ajax.tError.replace("%url%",n.src))}},t.st.ajax.settings);return t.req=e.ajax(o),""}}});var W,R=function(n){if(n.data&&void 0!==n.data.title)return n.data.title;var i=t.st.image.titleSrc;if(i){if(e.isFunction(i))return i.call(t,n);if(n.el)return n.el.attr(i)||""}return""};e.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><div class="mfp-img"></div><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var e=t.st.image,n=".image";t.types.push("image"),x(f+n,function(){"image"===t.currItem.type&&e.cursor&&i.addClass(e.cursor)}),x(l+n,function(){e.cursor&&i.removeClass(e.cursor),I.off("resize"+v)}),x("Resize"+n,t.resizeImage),t.isLowIE&&x("AfterChange",t.resizeImage)},resizeImage:function(){var e=t.currItem;if(e&&e.img&&t.st.image.verticalFit){var n=0;t.isLowIE&&(n=parseInt(e.img.css("padding-top"),10)+parseInt(e.img.css("padding-bottom"),10)),e.img.css("max-height",t.wH-n)}},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,W&&clearInterval(W),e.isCheckingImgSize=!1,T("ImageHasSize",e),e.imgHidden&&(t.content&&t.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(e){var n=0,i=e.img[0],o=function(r){W&&clearInterval(W),W=setInterval(function(){return i.naturalWidth>0?(t._onImageHasSize(e),void 0):(n>200&&clearInterval(W),n++,3===n?o(10):40===n?o(50):100===n&&o(500),void 0)},r)};o(1)},getImage:function(n,i){var o=0,r=function(){n&&(n.img[0].complete?(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("ready")),n.hasSize=!0,n.loaded=!0,T("ImageLoadComplete")):(o++,200>o?setTimeout(r,100):a()))},a=function(){n&&(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("error",s.tError.replace("%url%",n.src))),n.hasSize=!0,n.loaded=!0,n.loadError=!0)},s=t.st.image,l=i.find(".mfp-img");if(l.length){var c=document.createElement("img");c.className="mfp-img",n.img=e(c).on("load.mfploader",r).on("error.mfploader",a),c.src=n.src,l.is("img")&&(n.img=n.img.clone()),n.img[0].naturalWidth>0&&(n.hasSize=!0)}return t._parseMarkup(i,{title:R(n),img_replaceWith:n.img},n),t.resizeImage(),n.hasSize?(W&&clearInterval(W),n.loadError?(i.addClass("mfp-loading"),t.updateStatus("error",s.tError.replace("%url%",n.src))):(i.removeClass("mfp-loading"),t.updateStatus("ready")),i):(t.updateStatus("loading"),n.loading=!0,n.hasSize||(n.imgHidden=!0,i.addClass("mfp-loading"),t.findImageSize(n)),i)}}});var Z,q=function(){return void 0===Z&&(Z=void 0!==document.createElement("p").style.MozTransform),Z};e.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e,n=t.st.zoom,i=".zoom";if(n.enabled&&t.supportsTransition){var o,r,a=n.duration,s=function(e){var t=e.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),i="all "+n.duration/1e3+"s "+n.easing,o={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},r="transition";return o["-webkit-"+r]=o["-moz-"+r]=o["-o-"+r]=o[r]=i,t.css(o),t},d=function(){t.content.css("visibility","visible")};x("BuildControls"+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.content.css("visibility","hidden"),e=t._getItemToZoom(),!e)return d(),void 0;r=s(e),r.css(t._getOffset()),t.wrap.append(r),o=setTimeout(function(){r.css(t._getOffset(!0)),o=setTimeout(function(){d(),setTimeout(function(){r.remove(),e=r=null,T("ZoomAnimationEnded")},16)},a)},16)}}),x(c+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.st.removalDelay=a,!e){if(e=t._getItemToZoom(),!e)return;r=s(e)}r.css(t._getOffset(!0)),t.wrap.append(r),t.content.css("visibility","hidden"),setTimeout(function(){r.css(t._getOffset())},16)}}),x(l+i,function(){t._allowZoom()&&(d(),r&&r.remove(),e=null)})}},_allowZoom:function(){return"image"===t.currItem.type},_getItemToZoom:function(){return t.currItem.hasSize?t.currItem.img:!1},_getOffset:function(n){var i;i=n?t.currItem.img:t.st.zoom.opener(t.currItem.el||t.currItem);var o=i.offset(),r=parseInt(i.css("padding-top"),10),a=parseInt(i.css("padding-bottom"),10);o.top-=e(window).scrollTop()-r;var s={width:i.width(),height:(b?i.innerHeight():i[0].offsetHeight)-a-r};return q()?s["-moz-transform"]=s.transform="translate("+o.left+"px,"+o.top+"px)":(s.left=o.left,s.top=o.top),s}}});var D="iframe",K="//about:blank",Y=function(e){if(t.currTemplate[D]){var n=t.currTemplate[D].find("iframe");n.length&&(e||(n[0].src=K),t.isIE8&&n.css("display",e?"block":"none"))}};e.magnificPopup.registerModule(D,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push(D),x("BeforeChange",function(e,t,n){t!==n&&(t===D?Y():n===D&&Y(!0))}),x(l+"."+D,function(){Y()})},getIframe:function(n,i){var o=n.src,r=t.st.iframe;e.each(r.patterns,function(){return o.indexOf(this.index)>-1?(this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1):void 0});var a={};return r.srcAction&&(a[r.srcAction]=o),t._parseMarkup(i,a,n),t.updateStatus("ready"),i}}});var U=function(e){var n=t.items.length;return e>n-1?e-n:0>e?n+e:e},G=function(e,t,n){return e.replace(/%curr%/gi,t+1).replace(/%total%/gi,n)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var n=t.st.gallery,i=".mfp-gallery",r=Boolean(e.fn.mfpFastClick);return t.direction=!0,n&&n.enabled?(a+=" mfp-gallery",x(f+i,function(){n.navigateByImgClick&&t.wrap.on("click"+i,".mfp-img",function(){return t.items.length>1?(t.next(),!1):void 0}),o.on("keydown"+i,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),x("UpdateStatus"+i,function(e,n){n.text&&(n.text=G(n.text,t.currItem.index,t.items.length))}),x(p+i,function(e,i,o,r){var a=t.items.length;o.counter=a>1?G(n.tCounter,r.index,a):""}),x("BuildControls"+i,function(){if(t.items.length>1&&n.arrows&&!t.arrowLeft){var i=n.arrowMarkup,o=t.arrowLeft=e(i.replace(/%title%/gi,n.tPrev).replace(/%dir%/gi,"left")).addClass(y),a=t.arrowRight=e(i.replace(/%title%/gi,n.tNext).replace(/%dir%/gi,"right")).addClass(y),s=r?"mfpFastClick":"click";o[s](function(){t.prev()}),a[s](function(){t.next()}),t.isIE7&&(k("b",o[0],!1,!0),k("a",o[0],!1,!0),k("b",a[0],!1,!0),k("a",a[0],!1,!0)),t.container.append(o.add(a))}}),x(m+i,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),x(l+i,function(){o.off(i),t.wrap.off("click"+i),t.arrowLeft&&r&&t.arrowLeft.add(t.arrowRight).destroyMfpFastClick(),t.arrowRight=t.arrowLeft=null}),void 0):!1},next:function(){t.direction=!0,t.index=U(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=U(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,n=t.st.gallery.preload,i=Math.min(n[0],t.items.length),o=Math.min(n[1],t.items.length);for(e=1;(t.direction?o:i)>=e;e++)t._preloadItem(t.index+e);for(e=1;(t.direction?i:o)>=e;e++)t._preloadItem(t.index-e)},_preloadItem:function(n){if(n=U(n),!t.items[n].preloaded){var i=t.items[n];i.parsed||(i=t.parseEl(n)),T("LazyLoad",i),"image"===i.type&&(i.img=e('<img class="mfp-img" />').on("load.mfploader",function(){i.hasSize=!0}).on("error.mfploader",function(){i.hasSize=!0,i.loadError=!0,T("LazyLoadError",i)}).attr("src",i.src)),i.preloaded=!0}}}});var X="retina";e.magnificPopup.registerModule(X,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,n=e.ratio;n=isNaN(n)?n():n,n>1&&(x("ImageHasSize."+X,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/n,width:"100%"})}),x("ElementParse."+X,function(t,i){i.src=e.replaceSrc(i,n)}))}}}}),function(){var t=1e3,n="ontouchstart"in window,i=function(){I.off("touchmove"+r+" touchend"+r)},o="mfpFastClick",r="."+o;e.fn.mfpFastClick=function(o){return e(this).each(function(){var a,s=e(this);if(n){var l,c,d,u,p,f;s.on("touchstart"+r,function(e){u=!1,f=1,p=e.originalEvent?e.originalEvent.touches[0]:e.touches[0],c=p.clientX,d=p.clientY,I.on("touchmove"+r,function(e){p=e.originalEvent?e.originalEvent.touches:e.touches,f=p.length,p=p[0],(Math.abs(p.clientX-c)>10||Math.abs(p.clientY-d)>10)&&(u=!0,i())}).on("touchend"+r,function(e){i(),u||f>1||(a=!0,e.preventDefault(),clearTimeout(l),l=setTimeout(function(){a=!1},t),o())})})}s.on("click"+r,function(){a||o()})})},e.fn.destroyMfpFastClick=function(){e(this).off("touchstart"+r+" click"+r),n&&I.off("touchmove"+r+" touchend"+r)}}()})(window.jQuery||window.Zepto);
\ No newline at end of file
diff --git a/common_assets/js/magnific-popup.video.js b/common_assets/js/magnific-popup.video.js
new file mode 100644
index 0000000..230e799
--- /dev/null
+++ b/common_assets/js/magnific-popup.video.js
@@ -0,0 +1 @@
+jQuery(document).ready(function($){$('.popup-youtube').magnificPopup({disableOn:700,type:'iframe',mainClass:'mfp-fade',removalDelay:160,preloader:!1,fixedContentPos:!1});$('.popup-gallery').magnificPopup({delegate:'a',type:'image',tLoading:'Loading image #%curr%...',mainClass:'mfp-img-mobile',gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'<a href="%url%">The image #%curr%</a> could not be loaded.',titleSrc:function(item){return item.el.attr('title')+' '}}});$('.image-popup-vertical-fit').magnificPopup({type:'image',closeOnContentClick:!0,mainClass:'mfp-img-mobile',image:{verticalFit:!0}});$('.image-popup-fit-width').magnificPopup({type:'image',closeOnContentClick:!0,image:{verticalFit:!1}});$('.image-popup-no-margins').magnificPopup({type:'image',closeOnContentClick:!0,closeBtnInside:!1,fixedContentPos:!0,mainClass:'mfp-no-margins mfp-with-zoom',image:{verticalFit:!0},zoom:{enabled:!0,duration:300}})})
\ No newline at end of file
diff --git a/common_assets/js/wow.min.js b/common_assets/js/wow.min.js
new file mode 100644
index 0000000..9b4823c
--- /dev/null
+++ b/common_assets/js/wow.min.js
@@ -0,0 +1,2 @@
+/*! WOW - v1.0.2 - 2014-12-29
+* Copyright (c) 2014 Matthieu Aussaguel; Licensed MIT */(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),this.animationNameCache=new c}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],e=0,f=b.length;f>e;e++)d=b[e],g.push(function(){var a,b,e,f;for(e=d.addedNodes||[],f=[],a=0,b=e.length;b>a;a++)c=e[a],f.push(this.doSync(c));return f}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=""+a.className+" "+this.config.animateClass},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;f=[];for(c in b)d=b[c],a[""+c]=d,f.push(function(){var b,f,g,h;for(g=this.vendors,h=[],b=0,f=g.length;f>b;b++)e=g[b],h.push(a[""+e+c.charAt(0).toUpperCase()+c.substr(1)]=d);return h}.call(this));return f},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(e=d(a),c=e.getPropertyCSSValue(b),i=this.vendors,g=0,h=i.length;h>g;g++)f=i[g],c=c||e.getPropertyCSSValue("-"+f+"-"+b);return c},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this);
\ No newline at end of file
diff --git a/developers/_index.html b/developers/_index.html
deleted file mode 100644
index 0ea74ed..0000000
--- a/developers/_index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<div id="midcolumn">
- <h2>Developers</h2>
- <div class="contents">
- <ul>
- <li>
- <b><a href="http://www.eclipse.org/projects/project_summary.php?projectid=modeling.acceleo"
- title="Project Summary">Project Summary</a></b> - About this project.
- </li>
- <li>
- <b><a href="repositoryDetails.php" title="Acceleo Repository Details">Source Code
- Access</a></b> - get the code from Git!
- </li>
- <li>
- <b><a href="https://dev.eclipse.org/mailman/listinfo/m2t-dev" title="m2t-dev
- mailing list" rel="nofollow">Developer Mailing List</a></b> - Subscribe to the
- developer list and get updates about the project's code aspects.
- </li>
- <li>
- <b><a href="http://www.ohloh.net/p/acceleo-eclipse" title="Acceleo at Ohloh">
- Acceleo at OpenHub</a></b> - Project's code aspects, metrics, comments ratio...
- </li>
- </ul>
- <p>
- Acceleo is actively looking for project contributors. There are many official and unofficial ways
- to get involved. Please see <a href="http://wiki.eclipse.org/Acceleo/Wishlist">this wiki page</a> for some
- ideas, and <a href="http://wiki.eclipse.org/Setting_up_a_development_environment_for_Acceleo">
- this one</a> for information on how to set up your development environment.
- </p>
- </div>
-</div>
\ No newline at end of file
diff --git a/developers/_repositoryDetails.html b/developers/_repositoryDetails.html
deleted file mode 100644
index 9d6ff12..0000000
--- a/developers/_repositoryDetails.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<div class="acceleonavitem">
- <h2>Browse Repository</h2>
- <div class="contents">
- <p>
- The complete source code for Acceleo is publicly available from the Eclipse.org Git repository.
- </p>
-
- <p>
- If you just want to browse the source code from your usual web browser without checking out all the
- project's code in your environment, you can use this link:
- <a href="http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/">
- Browse Acceleo source code</a>.
- </p>
-
- <p>
- In order to use the following repository location in Eclipse, copy the location URL, open the <i>Git repositories</i>
- view (Window -> Show View -> Other -> Git Repository), then you can clone a repository thanks to a dedicated button in
- the toolbar of the view.
- </p>
-
- <p>
- In the first page of the wizard, you can enter the information of the Acceleo repository. You can just copy and paste one of
- the location of the Acceleo repository found at the bottom of the <a href="http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/">Acceleo repository page</a>.
-
- <ul>
- <li>git://git.eclipse.org/gitroot/acceleo/org.eclipse.acceleo.git</li>
- <li>ssh://git.eclipse.org/gitroot/acceleo/org.eclipse.acceleo.git</li>
- <li>http://git.eclipse.org/gitroot/acceleo/org.eclipse.acceleo.git</li>
- </ul>
- </p>
-
- <p>
- <img src="../images/git.png" title="Settings of the Acceleo repository"/>
- </p>
-
- <p>
- On the next page, you can configure the branches that you will checkout from the repository. It is recommended to checkout all the branches in order
- to have all the source code of Acceleo.
- </p>
-
- <p>
- <img src="../images/git-branches.png" title="Acceleo branches"/>
- </p>
-
- <p>
- Then you can configure where the repository will be cloned.
- </p>
-
- <p>
- <img src="../images/git-local.png" title="Local settings"/>
- </p>
-
- <p>
- After this, you can select the eclipse projects that will be imported in your workspace to start to work.
- </p>
-
- <p>
- <img src="../images/git-import.png" title="Acceleo projects"/>
- </p>
-
- <p>
- <h2>Organization of the Acceleo source code</h2>
- <ul>
- <li>benchmark</li>
- <li>doc</li>
- <li>examples</li>
- <li>features</li>
- <li>maven</li>
- <li>plugins (source code of the core of Acceleo)</li>
- <li>releng</li>
- <li>tests</li>
- </ul>
- It is recommended to checkout at least the "plugins" projects. The project "org.eclipse.acceleo-feature" in the feature folder contains
- the necessary file to configure checkstyle and the eclipse formatter.
- </p>
- </div>
-</div>
\ No newline at end of file
diff --git a/developers/index.php b/developers/index.php
deleted file mode 100644
index 0e6bc77..0000000
--- a/developers/index.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
- $App = new App();
- $Nav = new Nav();
- $Menu = new Menu();
-
- include($App->getProjectCommon());
-
- $pageTitle = "Developers";
-
- $html = file_get_contents('_index.html');
-
- # Generate the web page
- $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/developers/repositoryDetails.php b/developers/repositoryDetails.php
deleted file mode 100644
index f3ab80e..0000000
--- a/developers/repositoryDetails.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop'
- $pageTitle = "Acceleo - Developers - Repository Details";
-
- $html = '<div id="midcolumn">';
- $html .= file_get_contents('_repositoryDetails.html');
- $html .= "</div>";
-
- # Generate the web page
- $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/documentation/aql.html b/documentation/aql.html
deleted file mode 100644
index d2478c1..0000000
--- a/documentation/aql.html
+++ /dev/null
@@ -1,4075 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-<head>
-<meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="Stéphane Bégaudeau">
-<!-- IE6-8 support of HTML elements -->
-<!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-<link href="../assets/css/bootstrap.css" rel="stylesheet">
-<link href="../assets/css/docs.css" rel="stylesheet">
-<title>Acceleo</title>
-</head>
-
-<body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <div class="jumbotron masthead">
- <h1>Acceleo Query Language</h1>
- </div>
- <div class="marketing">
- <h1>Query and navigate in EMF models</h1>
- </div>
-
- <section id="overview">
- <div class="page-header">
- <h1>Overview</h1>
- </div>
- <p>The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of all the services of the standard library of AQL.</p>
- </section>
-
-
- <h2 id="Introduction">Introduction</h2>
- <p>
- The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of the syntax, all the services and the standard library of AQL. <br />AQL as a query engine is small, simple, fast, extensible and it brings a richer validation
- than the MTL interpreter.
- </p>
- <p>For those looking for a simple and fast interpreters for your EMF models, AQL can provide you with a lot of features, including:</p>
- <ul>
- <li>Support for static and dynamic Ecore models, no query compilation phase required.</li>
- <li>The least possible overhead at evaluation time. During this phase, the evaluation goes forward and will not even try to validate or compile your expressions. Errors are tracked and captured along the way.</li>
- <li>Strong validation: types are checked at validation time and the metamodels used are analyzed to do some basic type inference and avoid false positive errors.</li>
- <li>Union types: In some context, a variable in a given query can have N potential types with N being often greater than one. AQL can embrace this fact without having to fall back to EObject as soon as there is more than one type.</li>
- <li>A simple and straightforward implementation easily extensible with Java classes providing extension methods.</li>
- <li>A very narrow dependency surface: AQL uses the very central parts of EMF, Guava and Antlr so that we could easily deploy AQL outside of Eclipse in a server or a standalone scenario.</li>
- </ul>
- <p>The AQL interpreter is used in Sirius with the prefix «aql:».</p>
- <h2 id="Syntax">Syntax</h2>
- <h3 id="Basics">Basics</h3>
- <p>
- The syntax is very similar to the OCL syntax. An expression always starts with a variable <br />
- <code>aVariable</code>
- </p>
- <p>
- The variable named <strong>self</strong> represent the current object (think of it as the
- <code>this</code>
- in Java).
- </p>
- <p>Let’s consider the following metamodel :</p>
- <p>
- <img border="0" src="../assets/pics/family_ecore.png" />
- </p>
- <p>
- From a variable one can access field or reference values using the
- <code>.</code>
- separator. <br />With
- <code>self</code>
- being an instance of <strong>Person</strong>,
- <code>self.name</code>
- returns the value of the attribute <strong>name</strong> and
- <code>self.father</code>
- return the father of the person.
- </p>
- <p>
- If the attribute or the reference is multi-valued, then
- <code>self.parents</code>
- will return a collection.
- </p>
- <p>
- Calls can be chained, as such
- <code>self.parents.name</code>
- will return a collection containing the names of the parents.
- </p>
- <p>
- If one want to access the collection itself, then the separator
- <code>-></code>
- must be used, as such
- <code>self.parents.name->size()</code>
- will return the number of elements in the collection whereas
- <code>self.parents.name.size()</code>
- will return a collection containing <br />the sizes of each name.
- </p>
- <p>
- AQL can also call methods modeled as EOperations or defined through Java services. The syntax denoting such a call is
- <code>.</code>
- for instance
- <code>self.someCall()</code>
- will call the <strong>someCall</strong> method and return the result.
- </p>
- <h3 id="Workingwithcollections">Working with collections</h3>
- <p>
- Filtering a collection is generaly done using either
- <code>->filter(..)</code>
- to keep elements of a given type or
- <code>->select(..)</code>
- to keep elements which are validating a given condition.
- </p>
- <p>
- With
- <code>self</code>
- being an instance of <strong>Family</strong>,
- <code>self.members->filter(family::Man)</code>
- will return all the members of the family which are mens and
- <code>self.members->select( p | p.name.startsWith('A'))</code>
- will return all the members of the family which have a name starting by the letter ‹A›.
- </p>
- <p>
- To access an element at a particular index you can use the operation
- <code>->at(..)</code>
- ;
- <code>self.members->at(1)</code>
- will return the first person which is a member of the family (in that specific case it is probably better to use
- <code>self.members->first()</code>
- </p>
- <p>
- AQL has two kinds of collections, a
- <code>Sequence</code>
- which is a list, or an
- <code>OrderedSet</code>
- which does not allow doubles. You can convert a
- <code>Sequence</code>
- to an
- <code>OrderedSet</code>
- by as such :
- <code>self.members->asSet()</code>
- </p>
- <p>You can also define a collection by extension using the following syntax:</p>
- <ul>
- <li><code>OrderedSet{self}</code> which returns a set containing the current EObject.</li>
- <li><code>Sequence{self, self.eContainer()}</code> returns a sequence containing the current EObject and its parent.</li>
- </ul>
- <h3 id="Navigationaxes">Navigation axes</h3>
- <p>AQL provides operations out of the box to browse the model. Most notably :</p>
- <ul>
- <li><code>self.eContainer()</code> returns the parent of the current object if there is one.</li>
- <li><code>self.eAllContents(some::Type)</code> returns all direct and indirect children matching the given type.</li>
- <li><code>self.eContents()</code> return all the direct children.</li>
- <li><code>self.eInverse('father')</code> returns the cross reference of the reference named ‹father›. In this case it will return all the persons which have the current object (self) as a father.</li>
- </ul>
- <h3 id="Conditions">Conditions</h3>
- <p>
- AQL provides an <strong>If</strong> but it has to be an expression and not a statement. As such one <strong>has to define the else</strong>. Here is the syntax
- </p>
- <p>
- <strong>if</strong>
- <code>self.name.startsWith('a')</code>
- <strong>then</strong>
- <code>self</code>
- <strong>else</strong>
- <code>self.eContainer()</code>
- <strong>endif</strong>
- </p>
- <h3 id="WalkthroughusinganUMLexample">Walkthrough using an UML example</h3>
- <p>
- Let’s move to a slightly more complex example to learn how to navigate through a model. We will work with a model instance from the following metamodel: a simplified view of the UML2 metamodel with <strong>Package</strong>, <strong>UseCase</strong>, <strong>Model</strong> or <strong>Component</strong>
- instances.
- </p>
- <p>
- <img border="0" src="../assets/pics/simple-uml-ecore.jpg" />
- </p>
- <p>
- The following illustration demonstrate the result of the just typing
- <code>self</code>
- as a query. At the bottom every instance of the UML model is represented by a node with containment relationships from top to bottom and displaying the non-contained references in between those nodes through horizontal edges. The result of the query is highlighted in <strong>blue</strong>.
- </p>
- <p>
- <img border="0" src="../assets/pics/self.jpg" />
- </p>
- <p>
- The variable <strong>self</strong> here is the <strong>Class</strong> named «Invoice» in the model, as such the query
- <code>self</code>
- hightlight this instance.
- </p>
- <h4 id="eContainer">eContainer()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtainer.jpg" />
- </p>
- <p>
- When using the query
- <code>self.eContainer()</code>
- the cursor move from the
- <code>self</code>
- variable to its most direct parent, here the <strong>Component</strong> instance named «Accounting».
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-econtainer.jpg" />
- </p>
- <p>
- Such calls can be chained and as such
- <code>self.eContainer().eContainer()</code>
- return the <strong>Component</strong> parents: the <strong>Package</strong> named «Components».
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model.jpg" />
- </p>
- <p>
- The
- <code>eContainer()</code>
- call can also be used with a type parameter, in that case it will be transitively executed up to the point where an instance of the given type is found.
- </p>
- <p>
- In this case then
- <code>self.eContainer(uml::Model)</code>
- goes up to the root of the graph. If no instance of the given type is found in the parents then the query returns an empty result.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-class.jpg" />
- </p>
- <p>
- <code>eContainer()</code>
- or any other service using types as parameters will match both the given types or its subtypes. The only exception to this rule is the
- <code>oclIsTypeOf(..)</code>
- service which is intended to check only for the given type and not its subtypes.
- </p>
- <p>
- When using the query
- <code>self.eContainer(uml::Class)</code>
- the result is an instance of <strong>Component</strong> as the <strong>Component</strong> type extends <strong>Class</strong> in the metamodel.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainerorself.jpg" />
- </p>
- <p>
- A variant of
- <code>eContainer(..)</code>
- named
- <code>eContainerOrSelf(..)</code>
- is provided it will first check the type of the current instance. As such the query
- <code>self.eContainerOrSelf(uml::Class)</code>
- when <strong>self</strong> is the «Invoice» class returns this instance.
- </p>
- <h4 id="eContents">eContents()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtents.jpg" />
- </p>
- <p>
- One use
- <code>eContainer()</code>
- to go up in the parent. The
- <code>eContents()</code>
- axes is its counterpart and returns the direct children of the element.
- </p>
- <h4 id="select">select()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtents-select-name-id.jpg" />
- </p>
- <p>
- The
- <code>select(...)</code>
- service can be used to filter elements from a list by veryfing a predicate. In the query
- <code>self.eContents()->select(p | p.name = 'id')</code>
- the query only returns the elements which have a name equal to <strong>"id"</strong>, in this case a single element.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtents-select-name-notid.jpg" />
- </p>
- <p>
- Equality is checked with a single
- <code>=</code>
- , inequality is expressed with the operator
- <code><></code>
- .
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtents-select-visibility.jpg" />
- </p>
- <p>
- Comparing values with an enumeration is slightly different as the enumeration value should be explicitely qualified. In the
- <code>self.eContents()->select(p | p.visibility = uml::VisibilityKind::private )</code>
- query the expression
- <code>uml::VisibilityKind::private</code>
- denotes the enumeration literal named <strong>private</strong> which is contained in the <strong>VisibilityKind</strong> enumeration of the <strong>uml</strong> metamodel.
- </p>
- <h4 id="eAllContents">eAllContents()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model-eallcontents.jpg" />
- </p>
- <p>
- The
- <code>eAllContents()</code>
- axe is used to browse direct and indirect children. It goes from the starting point to the leafs of the model. Here the expression starts with
- <code>self.eContainer(uml::Model)</code>
- which has we’ve seen before goes up until an instance of <strong>Model</strong> is found. From here
- <code>eAllContents</code>
- is executed returning all the direct and indirect childrens of the «Travel Agency» <strong>model</strong> instance.
- </p>
- <p>
- <img border="0" src="../assets/pics/econtainer-eallcontents-select-name-startswith.jpg" />
- </p>
- <p>Just like any other collection it can be filtered to retrieve, for instace, the elements whose name is starting by the letter «I».</p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model-eallcontents-components.jpg" />
- </p>
- <p>
- A type parameter can be used to retrieve the direct or indirect children of a specific type: here <strong>components</strong>.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model-eallcontents-usecases.jpg" />
- </p>
- <p>
- Or <strong>use case</strong> instances.
- </p>
- <p>
- <img border="0" src="../assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg" />
- </p>
- <p>It is interesting to note that the parameter can also be a collection of types, enabling the retrieval of many elements through a single pass.</p>
- <h4 id="eInverse">eInverse()</h4>
- <p>
- Queries using
- <code>eAllContents</code>
- must be designed with care as they tend to lead to an intense browsing of the model. In many cases they can be replaced with
- <code>eInverse()</code>
- calls to retrieve elements of interests.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-einverse.jpg" />
- </p>
- <p>
- <code>eInverse()</code>
- returns any element which as a relationship with the current one. This relationship can be indifferently a containment one or not.
- </p>
- <p>
- <img border="0" src="../assets/pics/econtainer-einverse-usecase.jpg" />
- </p>
- <p>
- It is often of interest to restrict the type of elements we expect out of the
- <code>eInverse()</code>
- call. With the query
- <code>self.eContainer().eInverse(uml::UseCase)</code>
- only use cases instances will be returned, here the <strong>UseCase</strong> named «to Invoice» which refers to the «Accounting» <strong>Component</strong> through the reference named <strong>subject</strong>
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-einverse-packagedelement.jpg" />
- </p>
- <p>
- One can also be even more explicit and query for a specific reference name, here
- <code>packagedElement</code>
- : only the <strong>Package</strong> named «Components» refers to the «Accounting» <strong>Component</strong> through the reference named «packagedElement».
- </p>
- <h2 id="LanguageReference">Language Reference</h2>
- <p>These sections are listing all the services of the standard library of AQL.</p>
- <section id="services">
- <div class="page-header">
- <h3>Services available for all types</h3>
- </div>
-
- <h3>String + Object : String</h3>
- <p>Returns the concatenation of the current string and the given object "any" (as a String).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'times ' + 42</td>
- <td>'times 42'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object + String : String</h3>
- <p>Returns the concatenation of self (as a String) and the given string "s".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>42 + ' times'</td>
- <td>'42 times'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object <> Object : Boolean</h3>
- <p>Indicates whether the object "o1" is a different object from the object "o2".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' <> 'World'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' <> 'Hello'</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object = Object : Boolean</h3>
- <p>Indicates whether the object "o1" i"the same as the object "o2". For more information refer to the Object#equals(Object) method.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' = 'World'</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'Hello' = 'Hello'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.oclAsType(Object) : Object</h3>
- <p>Casts the current object to the given type.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclAsType(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- <tr>
- <td>anEPackage.oclAsType(ecore::EClass)</td>
- <td>anEPackage</td>
- </tr>
- </tbody>
- </table>
- <p>Contrary to Acceleo 3, the type is ignored, the given object will be returned directly.</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>anEPackage.oclAsType(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>anEPackage.oclAsType(ecore::EClass)</td>
- <td>oclInvalid</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Object.oclIsKindOf(Object) : Boolean</h3>
- <p>Evaluates to "true" if the type of the object o1 conforms to the type "classifier". That is, o1 is of type "classifier" or a subtype of "classifier".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
- <td>true</td>
- </tr>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.oclIsTypeOf(Object) : Boolean</h3>
- <p>Evaluates to "true" if the object o1 if of the type "classifier" but not a subtype of the "classifier".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
- <td>true</td>
- </tr>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.toString() : String</h3>
- <p>Returns a string representation of the current object.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>42.toString()</td>
- <td>'42'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.trace() : String</h3>
- <p>Returns a string representation of the current environment.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>42.trace()</td>
- <td>'Metamodels: http://www.eclipse.org/emf/2002/Ecore Services: org.eclipse.acceleo.query.services.AnyServices public java.lang.String org.eclipse.acceleo.query.services.AnyServices.add(java.lang.Object,java.lang.String) ... receiver: 42 '</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Booleans</h3>
- </div>
-
- <h3>Boolean.and(Boolean) : Boolean</h3>
- <p>Logical and.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true and false</td>
- <td>false</td>
- </tr>
- <tr>
- <td>false and true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>true and true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false and false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.implies(Boolean) : Boolean</h3>
- <p>Logical implies.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true implies true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>true implies false</td>
- <td>false</td>
- </tr>
- <tr>
- <td>false implies true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false implies false</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.not() : Boolean</h3>
- <p>Logical negation.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>not true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>not false</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.or(Boolean) : Boolean</h3>
- <p>Logical or.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true or false</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false or true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>true or true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false or false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.xor(Boolean) : Boolean</h3>
- <p>Logical xor.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true xor true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>true xor false</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false xor true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false xor false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Collections</h3>
- </div>
-
- <h3>OrderedSet + Collection : OrderedSet</h3>
- <p>Returns the concatenation of the given collection into the current set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'} + OrderedSet{'c', 'b', 'f'}</td>
- <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sets</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Sequence + Collection : Sequence</h3>
- <p>Returns the concatenation of the given collection into the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.add(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'} + OrderedSet{'c', 'e'}</td>
- <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sequences</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'} + Sequence{'d', 'e'}</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Collection->any( x | ... ) : Object</h3>
- <p>Gets the first element in the current collection for which the value returned by the lambda evaluates to "true".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->any(str | str.size() = 1)</td>
- <td>'a'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->asOrderedSet() : OrderedSet</h3>
- <p>Returns a set representation of the specified collection. Returns the same object if it is a set already. This operation has the same behavior as "asSet()"</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asOrderedSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->asOrderedSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->asSequence() : Sequence</h3>
- <p>Returns a sequence representation of the specified collection. Returns the same object if it is already a sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asSequence()</td>
- <td>Sequence{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->asSequence()</td>
- <td>Sequence{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->asSet() : OrderedSet</h3>
- <p>Returns a set representation of the specified collection. Returns the same object if it is already a set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c', 'c', 'a'}->asSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->at(Integer) : Object</h3>
- <p>Returns the element at the specified position in the sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->at(1)</td>
- <td>'a'</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->at(2)</td>
- <td>'b'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->collect( x | ... ) : Sequence{Object}</h3>
- <p>Returns a sequence containing the result of applying "lambda" on all elements contained in the current sequence, maintaining order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
- <td>Sequence{'A', 'B', 'C'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->collect( x | ... ) : OrderedSet{Object}</h3>
- <p>Returns a set containing the result of applying "lambda" on all elements contained in the current set, maintaining order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
- <td>OrderedSet{'A', 'B', 'C'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->concat(Collection) : OrderedSet</h3>
- <p>Returns the concatenation of the current set with the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Sequence->concat(Collection) : Sequence</h3>
- <p>Returns the concatenation of the current sequence with the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>OrderedSet->count(Object) : Integer</h3>
- <p>Returns "1" if the current set contains the given object, "0" otherwise.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->count('d')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->count('a')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence{Object}->count(Object) : Integer</h3>
- <p>Counts the number of occurrences of the given object in the given sequence</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->count('d')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->count('a')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->excludes(Object) : Boolean</h3>
- <p>Indicates if the given collection doesn't contain the given object.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excludes('a')</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excludes('d')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->excludesAll(Collection) : Boolean</h3>
- <p>Indicates if no elements from the second collection are contained in the first collection</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'f'})</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'a', 'f'})</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->excluding(Object) : OrderedSet</h3>
- <p>Removes the given object from the current set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->excluding('c')</td>
- <td>OrderedSet{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->excluding(Object) : Sequence</h3>
- <p>Removes the given object from the current sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excluding('c')</td>
- <td>Sequence{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->exists( x | ... ) : Boolean</h3>
- <p>Indicates if it exists an object from the given collection for which the given lambda evaluates to "true"</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->exists(str | str.size() > 5)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->filter(EClassifier) : OrderedSet</h3>
- <p>Keeps only instances of the given EClassifier from the given set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
- <td>OrederedSet{anEClass}</td>
- </tr>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
- <td>OrederedSet{anEAttribute}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->filter(OrderedSet{EClassifier}) : Sequence</h3>
- <p>Keeps only instances of the given EClassifier in the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
- <td>Sequence{anEClass, anEReference}</td>
- </tr>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
- <td>Sequence{anEAttribute, anEPackage}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->filter(OrderedSet{EClassifier}) : OrderedSet</h3>
- <p>Keeps only instances of the given set of EClassifier from the given set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
- <td>OrderedSet{anEClass, anEReference}</td>
- </tr>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
- <td>OrderedSet{anEAttribute, anEPackage}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->filter(EClassifier) : Sequence</h3>
- <p>Keeps only instances of the given EClassifier in the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
- <td>Sequence{anEClass}</td>
- </tr>
- <tr>
- <td>Sequence{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
- <td>Sequence{anEAttribute}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->first() : Object</h3>
- <p>Returns the first element of the specified Collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->first()</td>
- <td>'a'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->forAll( x | ... ) : Boolean</h3>
- <p>Indicates if all the objects from the given collection validate the given lamba</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'ccc'}->forAll(str | str.size() = 1)</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->forAll(str | str.size() = 1)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->includes(Object) : Boolean</h3>
- <p>Indicates if the given collection contains the given object.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includes('a')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includes('d')</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->includesAll(Collection) : Boolean</h3>
- <p>Indicates if all elements from the second collection are contained in the first collection</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a'})</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a', 'f'})</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->including(Object) : OrderedSet</h3>
- <p>Adds the given object to the current set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->including('d')</td>
- <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->including(Object) : Sequence</h3>
- <p>Adds the given object to the current sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->including('d')</td>
- <td>Sequence{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->indexOf(Object) : Integer</h3>
- <p>Returns the index of the given object in the given set ([1..size]).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{1, 2, 3, 4}->indexOf(3)</td>
- <td>3</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->indexOf(Object) : Integer</h3>
- <p>Returns the index of the given object in the given sequence ([1..size]).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{1, 2, 3, 4}->indexOf(3)</td>
- <td>3</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->insertAt(Integer, Object) : OrderedSet</h3>
- <p>Inserts the given object in a copy of the given set at the given position ([1..size]). If the given set already contains this object, it will be moved to the accurate position.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->insertAt(2, 'f')</td>
- <td>Sequence{'a', 'f', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->insertAt(Integer, Object) : Sequence</h3>
- <p>Inserts the given object in a copy of the given sequence at the given position ([1..size]).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->insertAt(2, 'f')</td>
- <td>Sequence{'a', 'f', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->intersection(Collection) : OrderedSet</h3>
- <p>Creates a set with the elements from the given set that are also present in the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->intersection(Collection) : Sequence</h3>
- <p>Creates a sequence with elements from the given sequence that are present in both the current sequence and the given other {@code Collection}. Iteration order will match that of the current sequence. Duplicates from the first list will all be kept in the result if they also are in the
- second one, but duplicates from the second list will be dumped even if they are present in the first.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->isEmpty() : Boolean</h3>
- <p>Returns "true" when the input collection is empty.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->isEmpty()</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{}->isEmpty()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->isUnique( x | ... ) : Boolean</h3>
- <p>Indicates if the evaluation of the given lambda gives a different value for all elements of the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->isUnique(str | str.size())</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'bb', 'ccc'}->isUnique(str | str.size())</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->last() : Object</h3>
- <p>Returns the last element of the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->last()</td>
- <td>'c'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->last() : Object</h3>
- <p>Returns the last element of the given set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->last()</td>
- <td>'c'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->notEmpty() : Boolean</h3>
- <p>Returns "true" when the input collection is not empty.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->notEmpty()</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{}->notEmpty()</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->one( x | ... ) : Boolean</h3>
- <p>Indicates if one and only one element of the given collection validates the given lambda.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->one(str | str.equals('a'))</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'a', 'c'}->one(str | str.equals('a'))</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->prepend(Object) : OrderedSet</h3>
- <p>Inserts the given object in a copy of the given set at the first position. If the set already contained the given object, it is moved to the first position.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->prepend('f')</td>
- <td>OrderedSet{'f', 'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->prepend(Object) : Sequence</h3>
- <p>Inserts the given object in a copy of the given sequence at the first position.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->prepend('f')</td>
- <td>Sequence{'f', 'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->reject( x | ... ) : OrderedSet</h3>
- <p>Reject returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to false will be present in the returned set</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
- <td>OrderedSet{'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->reject( x | ... ) : Sequence</h3>
- <p>Reject returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to false will be present in the returned sequence</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
- <td>Sequence{'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->reverse() : OrderedSet</h3>
- <p>Returns the given set in reversed order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->reverse()</td>
- <td>OrderedSet{'c', 'b', 'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->reverse() : Sequence</h3>
- <p>Returns the given sequence in reversed order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->reverse()</td>
- <td>Sequence{'c', 'b', 'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->select( x | ... ) : Sequence</h3>
- <p>Select returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to true will be present in the returned sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->select( x | ... ) : OrderedSet</h3>
- <p>Select returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to true will be present in the returned set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->sep(Object, Object, Object) : Sequence{Object}</h3>
- <p>Inserts the given separator between each elements of the given collection, the given prefix before the first element, and the given suffix after the last element.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->sep('[', '-', ']')</td>
- <td>Sequence{'[', 'a', '-', 'b', '-', 'c', ']'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->sep(Object) : Sequence{Object}</h3>
- <p>Inserts the given separator between each elements of the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->sep('-')</td>
- <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->sep('-')</td>
- <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->size() : Integer</h3>
- <p>Returns the size of the specified collection</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->size()</td>
- <td>3</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c', 'd'}->size()</td>
- <td>4</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->sortedBy( x | ... ) : Sequence</h3>
- <p>Returns a sequence containing the elements of the original sequence ordered by the result of the given lamba</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
- <td>Sequence{'c', 'aa', 'bbb'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->sortedBy( x | ... ) : OrderedSet</h3>
- <p>Returns a set containing the elements of the original set ordered by the result of the given lamba</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
- <td>OrderedSet{'c', 'aa', 'bbb'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence - Collection : Sequence</h3>
- <p>Returns the difference of the current sequence and the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'} - Sequence{'c', 'b', 'f'}</td>
- <td>Sequence{'a'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sequences</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.removeAll(Sequence{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>OrderedSet - Collection : OrderedSet</h3>
- <p>Returns the difference of the current set and the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sets</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>OrderedSet->subOrderedSet(Integer, Integer) : OrderedSet</h3>
- <p>Returns a subset of the given set</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->subOrderedSet(1, 2)</td>
- <td>OrderedSet{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->subSequence(Integer, Integer) : Sequence</h3>
- <p>Returns a subset of the given sequence</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->subSequence(1, 2)</td>
- <td>Sequence{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->sum() : Number</h3>
- <p>Sums elements of the given collection if possible.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{1, 2, 3, 4}->sum()</td>
- <td>10</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->union(Sequence) : Sequence</h3>
- <p>Returns a sequence containing all the elements of the first and second sequences</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->union(Sequence{'d', 'c'})</td>
- <td>Sequence{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->union(OrderedSet) : OrderedSet</h3>
- <p>Returns a set containing all the elements of the first and second sets</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->union(OrderedSet{'d', 'c'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Comparables</h3>
- </div>
-
- <h3>Comparable > Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is greater than "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' > 'Abc'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' > 'Hello'</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Comparable >= Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is greater than or equal to "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' >= 'Abc'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' >= 'Hello'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Comparable < Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is less than "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' < 'Hello'</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'Hello' < 'World'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Comparable <= Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is less than or equal to "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' <='Hello'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' <='World'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for EObjects</h3>
- </div>
-
- <h3>EClass.allInstances() : Sequence{EObject}</h3>
- <p>Returns all instances of the EClass</p>
- <hr />
-
- <h3>OrderedSet{EClass}->allInstances() : Sequence{EObject}</h3>
- <p>Returns all instances of any EClass from the OrderedSet</p>
- <hr />
-
- <h3>EObject.eAllContents() : Sequence{EObject}</h3>
- <p>Returns a sequence of the EObjects recursively contained in the specified root eObject.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents()</td>
- <td>Sequence{firstEClass, firstEAttribute, secondEClass, firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eAllContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
- <p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents({ecore::EPackage | ecore::EClass})</td>
- <td>Sequence{ePackage, eClass, ...}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eAllContents(EClass) : Sequence{EObject}</h3>
- <p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents(ecore::EClass)</td>
- <td>Sequence{firstEClass, secondEClass}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eClass() : EClass</h3>
- <p>Returns the EClass of the specified EObject</p>
- <hr />
-
- <h3>EObject.eContainer() : EObject</h3>
- <p>Returns the container of the specified EObject</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainer()</td>
- <td>firstEClass</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContainer(EClass) : EObject</h3>
- <p>Returns the first container of the specified EObject that matches the given type</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainer(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContainerOrSelf(EClass) : EObject</h3>
- <p>Returns self or the first container of the specified EObject that matches the given type</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainerOrSelf(ecore::EAttribute)</td>
- <td>firstEAttribute</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContainingFeature() : EStructuralFeature</h3>
- <p>Returns the containing feature of the specified EObject</p>
- <hr />
-
- <h3>EObject.eContainmentFeature() : EReference</h3>
- <p>Returns the containment feature of the specified EObject</p>
- <hr />
-
- <h3>EObject.eContents() : Sequence{EObject}</h3>
- <p>Returns the contents of the specified EObject instance.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents()</td>
- <td>Sequence{firstEClass, secondEClass, firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContents(EClass) : Sequence{EObject}</h3>
- <p>Returns a sequence made of the instances of the specified type in the contents of the specified eObject.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents(ecore::EDataType)</td>
- <td>Sequence{firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
- <p>Returns a sequence made of the instances of the specified types in the contents of the specified eObject.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents({ecore::EPackage | ecore::EClass})</td>
- <td>Sequence{SubEPackage, eClass, ... }</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eCrossReferences() : Object</h3>
- <p>Returns the list of all EObjects cross-referenced from the receiver.</p>
- <hr />
-
- <h3>EObject.eGet(String) : Object</h3>
- <p>Handles calls to the operation "eGet". This will fetch the value of the feature named "featureName" on "source"</p>
- <hr />
-
- <h3>EObject.eInverse() : OrderedSet{EObject}</h3>
- <p>Returns the set containing the inverse references.</p>
- <hr />
-
- <h3>EObject.eInverse(EClassifier) : OrderedSet{EObject}</h3>
- <p>Returns the elements of the given type from the set of the inverse references of the receiver.</p>
- <hr />
-
- <h3>EObject.eInverse(String) : OrderedSet{EObject}</h3>
- <p>Returns the elements from the set of the inverse references of the receiver that are referencing the receiver using a feature with the given name.</p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Resources and URIs</h3>
- </div>
-
- <h3>EObject.eResource() : Resource</h3>
- <p>Returns the Resource containing the given EObject. This service is equivalent to a direct call to EObject#eResource().</p>
- <hr />
-
- <h3>URI.fileExtension() : String</h3>
- <p>Returns the extension of the file referred to by the given URI. This service is equivalent to a direct call to URI#fileExtension()</p>
- <hr />
-
- <h3>Resource.getContents() : Sequence{EObject}</h3>
- <p>Returns the direct content of the given Resource. This service is equivalent to a direct call to Resource#getContents()</p>
- <hr />
-
- <h3>Resource.getContents(EClass) : Sequence{EObject}</h3>
- <p>Returns the EObjects of the given type from the direct content of the given Resource.</p>
- <hr />
-
- <h3>Resource.getURI() : URI</h3>
- <p>Returns the URI of the given Resource. This service is equivalent to a direct call to Resource#getURI()</p>
- <hr />
-
- <h3>URI.isPlatformPlugin() : Boolean</h3>
- <p>Returns "true" if the given URI is a platform plugin URI. This service is equivalent to a direct call to URI#isPlatformPlugin()</p>
- <hr />
-
- <h3>URI.isPlatformResource() : Boolean</h3>
- <p>Returns "true" if the given URI is a platform resource URI. This service is equivalent to a direct call to URI#isPlatformResource()</p>
- <hr />
-
- <h3>URI.lastSegment() : String</h3>
- <p>Returns the last segment of the given URI. This service is equivalent to a direct call to URI#lastSegment()</p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Strings</h3>
- </div>
-
- <h3>String + String : String</h3>
- <p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' + 'World'</td>
- <td>HelloWorld</td>
- </tr>
- </tbody>
- </table>
- <p>This operation behaves like '+' between two strings.</p>
- <hr />
-
- <h3>String.concat(String) : String</h3>
- <p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.concat('World')</td>
- <td>HelloWorld</td>
- </tr>
- </tbody>
- </table>
- <p>This operation behaves like '+' between two strings.</p>
- <hr />
-
- <h3>String.contains(String) : Boolean</h3>
- <p>Returns "true" if the current String contains the String "b"</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.contains('llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.endsWith(String) : Boolean</h3>
- <p>Returns true if the current String ends with the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.endsWidth('llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.equalsIgnoreCase(String) : Boolean</h3>
- <p>Returns true if the current String is equals to the String "b" without considering case in the comparison.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.equalsIgnoreCase('hello')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.first(Integer) : String</h3>
- <p>Returns the "n" first characters of the current String, or the current String itself if its size is less than "n".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.first(5)</td>
- <td>'Hello'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.index(String) : Integer</h3>
- <p>Returns the index of the first occurrence "subString" in the current String, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.index('Hello')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.index(String, Integer) : Integer</h3>
- <p>Returns the index of the first occurrence "subString" in the current String from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.index('Hello', 2)</td>
- <td>6</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.isAlpha() : Boolean</h3>
- <p>Returns "true" if self consists only of alphabetical characters, "false" otherwise.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'abc123'.isAlpha()</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'abcdef'.isAlpha()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.isAlphaNum() : Boolean</h3>
- <p>Returns "true" if self consists only of alphanumeric characters, "false" otherwise.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'abc123'.isAlphaNum()</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'abcdef'.isAlphaNum()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.last(Integer) : String</h3>
- <p>Returns the "n" last characters of the current String, or the current String if its size is less than "n".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.last(5)</td>
- <td>'World'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.lastIndex(String, Integer) : Integer</h3>
- <p>Returns the index of the last occurrence "subString" in the current String searching backward from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.lastIndex('Hello', 7)</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.lastIndex(String) : Integer</h3>
- <p>Returns the index of the last occurrence of "subString" in the current String, "-1" if the current String doesn't contain this particular substring. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.lastIndex('World')</td>
- <td>6</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.matches(String) : Boolean</h3>
- <p>Returns "true" if the current String matches the given "regex".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.matches('*llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.prefix(String) : String</h3>
- <p>Returns the current String prefixed with the given "prefix".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'World'.prefix('Hello')</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.replace(String, String) : String</h3>
- <p>Replaces the first substring of the current String that matches the regular expression "regex" with the String "replacement".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.replace('(.*)ll', 'Wh')</td>
- <td>'Who'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.replaceAll(String, String) : String</h3>
- <p>Replaces each substring of the current String that matches the given regular expression "regex" with the String "replacement".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'TestTest'.replace('.st', 'erminated')</td>
- <td>'TerminatedTerminated'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.size() : Integer</h3>
- <p>Return the length of the current String.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.size()</td>
- <td>10</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.startsWith(String) : Boolean</h3>
- <p>Returns true if the current String starts with the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.startsWith('Hell')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.strcmp(String) : Integer</h3>
- <p>Returns an integer that is either negative, zero or positive depending on whether s1 is alphabetically less than, equal to or greater than self. Note that upper case letters come before lower case ones, so that 'AA' is closer to 'AC' than it is to 'Ab'.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'strcmp operation'.strcmp('strcmp')</td>
- <td>10</td>
- </tr>
- <tr>
- <td>'strcmp operation'.strcmp('strcmp operation')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>'strcmp operation'.strcmp('strtok')</td>
- <td>-17</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.strstr(String) : Boolean</h3>
- <p>Searches r in self.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.strstr('World')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substitute(String, String) : String</h3>
- <p>Substitutes the first occurrence of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'WorldWorld'.substitute('World', 'Hello')</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substituteAll(String, String) : String</h3>
- <p>Substitutes all occurences of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'WorldWorld'.substituteAll('World', 'Hello')</td>
- <td>'HelloHello'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substring(Integer, Integer) : String</h3>
- <p>Returns a string containing all characters from self starting from index lower up to index upper included. Both lower and upper parameters should be contained between 1 and self.size() included. Lower cannot be greater than upper.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.substring(1, 5)</td>
- <td>'Hello'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substring(Integer) : String</h3>
- <p>Returns a string containing all characters from self starting from index lower up to the end of the string included. The lower parameter should be contained between 1 and self.size() included. Lower cannot be greater than the size of the String.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.substring(5)</td>
- <td>'World'</td>
- </tr>
- <tr>
- <td>'HelloWorld'.substring(1)</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toInteger() : Integer</h3>
- <p>Returns an integer of value equal to self</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'42'.toInteger()</td>
- <td>42</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toLower() : String</h3>
- <p>Returns the current String with all characters transformed to lower case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toLower()</td>
- <td>'helloworld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toLowerFirst() : String</h3>
- <p>Returns the self string with the first characters transformed to lower case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toLowerFirst()</td>
- <td>'helloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toReal() : Double</h3>
- <p>Returns a real of value equal to self</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'41.9'.toReal()</td>
- <td>41.9</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toUpper() : String</h3>
- <p>Returns the current String with all characters transformed to upper case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toUpper()</td>
- <td>'HELLOWORLD'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toUpperFirst() : String</h3>
- <p>Returns the current String with the first characters transformed to upper case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'helloworld'.toUpperFirst()</td>
- <td>'Helloworld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.tokenize(String) : Sequence{String}</h3>
- <p>Splits the current String by using the given "delimiter" into a collection of String</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'a, b, c, d'.tokenize(', ')</td>
- <td>['a', 'b', 'c', 'd']</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.tokenize() : Sequence{String}</h3>
- <p>Splits the current String by whitespace delimiter into a collection of String</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'a, b, c, d'.tokenize()</td>
- <td>['a,', 'b,', 'c,', 'd']</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.trim() : String</h3>
- <p>Trims the given String.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>' Hello World '.trim()</td>
- <td>'Hello World'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
-
- <h3 id="SyntaxReference">Syntax Reference</h3>
- <h4 id="References">References</h4>
- <table>
- <tr>
- <td style="text-align: left;"><em>variable_name</em></td>
- <td>a reference to a variable</td>
- <td>myVariable</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>feature_name</em></td>
- <td>implicit collect</td>
- <td>eClass.name</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
- <td>implicit collect</td>
- <td>myVariable.toString()</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>-></strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
- <td>call on the collection itself if the expression is not a collection it will be wrapped into an ordered set</td>
- <td>mySequence->sep(‹,›)</td>
- </tr>
- </table>
- <h4 id="Operators">Operators</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>not</strong> <em>expression</em></td>
- <td>call the not service</td>
- <td>not eClass.interface</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>-</strong> <em>expression</em></td>
- <td>call the unaryMin service</td>
- <td>-3</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>+</strong> <em>expression</em></td>
- <td>call the add service</td>
- <td>2 + 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>-</strong> <em>expression</em></td>
- <td>call the sub service</td>
- <td>2 – 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>*</strong> <em>expression</em></td>
- <td>call the mult service</td>
- <td>2 * 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>/</strong> <em>expression</em></td>
- <td>call the divOp service</td>
- <td>2 / 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong><=</strong> <em>expression</em></td>
- <td>call the lessThanEqual service</td>
- <td>2 <= 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>>=</strong> <em>expression</em></td>
- <td>call the greaterThanEqual service</td>
- <td>2 >= 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong><</strong> <em>expression</em></td>
- <td>call the lessThan service</td>
- <td>1 < 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>></strong> <em>expression</em></td>
- <td>call the greaterThan service</td>
- <td>2 > 1</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong><></strong> <em>expression</em></td>
- <td>call the differs service</td>
- <td>1 <> 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>!=</strong> <em>expression</em></td>
- <td>call the differs service</td>
- <td>1 != 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>=</strong> <em>expression</em></td>
- <td>call the equals service</td>
- <td>1 = 1</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>and</strong> <em>expression</em></td>
- <td>call the and service</td>
- <td>eClass.interface and eClass.abstact</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>or</strong> <em>expression</em></td>
- <td>call the or service</td>
- <td>eClass.interface or eClass.abstact</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>xor</strong> <em>expression</em></td>
- <td>call the xor service</td>
- <td>eClass.interface xor eClass.abstact</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>implies</strong> <em>expression</em></td>
- <td>call implies service</td>
- <td>eClass.interface implies eClass.abstact</td>
- </tr>
- </table>
- <h4 id="Structures">Structures</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>(</strong> <em>expression</em> <strong>)</strong></td>
- <td>parenthesis are used to change priority during evaluation</td>
- <td>(2 + 2 ) * 3</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>if</strong> <em>expression</em> <strong>then</strong> <em>expression</em> <strong>else</strong> <em>expression</em> <strong>endif</strong></td>
- <td>conditional expression</td>
- <td>if eClass.abstract then ‹blue› else ‹red› endif</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>let</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)? ( <strong>,</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)?)* <strong>in</strong> <em>expression</em></td>
- <td>let allows to define variables in order to factorise expression</td>
- <td>let container = self.eContainer() in container.eAllContents()</td>
- </tr>
- </table>
- <h4 id="Literals">Literals</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>'</strong> <em>escaped_string</em> <strong>'</strong></td>
- <td>you can use java style escape sequence <strong>\u0000</strong> <strong>\x00</strong> <strong>\\</strong> <strong>\'</strong> <strong>\b</strong> <strong>\t</strong> <strong>\n</strong> ...
- </td>
- <td>'TODO list:\n\t- walk the dog\n\t- make diner'</td>
- </tr>
- <tr>
- <td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+
- </td>
- <td>an integer</td>
- <td>100</td>
- </tr>
- <tr>
- <td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+ <strong>.</strong> [ <strong>0</strong> - <strong>9</strong>]+
- </td>
- <td>a real</td>
- <td>3.14</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>true</strong></td>
- <td>the boolean value true</td>
- <td>true</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>false</strong></td>
- <td>the boolean value false</td>
- <td>false</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>null</strong></td>
- <td>the null value</td>
- <td>null</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Sequence{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
- <td>a sequence defined in extension</td>
- <td>Sequence{1, 2, 3, 3}</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>OrderedSet{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
- <td>an ordered set defined in extension</td>
- <td>OrderedSet{1, 2, 3}</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eenum_name</em> <strong>::</strong> <em>eenum_literal_name</em></td>
- <td>an EEnumLiteral</td>
- <td>art::Color::blue</td>
- </tr>
- </table>
- <h4 id="Typeliterals">Type literals</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>String</strong></td>
- <td>the string type</td>
- <td>String</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Integer</strong></td>
- <td>the integer type</td>
- <td>Integer</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Real</strong></td>
- <td>the real type</td>
- <td>Real</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Boolean</strong></td>
- <td>the string type</td>
- <td>Boolean</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Sequence(</strong> <em>type_litral</em> <strong>)</strong></td>
- <td>a sequence type</td>
- <td>Sequence(String)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>OrderedSet(</strong> <em>type_litral</em> <strong>)</strong></td>
- <td>an ordered set type</td>
- <td>OrderedSet(String)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em></td>
- <td>an eclassifier type</td>
- <td>ecore::EPackage</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>{</strong> <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em> (*</td>
- <td>* <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em>) * <strong>}</strong>
- </td>
- <td>a set of eclassifiers</td>
- <td>{ecore::EPackage | ecore::EClass}</td>
- </tr>
- </table>
- <h2 id="MigratingfromMTLqueries">Migrating from MTL queries</h2>
- <p>As languages, AQL and MTL are very close yet there are some notable differences:</p>
- <h3 id="Implicitvariablereferences">Implicit variable references</h3>
- <p>
- There is no implicit variable reference. With this change, you can easily find out if you are using a feature of an object or a string representation of said object. As a result, instead of using
- <code>something</code>
- , you must use
- <code>self.something</code>
- if you want to access the feature named «something» of the current object or «something» if you want to retrieve the object named something.
- </p>
- <p>
- In a lambda expression, you must now define the name of the variable used for the iteration in order to easily identify which variable is used by an expression. In Acceleo MTL, you can write
- <code>Sequence{self}->collect(eAllContents(uml::Property))</code>
- and Acceleo will use the implicit iterator as a source of the operation eAllContents.
- </p>
- <p>
- The problem comes when using a lambda like
- <code>Sequence{self}->collect(something)</code>
- , we can’t know if «something» is a feature of «self» or if it is another variable.
- </p>
- <p>
- Using AQL, you will now have to write either
- <code>collect(m | m.eAllContents(uml::Property))</code>
- or
- <code>collect(m: uml::Model | eAllContents(uml::Property))</code>
- .
- </p>
- <h3 id="Collectandflatten">Collect and flatten</h3>
- <p>When a call or a feature acces is done on a collection the result is flattened for the first level. For instance a service returning a collection called on a collection will return a collection of elements and not a collection of collection of elements.</p>
- <h3 id="TypeliteralschildrenEPackages">Type literals & children EPackages</h3>
- <p>
- Type literals can’t be in the form someEPackage::someSubEPackage::SomeEClass but instead someSubEPackage::SomeEClass should be directly used. Note that the <b>name of the EPackage is mandatory</b>. Type literals are handled just like any other type.
- </p>
- <p>
- Calls like
- <code>self.eAllContents(self.eClass())</code>
- are possible and will return all the children of type compatible with “self”.
- </p>
- <p>
- Furthermore if you need a type literal as a parameter in your own service, you just have to have a first parameter with the type :
- <code>Set<EClass></code>
- . Yes, that’s an important point, any type in AQL is possibly a union of several existing types, hence the collection here. As such the syntax for creating Sets or collections can be used as a substitute for type literals.
- </p>
- <h3 id="EnumerationliteralschildrenEPackages">Enumeration literals & children EPackages</h3>
- <p>Enumeration literal should be prefixed with the name of the containing EPacakge for instance «myPackage::myEnum::value».</p>
- <h3 id="Collections">Collections</h3>
- <p>You can only have Sequences or OrderedSets as collections and as such the order of their elements is always deterministic. In Acceleo MTL, you had access to Sets, which are now OrderedSets and Bags, which are now Sequences. Those four kinds of collections were motivated by the fact that
- Sequence and OrderedSet were ordered contrary to Sets and Bags. On another side, OrderedSets and Sets did not accept any duplicate contrary to Bags and Sequences.</p>
- <p>By careful reviewing the use of those collections in various Acceleo generators and Sirius Designers we have quickly found out that the lack of determinism in the order of the collections Sets and Bags was a major issue for our users. As a result, only two collections remain, the Sequence
- which can contain any kind of element and the OrderedSet which has a similar behavior except that it does not accept duplicates.</p>
- <p>
- Previously in Acceleo MTL, you could transform a literal into a collection by using the operator
- <code>-></code>
- on the literal directly. In Acceleo MTL, the collection created was a Bag which is not available anymore. It is recommended to use the extension notation like
- <code>Sequence{self}</code>
- or
- <code>OrderedSet{self}</code>
- . By default in AQL the created collection is an OrderedSet.
- </p>
- <h3 id="Renamedoperations">Renamed operations</h3>
- <p>Some operations have been renamed. As such «addAll» and «removeAll» have been renamed «add» and «sub» because those two names are used by AQL in order to provide access to the operator «+» and «-». As a result we can now write in
- AQL «firstSequence + secondSequence» or «firstSet - secondSet».</p>
- <h3 id="Typing">Typing</h3>
- <p>
- AQL is way smarter than MTL regarding to the types of your expressions. As a result, you can combine expressions using multiple types quite easily. For example, this is a valid AQL expression
- <code>self.eContents(uml::Class).add(self.eContents(ecore::EClass)).name</code>
- . In Acceleo MTL, we could not use this behavior because Acceleo MTL had to fall back to the concept EObject which does not have a feature «name» while AQL knows that the collection contains objects that are either «uml::Class» or «ecore::EClass» and both of those
- types have a feature named «name».
- </p>
- <h3 id="nullhandling">null handling</h3>
- <p>
- AQL handles null (OclVoid) differently from ocl, a null value will not cause a failure but will be silently handled. <br />For example,
- <code>null.oclIsKindOf(ecore::EClass)</code>
- would have returned true for MTL/OCL, forcing users to use
- <code>not self.oclIsUndefined() and self.oclIsKindOf(ecore::EClass)</code>
- instead. This is no longer true in AQL, where «null» doesn’t conform to any type, so
- <code>null.oclIsKindOf(ecore::EClass)</code>
- will return false. Note that it’s still possible to «cast» null in any given classifier.
- <code>null.oclAsType(ecore::EClass)</code>
- will not fail at runtime.
- </p>
- <p>
- Furthermore <strong>oclIsUndefined() does not exist in AQL</strong> and should be replaced by a
- <code>... <> null</code>
- expression.
- </p>
- <h2 id="MigratingfromAcceleo2queries">Migrating from Acceleo2 queries</h2>
- <h3 id="EClassifierreferences">EClassifier references</h3>
- <p>
- All operations referencing a type are now using a type literal with the name of the EPackage and the name of the type instead of a string with the name of the type. As a result,
- <code>eObject.eAllContents('EClass')</code>
- would be translated using
- <code>eObject.eAllContents('ecore::EClass')</code>
- . This allows AQL to now in which EPackage to look for the type and as such, it improves the quality of the validation.
- </p>
- <h3 id="Typesandcast">Types and cast</h3>
- <p>In order to test the type of an EObject, a common pattern in Acceleo 2 was to treat the EObject as a collection and filter said collection on the type desired to see if the size of the collection changed. In AQL, you have access to the operations oclIsTypeOf and oclIsKindOf. You can thus
- test the type of an EObject with the expression «eObject.oclIsKindOf(ecore::EStructuralFeature)» or «eObject.oclIsTypeOf(ecore::EAttribute)». You can use the operation oclIsKindOf to test if an object has the type of the given parameter or one of its subtype. On the other
- hand, you can use the operation oclIsTypeOf to test if an object has exactly the type of the given parameter.</p>
- <p>Casting in AQL is useless, since AQL is very understandable when it comes to types, it will always tries its best to evaluate your expression.</p>
- <p>
- Since AQL is very close to Acceleo MTL, you can find some additional documentation using the Acceleo equivalence documentation in the <a href="http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.acceleo.doc%2Fpages%2Freference%2Fmigration.html&cp=5_3_4">Acceleo documentation</a>.
- </p>
- <h3 id="eContainerTypeName">eContainer(«TypeName»)</h3>
- <p>
- In Acceleo2
- <code>self.eContainer("TypeName")</code>
- actually had the behavior of returning self if it was matching the TypeName. As such, when migrating from an eContainer(..) call you should either make sure that this behavior is not needed or use the <br />compatibility method provided by AQL :
- <code>self.eContainerOrSelf(some::Type)</code>
- </p>
- <h2 id="UsingAQLprogrammatically">Using AQL programmatically</h2>
- <p>This section provide information and code snippet. It will help you to integrate AQL in your own tool.</p>
- <p>Simple overview of AQL:</p>
- <p>
- <img border="0" src="../assets/pics/AQL_overview.png" />
- </p>
- <h3 id="Typevalidation">Type validation</h3>
- <p>For each node of the AST we create a set of possible types as follow:</p>
- <ul>
- <li>for a VarRef we ask the environment for its possible types</li>
- <li>for a FeatureAccess we look up the type of the feature in the registered metamodels</li>
- <li>for a Call we look up the service in the service registry according to the possible types of its parameters (receiver is the first parameter). At this point there is a conversion from EMF to Java. The return type of the service is given by the IService.getType() method. At this point
- there is a conversion form Java to EMF, one Java type can correspond to more than one EMF EClassifier. If no service can be found we try to find a corresponding EOperation if the receiver is an EObject.</li>
- </ul>
- <p>A special type NothingType is used to mark a problem on a given node of the AST. Those NothingTypes are then used to create validation messages. If an AST node has only NothingTypes validation messages will be set as errors for this node, otherwise they are set as warnings.</p>
- <h3 id="Completion">Completion</h3>
- <p>
- The completion rely on the AST production and the type validation. <br />The identifier fragments preceding (prefix) and following (remaining) the cursor position are removed from the expression to parse. The prefix and remaining are used later to filter the proposals. Many filters can be
- implemented: filter only on prefix, filter on prefix and remaining, same strategies with support for camel case, ...
- </p>
- <p>Completion on the AST:</p>
- <ul>
- <li>if there is no error node in the AST the completion provide any symbols that can follow an expression («+», «-», ...).</li>
- <li>if there is an ErrorExpression node in the AST the completion provides anything that can prefix an expression («not», «-», variable name, type name, ...).</li>
- <li>if there is an ErrorFeatureAccesOrCall node in the AST the completion provides feature and service names corresponding to the receiver possible types. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid feature or service name for
- the receiver possible types.</li>
- <li>if there is an ErrorCollectionCall node in the AST the completion provides collection service names. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid service name.</li>
- <li>if there is an ErrorTypeLiteral node in the AST the completion provides EClassifier, EEnumLiteral names according to the state of the type description.</li>
- </ul>
- <h3 id="Creatingandsettingtheenvironment">Creating and setting the environment</h3>
- <p>To get a fresh environment you can use one of the following snippet:</p>
- <pre>
- <code>IQueryEnvironment queryEnvironment = Query.newEnvironmentWithDefaultServices(null);
-</code>
- </pre>
- <p>To get an environment with predefined services.</p>
- <p>or</p>
- <pre>
- <code>IQueryEnvironment queryEnvironment = Query.newEnvironment(null);
-</code>
- </pre>
- <p>To get an environment with no predefined services. It can be useful to create your own language primitives.</p>
- <p>Note that you can also provide a CrossReferenceProvider to define the scope of cross references in your environment. See CrossReferencerToAQL for more details.</p>
- <p>You can register new services Class as follow:</p>
- <pre>
- <code>ServiceRegistrationResult registrationResult = queryEnvironment.registerServicePackage(MyServices.class);
-</code>
- </pre>
- <p>The registration result contains information about services overrides.</p>
- <p>You can also register your EPackages. Only registered EPackages are used to validate and evaluate AQL expression.</p>
- <pre>
- <code>queryEnvironment.registerEPackage(MyEPackage.eINSTANCE);
-</code>
- </pre>
- <p>In some cases you might also want to create custom mappings between an EClass and its Class. A basic case is the use of EMap:</p>
- <pre>
- <code>queryEnvironment.registerCustomClassMapping(EcorePackage.eINSTANCE.getEStringToStringMapEntry(), EStringToStringMapEntryImpl.class);
-</code>
- </pre>
- <p>By default the EClass is mapped to Map.Entry which is not an EObject. This prevents using services on EObject.</p>
- <h3 id="BuildinganAQLexpression">Building an AQL expression</h3>
- <p>The first step is building your expression from a String to an AST:</p>
- <pre>
- <code>QueryBuilderEngine builder = new QueryBuilderEngine(queryEnvironment);
-AstResult astResult = builder.build("self.name");
-</code>
- </pre>
- <h3 id="EvaluatinganAQLexpression">Evaluating an AQL expression</h3>
- <p>To evaluate an AQL expression you can use the QueryEvaluationEngine</p>
- <pre>
- <code>QueryEvaluationEngine engine = new QueryEvaluationEngine(queryEnvironment);
-Map<String, Object> variables = Maps.newHashMap();
-variables.put("self", EcorePackage.eINSTANCE);
-EvaluationResult evaluationResult = engine.eval(astResult, variables);
-</code>
- </pre>
- <p>Here we only use one variable for demonstration purpose.</p>
- <h3 id="ValidatinganAQLexpressionoptional">Validating an AQL expression (optional)</h3>
- <p>This step is optional for evaluation. You can evaluate an AQL expression without validating it in the first place.</p>
- <pre>
- <code>Map<String, Set<IType>> variableTypes = new LinkedHashMap<String, Set<IType>>();
-Set<IType> selfTypes = new LinkedHashSet<IType>();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-AstValidator validator = new AstValidator(queryEnvironment, variableTypes);
-IValidationResult validationResult = validator.validate(astResult);
-</code>
- </pre>
- <h3 id="CompletinganAQLexpression">Completing an AQL expression</h3>
- <p>To do this use the QueryCompletionEngine, it will build the query and validate it for you. It will also compute needed prefix and suffix if any:</p>
- <pre>
- <code>Map<String, Set<IType>> variableTypes = new LinkedHashMap<String, Set<IType>>();
-Set<IType> selfTypes = new LinkedHashSet<IType>();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-QueryCompletionEngine engine = new QueryCompletionEngine(queryEnvironment);
-ICompletionResult completionResult = engine.getCompletion("self.", 5, variableTypes);
-List<ICompletionProposal> proposals = completionResult.getProposals(new BasicFilter(completionResult));
-</code>
- </pre>
- <p>Here 5 is the offset where the completion should be computed in the given expression.</p>
-
- </div>
-</body>
-
-</html>
diff --git a/documentation/aql_service_anyservices.html b/documentation/aql_service_anyservices.html
deleted file mode 100644
index 46b245d..0000000
--- a/documentation/aql_service_anyservices.html
+++ /dev/null
@@ -1,312 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for all types</h1>
- </div>
-
- <h3>add(self: java.lang.String, any: java.lang.Object) = String</h3>
- <p>
- Returns the concatenation of the current string and the given object "any" (as a String).
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'times '.add(42)</td>
- <td>'times 42'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>add(self: java.lang.Object, s: java.lang.String) = String</h3>
- <p>
- Returns the concatenation of self (as a String) and the given string "s".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>42.add(' times')</td>
- <td>'42 times'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>differs(o1: java.lang.Object, o2: java.lang.Object) = Boolean</h3>
- <p>
- Indicates whether the object "o1" is a different object from the object "o2".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.differs('World')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello'.differs('Hello')</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>equals(o1: java.lang.Object, o2: java.lang.Object) = Boolean</h3>
- <p>
- Indicates whether the object "o1" is the same as the object "o2". For more information refer to the Object#equals(Object) method.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.equals('World')</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'Hello'.equals('Hello')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>oclAsType(object: java.lang.Object, type: java.lang.Object) = Object</h3>
- <p>
- Casts the current object to the given type.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclAsType(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- <tr>
- <td>anEPackage.oclAsType(ecore::EClass)</td>
- <td>anEPackage</td>
- </tr>
- </tbody>
- </table>
- <p>
- Contrary to Acceleo 3, the type is ignored, the given object will be returned directly.
- </p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>anEPackage.oclAsType(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>anEPackage.oclAsType(ecore::EClass)</td>
- <td>oclInvalid</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>oclIsKindOf(object: java.lang.Object, type: java.lang.Object) = Boolean</h3>
- <p>
- Evaluates to "true" if the type of the object o1 conforms to the type "classifier". That is, o1 is of type "classifier" or a subtype of "classifier".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
- <td>true</td>
- </tr>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>oclIsTypeOf(object: java.lang.Object, type: java.lang.Object) = Boolean</h3>
- <p>
- Evaluates to "true" if the object o1 if of the type "classifier" but not a subtype of the "classifier".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclIsTypeOf(ecore::EPackage)</td>
- <td>true</td>
- </tr>
- <tr>
- <td>anEPackage.oclIsTypeOf(ecore::ENamedElement)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toString(self: java.lang.Object) = String</h3>
- <p>
- Returns a string representation of the current object.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>42.toString()</td>
- <td>'42'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>trace(self: java.lang.Object) = String</h3>
- <p>
- Returns a string representation of the current environment.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>42.trace()</td>
- <td>'Metamodels:
- http://www.eclipse.org/emf/2002/Ecore
-Services:
- org.eclipse.acceleo.query.services.AnyServices
- public java.lang.String org.eclipse.acceleo.query.services.AnyServices.add(java.lang.Object,java.lang.String)
- ...
-receiver: 42
-'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/aql_service_booleanservices.html b/documentation/aql_service_booleanservices.html
deleted file mode 100644
index 45048eb..0000000
--- a/documentation/aql_service_booleanservices.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for Booleans</h1>
- </div>
-
- <h3>and(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
- <p>
- Logical and.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>true and false</td>
- <td>false</td>
- </tr>
- <tr>
- <td>false and true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>true and true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false and false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>implies(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
- <p>
- Logical implies.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>true implies true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>true implies false</td>
- <td>false</td>
- </tr>
- <tr>
- <td>false implies true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false implies false</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>not(op1: java.lang.Boolean) = Boolean</h3>
- <p>
- Logical negation.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>not true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>not false</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>or(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
- <p>
- Logical or.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>true or false</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false or true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>true or true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false or false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>xor(op1: java.lang.Boolean, op2: java.lang.Boolean) = Boolean</h3>
- <p>
- Logical xor.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>true xor true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>true xor false</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false xor true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false xor false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/aql_service_collectionservices.html b/documentation/aql_service_collectionservices.html
deleted file mode 100644
index d4c9e02..0000000
--- a/documentation/aql_service_collectionservices.html
+++ /dev/null
@@ -1,1485 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for Collections</h1>
- </div>
-
- <h3>add(sequence: java.util.List, collection: java.util.Collection) = List</h3>
- <p>
- Returns the concatenation of the given collection into the given sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.add(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.add(OrderedSet{'c', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p>
- The service addAll has been replaced by "add" in order to have access to the operator "+" between to sequences
- </p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>add(set: java.util.Set, collection: java.util.Collection) = Set</h3>
- <p>
- Returns the concatenation of the given collection into the current set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}.add(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
- </tr>
- </tbody>
- </table>
- <p>
- The service addAll has been replaced by "add" in order to have access to the operator "+" between to sets
- </p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>any(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Object</h3>
- <p>
- Gets the first element in the current collection for which the value returned by the lambda evaluates to "true".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->any(str | str.size() = 1)</td>
- <td>'a'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>asOrderedSet(collection: java.util.Collection) = Set</h3>
- <p>
- Returns a set representation of the specified collection. Returns the same object if it is a set already. This operation has the same behavior as "asSet()"
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asOrderedSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->asOrderedSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>asSequence(collection: java.util.Collection) = List</h3>
- <p>
- Returns a sequence representation of the specified collection. Returns the same object if it is already a sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asSequence()</td>
- <td>Sequence{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->asSequence()</td>
- <td>Sequence{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>asSet(collection: java.util.Collection) = Set</h3>
- <p>
- Returns a set representation of the specified collection. Returns the same object if it is already a set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c', 'c', 'a'}->asSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>at(sequence: java.util.List, position: java.lang.Integer) = Object</h3>
- <p>
- Returns the element at the specified position in the sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->at(1)</td>
- <td>'a'</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->at(2)</td>
- <td>'b'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>collect(sequence: java.util.List, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
- <p>
- Returns a sequence containing the result of applying "lambda" on all elements contained in the current sequence, maintaining order.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
- <td>Sequence{'A', 'B', 'C'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>collect(set: java.util.Set, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Set</h3>
- <p>
- Returns a set containing the result of applying "lambda" on all elements contained in the current set, maintaining order.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
- <td>OrderedSet{'A', 'B', 'C'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>concat(sequence: java.util.List, collection: java.util.Collection) = List</h3>
- <p>
- Returns the concatenation of the current sequence with the given collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>count(sequence: java.util.List, object: java.lang.Object) = Integer</h3>
- <p>
- Counts the number of occurrences of the given object in the given sequence
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->count('d')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->count('a')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>count(set: java.util.Set, object: java.lang.Object) = Integer</h3>
- <p>
- Returns "1" if the current set contains the given object, "0" otherwise.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->count('d')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->count('a')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>excludes(collection: java.util.Collection, object: java.lang.Object) = Boolean</h3>
- <p>
- Indicates if the given collection doesn't contain the given object.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excludes('a')</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excludes('d')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>excludesAll(collection1: java.util.Collection, collection2: java.util.Collection) = Boolean</h3>
- <p>
- Indicates if no elements from the second collection are contained in the first collection
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'f'})</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'a', 'f'})</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>excluding(set: java.util.Set, object: java.lang.Object) = Set</h3>
- <p>
- Removes the given object from the current set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->excluding('c')</td>
- <td>OrderedSet{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>excluding(sequence: java.util.List, object: java.lang.Object) = List</h3>
- <p>
- Removes the given object from the current sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excluding('c')</td>
- <td>Sequence{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>exists(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
- <p>
- Indicates if it exists an object from the given collection for which the given lambda evaluates to "true"
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->exists(str | str.size() > 5)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>filter(sequence: java.util.List, eClassifiers: java.util.Set) = List</h3>
- <p>
- Keeps only instances of the given EClassifier in the given sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
- <td>Sequence{anEClass, anEReference}</td>
- </tr>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
- <td>Sequence{anEAttribute, anEPackage}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>filter(sequence: java.util.List, eClassifier: org.eclipse.emf.ecore.EClassifier) = List</h3>
- <p>
- Keeps only instances of the given EClassifier in the given sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
- <td>Sequence{anEClass}</td>
- </tr>
- <tr>
- <td>Sequence{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
- <td>Sequence{anEAttribute}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>filter(set: java.util.Set, eClassifiers: java.util.Set) = Set</h3>
- <p>
- Keeps only instances of the given set of EClassifier from the given set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
- <td>OrderedSet{anEClass, anEReference}</td>
- </tr>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
- <td>OrderedSet{anEAttribute, anEPackage}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>filter(set: java.util.Set, eClassifier: org.eclipse.emf.ecore.EClassifier) = Set</h3>
- <p>
- Keeps only instances of the given EClassifier from the given set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
- <td>OrederedSet{anEClass}</td>
- </tr>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
- <td>OrederedSet{anEAttribute}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>first(collection: java.util.Collection) = Object</h3>
- <p>
- Returns the first element of the specified Collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->first()</td>
- <td>'a'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>forAll(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
- <p>
- Indicates if all the objects from the given collection validate the given lamba
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'ccc'}->forAll(str | str.size() = 1)</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->forAll(str | str.size() = 1)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>includes(collection: java.util.Collection, object: java.lang.Object) = Boolean</h3>
- <p>
- Indicates if the given collection contains the given object.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includes('a')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includes('d')</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>includesAll(collection1: java.util.Collection, collection2: java.util.Collection) = Boolean</h3>
- <p>
- Indicates if all elements from the second collection are contained in the first collection
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a'})</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a', 'f'})</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>including(sequence: java.util.List, object: java.lang.Object) = List</h3>
- <p>
- Adds the given object to the current sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->including('d')</td>
- <td>Sequence{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>including(set: java.util.Set, object: java.lang.Object) = Set</h3>
- <p>
- Adds the given object to the current set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->including('d')</td>
- <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>indexOf(sequence: java.util.List, object: java.lang.Object) = Integer</h3>
- <p>
- Returns the index of the given object in the given sequence ([1..size]).
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{1, 2, 3, 4}->indexOf(3)</td>
- <td>3</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>insertAt(sequence: java.util.List, position: java.lang.Integer, object: java.lang.Object) = List</h3>
- <p>
- Inserts the given object in a copy of the given sequence at the given position ([1..size]).
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->insertAt(2, 'f')</td>
- <td>Sequence{'a', 'f', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>intersection(set: java.util.Set, collection: java.util.Collection) = Set</h3>
- <p>
- Creates a set with the elements from the given set that are also present in the given collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>intersection(sequence: java.util.List, collection: java.util.Collection) = List</h3>
- <p>
- Creates a sequence with elements from the given sequence that are present in both the current sequence and the given other {@code Collection}. Iteration order will match that of the current sequence. Duplicates from the first list will all be kept in the result if they also are in the second one, but duplicates from the second list will be dumped even if they are present in the first.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>isEmpty(collection: java.util.Collection) = Boolean</h3>
- <p>
- Returns "true" when the input collection is empty.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->isEmpty()</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{}->isEmpty()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>isUnique(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
- <p>
- Indicates if the evaluation of the given lambda gives a different value for all elements of the given collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->isUnique(str | str.size())</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'bb', 'ccc'}->isUnique(str | str.size())</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>last(sequence: java.util.List) = Object</h3>
- <p>
- Returns the last element of the given sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->last()</td>
- <td>'c'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>notEmpty(collection: java.util.Collection) = Boolean</h3>
- <p>
- Returns "true" when the input collection is not empty.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->notEmpty()</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{}->notEmpty()</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>one(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Boolean</h3>
- <p>
- Indicates if one and only one element of the given collection validates the given lambda.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->one(str | str.equals('a'))</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'a', 'c'}->one(str | str.equals('a'))</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>prepend(sequence: java.util.List, object: java.lang.Object) = List</h3>
- <p>
- Inserts the given object in a copy of the given sequence at the first position.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->prepend('f')</td>
- <td>Sequence{'f', 'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>reject(sequence: java.util.List, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
- <p>
- Reject returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to false will be present in the returned sequence
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
- <td>Sequence{'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>reject(set: java.util.Set, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Set</h3>
- <p>
- Reject returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to false will be present in the returned set
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
- <td>OrderedSet{'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>reverse(sequence: java.util.List) = List</h3>
- <p>
- Returns the given sequence in reversed order.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->reverse()</td>
- <td>Sequence{'c', 'b', 'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>reverse(set: java.util.Set) = Set</h3>
- <p>
- Returns the given set in reversed order.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->reverse()</td>
- <td>OrderedSet{'c', 'b', 'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>select(set: java.util.Set, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = Set</h3>
- <p>
- Select returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to true will be present in the returned set.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>select(sequence: java.util.List, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
- <p>
- Select returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to true will be present in the returned sequence.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>sep(collection: java.util.Collection, prefix: java.lang.Object, separator: java.lang.Object, suffix: java.lang.Object) = List</h3>
- <p>
- Inserts the given separator between each elements of the given collection, the given prefix before the first element, and the given suffix after the last element.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->sep('[', '-', ']')</td>
- <td>Sequence{'[', 'a', '-', 'b', '-', 'c', ']'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>sep(collection: java.util.Collection, separator: java.lang.Object) = List</h3>
- <p>
- Inserts the given separator between each elements of the given collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->sep('-')</td>
- <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->sep('-')</td>
- <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>size(collection: java.util.Collection) = Integer</h3>
- <p>
- Returns the size of the specified collection
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->size()</td>
- <td>3</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c', 'd'}->size()</td>
- <td>4</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>sortedBy(collection: java.util.Collection, lambda: org.eclipse.acceleo.query.runtime.impl.LambdaValue) = List</h3>
- <p>
- Returns a sequence containing the elements of the original collection ordered by the result of the given lamba
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
- <td>Sequence{'c', 'aa', 'bbb'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>sub(set: java.util.Set, collection: java.util.Collection) = Set</h3>
- <p>
- Returns the difference of the current set and the given collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}.sub(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
- The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sets
- </p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>sub(sequence: java.util.List, collection: java.util.Collection) = List</h3>
- <p>
- Returns the difference of the current sequence and the given collection.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.sub(Sequence{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.sub(OrderedSet{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>
- The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sequences
- </p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.removeAll(Sequence{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>subOrderedSet(set: java.util.Set, startIndex: java.lang.Integer, startIndex: java.lang.Integer) = Set</h3>
- <p>
- Returns a subset of the given set
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->subOrderedSet(1, 2)</td>
- <td>OrderedSet{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>subSequence(sequence: java.util.List, startIndex: java.lang.Integer, startIndex: java.lang.Integer) = List</h3>
- <p>
- Returns a subset of the given sequence
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->subSequence(1, 2)</td>
- <td>Sequence{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>sum(collection: java.util.Collection) = Double</h3>
- <p>
- Sums elements of the given collection if possible.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{1, 2, 3, 4}->sum()</td>
- <td>10</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>union(set1: java.util.Set, set2: java.util.Set) = Set</h3>
- <p>
- Returns a set containing all the elements of the first and second sets
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->union(OrderedSet{'d', 'c'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>union(sequence1: java.util.List, sequence2: java.util.List) = List</h3>
- <p>
- Returns a sequence containing all the elements of the first and second sequences
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->union(Sequence{'d', 'c'})</td>
- <td>Sequence{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/aql_service_comparableservices.html b/documentation/aql_service_comparableservices.html
deleted file mode 100644
index 536e327..0000000
--- a/documentation/aql_service_comparableservices.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for Comparables</h1>
- </div>
-
- <h3>greaterThan(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
- <p>
- Compares "a" to "b" and return "true" if "a" is greater than "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.greaterThan('Abc')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello'.greaterThan('Hello')</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>greaterThanEqual(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
- <p>
- Compares "a" to "b" and return "true" if "a" is greater than or equal to "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.greaterThanEqual('Abc')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello'.greaterThanEqual('Hello')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>lessThan(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
- <p>
- Compares "a" to "b" and return "true" if "a" is less than "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.lessThan('Hello')</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'Hello'.lessThan('World')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>lessThanEqual(a: java.lang.Comparable, b: java.lang.Comparable) = Boolean</h3>
- <p>
- Compares "a" to "b" and return "true" if "a" is less than or equal to "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.lessThanEqual('Hello')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello'.lessThanEqual('World')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/aql_service_eobjectservices.html b/documentation/aql_service_eobjectservices.html
deleted file mode 100644
index a9a2e4b..0000000
--- a/documentation/aql_service_eobjectservices.html
+++ /dev/null
@@ -1,323 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for EObjects</h1>
- </div>
-
- <h3>allInstances(type: org.eclipse.emf.ecore.EClass) = List</h3>
- <p>
- Returns all instances of the EClass
- </p>
- <hr />
-
- <h3>allInstances(types: java.util.Set) = List</h3>
- <p>
- Returns all instances of any EClass from the OrderedSet
- </p>
- <hr />
-
- <h3>eAllContents(eObject: org.eclipse.emf.ecore.EObject) = List</h3>
- <p>
- Returns a sequence of the EObjects recursively contained in the specified root eObject.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents()</td>
- <td>Sequence{firstEClass, firstEAttribute, secondEClass, firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eAllContents(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = List</h3>
- <p>
- Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents(ecore::EClass)</td>
- <td>Sequence{firstEClass, secondEClass}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eAllContents(eObject: org.eclipse.emf.ecore.EObject, types: java.util.Set) = List</h3>
- <p>
- Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents({ecore::EPackage | ecore::EClass})</td>
- <td>Sequence{ePackage, eClass, ...}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eClass(eObject: org.eclipse.emf.ecore.EObject) = EClass</h3>
- <p>
- Returns the EClass of the specified EObject
- </p>
- <hr />
-
- <h3>eContainer(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = EObject</h3>
- <p>
- Returns the first container of the specified EObject that matches the given type
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainer(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eContainer(eObject: org.eclipse.emf.ecore.EObject) = EObject</h3>
- <p>
- Returns the container of the specified EObject
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainer()</td>
- <td>firstEClass</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eContainerOrSelf(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = EObject</h3>
- <p>
- Returns self or the first container of the specified EObject that matches the given type
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainerOrSelf(ecore::EAttribute)</td>
- <td>firstEAttribute</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eContainingFeature(eObject: org.eclipse.emf.ecore.EObject) = EStructuralFeature</h3>
- <p>
- Returns the containing feature of the specified EObject
- </p>
- <hr />
-
- <h3>eContainmentFeature(eObject: org.eclipse.emf.ecore.EObject) = EReference</h3>
- <p>
- Returns the containment feature of the specified EObject
- </p>
- <hr />
-
- <h3>eContents(eObject: org.eclipse.emf.ecore.EObject, types: java.util.Set) = List</h3>
- <p>
- Returns a sequence made of the instances of the specified types in the contents of the specified eObject.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents({ecore::EPackage | ecore::EClass})</td>
- <td>Sequence{SubEPackage, eClass, ... }</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eContents(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClass) = List</h3>
- <p>
- Returns a sequence made of the instances of the specified type in the contents of the specified eObject.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents(ecore::EDataType)</td>
- <td>Sequence{firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eContents(eObject: org.eclipse.emf.ecore.EObject) = List</h3>
- <p>
- Returns the contents of the specified EObject instance.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents()</td>
- <td>Sequence{firstEClass, secondEClass, firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>eCrossReferences(eObject: org.eclipse.emf.ecore.EObject) = Object</h3>
- <p>
- Returns the list of all EObjects cross-referenced from the receiver.
- </p>
- <hr />
-
- <h3>eGet(eObject: org.eclipse.emf.ecore.EObject, featureName: java.lang.String) = Object</h3>
- <p>
- Handles calls to the operation "eGet". This will fetch the value of the feature named "featureName" on "source"
- </p>
- <hr />
-
- <h3>eInverse(eObject: org.eclipse.emf.ecore.EObject, featureName: java.lang.String) = Set</h3>
- <p>
- Returns the elements from the set of the inverse references of the receiver that are referencing the receiver using a feature with the given name.
- </p>
- <hr />
-
- <h3>eInverse(eObject: org.eclipse.emf.ecore.EObject, type: org.eclipse.emf.ecore.EClassifier) = Set</h3>
- <p>
- Returns the elements of the given type from the set of the inverse references of the receiver.
- </p>
- <hr />
-
- <h3>eInverse(eObject: org.eclipse.emf.ecore.EObject) = Set</h3>
- <p>
- Returns the set containing the inverse references.
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/aql_service_resourceservices.html b/documentation/aql_service_resourceservices.html
deleted file mode 100644
index b338605..0000000
--- a/documentation/aql_service_resourceservices.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for Resources and URIs</h1>
- </div>
-
- <h3>eResource(eObject: org.eclipse.emf.ecore.EObject) = Resource</h3>
- <p>
- Returns the Resource containing the given EObject. This service is equivalent to a direct call to EObject#eResource().
- </p>
- <hr />
-
- <h3>fileExtension(uri: org.eclipse.emf.common.util.URI) = String</h3>
- <p>
- Returns the extension of the file referred to by the given URI. This service is equivalent to a direct call to URI#fileExtension()
- </p>
- <hr />
-
- <h3>getContents(resource: org.eclipse.emf.ecore.resource.Resource, type: org.eclipse.emf.ecore.EClass) = List</h3>
- <p>
- Returns the EObjects of the given type from the direct content of the given Resource.
- </p>
- <hr />
-
- <h3>getContents(resource: org.eclipse.emf.ecore.resource.Resource) = List</h3>
- <p>
- Returns the direct content of the given Resource. This service is equivalent to a direct call to Resource#getContents()
- </p>
- <hr />
-
- <h3>getURI(resource: org.eclipse.emf.ecore.resource.Resource) = URI</h3>
- <p>
- Returns the URI of the given Resource. This service is equivalent to a direct call to Resource#getURI()
- </p>
- <hr />
-
- <h3>isPlatformPlugin(uri: org.eclipse.emf.common.util.URI) = Boolean</h3>
- <p>
- Returns "true" if the given URI is a platform plugin URI. This service is equivalent to a direct call to URI#isPlatformPlugin()
- </p>
- <hr />
-
- <h3>isPlatformResource(uri: org.eclipse.emf.common.util.URI) = Boolean</h3>
- <p>
- Returns "true" if the given URI is a platform resource URI. This service is equivalent to a direct call to URI#isPlatformResource()
- </p>
- <hr />
-
- <h3>lastSegment(uri: org.eclipse.emf.common.util.URI) = String</h3>
- <p>
- Returns the last segment of the given URI. This service is equivalent to a direct call to URI#lastSegment()
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/aql_service_stringservices.html b/documentation/aql_service_stringservices.html
deleted file mode 100644
index 852d86c..0000000
--- a/documentation/aql_service_stringservices.html
+++ /dev/null
@@ -1,858 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Stéphane Bégaudeau">
- <!-- IE6-8 support of HTML elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link href="../assets/css/bootstrap.css" rel="stylesheet">
- <link href="../assets/css/docs.css" rel="stylesheet">
- <title>Acceleo</title>
- </head>
-
- <body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <h1>Acceleo Query Language Documentation</h1>
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <section id="services">
- <div class="page-header">
- <h1>Services available for Strings</h1>
- </div>
-
- <h3>add(self: java.lang.String, b: java.lang.String) = String</h3>
- <p>
- Returns a string that is the result of the concatenation of the current string and the string "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.add('World')</td>
- <td>HelloWorld</td>
- </tr>
- </tbody>
- </table>
- <p>
- This operation behaves like '+' between two strings.
- </p>
- <hr />
-
- <h3>concat(self: java.lang.String, b: java.lang.String) = String</h3>
- <p>
- Returns a string that is the result of the concatenation of the current string and the string "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.concat('World')</td>
- <td>HelloWorld</td>
- </tr>
- </tbody>
- </table>
- <p>
- This operation behaves like '+' between two strings.
- </p>
- <hr />
-
- <h3>contains(self: java.lang.String, b: java.lang.String) = Boolean</h3>
- <p>
- Returns "true" if the current String contains the String "b"
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.contains('llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>endsWith(self: java.lang.String, b: java.lang.String) = Boolean</h3>
- <p>
- Returns true if the current String ends with the string "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.endsWidth('llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>equalsIgnoreCase(self: java.lang.String, b: java.lang.String) = Boolean</h3>
- <p>
- Returns true if the current String is equals to the String "b" without considering case in the comparison.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.equalsIgnoreCase('hello')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>first(self: java.lang.String, n: java.lang.Integer) = String</h3>
- <p>
- Returns the "n" first characters of the current String, or the current String itself if its size is less than "n".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.first(5)</td>
- <td>'Hello'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>index(self: java.lang.String, subString: java.lang.String) = Integer</h3>
- <p>
- Returns the index of the first occurrence "subString" in the current String, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.index('Hello')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>index(self: java.lang.String, subString: java.lang.String, indexString: java.lang.Integer) = Integer</h3>
- <p>
- Returns the index of the first occurrence "subString" in the current String from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.index('Hello', 2)</td>
- <td>6</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>isAlpha(self: java.lang.String) = Boolean</h3>
- <p>
- Returns "true" if self consists only of alphabetical characters, "false" otherwise.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'abc123'.isAlpha()</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'abcdef'.isAlpha()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>isAlphaNum(self: java.lang.String) = Boolean</h3>
- <p>
- Returns "true" if self consists only of alphanumeric characters, "false" otherwise.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'abc123'.isAlphaNum()</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'abcdef'.isAlphaNum()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>last(self: java.lang.String, n: java.lang.Integer) = String</h3>
- <p>
- Returns the "n" last characters of the current String, or the current String if its size is less than "n".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.last(5)</td>
- <td>'World'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>lastIndex(self: java.lang.String, subString: java.lang.String, indexString: java.lang.Integer) = Integer</h3>
- <p>
- Returns the index of the last occurrence "subString" in the current String searching backward from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.lastIndex('Hello', 7)</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>lastIndex(self: java.lang.String, subString: java.lang.String) = Integer</h3>
- <p>
- Returns the index of the last occurrence of "subString" in the current String, "-1" if the current String doesn't contain this particular substring. The index referential is 1 as in OCL and not 0.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.lastIndex('World')</td>
- <td>6</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>matches(self: java.lang.String, regex: java.lang.String) = Boolean</h3>
- <p>
- Returns "true" if the current String matches the given "regex".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.matches('*llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>prefix(self: java.lang.String, prefix: java.lang.String) = String</h3>
- <p>
- Returns the current String prefixed with the given "prefix".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'World'.prefix('Hello')</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>replace(self: java.lang.String, regex: java.lang.String, replacement: java.lang.String) = String</h3>
- <p>
- Replaces the first substring of the current String that matches the regular expression "regex" with the String "replacement".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.replace('(.*)ll', 'Wh')</td>
- <td>'Who'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>replaceAll(self: java.lang.String, regex: java.lang.String, replacement: java.lang.String) = String</h3>
- <p>
- Replaces each substring of the current String that matches the given regular expression "regex" with the String "replacement".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'TestTest'.replace('.st', 'erminated')</td>
- <td>'TerminatedTerminated'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>size(self: java.lang.String) = Integer</h3>
- <p>
- Return the length of the current String.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.size()</td>
- <td>10</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>startsWith(self: java.lang.String, b: java.lang.String) = Boolean</h3>
- <p>
- Returns true if the current String starts with the string "b".
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'Hello'.startsWith('Hell')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>strcmp(self: java.lang.String, s1: java.lang.String) = Integer</h3>
- <p>
- Returns an integer that is either negative, zero or positive depending on whether s1 is alphabetically less than, equal to or greater than self. Note that upper case letters come before lower case ones, so that 'AA' is closer to 'AC' than it is to 'Ab'.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'strcmp operation'.strcmp('strcmp')</td>
- <td>10</td>
- </tr>
- <tr>
- <td>'strcmp operation'.strcmp('strcmp operation')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>'strcmp operation'.strcmp('strtok')</td>
- <td>-17</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>strstr(self: java.lang.String, r: java.lang.String) = Boolean</h3>
- <p>
- Searches r in self.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.strstr('World')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>substitute(self: java.lang.String, r: java.lang.String, t: java.lang.String) = String</h3>
- <p>
- Substitutes the first occurrence of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'WorldWorld'.substitute('World', 'Hello')</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>substituteAll(self: java.lang.String, r: java.lang.String, t: java.lang.String) = String</h3>
- <p>
- Substitutes all occurences of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'WorldWorld'.substituteAll('World', 'Hello')</td>
- <td>'HelloHello'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>substring(self: java.lang.String, lower: java.lang.Integer, upper: java.lang.Integer) = String</h3>
- <p>
- Returns a string containing all characters from self starting from index lower up to index upper included. Both lower and upper parameters should be contained between 1 and self.size() included. Lower cannot be greater than upper.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.substring(1, 5)</td>
- <td>'Hello'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>substring(self: java.lang.String, lower: java.lang.Integer) = String</h3>
- <p>
- Returns a string containing all characters from self starting from index lower up to the end of the string included. The lower parameter should be contained between 1 and self.size() included. Lower cannot be greater than the size of the String.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.substring(5)</td>
- <td>'World'</td>
- </tr>
- <tr>
- <td>'HelloWorld'.substring(1)</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toInteger(self: java.lang.String) = Integer</h3>
- <p>
- Returns an integer of value equal to self
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'42'.toInteger()</td>
- <td>42</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toLower(self: java.lang.String) = String</h3>
- <p>
- Returns the current String with all characters transformed to lower case.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toLower()</td>
- <td>'helloworld'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toLowerFirst(self: java.lang.String) = String</h3>
- <p>
- Returns the self string with the first characters transformed to lower case.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toLowerFirst()</td>
- <td>'helloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toReal(self: java.lang.String) = Double</h3>
- <p>
- Returns a real of value equal to self
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'41.9'.toReal()</td>
- <td>41.9</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toUpper(self: java.lang.String) = String</h3>
- <p>
- Returns the current String with all characters transformed to upper case.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toUpper()</td>
- <td>'HELLOWORLD'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>toUpperFirst(self: java.lang.String) = String</h3>
- <p>
- Returns the current String with the first characters transformed to upper case.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'helloworld'.toUpperFirst()</td>
- <td>'Helloworld'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>tokenize(self: java.lang.String, delimiter: java.lang.String) = List</h3>
- <p>
- Splits the current String by using the given "delimiter" into a collection of String
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'a, b, c, d'.tokenize(', ')</td>
- <td>['a', 'b', 'c', 'd']</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>tokenize(self: java.lang.String) = List</h3>
- <p>
- Splits the current String by whitespace delimiter into a collection of String
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>'a, b, c, d'.tokenize()</td>
- <td>['a,', 'b,', 'c,', 'd']</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
-
- <h3>trim(self: java.lang.String) = String</h3>
- <p>
- Trims the given String.
- </p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead><colgroup><col width="60%" /><col width="40%" /></colgroup>
- <tbody>
- <tr>
- <td>' Hello World '.trim()</td>
- <td>'Hello World'</td>
- </tr>
- </tbody>
- </table>
- <p>
-
- </p>
- <hr />
- </section>
-
- </div>
- </body>
-
-</html>
diff --git a/documentation/index.html b/documentation/index.html
deleted file mode 100644
index d2478c1..0000000
--- a/documentation/index.html
+++ /dev/null
@@ -1,4075 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<!--
-/********************************************************************************
-** Copyright (c) 2015 Obeo.
-** All rights reserved. This program and the accompanying materials
-** are made available under the terms of the Eclipse Public License v1.0
-** which accompanies this distribution, and is available at
-** http://www.eclipse.org/legal/epl-v10.html
-**
-** Contributors:
-** Stephane Begaudeau (Obeo) - initial API and implementation
-*********************************************************************************/
--->
-<head>
-<meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="Stéphane Bégaudeau">
-<!-- IE6-8 support of HTML elements -->
-<!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-<link href="../assets/css/bootstrap.css" rel="stylesheet">
-<link href="../assets/css/docs.css" rel="stylesheet">
-<title>Acceleo</title>
-</head>
-
-<body>
- <div class="container">
- <header class="jumbotron subhead" id="overview">
- <!--<div class="subnav">
- <ul class="nav nav-pills">
- <li><a href="#introduction">Introduction</a></li>
- <li><a href="#language">Language</a></li>
- <li><a href="#operations">Operations</a></li>
- <li><a href="#standalone">Stand Alone</a></li>
- <li><a href="#migration">Migration</a></li>
- <li><a href="#textproductionrules">Text Production Rules</a></li>
- <li><a href="#onlineresources">Online Resources</a></li>
- </ul>
- </div>-->
- </header>
-
- <div class="jumbotron masthead">
- <h1>Acceleo Query Language</h1>
- </div>
- <div class="marketing">
- <h1>Query and navigate in EMF models</h1>
- </div>
-
- <section id="overview">
- <div class="page-header">
- <h1>Overview</h1>
- </div>
- <p>The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of all the services of the standard library of AQL.</p>
- </section>
-
-
- <h2 id="Introduction">Introduction</h2>
- <p>
- The Acceleo Query Language (AQL) is a language used to navigate and query an EMF model. In this document, you will find the description of the syntax, all the services and the standard library of AQL. <br />AQL as a query engine is small, simple, fast, extensible and it brings a richer validation
- than the MTL interpreter.
- </p>
- <p>For those looking for a simple and fast interpreters for your EMF models, AQL can provide you with a lot of features, including:</p>
- <ul>
- <li>Support for static and dynamic Ecore models, no query compilation phase required.</li>
- <li>The least possible overhead at evaluation time. During this phase, the evaluation goes forward and will not even try to validate or compile your expressions. Errors are tracked and captured along the way.</li>
- <li>Strong validation: types are checked at validation time and the metamodels used are analyzed to do some basic type inference and avoid false positive errors.</li>
- <li>Union types: In some context, a variable in a given query can have N potential types with N being often greater than one. AQL can embrace this fact without having to fall back to EObject as soon as there is more than one type.</li>
- <li>A simple and straightforward implementation easily extensible with Java classes providing extension methods.</li>
- <li>A very narrow dependency surface: AQL uses the very central parts of EMF, Guava and Antlr so that we could easily deploy AQL outside of Eclipse in a server or a standalone scenario.</li>
- </ul>
- <p>The AQL interpreter is used in Sirius with the prefix «aql:».</p>
- <h2 id="Syntax">Syntax</h2>
- <h3 id="Basics">Basics</h3>
- <p>
- The syntax is very similar to the OCL syntax. An expression always starts with a variable <br />
- <code>aVariable</code>
- </p>
- <p>
- The variable named <strong>self</strong> represent the current object (think of it as the
- <code>this</code>
- in Java).
- </p>
- <p>Let’s consider the following metamodel :</p>
- <p>
- <img border="0" src="../assets/pics/family_ecore.png" />
- </p>
- <p>
- From a variable one can access field or reference values using the
- <code>.</code>
- separator. <br />With
- <code>self</code>
- being an instance of <strong>Person</strong>,
- <code>self.name</code>
- returns the value of the attribute <strong>name</strong> and
- <code>self.father</code>
- return the father of the person.
- </p>
- <p>
- If the attribute or the reference is multi-valued, then
- <code>self.parents</code>
- will return a collection.
- </p>
- <p>
- Calls can be chained, as such
- <code>self.parents.name</code>
- will return a collection containing the names of the parents.
- </p>
- <p>
- If one want to access the collection itself, then the separator
- <code>-></code>
- must be used, as such
- <code>self.parents.name->size()</code>
- will return the number of elements in the collection whereas
- <code>self.parents.name.size()</code>
- will return a collection containing <br />the sizes of each name.
- </p>
- <p>
- AQL can also call methods modeled as EOperations or defined through Java services. The syntax denoting such a call is
- <code>.</code>
- for instance
- <code>self.someCall()</code>
- will call the <strong>someCall</strong> method and return the result.
- </p>
- <h3 id="Workingwithcollections">Working with collections</h3>
- <p>
- Filtering a collection is generaly done using either
- <code>->filter(..)</code>
- to keep elements of a given type or
- <code>->select(..)</code>
- to keep elements which are validating a given condition.
- </p>
- <p>
- With
- <code>self</code>
- being an instance of <strong>Family</strong>,
- <code>self.members->filter(family::Man)</code>
- will return all the members of the family which are mens and
- <code>self.members->select( p | p.name.startsWith('A'))</code>
- will return all the members of the family which have a name starting by the letter ‹A›.
- </p>
- <p>
- To access an element at a particular index you can use the operation
- <code>->at(..)</code>
- ;
- <code>self.members->at(1)</code>
- will return the first person which is a member of the family (in that specific case it is probably better to use
- <code>self.members->first()</code>
- </p>
- <p>
- AQL has two kinds of collections, a
- <code>Sequence</code>
- which is a list, or an
- <code>OrderedSet</code>
- which does not allow doubles. You can convert a
- <code>Sequence</code>
- to an
- <code>OrderedSet</code>
- by as such :
- <code>self.members->asSet()</code>
- </p>
- <p>You can also define a collection by extension using the following syntax:</p>
- <ul>
- <li><code>OrderedSet{self}</code> which returns a set containing the current EObject.</li>
- <li><code>Sequence{self, self.eContainer()}</code> returns a sequence containing the current EObject and its parent.</li>
- </ul>
- <h3 id="Navigationaxes">Navigation axes</h3>
- <p>AQL provides operations out of the box to browse the model. Most notably :</p>
- <ul>
- <li><code>self.eContainer()</code> returns the parent of the current object if there is one.</li>
- <li><code>self.eAllContents(some::Type)</code> returns all direct and indirect children matching the given type.</li>
- <li><code>self.eContents()</code> return all the direct children.</li>
- <li><code>self.eInverse('father')</code> returns the cross reference of the reference named ‹father›. In this case it will return all the persons which have the current object (self) as a father.</li>
- </ul>
- <h3 id="Conditions">Conditions</h3>
- <p>
- AQL provides an <strong>If</strong> but it has to be an expression and not a statement. As such one <strong>has to define the else</strong>. Here is the syntax
- </p>
- <p>
- <strong>if</strong>
- <code>self.name.startsWith('a')</code>
- <strong>then</strong>
- <code>self</code>
- <strong>else</strong>
- <code>self.eContainer()</code>
- <strong>endif</strong>
- </p>
- <h3 id="WalkthroughusinganUMLexample">Walkthrough using an UML example</h3>
- <p>
- Let’s move to a slightly more complex example to learn how to navigate through a model. We will work with a model instance from the following metamodel: a simplified view of the UML2 metamodel with <strong>Package</strong>, <strong>UseCase</strong>, <strong>Model</strong> or <strong>Component</strong>
- instances.
- </p>
- <p>
- <img border="0" src="../assets/pics/simple-uml-ecore.jpg" />
- </p>
- <p>
- The following illustration demonstrate the result of the just typing
- <code>self</code>
- as a query. At the bottom every instance of the UML model is represented by a node with containment relationships from top to bottom and displaying the non-contained references in between those nodes through horizontal edges. The result of the query is highlighted in <strong>blue</strong>.
- </p>
- <p>
- <img border="0" src="../assets/pics/self.jpg" />
- </p>
- <p>
- The variable <strong>self</strong> here is the <strong>Class</strong> named «Invoice» in the model, as such the query
- <code>self</code>
- hightlight this instance.
- </p>
- <h4 id="eContainer">eContainer()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtainer.jpg" />
- </p>
- <p>
- When using the query
- <code>self.eContainer()</code>
- the cursor move from the
- <code>self</code>
- variable to its most direct parent, here the <strong>Component</strong> instance named «Accounting».
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-econtainer.jpg" />
- </p>
- <p>
- Such calls can be chained and as such
- <code>self.eContainer().eContainer()</code>
- return the <strong>Component</strong> parents: the <strong>Package</strong> named «Components».
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model.jpg" />
- </p>
- <p>
- The
- <code>eContainer()</code>
- call can also be used with a type parameter, in that case it will be transitively executed up to the point where an instance of the given type is found.
- </p>
- <p>
- In this case then
- <code>self.eContainer(uml::Model)</code>
- goes up to the root of the graph. If no instance of the given type is found in the parents then the query returns an empty result.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-class.jpg" />
- </p>
- <p>
- <code>eContainer()</code>
- or any other service using types as parameters will match both the given types or its subtypes. The only exception to this rule is the
- <code>oclIsTypeOf(..)</code>
- service which is intended to check only for the given type and not its subtypes.
- </p>
- <p>
- When using the query
- <code>self.eContainer(uml::Class)</code>
- the result is an instance of <strong>Component</strong> as the <strong>Component</strong> type extends <strong>Class</strong> in the metamodel.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainerorself.jpg" />
- </p>
- <p>
- A variant of
- <code>eContainer(..)</code>
- named
- <code>eContainerOrSelf(..)</code>
- is provided it will first check the type of the current instance. As such the query
- <code>self.eContainerOrSelf(uml::Class)</code>
- when <strong>self</strong> is the «Invoice» class returns this instance.
- </p>
- <h4 id="eContents">eContents()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtents.jpg" />
- </p>
- <p>
- One use
- <code>eContainer()</code>
- to go up in the parent. The
- <code>eContents()</code>
- axes is its counterpart and returns the direct children of the element.
- </p>
- <h4 id="select">select()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtents-select-name-id.jpg" />
- </p>
- <p>
- The
- <code>select(...)</code>
- service can be used to filter elements from a list by veryfing a predicate. In the query
- <code>self.eContents()->select(p | p.name = 'id')</code>
- the query only returns the elements which have a name equal to <strong>"id"</strong>, in this case a single element.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtents-select-name-notid.jpg" />
- </p>
- <p>
- Equality is checked with a single
- <code>=</code>
- , inequality is expressed with the operator
- <code><></code>
- .
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtents-select-visibility.jpg" />
- </p>
- <p>
- Comparing values with an enumeration is slightly different as the enumeration value should be explicitely qualified. In the
- <code>self.eContents()->select(p | p.visibility = uml::VisibilityKind::private )</code>
- query the expression
- <code>uml::VisibilityKind::private</code>
- denotes the enumeration literal named <strong>private</strong> which is contained in the <strong>VisibilityKind</strong> enumeration of the <strong>uml</strong> metamodel.
- </p>
- <h4 id="eAllContents">eAllContents()</h4>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model-eallcontents.jpg" />
- </p>
- <p>
- The
- <code>eAllContents()</code>
- axe is used to browse direct and indirect children. It goes from the starting point to the leafs of the model. Here the expression starts with
- <code>self.eContainer(uml::Model)</code>
- which has we’ve seen before goes up until an instance of <strong>Model</strong> is found. From here
- <code>eAllContents</code>
- is executed returning all the direct and indirect childrens of the «Travel Agency» <strong>model</strong> instance.
- </p>
- <p>
- <img border="0" src="../assets/pics/econtainer-eallcontents-select-name-startswith.jpg" />
- </p>
- <p>Just like any other collection it can be filtered to retrieve, for instace, the elements whose name is starting by the letter «I».</p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model-eallcontents-components.jpg" />
- </p>
- <p>
- A type parameter can be used to retrieve the direct or indirect children of a specific type: here <strong>components</strong>.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-model-eallcontents-usecases.jpg" />
- </p>
- <p>
- Or <strong>use case</strong> instances.
- </p>
- <p>
- <img border="0" src="../assets/pics/self.econtainer-model-eallcontents-multipletypes.jpg" />
- </p>
- <p>It is interesting to note that the parameter can also be a collection of types, enabling the retrieval of many elements through a single pass.</p>
- <h4 id="eInverse">eInverse()</h4>
- <p>
- Queries using
- <code>eAllContents</code>
- must be designed with care as they tend to lead to an intense browsing of the model. In many cases they can be replaced with
- <code>eInverse()</code>
- calls to retrieve elements of interests.
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-einverse.jpg" />
- </p>
- <p>
- <code>eInverse()</code>
- returns any element which as a relationship with the current one. This relationship can be indifferently a containment one or not.
- </p>
- <p>
- <img border="0" src="../assets/pics/econtainer-einverse-usecase.jpg" />
- </p>
- <p>
- It is often of interest to restrict the type of elements we expect out of the
- <code>eInverse()</code>
- call. With the query
- <code>self.eContainer().eInverse(uml::UseCase)</code>
- only use cases instances will be returned, here the <strong>UseCase</strong> named «to Invoice» which refers to the «Accounting» <strong>Component</strong> through the reference named <strong>subject</strong>
- </p>
- <p>
- <img border="0" src="../assets/pics/self-econtainer-einverse-packagedelement.jpg" />
- </p>
- <p>
- One can also be even more explicit and query for a specific reference name, here
- <code>packagedElement</code>
- : only the <strong>Package</strong> named «Components» refers to the «Accounting» <strong>Component</strong> through the reference named «packagedElement».
- </p>
- <h2 id="LanguageReference">Language Reference</h2>
- <p>These sections are listing all the services of the standard library of AQL.</p>
- <section id="services">
- <div class="page-header">
- <h3>Services available for all types</h3>
- </div>
-
- <h3>String + Object : String</h3>
- <p>Returns the concatenation of the current string and the given object "any" (as a String).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'times ' + 42</td>
- <td>'times 42'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object + String : String</h3>
- <p>Returns the concatenation of self (as a String) and the given string "s".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>42 + ' times'</td>
- <td>'42 times'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object <> Object : Boolean</h3>
- <p>Indicates whether the object "o1" is a different object from the object "o2".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' <> 'World'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' <> 'Hello'</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object = Object : Boolean</h3>
- <p>Indicates whether the object "o1" i"the same as the object "o2". For more information refer to the Object#equals(Object) method.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' = 'World'</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'Hello' = 'Hello'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.oclAsType(Object) : Object</h3>
- <p>Casts the current object to the given type.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclAsType(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- <tr>
- <td>anEPackage.oclAsType(ecore::EClass)</td>
- <td>anEPackage</td>
- </tr>
- </tbody>
- </table>
- <p>Contrary to Acceleo 3, the type is ignored, the given object will be returned directly.</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>anEPackage.oclAsType(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>anEPackage.oclAsType(ecore::EClass)</td>
- <td>oclInvalid</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Object.oclIsKindOf(Object) : Boolean</h3>
- <p>Evaluates to "true" if the type of the object o1 conforms to the type "classifier". That is, o1 is of type "classifier" or a subtype of "classifier".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
- <td>true</td>
- </tr>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.oclIsTypeOf(Object) : Boolean</h3>
- <p>Evaluates to "true" if the object o1 if of the type "classifier" but not a subtype of the "classifier".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::EPackage)</td>
- <td>true</td>
- </tr>
- <tr>
- <td>anEPackage.oclIsKindOf(ecore::ENamedElement)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.toString() : String</h3>
- <p>Returns a string representation of the current object.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>42.toString()</td>
- <td>'42'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Object.trace() : String</h3>
- <p>Returns a string representation of the current environment.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>42.trace()</td>
- <td>'Metamodels: http://www.eclipse.org/emf/2002/Ecore Services: org.eclipse.acceleo.query.services.AnyServices public java.lang.String org.eclipse.acceleo.query.services.AnyServices.add(java.lang.Object,java.lang.String) ... receiver: 42 '</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Booleans</h3>
- </div>
-
- <h3>Boolean.and(Boolean) : Boolean</h3>
- <p>Logical and.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true and false</td>
- <td>false</td>
- </tr>
- <tr>
- <td>false and true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>true and true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false and false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.implies(Boolean) : Boolean</h3>
- <p>Logical implies.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true implies true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>true implies false</td>
- <td>false</td>
- </tr>
- <tr>
- <td>false implies true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false implies false</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.not() : Boolean</h3>
- <p>Logical negation.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>not true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>not false</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.or(Boolean) : Boolean</h3>
- <p>Logical or.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true or false</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false or true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>true or true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false or false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Boolean.xor(Boolean) : Boolean</h3>
- <p>Logical xor.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>true xor true</td>
- <td>false</td>
- </tr>
- <tr>
- <td>true xor false</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false xor true</td>
- <td>true</td>
- </tr>
- <tr>
- <td>false xor false</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Collections</h3>
- </div>
-
- <h3>OrderedSet + Collection : OrderedSet</h3>
- <p>Returns the concatenation of the given collection into the current set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'} + OrderedSet{'c', 'b', 'f'}</td>
- <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sets</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'c', 'b', 'f'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Sequence + Collection : Sequence</h3>
- <p>Returns the concatenation of the given collection into the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.add(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'} + OrderedSet{'c', 'e'}</td>
- <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service addAll has been replaced by "add" in order to have access to the operator "+" between to sequences</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'} + Sequence{'d', 'e'}</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(OrderedSet{'c', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'c', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Collection->any( x | ... ) : Object</h3>
- <p>Gets the first element in the current collection for which the value returned by the lambda evaluates to "true".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->any(str | str.size() = 1)</td>
- <td>'a'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->asOrderedSet() : OrderedSet</h3>
- <p>Returns a set representation of the specified collection. Returns the same object if it is a set already. This operation has the same behavior as "asSet()"</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asOrderedSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->asOrderedSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->asSequence() : Sequence</h3>
- <p>Returns a sequence representation of the specified collection. Returns the same object if it is already a sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asSequence()</td>
- <td>Sequence{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->asSequence()</td>
- <td>Sequence{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->asSet() : OrderedSet</h3>
- <p>Returns a set representation of the specified collection. Returns the same object if it is already a set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->asSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c', 'c', 'a'}->asSet()</td>
- <td>OrderedSet{'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->at(Integer) : Object</h3>
- <p>Returns the element at the specified position in the sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->at(1)</td>
- <td>'a'</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->at(2)</td>
- <td>'b'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->collect( x | ... ) : Sequence{Object}</h3>
- <p>Returns a sequence containing the result of applying "lambda" on all elements contained in the current sequence, maintaining order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
- <td>Sequence{'A', 'B', 'C'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->collect( x | ... ) : OrderedSet{Object}</h3>
- <p>Returns a set containing the result of applying "lambda" on all elements contained in the current set, maintaining order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->collect(str | str.toUpper())</td>
- <td>OrderedSet{'A', 'B', 'C'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->concat(Collection) : OrderedSet</h3>
- <p>Returns the concatenation of the current set with the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>Sequence->concat(Collection) : Sequence</h3>
- <p>Returns the concatenation of the current sequence with the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}.concat(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.addAll(Sequence{'d', 'e'})</td>
- <td>Sequence{'a', 'b', 'c', 'd', 'e'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>OrderedSet->count(Object) : Integer</h3>
- <p>Returns "1" if the current set contains the given object, "0" otherwise.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->count('d')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->count('a')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence{Object}->count(Object) : Integer</h3>
- <p>Counts the number of occurrences of the given object in the given sequence</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->count('d')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->count('a')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->excludes(Object) : Boolean</h3>
- <p>Indicates if the given collection doesn't contain the given object.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excludes('a')</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excludes('d')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->excludesAll(Collection) : Boolean</h3>
- <p>Indicates if no elements from the second collection are contained in the first collection</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'f'})</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b'}->excludesAll(OrderedSet{'a', 'f'})</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->excluding(Object) : OrderedSet</h3>
- <p>Removes the given object from the current set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->excluding('c')</td>
- <td>OrderedSet{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->excluding(Object) : Sequence</h3>
- <p>Removes the given object from the current sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->excluding('c')</td>
- <td>Sequence{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->exists( x | ... ) : Boolean</h3>
- <p>Indicates if it exists an object from the given collection for which the given lambda evaluates to "true"</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->exists(str | str.size() > 5)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->filter(EClassifier) : OrderedSet</h3>
- <p>Keeps only instances of the given EClassifier from the given set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
- <td>OrederedSet{anEClass}</td>
- </tr>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
- <td>OrederedSet{anEAttribute}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->filter(OrderedSet{EClassifier}) : Sequence</h3>
- <p>Keeps only instances of the given EClassifier in the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
- <td>Sequence{anEClass, anEReference}</td>
- </tr>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
- <td>Sequence{anEAttribute, anEPackage}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->filter(OrderedSet{EClassifier}) : OrderedSet</h3>
- <p>Keeps only instances of the given set of EClassifier from the given set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEReference}->filter({ecore::EClass | ecore::EReference})</td>
- <td>OrderedSet{anEClass, anEReference}</td>
- </tr>
- <tr>
- <td>OrderedSet{anEClass, anEAttribute, anEPackage}->filter({ecore::EStructuralFeature | ecore::EPacakge})</td>
- <td>OrderedSet{anEAttribute, anEPackage}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->filter(EClassifier) : Sequence</h3>
- <p>Keeps only instances of the given EClassifier in the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{anEClass, anEAttribute, anEReference}->filter(ecore::EClass)</td>
- <td>Sequence{anEClass}</td>
- </tr>
- <tr>
- <td>Sequence{anEClass, anEAttribute}->filter(ecore::EStructuralFeature)</td>
- <td>Sequence{anEAttribute}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->first() : Object</h3>
- <p>Returns the first element of the specified Collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->first()</td>
- <td>'a'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->forAll( x | ... ) : Boolean</h3>
- <p>Indicates if all the objects from the given collection validate the given lamba</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'ccc'}->forAll(str | str.size() = 1)</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->forAll(str | str.size() = 1)</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->includes(Object) : Boolean</h3>
- <p>Indicates if the given collection contains the given object.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includes('a')</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includes('d')</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->includesAll(Collection) : Boolean</h3>
- <p>Indicates if all elements from the second collection are contained in the first collection</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a'})</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->includesAll(OrderedSet{'a', 'f'})</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->including(Object) : OrderedSet</h3>
- <p>Adds the given object to the current set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->including('d')</td>
- <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->including(Object) : Sequence</h3>
- <p>Adds the given object to the current sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->including('d')</td>
- <td>Sequence{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->indexOf(Object) : Integer</h3>
- <p>Returns the index of the given object in the given set ([1..size]).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{1, 2, 3, 4}->indexOf(3)</td>
- <td>3</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->indexOf(Object) : Integer</h3>
- <p>Returns the index of the given object in the given sequence ([1..size]).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{1, 2, 3, 4}->indexOf(3)</td>
- <td>3</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->insertAt(Integer, Object) : OrderedSet</h3>
- <p>Inserts the given object in a copy of the given set at the given position ([1..size]). If the given set already contains this object, it will be moved to the accurate position.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->insertAt(2, 'f')</td>
- <td>Sequence{'a', 'f', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->insertAt(Integer, Object) : Sequence</h3>
- <p>Inserts the given object in a copy of the given sequence at the given position ([1..size]).</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->insertAt(2, 'f')</td>
- <td>Sequence{'a', 'f', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->intersection(Collection) : OrderedSet</h3>
- <p>Creates a set with the elements from the given set that are also present in the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->intersection(Collection) : Sequence</h3>
- <p>Creates a sequence with elements from the given sequence that are present in both the current sequence and the given other {@code Collection}. Iteration order will match that of the current sequence. Duplicates from the first list will all be kept in the result if they also are in the
- second one, but duplicates from the second list will be dumped even if they are present in the first.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->intersection(OrderedSet{'a', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->isEmpty() : Boolean</h3>
- <p>Returns "true" when the input collection is empty.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->isEmpty()</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{}->isEmpty()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->isUnique( x | ... ) : Boolean</h3>
- <p>Indicates if the evaluation of the given lambda gives a different value for all elements of the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->isUnique(str | str.size())</td>
- <td>false</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'bb', 'ccc'}->isUnique(str | str.size())</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->last() : Object</h3>
- <p>Returns the last element of the given sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->last()</td>
- <td>'c'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->last() : Object</h3>
- <p>Returns the last element of the given set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->last()</td>
- <td>'c'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->notEmpty() : Boolean</h3>
- <p>Returns "true" when the input collection is not empty.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->notEmpty()</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{}->notEmpty()</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->one( x | ... ) : Boolean</h3>
- <p>Indicates if one and only one element of the given collection validates the given lambda.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->one(str | str.equals('a'))</td>
- <td>true</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'a', 'c'}->one(str | str.equals('a'))</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->prepend(Object) : OrderedSet</h3>
- <p>Inserts the given object in a copy of the given set at the first position. If the set already contained the given object, it is moved to the first position.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->prepend('f')</td>
- <td>OrderedSet{'f', 'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->prepend(Object) : Sequence</h3>
- <p>Inserts the given object in a copy of the given sequence at the first position.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->prepend('f')</td>
- <td>Sequence{'f', 'a', 'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->reject( x | ... ) : OrderedSet</h3>
- <p>Reject returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to false will be present in the returned set</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
- <td>OrderedSet{'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->reject( x | ... ) : Sequence</h3>
- <p>Reject returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to false will be present in the returned sequence</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->reject(str | str.equals('a'))</td>
- <td>Sequence{'b', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->reverse() : OrderedSet</h3>
- <p>Returns the given set in reversed order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->reverse()</td>
- <td>OrderedSet{'c', 'b', 'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->reverse() : Sequence</h3>
- <p>Returns the given sequence in reversed order.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->reverse()</td>
- <td>Sequence{'c', 'b', 'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->select( x | ... ) : Sequence</h3>
- <p>Select returns a filtered version of the specified sequence. Only elements for which the given "lambda" evaluates to true will be present in the returned sequence.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->select( x | ... ) : OrderedSet</h3>
- <p>Select returns a filtered version of the specified set. Only elements for which the given "lambda" evaluates to true will be present in the returned set.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->select(str | str.equals('a'))</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->sep(Object, Object, Object) : Sequence{Object}</h3>
- <p>Inserts the given separator between each elements of the given collection, the given prefix before the first element, and the given suffix after the last element.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->sep('[', '-', ']')</td>
- <td>Sequence{'[', 'a', '-', 'b', '-', 'c', ']'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->sep(Object) : Sequence{Object}</h3>
- <p>Inserts the given separator between each elements of the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->sep('-')</td>
- <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->sep('-')</td>
- <td>Sequence{'a', '-', 'b', '-', 'c'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->size() : Integer</h3>
- <p>Returns the size of the specified collection</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->size()</td>
- <td>3</td>
- </tr>
- <tr>
- <td>OrderedSet{'a', 'b', 'c', 'd'}->size()</td>
- <td>4</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->sortedBy( x | ... ) : Sequence</h3>
- <p>Returns a sequence containing the elements of the original sequence ordered by the result of the given lamba</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
- <td>Sequence{'c', 'aa', 'bbb'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->sortedBy( x | ... ) : OrderedSet</h3>
- <p>Returns a set containing the elements of the original set ordered by the result of the given lamba</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'aa', 'bbb', 'c'}->sortedBy(str | str.size())</td>
- <td>OrderedSet{'c', 'aa', 'bbb'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence - Collection : Sequence</h3>
- <p>Returns the difference of the current sequence and the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'} - Sequence{'c', 'b', 'f'}</td>
- <td>Sequence{'a'}</td>
- </tr>
- <tr>
- <td>Sequence{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sequences</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.removeAll(Sequence{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>Sequence{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>Sequence{'a'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>OrderedSet - Collection : OrderedSet</h3>
- <p>Returns the difference of the current set and the given collection.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'} - OrderedSet{'c', 'b', 'f'}</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <p>The service removeAll has been replaced by "sub" in order to have access to the operator "-" between to sets</p>
- <h4>In other languages</h4>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Language</th>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Acceleo 3 (MTL)</td>
- <td>OrderedSet{'a', 'b', 'c'}.removeAll(OrderedSet{'c', 'b', 'f'})</td>
- <td>OrderedSet{'a'}</td>
- </tr>
- </tbody>
- </table>
- <hr />
-
- <h3>OrderedSet->subOrderedSet(Integer, Integer) : OrderedSet</h3>
- <p>Returns a subset of the given set</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->subOrderedSet(1, 2)</td>
- <td>OrderedSet{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->subSequence(Integer, Integer) : Sequence</h3>
- <p>Returns a subset of the given sequence</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->subSequence(1, 2)</td>
- <td>Sequence{'a', 'b'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Collection->sum() : Number</h3>
- <p>Sums elements of the given collection if possible.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{1, 2, 3, 4}->sum()</td>
- <td>10</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Sequence->union(Sequence) : Sequence</h3>
- <p>Returns a sequence containing all the elements of the first and second sequences</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>Sequence{'a', 'b', 'c'}->union(Sequence{'d', 'c'})</td>
- <td>Sequence{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>OrderedSet->union(OrderedSet) : OrderedSet</h3>
- <p>Returns a set containing all the elements of the first and second sets</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>OrderedSet{'a', 'b', 'c'}->union(OrderedSet{'d', 'c'})</td>
- <td>OrderedSet{'a', 'b', 'c', 'd'}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Comparables</h3>
- </div>
-
- <h3>Comparable > Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is greater than "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' > 'Abc'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' > 'Hello'</td>
- <td>false</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Comparable >= Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is greater than or equal to "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' >= 'Abc'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' >= 'Hello'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Comparable < Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is less than "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' < 'Hello'</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'Hello' < 'World'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>Comparable <= Comparable : Boolean</h3>
- <p>Compares "a" to "b" and return "true" if "a" is less than or equal to "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' <='Hello'</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'Hello' <='World'</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for EObjects</h3>
- </div>
-
- <h3>EClass.allInstances() : Sequence{EObject}</h3>
- <p>Returns all instances of the EClass</p>
- <hr />
-
- <h3>OrderedSet{EClass}->allInstances() : Sequence{EObject}</h3>
- <p>Returns all instances of any EClass from the OrderedSet</p>
- <hr />
-
- <h3>EObject.eAllContents() : Sequence{EObject}</h3>
- <p>Returns a sequence of the EObjects recursively contained in the specified root eObject.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents()</td>
- <td>Sequence{firstEClass, firstEAttribute, secondEClass, firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eAllContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
- <p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents({ecore::EPackage | ecore::EClass})</td>
- <td>Sequence{ePackage, eClass, ...}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eAllContents(EClass) : Sequence{EObject}</h3>
- <p>Returns a sequence of the EObjects recursively contained in the specified root eObject and that are instances of the specified EClass</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eAllContents(ecore::EClass)</td>
- <td>Sequence{firstEClass, secondEClass}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eClass() : EClass</h3>
- <p>Returns the EClass of the specified EObject</p>
- <hr />
-
- <h3>EObject.eContainer() : EObject</h3>
- <p>Returns the container of the specified EObject</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainer()</td>
- <td>firstEClass</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContainer(EClass) : EObject</h3>
- <p>Returns the first container of the specified EObject that matches the given type</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainer(ecore::EPackage)</td>
- <td>anEPackage</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContainerOrSelf(EClass) : EObject</h3>
- <p>Returns self or the first container of the specified EObject that matches the given type</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>firstEAttribute.eContainerOrSelf(ecore::EAttribute)</td>
- <td>firstEAttribute</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContainingFeature() : EStructuralFeature</h3>
- <p>Returns the containing feature of the specified EObject</p>
- <hr />
-
- <h3>EObject.eContainmentFeature() : EReference</h3>
- <p>Returns the containment feature of the specified EObject</p>
- <hr />
-
- <h3>EObject.eContents() : Sequence{EObject}</h3>
- <p>Returns the contents of the specified EObject instance.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents()</td>
- <td>Sequence{firstEClass, secondEClass, firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContents(EClass) : Sequence{EObject}</h3>
- <p>Returns a sequence made of the instances of the specified type in the contents of the specified eObject.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents(ecore::EDataType)</td>
- <td>Sequence{firstDataType}</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eContents(OrderedSet{EClass}) : Sequence{EObject}</h3>
- <p>Returns a sequence made of the instances of the specified types in the contents of the specified eObject.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>anEPackage.eContents({ecore::EPackage | ecore::EClass})</td>
- <td>Sequence{SubEPackage, eClass, ... }</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>EObject.eCrossReferences() : Object</h3>
- <p>Returns the list of all EObjects cross-referenced from the receiver.</p>
- <hr />
-
- <h3>EObject.eGet(String) : Object</h3>
- <p>Handles calls to the operation "eGet". This will fetch the value of the feature named "featureName" on "source"</p>
- <hr />
-
- <h3>EObject.eInverse() : OrderedSet{EObject}</h3>
- <p>Returns the set containing the inverse references.</p>
- <hr />
-
- <h3>EObject.eInverse(EClassifier) : OrderedSet{EObject}</h3>
- <p>Returns the elements of the given type from the set of the inverse references of the receiver.</p>
- <hr />
-
- <h3>EObject.eInverse(String) : OrderedSet{EObject}</h3>
- <p>Returns the elements from the set of the inverse references of the receiver that are referencing the receiver using a feature with the given name.</p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Resources and URIs</h3>
- </div>
-
- <h3>EObject.eResource() : Resource</h3>
- <p>Returns the Resource containing the given EObject. This service is equivalent to a direct call to EObject#eResource().</p>
- <hr />
-
- <h3>URI.fileExtension() : String</h3>
- <p>Returns the extension of the file referred to by the given URI. This service is equivalent to a direct call to URI#fileExtension()</p>
- <hr />
-
- <h3>Resource.getContents() : Sequence{EObject}</h3>
- <p>Returns the direct content of the given Resource. This service is equivalent to a direct call to Resource#getContents()</p>
- <hr />
-
- <h3>Resource.getContents(EClass) : Sequence{EObject}</h3>
- <p>Returns the EObjects of the given type from the direct content of the given Resource.</p>
- <hr />
-
- <h3>Resource.getURI() : URI</h3>
- <p>Returns the URI of the given Resource. This service is equivalent to a direct call to Resource#getURI()</p>
- <hr />
-
- <h3>URI.isPlatformPlugin() : Boolean</h3>
- <p>Returns "true" if the given URI is a platform plugin URI. This service is equivalent to a direct call to URI#isPlatformPlugin()</p>
- <hr />
-
- <h3>URI.isPlatformResource() : Boolean</h3>
- <p>Returns "true" if the given URI is a platform resource URI. This service is equivalent to a direct call to URI#isPlatformResource()</p>
- <hr />
-
- <h3>URI.lastSegment() : String</h3>
- <p>Returns the last segment of the given URI. This service is equivalent to a direct call to URI#lastSegment()</p>
- <hr />
- </section>
- <section id="services">
- <div class="page-header">
- <h3>Services available for Strings</h3>
- </div>
-
- <h3>String + String : String</h3>
- <p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello' + 'World'</td>
- <td>HelloWorld</td>
- </tr>
- </tbody>
- </table>
- <p>This operation behaves like '+' between two strings.</p>
- <hr />
-
- <h3>String.concat(String) : String</h3>
- <p>Returns a string that is the result of the concatenation of the current string and the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.concat('World')</td>
- <td>HelloWorld</td>
- </tr>
- </tbody>
- </table>
- <p>This operation behaves like '+' between two strings.</p>
- <hr />
-
- <h3>String.contains(String) : Boolean</h3>
- <p>Returns "true" if the current String contains the String "b"</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.contains('llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.endsWith(String) : Boolean</h3>
- <p>Returns true if the current String ends with the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.endsWidth('llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.equalsIgnoreCase(String) : Boolean</h3>
- <p>Returns true if the current String is equals to the String "b" without considering case in the comparison.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.equalsIgnoreCase('hello')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.first(Integer) : String</h3>
- <p>Returns the "n" first characters of the current String, or the current String itself if its size is less than "n".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.first(5)</td>
- <td>'Hello'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.index(String) : Integer</h3>
- <p>Returns the index of the first occurrence "subString" in the current String, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.index('Hello')</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.index(String, Integer) : Integer</h3>
- <p>Returns the index of the first occurrence "subString" in the current String from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.index('Hello', 2)</td>
- <td>6</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.isAlpha() : Boolean</h3>
- <p>Returns "true" if self consists only of alphabetical characters, "false" otherwise.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'abc123'.isAlpha()</td>
- <td>false</td>
- </tr>
- <tr>
- <td>'abcdef'.isAlpha()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.isAlphaNum() : Boolean</h3>
- <p>Returns "true" if self consists only of alphanumeric characters, "false" otherwise.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'abc123'.isAlphaNum()</td>
- <td>true</td>
- </tr>
- <tr>
- <td>'abcdef'.isAlphaNum()</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.last(Integer) : String</h3>
- <p>Returns the "n" last characters of the current String, or the current String if its size is less than "n".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.last(5)</td>
- <td>'World'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.lastIndex(String, Integer) : Integer</h3>
- <p>Returns the index of the last occurrence "subString" in the current String searching backward from the given index, or -1 if "subString" is not in the current String. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.lastIndex('Hello', 7)</td>
- <td>1</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.lastIndex(String) : Integer</h3>
- <p>Returns the index of the last occurrence of "subString" in the current String, "-1" if the current String doesn't contain this particular substring. The index referential is 1 as in OCL and not 0.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloHello'.lastIndex('World')</td>
- <td>6</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.matches(String) : Boolean</h3>
- <p>Returns "true" if the current String matches the given "regex".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.matches('*llo')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.prefix(String) : String</h3>
- <p>Returns the current String prefixed with the given "prefix".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'World'.prefix('Hello')</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.replace(String, String) : String</h3>
- <p>Replaces the first substring of the current String that matches the regular expression "regex" with the String "replacement".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.replace('(.*)ll', 'Wh')</td>
- <td>'Who'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.replaceAll(String, String) : String</h3>
- <p>Replaces each substring of the current String that matches the given regular expression "regex" with the String "replacement".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'TestTest'.replace('.st', 'erminated')</td>
- <td>'TerminatedTerminated'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.size() : Integer</h3>
- <p>Return the length of the current String.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.size()</td>
- <td>10</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.startsWith(String) : Boolean</h3>
- <p>Returns true if the current String starts with the string "b".</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'Hello'.startsWith('Hell')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.strcmp(String) : Integer</h3>
- <p>Returns an integer that is either negative, zero or positive depending on whether s1 is alphabetically less than, equal to or greater than self. Note that upper case letters come before lower case ones, so that 'AA' is closer to 'AC' than it is to 'Ab'.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'strcmp operation'.strcmp('strcmp')</td>
- <td>10</td>
- </tr>
- <tr>
- <td>'strcmp operation'.strcmp('strcmp operation')</td>
- <td>0</td>
- </tr>
- <tr>
- <td>'strcmp operation'.strcmp('strtok')</td>
- <td>-17</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.strstr(String) : Boolean</h3>
- <p>Searches r in self.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.strstr('World')</td>
- <td>true</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substitute(String, String) : String</h3>
- <p>Substitutes the first occurrence of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'WorldWorld'.substitute('World', 'Hello')</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substituteAll(String, String) : String</h3>
- <p>Substitutes all occurences of the substring "r" in self by "t" and returns the resulting string. Will return self if it contains no occurrence of the substring r.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'WorldWorld'.substituteAll('World', 'Hello')</td>
- <td>'HelloHello'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substring(Integer, Integer) : String</h3>
- <p>Returns a string containing all characters from self starting from index lower up to index upper included. Both lower and upper parameters should be contained between 1 and self.size() included. Lower cannot be greater than upper.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.substring(1, 5)</td>
- <td>'Hello'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.substring(Integer) : String</h3>
- <p>Returns a string containing all characters from self starting from index lower up to the end of the string included. The lower parameter should be contained between 1 and self.size() included. Lower cannot be greater than the size of the String.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.substring(5)</td>
- <td>'World'</td>
- </tr>
- <tr>
- <td>'HelloWorld'.substring(1)</td>
- <td>'HelloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toInteger() : Integer</h3>
- <p>Returns an integer of value equal to self</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'42'.toInteger()</td>
- <td>42</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toLower() : String</h3>
- <p>Returns the current String with all characters transformed to lower case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toLower()</td>
- <td>'helloworld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toLowerFirst() : String</h3>
- <p>Returns the self string with the first characters transformed to lower case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toLowerFirst()</td>
- <td>'helloWorld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toReal() : Double</h3>
- <p>Returns a real of value equal to self</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'41.9'.toReal()</td>
- <td>41.9</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toUpper() : String</h3>
- <p>Returns the current String with all characters transformed to upper case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'HelloWorld'.toUpper()</td>
- <td>'HELLOWORLD'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.toUpperFirst() : String</h3>
- <p>Returns the current String with the first characters transformed to upper case.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'helloworld'.toUpperFirst()</td>
- <td>'Helloworld'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.tokenize(String) : Sequence{String}</h3>
- <p>Splits the current String by using the given "delimiter" into a collection of String</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'a, b, c, d'.tokenize(', ')</td>
- <td>['a', 'b', 'c', 'd']</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.tokenize() : Sequence{String}</h3>
- <p>Splits the current String by whitespace delimiter into a collection of String</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>'a, b, c, d'.tokenize()</td>
- <td>['a,', 'b,', 'c,', 'd']</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
-
- <h3>String.trim() : String</h3>
- <p>Trims the given String.</p>
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>Expression</th>
- <th>Result</th>
- </tr>
- </thead>
- <colgroup>
- <col width="60%" />
- <col width="40%" />
- </colgroup>
- <tbody>
- <tr>
- <td>' Hello World '.trim()</td>
- <td>'Hello World'</td>
- </tr>
- </tbody>
- </table>
- <p></p>
- <hr />
- </section>
-
- <h3 id="SyntaxReference">Syntax Reference</h3>
- <h4 id="References">References</h4>
- <table>
- <tr>
- <td style="text-align: left;"><em>variable_name</em></td>
- <td>a reference to a variable</td>
- <td>myVariable</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>feature_name</em></td>
- <td>implicit collect</td>
- <td>eClass.name</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>.</strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
- <td>implicit collect</td>
- <td>myVariable.toString()</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>-></strong> <em>service_name</em> <strong>(</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em> ) * ) ? <strong>)</strong></td>
- <td>call on the collection itself if the expression is not a collection it will be wrapped into an ordered set</td>
- <td>mySequence->sep(‹,›)</td>
- </tr>
- </table>
- <h4 id="Operators">Operators</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>not</strong> <em>expression</em></td>
- <td>call the not service</td>
- <td>not eClass.interface</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>-</strong> <em>expression</em></td>
- <td>call the unaryMin service</td>
- <td>-3</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>+</strong> <em>expression</em></td>
- <td>call the add service</td>
- <td>2 + 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>-</strong> <em>expression</em></td>
- <td>call the sub service</td>
- <td>2 – 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>*</strong> <em>expression</em></td>
- <td>call the mult service</td>
- <td>2 * 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>/</strong> <em>expression</em></td>
- <td>call the divOp service</td>
- <td>2 / 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong><=</strong> <em>expression</em></td>
- <td>call the lessThanEqual service</td>
- <td>2 <= 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>>=</strong> <em>expression</em></td>
- <td>call the greaterThanEqual service</td>
- <td>2 >= 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong><</strong> <em>expression</em></td>
- <td>call the lessThan service</td>
- <td>1 < 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>></strong> <em>expression</em></td>
- <td>call the greaterThan service</td>
- <td>2 > 1</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong><></strong> <em>expression</em></td>
- <td>call the differs service</td>
- <td>1 <> 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>!=</strong> <em>expression</em></td>
- <td>call the differs service</td>
- <td>1 != 2</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>=</strong> <em>expression</em></td>
- <td>call the equals service</td>
- <td>1 = 1</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>and</strong> <em>expression</em></td>
- <td>call the and service</td>
- <td>eClass.interface and eClass.abstact</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>or</strong> <em>expression</em></td>
- <td>call the or service</td>
- <td>eClass.interface or eClass.abstact</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>xor</strong> <em>expression</em></td>
- <td>call the xor service</td>
- <td>eClass.interface xor eClass.abstact</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>expression</em> <strong>implies</strong> <em>expression</em></td>
- <td>call implies service</td>
- <td>eClass.interface implies eClass.abstact</td>
- </tr>
- </table>
- <h4 id="Structures">Structures</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>(</strong> <em>expression</em> <strong>)</strong></td>
- <td>parenthesis are used to change priority during evaluation</td>
- <td>(2 + 2 ) * 3</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>if</strong> <em>expression</em> <strong>then</strong> <em>expression</em> <strong>else</strong> <em>expression</em> <strong>endif</strong></td>
- <td>conditional expression</td>
- <td>if eClass.abstract then ‹blue› else ‹red› endif</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>let</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)? ( <strong>,</strong> <em>new_variable_name</em> ( <strong>:</strong> <em>type_literal</em>)?)* <strong>in</strong> <em>expression</em></td>
- <td>let allows to define variables in order to factorise expression</td>
- <td>let container = self.eContainer() in container.eAllContents()</td>
- </tr>
- </table>
- <h4 id="Literals">Literals</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>'</strong> <em>escaped_string</em> <strong>'</strong></td>
- <td>you can use java style escape sequence <strong>\u0000</strong> <strong>\x00</strong> <strong>\\</strong> <strong>\'</strong> <strong>\b</strong> <strong>\t</strong> <strong>\n</strong> ...
- </td>
- <td>'TODO list:\n\t- walk the dog\n\t- make diner'</td>
- </tr>
- <tr>
- <td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+
- </td>
- <td>an integer</td>
- <td>100</td>
- </tr>
- <tr>
- <td style="text-align: left;">[ <strong>0</strong> - <strong>9</strong>]+ <strong>.</strong> [ <strong>0</strong> - <strong>9</strong>]+
- </td>
- <td>a real</td>
- <td>3.14</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>true</strong></td>
- <td>the boolean value true</td>
- <td>true</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>false</strong></td>
- <td>the boolean value false</td>
- <td>false</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>null</strong></td>
- <td>the null value</td>
- <td>null</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Sequence{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
- <td>a sequence defined in extension</td>
- <td>Sequence{1, 2, 3, 3}</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>OrderedSet{</strong> ( <em>expression</em> ( <strong>,</strong> <em>expression</em>) * ) ? <strong>}</strong></td>
- <td>an ordered set defined in extension</td>
- <td>OrderedSet{1, 2, 3}</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eenum_name</em> <strong>::</strong> <em>eenum_literal_name</em></td>
- <td>an EEnumLiteral</td>
- <td>art::Color::blue</td>
- </tr>
- </table>
- <h4 id="Typeliterals">Type literals</h4>
- <table>
- <tr>
- <td style="text-align: left;"><strong>String</strong></td>
- <td>the string type</td>
- <td>String</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Integer</strong></td>
- <td>the integer type</td>
- <td>Integer</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Real</strong></td>
- <td>the real type</td>
- <td>Real</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Boolean</strong></td>
- <td>the string type</td>
- <td>Boolean</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>Sequence(</strong> <em>type_litral</em> <strong>)</strong></td>
- <td>a sequence type</td>
- <td>Sequence(String)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>OrderedSet(</strong> <em>type_litral</em> <strong>)</strong></td>
- <td>an ordered set type</td>
- <td>OrderedSet(String)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em></td>
- <td>an eclassifier type</td>
- <td>ecore::EPackage</td>
- </tr>
- <tr>
- <td style="text-align: left;"><strong>{</strong> <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em> (*</td>
- <td>* <em>epackage_name</em> <strong>::</strong> <em>eclassifier_name</em>) * <strong>}</strong>
- </td>
- <td>a set of eclassifiers</td>
- <td>{ecore::EPackage | ecore::EClass}</td>
- </tr>
- </table>
- <h2 id="MigratingfromMTLqueries">Migrating from MTL queries</h2>
- <p>As languages, AQL and MTL are very close yet there are some notable differences:</p>
- <h3 id="Implicitvariablereferences">Implicit variable references</h3>
- <p>
- There is no implicit variable reference. With this change, you can easily find out if you are using a feature of an object or a string representation of said object. As a result, instead of using
- <code>something</code>
- , you must use
- <code>self.something</code>
- if you want to access the feature named «something» of the current object or «something» if you want to retrieve the object named something.
- </p>
- <p>
- In a lambda expression, you must now define the name of the variable used for the iteration in order to easily identify which variable is used by an expression. In Acceleo MTL, you can write
- <code>Sequence{self}->collect(eAllContents(uml::Property))</code>
- and Acceleo will use the implicit iterator as a source of the operation eAllContents.
- </p>
- <p>
- The problem comes when using a lambda like
- <code>Sequence{self}->collect(something)</code>
- , we can’t know if «something» is a feature of «self» or if it is another variable.
- </p>
- <p>
- Using AQL, you will now have to write either
- <code>collect(m | m.eAllContents(uml::Property))</code>
- or
- <code>collect(m: uml::Model | eAllContents(uml::Property))</code>
- .
- </p>
- <h3 id="Collectandflatten">Collect and flatten</h3>
- <p>When a call or a feature acces is done on a collection the result is flattened for the first level. For instance a service returning a collection called on a collection will return a collection of elements and not a collection of collection of elements.</p>
- <h3 id="TypeliteralschildrenEPackages">Type literals & children EPackages</h3>
- <p>
- Type literals can’t be in the form someEPackage::someSubEPackage::SomeEClass but instead someSubEPackage::SomeEClass should be directly used. Note that the <b>name of the EPackage is mandatory</b>. Type literals are handled just like any other type.
- </p>
- <p>
- Calls like
- <code>self.eAllContents(self.eClass())</code>
- are possible and will return all the children of type compatible with “self”.
- </p>
- <p>
- Furthermore if you need a type literal as a parameter in your own service, you just have to have a first parameter with the type :
- <code>Set<EClass></code>
- . Yes, that’s an important point, any type in AQL is possibly a union of several existing types, hence the collection here. As such the syntax for creating Sets or collections can be used as a substitute for type literals.
- </p>
- <h3 id="EnumerationliteralschildrenEPackages">Enumeration literals & children EPackages</h3>
- <p>Enumeration literal should be prefixed with the name of the containing EPacakge for instance «myPackage::myEnum::value».</p>
- <h3 id="Collections">Collections</h3>
- <p>You can only have Sequences or OrderedSets as collections and as such the order of their elements is always deterministic. In Acceleo MTL, you had access to Sets, which are now OrderedSets and Bags, which are now Sequences. Those four kinds of collections were motivated by the fact that
- Sequence and OrderedSet were ordered contrary to Sets and Bags. On another side, OrderedSets and Sets did not accept any duplicate contrary to Bags and Sequences.</p>
- <p>By careful reviewing the use of those collections in various Acceleo generators and Sirius Designers we have quickly found out that the lack of determinism in the order of the collections Sets and Bags was a major issue for our users. As a result, only two collections remain, the Sequence
- which can contain any kind of element and the OrderedSet which has a similar behavior except that it does not accept duplicates.</p>
- <p>
- Previously in Acceleo MTL, you could transform a literal into a collection by using the operator
- <code>-></code>
- on the literal directly. In Acceleo MTL, the collection created was a Bag which is not available anymore. It is recommended to use the extension notation like
- <code>Sequence{self}</code>
- or
- <code>OrderedSet{self}</code>
- . By default in AQL the created collection is an OrderedSet.
- </p>
- <h3 id="Renamedoperations">Renamed operations</h3>
- <p>Some operations have been renamed. As such «addAll» and «removeAll» have been renamed «add» and «sub» because those two names are used by AQL in order to provide access to the operator «+» and «-». As a result we can now write in
- AQL «firstSequence + secondSequence» or «firstSet - secondSet».</p>
- <h3 id="Typing">Typing</h3>
- <p>
- AQL is way smarter than MTL regarding to the types of your expressions. As a result, you can combine expressions using multiple types quite easily. For example, this is a valid AQL expression
- <code>self.eContents(uml::Class).add(self.eContents(ecore::EClass)).name</code>
- . In Acceleo MTL, we could not use this behavior because Acceleo MTL had to fall back to the concept EObject which does not have a feature «name» while AQL knows that the collection contains objects that are either «uml::Class» or «ecore::EClass» and both of those
- types have a feature named «name».
- </p>
- <h3 id="nullhandling">null handling</h3>
- <p>
- AQL handles null (OclVoid) differently from ocl, a null value will not cause a failure but will be silently handled. <br />For example,
- <code>null.oclIsKindOf(ecore::EClass)</code>
- would have returned true for MTL/OCL, forcing users to use
- <code>not self.oclIsUndefined() and self.oclIsKindOf(ecore::EClass)</code>
- instead. This is no longer true in AQL, where «null» doesn’t conform to any type, so
- <code>null.oclIsKindOf(ecore::EClass)</code>
- will return false. Note that it’s still possible to «cast» null in any given classifier.
- <code>null.oclAsType(ecore::EClass)</code>
- will not fail at runtime.
- </p>
- <p>
- Furthermore <strong>oclIsUndefined() does not exist in AQL</strong> and should be replaced by a
- <code>... <> null</code>
- expression.
- </p>
- <h2 id="MigratingfromAcceleo2queries">Migrating from Acceleo2 queries</h2>
- <h3 id="EClassifierreferences">EClassifier references</h3>
- <p>
- All operations referencing a type are now using a type literal with the name of the EPackage and the name of the type instead of a string with the name of the type. As a result,
- <code>eObject.eAllContents('EClass')</code>
- would be translated using
- <code>eObject.eAllContents('ecore::EClass')</code>
- . This allows AQL to now in which EPackage to look for the type and as such, it improves the quality of the validation.
- </p>
- <h3 id="Typesandcast">Types and cast</h3>
- <p>In order to test the type of an EObject, a common pattern in Acceleo 2 was to treat the EObject as a collection and filter said collection on the type desired to see if the size of the collection changed. In AQL, you have access to the operations oclIsTypeOf and oclIsKindOf. You can thus
- test the type of an EObject with the expression «eObject.oclIsKindOf(ecore::EStructuralFeature)» or «eObject.oclIsTypeOf(ecore::EAttribute)». You can use the operation oclIsKindOf to test if an object has the type of the given parameter or one of its subtype. On the other
- hand, you can use the operation oclIsTypeOf to test if an object has exactly the type of the given parameter.</p>
- <p>Casting in AQL is useless, since AQL is very understandable when it comes to types, it will always tries its best to evaluate your expression.</p>
- <p>
- Since AQL is very close to Acceleo MTL, you can find some additional documentation using the Acceleo equivalence documentation in the <a href="http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.acceleo.doc%2Fpages%2Freference%2Fmigration.html&cp=5_3_4">Acceleo documentation</a>.
- </p>
- <h3 id="eContainerTypeName">eContainer(«TypeName»)</h3>
- <p>
- In Acceleo2
- <code>self.eContainer("TypeName")</code>
- actually had the behavior of returning self if it was matching the TypeName. As such, when migrating from an eContainer(..) call you should either make sure that this behavior is not needed or use the <br />compatibility method provided by AQL :
- <code>self.eContainerOrSelf(some::Type)</code>
- </p>
- <h2 id="UsingAQLprogrammatically">Using AQL programmatically</h2>
- <p>This section provide information and code snippet. It will help you to integrate AQL in your own tool.</p>
- <p>Simple overview of AQL:</p>
- <p>
- <img border="0" src="../assets/pics/AQL_overview.png" />
- </p>
- <h3 id="Typevalidation">Type validation</h3>
- <p>For each node of the AST we create a set of possible types as follow:</p>
- <ul>
- <li>for a VarRef we ask the environment for its possible types</li>
- <li>for a FeatureAccess we look up the type of the feature in the registered metamodels</li>
- <li>for a Call we look up the service in the service registry according to the possible types of its parameters (receiver is the first parameter). At this point there is a conversion from EMF to Java. The return type of the service is given by the IService.getType() method. At this point
- there is a conversion form Java to EMF, one Java type can correspond to more than one EMF EClassifier. If no service can be found we try to find a corresponding EOperation if the receiver is an EObject.</li>
- </ul>
- <p>A special type NothingType is used to mark a problem on a given node of the AST. Those NothingTypes are then used to create validation messages. If an AST node has only NothingTypes validation messages will be set as errors for this node, otherwise they are set as warnings.</p>
- <h3 id="Completion">Completion</h3>
- <p>
- The completion rely on the AST production and the type validation. <br />The identifier fragments preceding (prefix) and following (remaining) the cursor position are removed from the expression to parse. The prefix and remaining are used later to filter the proposals. Many filters can be
- implemented: filter only on prefix, filter on prefix and remaining, same strategies with support for camel case, ...
- </p>
- <p>Completion on the AST:</p>
- <ul>
- <li>if there is no error node in the AST the completion provide any symbols that can follow an expression («+», «-», ...).</li>
- <li>if there is an ErrorExpression node in the AST the completion provides anything that can prefix an expression («not», «-», variable name, type name, ...).</li>
- <li>if there is an ErrorFeatureAccesOrCall node in the AST the completion provides feature and service names corresponding to the receiver possible types. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid feature or service name for
- the receiver possible types.</li>
- <li>if there is an ErrorCollectionCall node in the AST the completion provides collection service names. It is also possible to add symbols that follow an expression if the prefix and remaining are already a valid service name.</li>
- <li>if there is an ErrorTypeLiteral node in the AST the completion provides EClassifier, EEnumLiteral names according to the state of the type description.</li>
- </ul>
- <h3 id="Creatingandsettingtheenvironment">Creating and setting the environment</h3>
- <p>To get a fresh environment you can use one of the following snippet:</p>
- <pre>
- <code>IQueryEnvironment queryEnvironment = Query.newEnvironmentWithDefaultServices(null);
-</code>
- </pre>
- <p>To get an environment with predefined services.</p>
- <p>or</p>
- <pre>
- <code>IQueryEnvironment queryEnvironment = Query.newEnvironment(null);
-</code>
- </pre>
- <p>To get an environment with no predefined services. It can be useful to create your own language primitives.</p>
- <p>Note that you can also provide a CrossReferenceProvider to define the scope of cross references in your environment. See CrossReferencerToAQL for more details.</p>
- <p>You can register new services Class as follow:</p>
- <pre>
- <code>ServiceRegistrationResult registrationResult = queryEnvironment.registerServicePackage(MyServices.class);
-</code>
- </pre>
- <p>The registration result contains information about services overrides.</p>
- <p>You can also register your EPackages. Only registered EPackages are used to validate and evaluate AQL expression.</p>
- <pre>
- <code>queryEnvironment.registerEPackage(MyEPackage.eINSTANCE);
-</code>
- </pre>
- <p>In some cases you might also want to create custom mappings between an EClass and its Class. A basic case is the use of EMap:</p>
- <pre>
- <code>queryEnvironment.registerCustomClassMapping(EcorePackage.eINSTANCE.getEStringToStringMapEntry(), EStringToStringMapEntryImpl.class);
-</code>
- </pre>
- <p>By default the EClass is mapped to Map.Entry which is not an EObject. This prevents using services on EObject.</p>
- <h3 id="BuildinganAQLexpression">Building an AQL expression</h3>
- <p>The first step is building your expression from a String to an AST:</p>
- <pre>
- <code>QueryBuilderEngine builder = new QueryBuilderEngine(queryEnvironment);
-AstResult astResult = builder.build("self.name");
-</code>
- </pre>
- <h3 id="EvaluatinganAQLexpression">Evaluating an AQL expression</h3>
- <p>To evaluate an AQL expression you can use the QueryEvaluationEngine</p>
- <pre>
- <code>QueryEvaluationEngine engine = new QueryEvaluationEngine(queryEnvironment);
-Map<String, Object> variables = Maps.newHashMap();
-variables.put("self", EcorePackage.eINSTANCE);
-EvaluationResult evaluationResult = engine.eval(astResult, variables);
-</code>
- </pre>
- <p>Here we only use one variable for demonstration purpose.</p>
- <h3 id="ValidatinganAQLexpressionoptional">Validating an AQL expression (optional)</h3>
- <p>This step is optional for evaluation. You can evaluate an AQL expression without validating it in the first place.</p>
- <pre>
- <code>Map<String, Set<IType>> variableTypes = new LinkedHashMap<String, Set<IType>>();
-Set<IType> selfTypes = new LinkedHashSet<IType>();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-AstValidator validator = new AstValidator(queryEnvironment, variableTypes);
-IValidationResult validationResult = validator.validate(astResult);
-</code>
- </pre>
- <h3 id="CompletinganAQLexpression">Completing an AQL expression</h3>
- <p>To do this use the QueryCompletionEngine, it will build the query and validate it for you. It will also compute needed prefix and suffix if any:</p>
- <pre>
- <code>Map<String, Set<IType>> variableTypes = new LinkedHashMap<String, Set<IType>>();
-Set<IType> selfTypes = new LinkedHashSet<IType>();
-selfTypes.add(new EClassifierType(queryEnvironment, EcorePackage.eINSTANCE.getEPackage()));
-variableTypes.put("self", selfTypes);
-QueryCompletionEngine engine = new QueryCompletionEngine(queryEnvironment);
-ICompletionResult completionResult = engine.getCompletion("self.", 5, variableTypes);
-List<ICompletionProposal> proposals = completionResult.getProposals(new BasicFilter(completionResult));
-</code>
- </pre>
- <p>Here 5 is the offset where the completion should be computed in the given expression.</p>
-
- </div>
-</body>
-
-</html>
diff --git a/download.html b/download.html
new file mode 100644
index 0000000..e6c7a7b
--- /dev/null
+++ b/download.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <title>Acceleo | Download</title>
+
+ <meta name="description" content="">
+ <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+ <link rel="canonical" href="/acceleo/acceleo/download.html">
+
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <!-- Old version of font awesome for some icons -->
+ <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
+ <!-- Bootstrap JS -->
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+
+ <script type="text/javascript">
+ jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+ </script>
+ <!-- Triggers tooltips -->
+ <script type="text/javascript">
+ jQuery(document).ready(function() {
+ jQuery('.hasTooltip').tooltip();
+ });
+ </script>
+</head>
+
+ <body>
+
+ <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+ <div class="container">
+ <a class="navbar-brand" href="/acceleo">
+ <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+ </a>
+
+ <!-- /logo -->
+ <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+ aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+ <i class="fa fa-bars"></i>
+ </button>
+ <nav class="collapse navbar-collapse" id="navbarResponsive">
+ <div class="main-menu ml-auto">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="/acceleo/overview.html">Overview</a>
+ </li>
+ <li>
+ <a href="/acceleo/features.html">Features</a>
+ </li>
+ <li>
+ <a href="/acceleo/resources.html">Resources</a>
+ </li>
+ <li>
+ <a href="/acceleo/support.html">Support</a>
+ </li>
+ <li id="dwnld">
+ <a href="/acceleo/download.html">Download</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+</header>
+
+
+ <section>
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Marketplace</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12">
+ <p>You can install Acceleo from the <a href="https://marketplace.eclipse.org/content/acceleo" target="_blank">Eclipse marketplace</a>.</p>
+ <p>Don’t know how to install a module from the marketplace? Have a look to the <a href="http://marketplace.eclipse.org/marketplace-client-intro">marketplace client introduction</a>.</p>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section class="bg_lightest_grey">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Releases</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <h3> Releases</h3>
+ <ul>
+ <li>3.7 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7">http://download.eclipse.org/acceleo/updates/releases/3.7</a></li>
+ <li>3.6 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.6">http://download.eclipse.org/acceleo/updates/releases/3.6</a></li>
+ <li>3.5 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.5">http://download.eclipse.org/acceleo/updates/releases/3.5</a></li>
+ <li>3.4 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.4">http://download.eclipse.org/acceleo/updates/releases/3.4</a></li>
+ <li>3.3 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.3">http://download.eclipse.org/acceleo/updates/releases/3.3</a></li>
+ <li>3.2 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.2">http://download.eclipse.org/acceleo/updates/releases/3.2</a></li>
+ <li>3.1 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.1">http://download.eclipse.org/acceleo/updates/releases/3.1</a></li>
+ <li>3.0 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.0">http://download.eclipse.org/acceleo/updates/releases/3.0</a></li>
+ </ul>
+
+ <h3>Update sites</h3>
+ <ul>
+ <li>3.7.7 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201812041426">http://download.eclipse.org/acceleo/updates/releases/3.7/R201812041426</a></li>
+ <li>3.7.6 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201810050612">http://download.eclipse.org/acceleo/updates/releases/3.7/R201810050612</a></li>
+ <li>3.7.5 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201809121017">http://download.eclipse.org/acceleo/updates/releases/3.7/R201809121017</a></li>
+ <li>3.7.4 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201807201001">http://download.eclipse.org/acceleo/updates/releases/3.7/R201807201001</a></li>
+ <li>3.7.3 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201802240723">http://download.eclipse.org/acceleo/updates/releases/3.7/R201802240723</a></li>
+ <li>3.7.2 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201708211328">http://download.eclipse.org/acceleo/updates/releases/3.7/R201708211328</a></li>
+ <li>3.7.1 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201705121344">http://download.eclipse.org/acceleo/updates/releases/3.7/R201705121344</a></li>
+ <li>3.7.0 - <a target="_blank" href="http://download.eclipse.org/acceleo/updates/releases/3.7/R201610150614">http://download.eclipse.org/acceleo/updates/releases/3.7/R201610150614</a></li>
+ </ul>
+ </div>
+</section>
+
+<footer>
+ <div class="container">
+ <div class="row">
+
+<div class="col-md-3">
+ <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+ <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+ <h6>Eclipse Foundation</h6>
+ <ul>
+ <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+ <li><a href="http://eclipse.org/">Eclipse</a></li>
+ <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+ <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+ <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+ <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+ </ul>
+</div>
+
+
+<div class="col-md-3">
+ <h6>Project Links</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+ <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+ <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+ <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+ </ul>
+</div>
+ </div>
+ </div>
+</footer>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+ jQuery(document).ready(function(){
+ "use strict";
+ new WOW().init();
+ });
+</script>
+
+ </body>
+</html>
diff --git a/downloads/_styles.css b/downloads/_styles.css
deleted file mode 100644
index 4bfea5b..0000000
--- a/downloads/_styles.css
+++ /dev/null
@@ -1,69 +0,0 @@
-#midcolumn {
- padding-top: 10px;
-}
-
-#midcolumn li .repo-item {
- margin-bottom: 0px;
- padding-bottom: 0px;
-}
-
-.repo-item {
- margin-top: 2px;
- margin-bottom: 2px;
-}
-
-.repo-label1 {
- color: #000000;
- font-size: 18pt;
-}
-
-.repo1 {
- padding: 5px 5px 5px 0;
- border-bottom: 3px solid #D4D4DD;
-}
-
-.repo-label2 {
- color: #000000;
- font-size: 14pt;
-}
-
-.repo2 {
- padding: 5px 5px 5px 0;
-}
-
-.drop-label {
- color: #000000;
- font-size: 12pt;
- font-weight: bold;
- margin-bottom: 0;
- margin-top: 0;
- padding-bottom: 0;
- padding-top: 0;
-}
-
-.drop {
- margin-top: 0;
- margin-bottom: 0;
- padding: 5px 5px 0px 0;
-}
-
-.drop-info {
- padding-top: 3px;
-}
-
-.drop-separator {
- border: none;
- border-bottom: 2px solid #D4D4DD;
-}
-
-.file-size {
- text-align: right;
-}
-
-.level1 {
- padding-right: 49px;
-}
-
-.level2 {
- padding-right: 26px;
-}
diff --git a/downloads/background.jpg b/downloads/background.jpg
deleted file mode 100644
index 63b26e5..0000000
--- a/downloads/background.jpg
+++ /dev/null
Binary files differ
diff --git a/downloads/index.php b/downloads/index.php
deleted file mode 100644
index 93dee66..0000000
--- a/downloads/index.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
- $App = new App();
- $Nav = new Nav();
- $Menu = new Menu();
-
- include($App->getProjectCommon());
-
- require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/buildServer-common.php");
- require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/downloads-scripts.php");
- require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/scripts.php");
- require_once("./custom-scripts.php");
-
- $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/modeling/includes/common.css"/>' . "\n\t");
- $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/modeling/includes/downloads.css"/>' . "\n\t");
- $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="styles.css"/>' . "\n\t");
- $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="_styles.css"/>' . "\n\t");
- $App->AddExtraHtmlHeader('<script src="/modeling/includes/downloads.js" type="text/javascript"></script>' . "\n\t");
-
- #### Project dependant variables ####
- $projectTitle = "Acceleo";
- $pageTitle = "Download";
- // Path to the downloads area under http://downloads.eclipse.org (will be used by custom-scripts and various "eclipse" scripts)
- $PR = "acceleo";
- // absolute path to the site's home page (will be used by custom-scripts for images... should probably use css instead)
- $websiteRoot = "/acceleo";
-
- # version => array of qualifiers
- # ex : "3.3.0" => array("R201205291042")
- $hiddenBuilds = array(
- );
- #### End variables ####
-
- $PWD = getPWD("downloads/drops");
- $branches = loadDirSimple($PWD, ".*", "d");
- rsort($branches);
-
- $buildtypes = array(
- "R" => "Release",
- "S" => "Stable",
- "I" => "Integration",
- "M" => "Maintenance",
- "N" => "Nightly"
- );
- $buildTypes = getBuildTypes($branches, $buildtypes);
-
- // Retrieve the list of builds from the disk (folder list only)
- $builds = getBuildsFrom($branches, $PWD);
-
- $builds = reorderAndSplitBuilds($builds, $buildTypes, $hiddenBuilds);
- $releases = $builds[1];
- $builds = $builds[0];
-
- $html = "<div id=\"midcolumn\">\n";
- $html .= "<ul>\n";
- $html .= generateHTMLReleaseList($releases, $projectTitle, $PR, $PWD, $websiteRoot);
- $html .= generateHTMLBuildList($builds, $projectTitle, $PR, $PWD, $websiteRoot);
- $html .= "</ul>\n";
- $html .= "</div>\n\n";
-
- # Generate the web page
- $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/downloads/styles.css b/downloads/styles.css
deleted file mode 100644
index 0763ff7..0000000
--- a/downloads/styles.css
+++ /dev/null
@@ -1,102 +0,0 @@
-#leftcol {
- margin-top: -20px;
-}
-
-#midcolumn {
- width: 780px;
- padding-top: 0px;
- padding-right: 100px;
- padding-left: 100px;
- padding-bottom: 10px;
-}
-
-.sideitem {
- background: url(/eclipse.org-common/themes/Nova/images/thinModalBg.png)
- repeat-x scroll 0 0;
-}
-
-.sideitem h6 {
- color: #575757;
- font-size: 20px;
- padding-top: -6px;
-}
-
-.areaIcon {
- margin-left: 50px;
-}
-
-#leftnav li.separator {
- margin-top: 20px;
-}
-
-#leftnav li.separatorNolink {
- margin-top: 20px;
- margin-left: 0;
- padding-top: 5px;
- padding-right: 0;
- list-style-image: none;
- border-top: 1px dotted #d4d4dd;
- font-size: 12px;
- font-weight: bold;
- color: #575757;
-}
-
-#leftnav li.selected {
- list-style-image:
- url(/eclipse.org-common/themes/Nova/images/leftNavSelected.png);
-}
-
-#infoDiv {
- margin-top: 80px;
- margin-left: 45px;
- width: 300px;
- text-align: left;
- font-size: 14px;
- float: left;
-}
-
-.linkBlock {
- margin-top: 20px;
- margin-bottom: 20px;
- margin-left: 20px;
- float: left;
- width: 460px;
-}
-
-.link img {
- position: relative;
- top: -20px;
- float: left;
- padding: 5px;
-}
-
-.link {
- clear: both;
- padding: 20px;
-}
-
-.link p.heading {
- font-size: 16px;
-}
-
-.link p.subText {
- font-size: 12px;
-}
-
-li p.heading {
- font-size: 120%;
- margin-bottom: 5px;
- margin-top: 5px;
- text-align: left;
-}
-
-li p.subText {
- margin-top: 0px;
- font-size: 80%;
- text-align: left;
- font-weight: normal;
-}
-
-.relatedLinks li {
- list-style-image: none !important;
-}
\ No newline at end of file
diff --git a/features.html b/features.html
new file mode 100644
index 0000000..d8f2410
--- /dev/null
+++ b/features.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <title>Acceleo | Features</title>
+
+ <meta name="description" content="">
+ <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+ <link rel="canonical" href="/acceleo/acceleo/features.html">
+
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <!-- Old version of font awesome for some icons -->
+ <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
+ <!-- Bootstrap JS -->
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+
+ <script type="text/javascript">
+ jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+ </script>
+ <!-- Triggers tooltips -->
+ <script type="text/javascript">
+ jQuery(document).ready(function() {
+ jQuery('.hasTooltip').tooltip();
+ });
+ </script>
+</head>
+
+ <body>
+
+ <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+ <div class="container">
+ <a class="navbar-brand" href="/acceleo">
+ <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+ </a>
+
+ <!-- /logo -->
+ <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+ aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+ <i class="fa fa-bars"></i>
+ </button>
+ <nav class="collapse navbar-collapse" id="navbarResponsive">
+ <div class="main-menu ml-auto">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="/acceleo/overview.html">Overview</a>
+ </li>
+ <li>
+ <a href="/acceleo/features.html">Features</a>
+ </li>
+ <li>
+ <a href="/acceleo/resources.html">Resources</a>
+ </li>
+ <li>
+ <a href="/acceleo/support.html">Support</a>
+ </li>
+ <li id="dwnld">
+ <a href="/acceleo/download.html">Download</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+</header>
+
+
+ <section id="" class="text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">The Acceleo Language</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <p>Templates (Pre-conditions, Post-treatments, Variables, User-code) | Modules | Queries</p>
+
+ <p><a class="btn btn-default wow fadeInUp" data-wow-delay=".6s" href="https://www.google.com/url?q=https://wiki.eclipse.org/Acceleo/User_Guide%23The_Acceleo_language&sa=D&ust=1534837733046000&usg=AFQjCNGp1VVo5q8VMWAbN4Nerp2f9lWQcg" target="_blank">Learn more</a></p>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section class="bg_lightest_grey text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">The Acceleo Tooling</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <p>Syntax highlighting | Smart completion | Navigation to definitions and references | Errors detection <br> Quick fixes | Warning and informations support | Dynamic outline | Quick outline | Code folding <br>
+ Code templates | Customizable code templates | Documentation hover | Visible whitespace characters <br> Search of occurrences | Refactoring | Eclipse perspective | Profiler | Debugger
+
+ <p><a class="btn btn-default wow fadeInUp" data-wow-delay=".6s" href="https://wiki.eclipse.org/Acceleo/User_Guide#The_Acceleo_Tooling" target="_blank">Learn more</a></p>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section class="text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">The Acceleo Runtime</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ Compiler |
+ Generation engine |
+ Standalone mode |
+ Integration (Ant, Maven or Java) |
+
+ <p><a class="btn btn-default wow fadeInUp" data-wow-delay=".6s" href="https://wiki.eclipse.org/Acceleo/User_Guide#Launching_an_Acceleo_generation" target="_blank">Learn more</a></p>
+ </div>
+ </div>
+ </div>
+</section>
+
+<footer>
+ <div class="container">
+ <div class="row">
+
+<div class="col-md-3">
+ <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+ <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+ <h6>Eclipse Foundation</h6>
+ <ul>
+ <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+ <li><a href="http://eclipse.org/">Eclipse</a></li>
+ <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+ <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+ <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+ <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+ </ul>
+</div>
+
+
+<div class="col-md-3">
+ <h6>Project Links</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+ <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+ <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+ <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+ </ul>
+</div>
+ </div>
+ </div>
+</footer>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+ jQuery(document).ready(function(){
+ "use strict";
+ new WOW().init();
+ });
+</script>
+
+ </body>
+</html>
diff --git a/images/16/go-down.png b/images/16/go-down.png
deleted file mode 100644
index 3dd7fcc..0000000
--- a/images/16/go-down.png
+++ /dev/null
Binary files differ
diff --git a/images/16/package-x-generic.png b/images/16/package-x-generic.png
deleted file mode 100644
index 9015426..0000000
--- a/images/16/package-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/images/22/package-x-generic.png b/images/22/package-x-generic.png
deleted file mode 100644
index dc76287..0000000
--- a/images/22/package-x-generic.png
+++ /dev/null
Binary files differ
diff --git a/images/Acceleo.png b/images/Acceleo.png
deleted file mode 100644
index c2165ac..0000000
--- a/images/Acceleo.png
+++ /dev/null
Binary files differ
diff --git a/images/Acceleo2.png b/images/Acceleo2.png
deleted file mode 100644
index fe208b1..0000000
--- a/images/Acceleo2.png
+++ /dev/null
Binary files differ
diff --git a/images/EclipseLiveIcon.png b/images/EclipseLiveIcon.png
deleted file mode 100644
index dbd7def..0000000
--- a/images/EclipseLiveIcon.png
+++ /dev/null
Binary files differ
diff --git a/images/Maintenance.png b/images/Maintenance.png
deleted file mode 100644
index 7f9b861..0000000
--- a/images/Maintenance.png
+++ /dev/null
Binary files differ
diff --git a/images/aql/AQL_overview.png b/images/aql/AQL_overview.png
deleted file mode 100644
index 8abd117..0000000
--- a/images/aql/AQL_overview.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundAcceleoEclipse.png b/images/backgroundAcceleoEclipse.png
deleted file mode 100644
index 2958088..0000000
--- a/images/backgroundAcceleoEclipse.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundAcceleoEclipse1.png b/images/backgroundAcceleoEclipse1.png
deleted file mode 100644
index 6d9f13f..0000000
--- a/images/backgroundAcceleoEclipse1.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundAcceleoEclipse2.png b/images/backgroundAcceleoEclipse2.png
deleted file mode 100644
index b464a19..0000000
--- a/images/backgroundAcceleoEclipse2.png
+++ /dev/null
Binary files differ
diff --git a/images/backgroundMainEmpty.png b/images/backgroundMainEmpty.png
deleted file mode 100644
index 9487b21..0000000
--- a/images/backgroundMainEmpty.png
+++ /dev/null
Binary files differ
diff --git a/images/banners/Layer 0.jpg b/images/banners/Layer 0.jpg
new file mode 100644
index 0000000..c0b8a91
--- /dev/null
+++ b/images/banners/Layer 0.jpg
Binary files differ
diff --git a/images/banners/banner_acceleo_overview.jpg b/images/banners/banner_acceleo_overview.jpg
new file mode 100644
index 0000000..001b90b
--- /dev/null
+++ b/images/banners/banner_acceleo_overview.jpg
Binary files differ
diff --git a/images/banners/banner_acceleo_overview.webp b/images/banners/banner_acceleo_overview.webp
new file mode 100644
index 0000000..b96af0c
--- /dev/null
+++ b/images/banners/banner_acceleo_overview.webp
Binary files differ
diff --git a/images/buttonDocumentation_empty.png b/images/buttonDocumentation_empty.png
deleted file mode 100644
index 8e3877e..0000000
--- a/images/buttonDocumentation_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/buttonDownload_empty.png b/images/buttonDownload_empty.png
deleted file mode 100644
index 693a98c..0000000
--- a/images/buttonDownload_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/buttonInvolved_empty.png b/images/buttonInvolved_empty.png
deleted file mode 100644
index 8bbc845..0000000
--- a/images/buttonInvolved_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/buttonSupport_empty.png b/images/buttonSupport_empty.png
deleted file mode 100644
index b22fc84..0000000
--- a/images/buttonSupport_empty.png
+++ /dev/null
Binary files differ
diff --git a/images/click.png b/images/click.png
deleted file mode 100644
index 4ffbc43..0000000
--- a/images/click.png
+++ /dev/null
Binary files differ
diff --git a/images/discovery.png b/images/discovery.png
deleted file mode 100644
index e36e90b..0000000
--- a/images/discovery.png
+++ /dev/null
Binary files differ
diff --git a/images/downloadButton.png b/images/downloadButton.png
deleted file mode 100644
index 4cad191..0000000
--- a/images/downloadButton.png
+++ /dev/null
Binary files differ
diff --git a/images/downloadButtonUnderline.png b/images/downloadButtonUnderline.png
deleted file mode 100644
index ae92474..0000000
--- a/images/downloadButtonUnderline.png
+++ /dev/null
Binary files differ
diff --git a/images/git-branches.png b/images/git-branches.png
deleted file mode 100644
index 72c23a3..0000000
--- a/images/git-branches.png
+++ /dev/null
Binary files differ
diff --git a/images/git-import.png b/images/git-import.png
deleted file mode 100644
index 9c2e274..0000000
--- a/images/git-import.png
+++ /dev/null
Binary files differ
diff --git a/images/git-local.png b/images/git-local.png
deleted file mode 100644
index 5c9f153..0000000
--- a/images/git-local.png
+++ /dev/null
Binary files differ
diff --git a/images/git.png b/images/git.png
deleted file mode 100644
index f42ea99..0000000
--- a/images/git.png
+++ /dev/null
Binary files differ
diff --git a/images/icon.png b/images/icon.png
deleted file mode 100644
index 4c4b16e..0000000
--- a/images/icon.png
+++ /dev/null
Binary files differ
diff --git a/images/iconWebinar.gif b/images/iconWebinar.gif
deleted file mode 100644
index 5d9aa1c..0000000
--- a/images/iconWebinar.gif
+++ /dev/null
Binary files differ
diff --git a/images/icons/community.png b/images/icons/community.png
deleted file mode 100644
index 8a43990..0000000
--- a/images/icons/community.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/development.png b/images/icons/development.png
deleted file mode 100644
index 7b28ebb..0000000
--- a/images/icons/development.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/documentation.png b/images/icons/documentation.png
deleted file mode 100644
index ba8f6b4..0000000
--- a/images/icons/documentation.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/presentation.png b/images/icons/presentation.png
deleted file mode 100644
index c953737..0000000
--- a/images/icons/presentation.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/support.png b/images/icons/support.png
deleted file mode 100644
index 92eb0ef..0000000
--- a/images/icons/support.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/training.png b/images/icons/training.png
deleted file mode 100644
index 117ccc7..0000000
--- a/images/icons/training.png
+++ /dev/null
Binary files differ
diff --git a/images/icons/video.png b/images/icons/video.png
deleted file mode 100644
index a1900dc..0000000
--- a/images/icons/video.png
+++ /dev/null
Binary files differ
diff --git a/images/illustrations/acceleo_overview.png b/images/illustrations/acceleo_overview.png
new file mode 100755
index 0000000..18b7a19
--- /dev/null
+++ b/images/illustrations/acceleo_overview.png
Binary files differ
diff --git a/images/install_1.png b/images/install_1.png
deleted file mode 100644
index 238d9d1..0000000
--- a/images/install_1.png
+++ /dev/null
Binary files differ
diff --git a/images/install_2_releases.png b/images/install_2_releases.png
deleted file mode 100644
index d44b612..0000000
--- a/images/install_2_releases.png
+++ /dev/null
Binary files differ
diff --git a/images/install_3.png b/images/install_3.png
deleted file mode 100644
index 15d548e..0000000
--- a/images/install_3.png
+++ /dev/null
Binary files differ
diff --git a/images/link_obj.gif b/images/link_obj.gif
deleted file mode 100644
index 5fd9c94..0000000
--- a/images/link_obj.gif
+++ /dev/null
Binary files differ
diff --git a/images/logo/acceleo_icon_24.png b/images/logo/acceleo_icon_24.png
deleted file mode 100644
index dac63cb..0000000
--- a/images/logo/acceleo_icon_24.png
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo-acceleo-blanc.jpg b/images/logo/logo-acceleo-blanc.jpg
deleted file mode 100644
index bd39339..0000000
--- a/images/logo/logo-acceleo-blanc.jpg
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo_acceleo_transparent.png b/images/logo/logo_acceleo_transparent.png
deleted file mode 100644
index ac4a92f..0000000
--- a/images/logo/logo_acceleo_transparent.png
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo_acceleo_transparent_260.png b/images/logo/logo_acceleo_transparent_260.png
deleted file mode 100644
index 07b3e36..0000000
--- a/images/logo/logo_acceleo_transparent_260.png
+++ /dev/null
Binary files differ
diff --git a/images/logo/logo_obeo.png b/images/logo/logo_obeo.png
deleted file mode 100644
index 62d19eb..0000000
--- a/images/logo/logo_obeo.png
+++ /dev/null
Binary files differ
diff --git a/images/newAndNoteworthy.png b/images/newAndNoteworthy.png
deleted file mode 100644
index e53729e..0000000
--- a/images/newAndNoteworthy.png
+++ /dev/null
Binary files differ
diff --git a/images/nova_faux_override.jpg b/images/nova_faux_override.jpg
deleted file mode 100644
index 5c49e41..0000000
--- a/images/nova_faux_override.jpg
+++ /dev/null
Binary files differ
diff --git a/images/openDiscovery.png b/images/openDiscovery.png
deleted file mode 100644
index 2c8be67..0000000
--- a/images/openDiscovery.png
+++ /dev/null
Binary files differ
diff --git a/images/openInnovationAward.png b/images/openInnovationAward.png
deleted file mode 100644
index 1111103..0000000
--- a/images/openInnovationAward.png
+++ /dev/null
Binary files differ
diff --git a/images/rss2.gif b/images/rss2.gif
deleted file mode 100644
index 1b80108..0000000
--- a/images/rss2.gif
+++ /dev/null
Binary files differ
diff --git a/images/screenshots/downloads.png b/images/screenshots/downloads.png
new file mode 100644
index 0000000..08a441a
--- /dev/null
+++ b/images/screenshots/downloads.png
Binary files differ
diff --git a/images/screenshots/overview.png b/images/screenshots/overview.png
new file mode 100644
index 0000000..61da88b
--- /dev/null
+++ b/images/screenshots/overview.png
Binary files differ
diff --git a/images/screenshots/user_experience.png b/images/screenshots/user_experience.png
new file mode 100644
index 0000000..090c153
--- /dev/null
+++ b/images/screenshots/user_experience.png
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..a147c98
--- /dev/null
+++ b/index.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <title>Acceleo | Home</title>
+
+ <meta name="description" content="">
+ <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+ <link rel="canonical" href="/acceleo/acceleo/">
+
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <!-- Old version of font awesome for some icons -->
+ <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
+ <!-- Bootstrap JS -->
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+
+ <script type="text/javascript">
+ jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+ </script>
+ <!-- Triggers tooltips -->
+ <script type="text/javascript">
+ jQuery(document).ready(function() {
+ jQuery('.hasTooltip').tooltip();
+ });
+ </script>
+</head>
+
+ <body>
+
+ <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+ <div class="container">
+ <a class="navbar-brand" href="/acceleo">
+ <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+ </a>
+
+ <!-- /logo -->
+ <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+ aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+ <i class="fa fa-bars"></i>
+ </button>
+ <nav class="collapse navbar-collapse" id="navbarResponsive">
+ <div class="main-menu ml-auto">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="/acceleo/overview.html">Overview</a>
+ </li>
+ <li>
+ <a href="/acceleo/features.html">Features</a>
+ </li>
+ <li>
+ <a href="/acceleo/resources.html">Resources</a>
+ </li>
+ <li>
+ <a href="/acceleo/support.html">Support</a>
+ </li>
+ <li id="dwnld">
+ <a href="/acceleo/download.html">Download</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+</header>
+
+
+ <section id="intro" class="">
+ <div class="container">
+ <div class="row align-items-end">
+ <div class="col-md-5 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <h1>Generate anything from any EMF model</h1>
+ <p>Acceleo is the result of several man-years of R&D started in the French company Obeo. <br>Junction between the OMG MTL standard, its team's experience with industrial code generation and the latest research advances into the M2T field, it offers outstanding advantages : High ability to customize, Interoperability, Easy kick off, and much more!</p>
+ <p>
+ <a href="download.html" class="btn btn-default span-right wow fadeInUp animated" data-wow-delay=".6s" target="_self">
+ Download
+ </a>
+ <a href="overview.html" class="btn btn-primary wow fadeInUp animated" data-wow-delay=".6s" target="_self">
+ Overview
+ </a>
+ </p>
+</div>
+
+<div class="col-md-7 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <p>
+ <a href="#" class="wow fadeInUp animated" data-wow-delay=".6s" target="_self">
+ <img src="images/illustrations/acceleo_overview.png" alt="Some text">
+ </a>
+ </p>
+</div>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section id="" class="bg_lightest_grey text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Easily create custom code generators</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+
+ <div class="row">
+ <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-key fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Open Source</h4>
+ <p>Acceleo is an open template-based source code generation technology developed inside of the Eclipse Foundation. As such, you can use it freely, fork it and even contribute back.
+ </p>
+ <p><a href=""> <i class="" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+
+ <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-palette fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Versatile</h4>
+ <p>Code generators are often limited to a set of technologies. With its template based approach, Acceleo can generate code for any kind of languages. If you can write it, Acceleo can generate it.</p>
+ <p><a href=""> <i class="" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+
+ <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-lock-open fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Stand Alone</h4>
+ <p>Acceleo does not lock you inside of the Eclipse environment, as such you can build and run your generator easily out of Eclipse. Acceleo provides a brand new Maven integration.</p>
+ <p><a href=""> <i class="" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+ </div>
+
+
+ <div class="row">
+ <div class="col-md-6 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-plug fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Integrated in Eclipse</h4>
+ <p>Acceleo is deeply integrated in the Eclipse IDE with a full fledged editor with syntax highlighting, real time error detection, quick fixes, refactoring and much more. It also comes with dedicated views to help you navigate within your code generator and quickly access code generation design patterns.</p>
+ <p><a href=""> <i class="" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+
+
+ <div class="col-md-6 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-step-forward fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Incremental Generation</h4>
+ <p>Whether you are considering it or not, you will one day have to modify manually your generated code and you want to keep your modification even if you are regenerating your code. Acceleo lets you define protected areas in which you can safely modify the generated.</p>
+ <p><a href=""> <i class="" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+ </div>
+ </div>
+</section>
+
+<section id="" class="text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Need Support?</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+
+ <div class="row">
+ <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-file-alt fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Documentation</h4>
+ <p>Learn how to use Acceleo, thanks to online complete user guides and reference manuals</p>
+ <p><a href="resources">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+
+ <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-comment fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Forum</h4>
+ <p>Find relevant posts/answers. No solution yet to your concern? Come and ask your question </p>
+ <p><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+
+ <div class="col-md-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div>
+ <i class="fas fa-life-ring fa-3x pa2 txt_indigo" aria-hidden="true"></i>
+ </div>
+ <div>
+ <h4>Professional support</h4>
+ <p>Obeo, leader of Acceleo’s development, provides training, expertise, custom development and support plans</p>
+ <p><a href="https://www.obeo.fr/en/services">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i>
+ </a></p>
+ </div>
+</div>
+
+
+
+ </div>
+ </div>
+</section>
+
+<section id="" class="bg_lightest_grey text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Project Lead</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12 wow fadeInLeft animated" data-wow-duration="500ms" data-wow-delay="300ms">
+ <p><a href="http://www.obeo.fr" title="Logo Obeo"><img src="/acceleo/common_assets/images/logos/logo_obeo.png"></a></p>
+ </div>
+ </div>
+ </div>
+</div>
+</section>
+
+<footer>
+ <div class="container">
+ <div class="row">
+
+<div class="col-md-3">
+ <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+ <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+ <h6>Eclipse Foundation</h6>
+ <ul>
+ <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+ <li><a href="http://eclipse.org/">Eclipse</a></li>
+ <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+ <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+ <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+ <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+ </ul>
+</div>
+
+
+<div class="col-md-3">
+ <h6>Project Links</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+ <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+ <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+ <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+ </ul>
+</div>
+ </div>
+ </div>
+</footer>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+ jQuery(document).ready(function(){
+ "use strict";
+ new WOW().init();
+ });
+</script>
+
+ </body>
+</html>
diff --git a/index.php b/index.php
deleted file mode 100644
index a92f11f..0000000
--- a/index.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
- $App = new App();
- $Nav = new Nav();
- $Menu = new Menu();
-
- include($App->getProjectCommon());
-
- $pageKeywords = "acceleo, dsl, modeling, domain specific language, textual, generator, code generator, emf, mofm2t, dsl, metamodel, free, open source, uml";
- $pageAuthor = "Obeo";
- $pageTitle = "Acceleo";
-
- $html = file_get_contents('_index.html');
-
- # Generate the web page
- $App->AddExtraHtmlHeader('<link href="https://plus.google.com/114651471803085159652/" rel="publisher" />' . "\n\t");
- $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/downloads/custom-scripts.php b/js/custom-scripts.php
similarity index 100%
rename from downloads/custom-scripts.php
rename to js/custom-scripts.php
diff --git a/overview.html b/overview.html
new file mode 100644
index 0000000..94c786b
--- /dev/null
+++ b/overview.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <title>Acceleo | Overview</title>
+
+ <meta name="description" content="">
+ <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+ <link rel="canonical" href="/acceleo/acceleo/overview.html">
+
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <!-- Old version of font awesome for some icons -->
+ <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
+ <!-- Bootstrap JS -->
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+
+ <script type="text/javascript">
+ jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+ </script>
+ <!-- Triggers tooltips -->
+ <script type="text/javascript">
+ jQuery(document).ready(function() {
+ jQuery('.hasTooltip').tooltip();
+ });
+ </script>
+</head>
+
+ <body>
+
+ <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+ <div class="container">
+ <a class="navbar-brand" href="/acceleo">
+ <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+ </a>
+
+ <!-- /logo -->
+ <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+ aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+ <i class="fa fa-bars"></i>
+ </button>
+ <nav class="collapse navbar-collapse" id="navbarResponsive">
+ <div class="main-menu ml-auto">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="/acceleo/overview.html">Overview</a>
+ </li>
+ <li>
+ <a href="/acceleo/features.html">Features</a>
+ </li>
+ <li>
+ <a href="/acceleo/resources.html">Resources</a>
+ </li>
+ <li>
+ <a href="/acceleo/support.html">Support</a>
+ </li>
+ <li id="dwnld">
+ <a href="/acceleo/download.html">Download</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+</header>
+
+
+ <section>
+ <div class="container">
+
+ <div class="row">
+ <div class="col-md-5 order-1 wow fadeInLeft animated" data-wow-delay=".1s">
+ <h3>What is Acceleo?</h3>
+
+ <p>Acceleo is a template-based technology including authoring tools to create custom code generators. It allows you to automatically
+ produce any kind of source code from any data source available in EMF format.
+ </p>
+ <p>It offers outstanding advantages:</p>
+ <ul>
+ <li> high ability to customize</li>
+ <li> interoperability</li>
+ <li>easy kick off</li>
+ </ul>
+ <p>A pragmatic implementation of the Object Management Group (OMG) MOF Model to Text Language (MTL) standard, Acceleo is
+ the result of several man-years of R&D started in the <a href=" https://www.obeo.fr" target="_blank">Obeo</a> company.</p>
+
+ <p><a href="https://projects.eclipse.org/projects/modeling.acceleo" target="_blank">Project page <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i></a></p>
+ </div>
+ <div class="col-md-7 order-2 wow fadeInUp animated" data-wow-delay=".2s">
+ <img src="images/screenshots/overview.png" alt="Acceleo - Overview">
+ </div>
+</div>
+ </div>
+</section>
+
+<section class="bg_lightest_grey">
+ <div class="container">
+ <div class="row">
+ <div class="col-md-5 order-2 wow fadeInLeft animated" data-wow-delay=".1s">
+ <h3>Discover</h3>
+
+ <p>You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.</p>
+ <p>The Acceleo generation module Editor supports the user with most of the features you would expect from modern IDEs:</p>
+ <ul>
+ <li> content assist</li>
+ <li> quick outline</li>
+ <li> navigation links to the declaration of model elements</li>
+ <li> template elements and variables</li>
+ <li> quick fixes</li>
+ <li> refactoring</li>
+ <li> syntax highlighting</li>
+ <li> ... and so much more!</li>
+ </ul>
+
+ <p><a href="http://wiki.eclipse.org/Acceleo/Features" target="_self ">Learn more <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i></a></p>
+ </div>
+ <div class="col-md-7 order-1 wow fadeInUp animated" data-wow-delay=".2s">
+ <img src="images/screenshots/user_experience.png" alt="Acceleo - User Experience">
+ </div>
+</div>
+ </div>
+</section>
+
+<section class="text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Related Projects</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-5 offset-md-1 col-xs-12 vcenter wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms"><a href="http://www.eclipse.org/modeling/emf/" title="Logo Eclipse EMF"><img src="/acceleo/common_assets/images/logos/logo_emf.jpg"></a></div>
+ <div class="col-md-5 col-xs-12 vcenter wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms"><a href="http://www.eclipse.org/sirius/" title="Logo Eclipse Sirius"><img src="/acceleo/common_assets/images/logos/logo_sirius.png"></a></div>
+
+ <!--<div class="col-md-12 wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms">
+ <div class="col-md-4 offset-md-2 col-xs-12 wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms">
+ <p><a href="http://www.eclipse.org/modeling/emf/" title="Logo Eclipse EMF"><img src="/common_assets/images/logos/logo_emf.jpg"></a></p>
+ </div>
+ <div class="col-md-4 col-xs-12 wow fadeInLeft" data-wow-duration="500ms" data-wow-delay="300ms">
+ <p><a href="http://www.eclipse.org/sirius/" title="Logo Eclipse Sirius"><img src="/common_assets/images/logos/logo_sirius.png"></a></p>
+ </div>-->
+ </div>
+
+ </div>
+</section>
+
+<footer>
+ <div class="container">
+ <div class="row">
+
+<div class="col-md-3">
+ <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+ <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+ <h6>Eclipse Foundation</h6>
+ <ul>
+ <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+ <li><a href="http://eclipse.org/">Eclipse</a></li>
+ <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+ <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+ <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+ <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+ </ul>
+</div>
+
+
+<div class="col-md-3">
+ <h6>Project Links</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+ <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+ <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+ <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+ </ul>
+</div>
+ </div>
+ </div>
+</footer>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+ jQuery(document).ready(function(){
+ "use strict";
+ new WOW().init();
+ });
+</script>
+
+ </body>
+</html>
diff --git a/project-info/overview.html b/project-info/overview.html
deleted file mode 100644
index ac4bb64..0000000
--- a/project-info/overview.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<p>
- <a href="http://www.eclipse.org/acceleo">Acceleo</a> is an open source code generator implementing
- the <a href="http://www.omg.org/">OMG</a>'s <a href="http://www.omg.org/spec/MOFM2T/1.0/">MOF Model
- to Text Language (MTL)</a> standard that uses any <a href="http://eclipse.org/modeling/emf/">EMF</a>
- based models (UML, SysML, domain specific models...) to generate any kind of code (Java, C, PHP...)
- while keeping the traceability of the generated text.
-</p>
-<p>
- You do not need to be an expert to start using the plug-ins and create your first code generator : using the provided
- example projects and the powerful completion feature of the Acceleo editor, it is very easy to get started and
- understand the basic principles.
-</p>
-<p>
- You can get a quick glance at Acceleo with the demonstration that was presented
- <a href="http://www.obeo.fr/videos/acceleo-eclipse/eclipse-modeling-runaway-acceleo.htm">at the Eclipse Modeling
- Runaway 2010</a>.
-</p>
-<p>
- More information is available on the wiki page for <a href="http://wiki.eclipse.org/Acceleo">Acceleo</a>.
-</p>
-<p>
- The <a href="http://acceleo.org/pages/home">Acceleo</a> project was started 4 years ago. Over the years, it
- steadily grew from its first stable release up to its 2.x versions. Yet, the team has been more and more
- convinced that the future of code generation lied in the OMG <a href="http://www.omg.org/spec/MOFM2T/1.0/">MTL</a>
- specification, and that it was the way to go for the project. The reference implementation we provide within the
- Eclipse M2T project, Acceleo 3.0, combines nice tooling, simple syntax and efficient code generation with all the
- pragmatism we had with the 2.x stream.
-</p>
\ No newline at end of file
diff --git a/resources.html b/resources.html
new file mode 100644
index 0000000..d664860
--- /dev/null
+++ b/resources.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <title>Acceleo | Home</title>
+
+ <meta name="description" content="">
+ <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+ <link rel="canonical" href="/acceleo/acceleo/resources.html">
+
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <!-- Old version of font awesome for some icons -->
+ <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
+ <!-- Bootstrap JS -->
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+
+ <script type="text/javascript">
+ jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+ </script>
+ <!-- Triggers tooltips -->
+ <script type="text/javascript">
+ jQuery(document).ready(function() {
+ jQuery('.hasTooltip').tooltip();
+ });
+ </script>
+</head>
+
+ <body>
+
+ <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+ <div class="container">
+ <a class="navbar-brand" href="/acceleo">
+ <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+ </a>
+
+ <!-- /logo -->
+ <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+ aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+ <i class="fa fa-bars"></i>
+ </button>
+ <nav class="collapse navbar-collapse" id="navbarResponsive">
+ <div class="main-menu ml-auto">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="/acceleo/overview.html">Overview</a>
+ </li>
+ <li>
+ <a href="/acceleo/features.html">Features</a>
+ </li>
+ <li>
+ <a href="/acceleo/resources.html">Resources</a>
+ </li>
+ <li>
+ <a href="/acceleo/support.html">Support</a>
+ </li>
+ <li id="dwnld">
+ <a href="/acceleo/download.html">Download</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+</header>
+
+
+ <section id="" class="text-center">
+ <div class="container">
+
+ <div class="row">
+ <div class="col-sm-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="0ms">
+ <div><i class="fas fa-play-circle fa-3x pa2 txt_indigo" aria-hidden="true"></i></div>
+ <h4>Tutorials</h4>
+ <p><a data-wow-delay=".1s" href="https://www.google.com/url?q=https://wiki.eclipse.org/Acceleo/Getting_Started&sa=D&ust=1534837733047000&usg=AFQjCNHUt1ukFD_VDvqN6orjXEQAAz-IKA" target="_blank">Create your First Acceleo Generator <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ <p><a data-wow-delay=".2s" href="https://www.google.com/url?q=https://wiki.eclipse.org/Acceleo/Videos/TopcasedDays2011&sa=D&ust=1534837733050000&usg=AFQjCNHMFibMYHa60zVe8e0vbJEXSB35gw" target="_blank">Android code generation <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ </div>
+ <div class="col-sm-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="0ms">
+ <div><i class="fas fa-file-alt fa-3x pa2 txt_indigo" aria-hidden="true"></i></div>
+ <h4>Documentation</h4>
+ <p><a href="http://help.eclipse.org/photon/index.jsp?topic=/org.eclipse.acceleo.doc/pages/index.html" target="_blank">
+ Reference documentation <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="This documentation is included in the Help Content of Eclipse. Within your Eclipse, go to Help / Help Contents and navigate to the Acceleo Model To Text section" data-toggle="tooltip" data-placement="bottom" data-original-title="This documentation is included in the Help Content of Eclipse. Within your Eclipse, go to Help / Help Contents and navigate to the Acceleo Model To Text section"></i></p>
+ <p><a href="https://wiki.eclipse.org/Acceleo/Acceleo_Operations_Reference" target="_blank">Acceleo Operations Reference <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ <p><a href="https://wiki.eclipse.org/Acceleo/OCL_Operations_Reference" target="_blank">OCL Operations Reference <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ <p><a href="https://wiki.eclipse.org/Acceleo/User_Guide" target="_blank">User Guide <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ <p><a href="https://www.obeo.fr/en/acceleo-best-practices" target="_blank">Best Practices <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ <p><a href="https://wiki.eclipse.org/Acceleo" target="_blank">Acceleo Wiki <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ </div>
+
+ <div class="col-sm-4 col-xs-12 wow fadeInLeft animated" data-wow-duration="300ms" data-wow-delay="100ms">
+ <div><i class="fas fa-folder-open fa-3x pa2 txt_indigo" aria-hidden="true"></i></div>
+ <h4>Developers Resources</h4>
+ <p><a href="https://projects.eclipse.org/projects/modeling.acceleo" target="_blank">About this project <i class="fa fa-external-link" aria-hidden="true"></i></a></p>
+ <p><a href="http://git.eclipse.org/c/acceleo/org.eclipse.acceleo.git/" target="_blank">
+ Git <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Source Code Access" data-toggle="tooltip" data-placement="bottom" data-original-title="Source Code Access"></i></p>
+ <p><a href="https://git.eclipse.org/r/#/admin/projects/acceleo/org.eclipse.acceleo" target="_blank">
+ Gerrit <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Code review" data-toggle="tooltip" data-placement="bottom" data-original-title="Code review"></i></p>
+ <p><a href="https://accounts.eclipse.org/mailing-list/acceleo-dev" target="_blank">
+ Developer Mailing List <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Subscribe to the developer list and get updates about the project's code aspects" data-toggle="tooltip" data-placement="bottom" data-original-title="Subscribe to the developer list and get updates about the project's code aspects"></i></p>
+ <p><a href="https://www.openhub.net/p/acceleo-eclipse" target="_blank">
+ Acceleo at OpenHub <i class="fa fa-external-link" aria-hidden="true"></i></a> <i class="fa fa-info-circle hasTooltip txt_lightest_grey" title="Project's code aspects, metrics, comments ratio..." data-toggle="tooltip" data-placement="bottom" data-original-title="Project's code aspects, metrics, comments ratio..."></i></p>
+ </div>
+ </div>
+
+ </div>
+</section>
+
+<section class="bg_lightest_grey text-center">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Contribute</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s">Acceleo is actively looking for project contributors. <br><br>There are many official and unofficial ways
+ to get involved. <br>Please see <a href='http://wiki.eclipse.org/Acceleo/Wishlist'>this wiki page</a> for some
+ ideas, and <a href='http://wiki.eclipse.org/Setting_up_a_development_environment_for_Acceleo'>
+ this one</a> for information on how to set up your development environment.
+ </p>
+
+
+ </div>
+</section>
+
+<footer>
+ <div class="container">
+ <div class="row">
+
+<div class="col-md-3">
+ <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+ <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+ <h6>Eclipse Foundation</h6>
+ <ul>
+ <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+ <li><a href="http://eclipse.org/">Eclipse</a></li>
+ <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+ <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+ <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+ <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+ </ul>
+</div>
+
+
+<div class="col-md-3">
+ <h6>Project Links</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+ <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+ <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+ <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+ </ul>
+</div>
+ </div>
+ </div>
+</footer>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+ jQuery(document).ready(function(){
+ "use strict";
+ new WOW().init();
+ });
+</script>
+
+ </body>
+</html>
diff --git a/script/rss2html.php b/script/rss2html.php
deleted file mode 100644
index 19657f2..0000000
--- a/script/rss2html.php
+++ /dev/null
@@ -1,282 +0,0 @@
-<?php
-/* Copyright (c) 2010 Obeo.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Obeo - initial API and implementation
- */
-// URL of the feed that is to be converted. Can be either URL or absolute URI
-$feedURL = "/home/data/httpd/writable/acceleo/rss20.xml";
-
-// Limits the number of items that is to be displayed to the first n
-$limitItem = 5;
-
-// Limits the length of the displayed items' title to the first n characters
-// -1 means the title length will not be limited
-$limitTitleLength = -1;
-
-// Limits the length of the displayed items' content to the first n characters
-// -1 means the description will not be limited
-// 0 Disables the description altogether
-$limitDescriptionLength = 0;
-
-// See http://www.php.net/manual/en/function.date.php for date formats
-// Here, we use "June 1st, 2010" for example
-$dateFormat = "F jS, Y";
-
-class RSS2HTML {
- var $readError;
-
- function convert() {
- GLOBAL $limitItem;
- GLOBAL $limitTitleLength;
- GLOBAL $limitDescriptionLength;
- GLOBAL $dateFormat;
-
- $result = "";
- $xmlString = $this->readFeed();
- if ($xmlString === FALSE) {
- $result = $this->readError;
- return $result;
- }
-
- $xmlParser = xml_parser_create();
- $rssParser = new RSSParser();
- xml_set_object($xmlParser, $rssParser);
- xml_set_element_handler($xmlParser, "startElement", "endElement");
- xml_set_character_data_handler($xmlParser, "characterData");
- $parseResult = xml_parse($xmlParser, $xmlString, TRUE);
- if ($parseResult == 0) {
- $result = xml_error_string(xml_get_error_code($xmlParser));
- $result .= "\nat ".xml_get_current_line_number($xmlParser);
- $result .= ":".xml_get_current_column_number($xmlParser);
- return $result;
- }
-
- $itemCount = min($limitItem, count($rssParser->items));
-
- if ($itemCount > 0) {
- $feedLink = $rssParser->feed->link;
- // Custom fix for planet Acceleo : we don't have the accurate link
- $feedLink = "http://www.acceleo.org/planet/rss20.xml";
- $feedTitle = $rssParser->feed->title;
-
- $result = "<h6><a class='rss' href='$feedLink'><img align='right' src='images/rss2.gif' alt='RSS Feed'/></a>";
- $result .= "<a href='$feedLink'>$feedTitle</a></h6>\n";
-
- $result .= "<div class=\"modal\">\n<ul>\n";
- for ($i = 0; $i < $itemCount; $i++) {
- $item = $rssParser->items[$i];
- $itemTitle = $this->limitLength($item->title, $limitTitleLength);
- // Custom fix for planet Acceleo : trim the title up to the first ":"
- $itemTitle = trim(substr(strstr($itemTitle, ":"), 1));
- $itemDescription = "";
- if ($limitDescriptionLength > 0) {
- $itemDescription = $this->limitLength($item->description, $limitDescriptionLength);
- }
- $itemPubDate = date($dateFormat, $item->pubDate_time);
-
- $result .= "<li>\n";
- $result .= "<a href='$item->link' display='block'>$itemTitle</a><br/>\n";
- if (strlen($itemDescription) > 0) {
- $result .= "$itemDescription<br/>\n";
- $result .= "<span class='posted'>$itemPubDate</span><br/>\n";
- $result .= "<a href='$item->link'>read more...</a><br/>\n";
- } else {
- $result .= "<span class='posted'>$itemPubDate</span><br/>\n";
- }
- $result .= "</li>\n";
- }
- $result .= "</ul>\n</div>\n";
- }
- return $result;
- }
-
- /*
- * Reads the feed denoted by URL $feedURL in memory.
- */
- function readFeed() {
- GLOBAL $feedURL;
-
- if (strpos($feedURL, "http") === 0) {
- $parsedURL = parse_url($feedURL);
-
- $host = $parsedURL['host'];
- $path = $parsedURL['path'];
-
- $result = "";
-
- $ip = gethostbyname($host);
- $handle = @fsockopen($ip, 80, &$errno, &$errstr, 10);
- if(!$handle) {
- $this->readError = $errstr;
- return FALSE;
- }
-
- $httpRequest = "GET ".$path." HTTP/1.1\r\n";
- $httpRequest .= "Host: ".$host."\r\n";
- $httpRequest .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n";
- $httpRequest .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
- $httpRequest .= "Accept-Language: en-us,en;q=0.8,fr;q=0.5,fr-fr;q=0.3\r\n";
- $httpRequest .= "Keep-Alive: 115\r\n";
- $httpRequest .= "Connection: keep-alive\r\n";
- $httpRequest .= "Referer: http://".$host."\r\n";
- $httpRequest .= "\r\n";
-
- fputs($handle, $httpRequest);
-
- // Read the very first line of the header in order to retrieve the HTTP response code
- $firstHeaderLine = fgets($handle, 1024);
- $headerParts = explode(" ", $firstHeaderLine);
- if ($headerParts[1] < 200 || $headerParts[1] >= 300) {
- $this->readError = "HTTP ERROR: ".$headerParts[1];
- @fclose($handle);
- return FALSE;
- }
-
- $data = fread($handle, 16384);
- while (!feof($handle)) {
- $result .= $data;
- $data = fread($handle, 16384);
- }
- fclose($handle);
-
- // strip headers out of the result
- $pos = strpos($result, "\r\n\r\n");
- $result = substr($result, $pos + 4);
- } else {
- return file_get_contents($feedURL);
- }
-
- return $result;
- }
-
- /*
- * Limit the length of the given HTML String to the given number of characters. Take note that this will strip all html information
- * out of the text and only return the raw text itself (save for xml entities).
- */
- function limitLength($initialValue, $limit = -1) {
- if ($limit == -1 || strlen($initialValue) <= $limit) {
- return $initialValue;
- }
-
- $result = "";
- $pruneChar = FALSE;
- for ($i = 0; $i < strlen($initialValue) && strlen($result) <= $limit; $i++) {
- if (!$pruneChar && $initialValue[$i] == "<") {
- $pruneChar = TRUE;
- } elseif ($pruneChar && $initialValue[$i] == ">") {
- $pruneChar = FALSE;
- } else if (!$pruneChar) {
- $result .= $initialValue[$i];
- }
- }
-
- $lastSpace = strrchr($result, ' ');
- if ($lastSpace != FALSE) {
- $result = substr($result, 0, -strlen($lastSpace));
- $result .= " [...]";
- }
-
- return $result;
- }
-}
-
-class RSSParser {
- var $tag = "";
- var $currentItem = NULL;
- var $insideChannel = FALSE;
- var $insideItem = FALSE;
-
- var $feed;
- var $items = Array();
-
- function startElement($parser, $tagName, $attrs) {
- $this->tag = $tagName;
- if ($tagName == "ITEM") {
- $this->insideItem = TRUE;
- $this->currentItem = new RSSItem();
- } elseif ($tagName == "CHANNEL") {
- $this->insideChannel = TRUE;
- $this->feed = new Feed();
- }
- }
-
- function endElement($parser, $tagName) {
- $this->tag = "";
- if ($tagName == "ITEM") {
- $this->currentItem->pubDate = trim($this->currentItem->pubDate);
- $this->currentItem->title = trim($this->currentItem->title);
- $this->currentItem->description = trim($this->currentItem->description);
- $this->currentItem->link = trim($this->currentItem->link);
- $this->currentItem->author = trim($this->currentItem->author);
-
- $this->currentItem->pubDate_time = strtotime($this->currentItem->pubDate);
-
- $this->items[] = $this->currentItem;
-
- $this->insideItem = FALSE;
- } elseif ($tagName == "CHANNEL") {
- $this->feed->title = trim($this->feed->title);
- $this->feed->link = trim($this->feed->link);
-
- $this->insideChannel = FALSE;
- }
- }
-
- function characterData($parser, $data) {
- if ($data != NULL && $data != "" && ($this->insideItem || $this->insideChannel)) {
- switch ($this->tag) {
- case "TITLE":
- if ($this->insideItem) {
- $this->currentItem->title .= $data;
- } else if ($this->insideChannel) {
- $this->feed->title .= $data;
- }
- break;
-
- case "DESCRIPTION":
- if ($this->insideItem) {
- $this->currentItem->description .= $data;
- }
- break;
-
- case "LINK":
- if ($this->insideItem) {
- $this->currentItem->link .= $data;
- } else if ($this->insideChannel) {
- $this->feed->link .= $data;
- }
- break;
-
- case "PUBDATE":
- $this->currentItem->pubDate .= $data;
- break;
-
- case "AUTHOR":
- $this->currentItem->author .= $data;
- break;
-
- default:
- }
- }
- }
-}
-
-class Feed {
- var $title = "";
- var $link = "";
-}
-
-class RSSItem {
- var $title = "";
- var $description = "";
- var $link = "";
- var $pubDate = "";
- var $pubDate_time = 0;
- var $author = "";
-}
-?>
\ No newline at end of file
diff --git a/style_acceleo.css b/style_acceleo.css
deleted file mode 100644
index 81ad545..0000000
--- a/style_acceleo.css
+++ /dev/null
@@ -1,301 +0,0 @@
-#header {
- display: none;
-}
-
-#clickToHome {
-
-}
-
-#novaContent {
- background: url("images/backgroundAcceleoEclipse.png") no-repeat white;
-}
-
-#introText p.left {
- text-align: justify;
- width: 48%;
- float: left;
-}
-
-#introText p.right {
- text-align: justify;
- width: 48%;
- float: right;
-}
-
-#feature {
- text-align: justify;
- float: left;
- width: 63%;
- margin-right: 3%;
-}
-
-#feature_discovery {
- text-align: justify;
- float: left;
- width: 30%;
-}
-
-#acceleoInAction {
- text-align: justify;
- float: left;
- width: 63%;
- margin-right: 3%;
-}
-
-#primaryLinks {
- position: relative;
- padding-left: 420px;
- width: 560px;
-}
-
-#primaryLinks h3 {
- visibility: hidden;
- height: 0;
-}
-
-#primaryLinks ul li {
- vertical-align: bottom;
- display: inline-block;
- list-style-type: none;
- padding: 0;
- margin: 0;
-}
-
-#primaryLinks ul .toTheRight {
- margin-left: 150px;
-}
-
-#primaryLinks a:hover {
- text-decoration: underline;
- color: black;
-}
-
-#primaryLinks a {
- display: inline-block;
- list-style-type: none;
- width: 180px;
- height: 77px;
- padding-top: 10px;
- padding-left: 70px;
- margin: 0;
- color: black;
-}
-
-#primaryLinks strong {
- font-size: larger;
- display: block;
- text-decoration: none;
-}
-
-#buttonDownload {
- background: transparent url("images/buttonDownload_empty.png") no-repeat 0 0;
-}
-
-#buttonDownload:hover {
-
-}
-
-#buttonDocumentation {
- background: transparent url("images/buttonDocumentation_empty.png") no-repeat 0 0;
-}
-
-#buttonDocumentation:hover {
-
-}
-
-#buttonSupport {
- background: transparent url("images/buttonSupport_empty.png") no-repeat 0 0;
-}
-
-#buttonSupport:hover {
-
-}
-
-#buttonInvolved {
- background: transparent url("images/buttonInvolved_empty.png") no-repeat 0 0;
-}
-
-#buttonInvolved:hover {
-
-}
-
-#screencast {
- margin-bottom: 10px;
-}
-
-.maintenance a {
- display: block;
- height: 24px;
- padding-left: 24px;
- background: transparent url("images/logo/acceleo_icon_24.png") no-repeat
- center left;
-}
-
-#maintenanceLink {
- padding-left: 27px;
- padding-top: 6px;
-}
-
-#obeo a {
- display: block;
- padding: 0;
- margin-top: 10px;
- margin-left: auto;
- margin-right: auto;
-}
-
-#obeo img {
- display: block;
- width: 117px;
- height: 60px;
- margin-left: auto;
- margin-right: auto;
-}
-
-#newAndNoteworthy a {
- display: block;
- width: 218px;
- height: 51px;
- padding: 0;
- text-indent: -9000px;
- background: transparent url("images/newAndNoteworthy.png") no-repeat 0 0;
- margin-top: 10px;
- margin-left: auto;
- margin-right: auto;
-}
-
-#eclipseCommunityAward a {
- display: block;
- width: 144px;
- height: 144px;
- padding: 0;
- text-indent: -9000px;
- background: transparent url("http://www.eclipse.org/images/awards/winner09.jpg") no-repeat 0 0;
- margin-top: 1px;
- margin-left: auto;
- margin-right: auto;
-}
-
-#OWFInnovationAward a {
- display: block;
- width: 189px;
- height: 102px;
- padding: 0;
- text-indent: -9000px;
- background: transparent url("images/openInnovationAward.png") no-repeat 0 0;
- margin-top: 1px;
- margin-left: auto;
- margin-right: auto;
-}
-
-#olderNews {
- padding-bottom: 5%;
-}
-
-#olderNews a {
- float: right;
- font-size: smaller;
- margin-right: 5%;
-}
-
-.sideitem {
- border-bottom: 1px dotted #d4d4dd;
- margin-bottom: 10px;
- padding-bottom: 5px;
- clear: both;
-}
-
-.sideitem .modal {
- background: #FFF url('/eclipse.org-common/themes/Nova/images/thinModalBg.png') repeat-x;
- padding: 5px;
-}
-
-.sideitem h6 {
- background-color: #e8e7dd;
- border-bottom: 2px solid #FFF;
- font-size: 14px;
- font-weight: bold;
- margin-bottom: 0px;
- -moz-border-radius-topleft: 3px;
- -moz-border-radius-topright: 3px;
- padding: 8px 5px;
-}
-
-.sideitem li {
- text-align: justify;
- padding: 0 10px 5px 0;
-}
-
-.sideitem ul,.sideitem ol,.sideitem form,.sideitem p {
- font-size: 12px;
- padding: 5px;
-}
-
-#midcolumnhome {
- width: 640px;
- padding: 0 10px 10px 10px;
- background: transparent;
- float: left;
- margin-right: 20px;
-}
-
-#midcolumn {
- width: 780px;
- padding: 0 100px 10px 100px;
-}
-
-#rightcolumn {
- width: 260px;
-}
-
-h3 {
- clear: both;
-}
-
-h7 {
- font-weight: bold;
- padding: 5px;
-}
-
-a strong {
- text-decoration: underline;
-}
-
-.twtr-hd h4, .twtr-hd h3{
-clear:none;
-}
-.acceleonavitem h2 {
- background-color: #e8e7dd;
- border-bottom: 2px solid #FFF;
- font-weight: bold;
- margin-bottom: 0px;
- -moz-border-radius-topleft:3px;
- -moz-border-radius-topright:3px;
- padding: 8px 5px;
-}
-
-.acceleonavitem .contents {
- background: #FFF url('/eclipse.org-common/themes/Nova/images/thinModalBg.png') repeat-x;
- padding: 5px;
-}
-
-#novaContent.faux
-{
- background: url("images/backgroundAcceleoEclipse.png") no-repeat white;
- padding-bottom: 0px;
- padding-top: 0px;
-}
-
-#downloadtoc {
- border: 1px solid #000000;
- width: 180px;
-}
-
-#toctitle {
- text-align: center;
- font-weight: bold;
-}
-
-.toTheRight {
- margin-left: 150px;
-}
\ No newline at end of file
diff --git a/support.html b/support.html
new file mode 100644
index 0000000..d9c8500
--- /dev/null
+++ b/support.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <title>Acceleo | Support</title>
+
+ <meta name="description" content="">
+ <link rel="shortcut icon" type="image/png" href="/acceleo/common_assets/images/logos/favicon_acceleo.ico" />
+
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/styles.css">
+ <link rel="stylesheet" href="/acceleo/common_assets/css/animate.css">
+
+ <link rel="canonical" href="/acceleo/acceleo/support.html">
+
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <!-- Old version of font awesome for some icons -->
+ <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
+ <!-- Bootstrap JS -->
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
+
+ <script type="text/javascript">
+ jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
+ </script>
+ <!-- Triggers tooltips -->
+ <script type="text/javascript">
+ jQuery(document).ready(function() {
+ jQuery('.hasTooltip').tooltip();
+ });
+ </script>
+</head>
+
+ <body>
+
+ <!-- Navigation -->
+<header id="top-bar" class="navbar navbar-expand-lg fixed-top">
+ <div class="container">
+ <a class="navbar-brand" href="/acceleo">
+ <img src="/acceleo/common_assets/images/logos/logo_acceleo.png" alt="Logo Acceleo">
+ </a>
+
+ <!-- /logo -->
+ <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
+ aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
+ <i class="fa fa-bars"></i>
+ </button>
+ <nav class="collapse navbar-collapse" id="navbarResponsive">
+ <div class="main-menu ml-auto">
+ <ul class="nav navbar-nav">
+ <li>
+ <a href="/acceleo/overview.html">Overview</a>
+ </li>
+ <li>
+ <a href="/acceleo/features.html">Features</a>
+ </li>
+ <li>
+ <a href="/acceleo/resources.html">Resources</a>
+ </li>
+ <li>
+ <a href="/acceleo/support.html">Support</a>
+ </li>
+ <li id="dwnld">
+ <a href="/acceleo/download.html">Download</a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+</header>
+
+
+ <section>
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Community Support</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12">
+ <ul>
+ <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" target="_blank">M2T Newsgroup</a> - Remember to prefix the subject of your Acceleo-related posts with "[Acceleo]"</li>
+ <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="http://stackoverflow.com/questions/tagged/acceleo" target="_blank">Acceleo on Stackoverflow</a> - Remember to tag your questions with the Acceleo tag</li>
+ <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling&product=Acceleo&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED" target="_blank">Acceleo Bugzilla</a> - Review and create Bugzilla entries</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section class="bg_lightest_grey">
+ <div class="container">
+ <h2 class="title wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".2s">Professional Services</h2>
+<h3 class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
+<p class="wow fadeInDown animated" data-wow-duration="500ms" data-wow-delay=".4s"></p>
+
+
+ <div class="row">
+ <div class="col-md-12">
+ <p class="wow fadeInDown animated" data-wow-delay=".1s">Obeo, creator of Acceleo, provides professional services to help you produce and maintain generators of industrial grade:</p>
+ <ul>
+ <li class="wow fadeInLeft animated" data-wow-delay=".1s"><a href="http://www.obeo.fr/en/services/support-maintenance" target="_blank">Support & maintenance</a></li>
+ <li class="wow fadeInLeft animated" data-wow-delay=".2s"><a href="http://www.obeo.fr/en/services/training" target="_blank">Training</a></li>
+ <li class="wow fadeInLeft animated" data-wow-delay=".3s"><a href="http://www.obeo.fr/en/services/coaching" target="_blank">Consulting & coaching</a></li>
+ <li class="wow fadeInLeft animated" data-wow-delay=".4s"><a href="http://www.obeo.fr/en/services/custom-development" target="_blank">Custom development</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</section>
+
+<footer>
+ <div class="container">
+ <div class="row">
+
+<div class="col-md-3">
+ <p><a href="http://www.eclipse.org/"><img src="/acceleo/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
+ <p id="copyright">Copyright © 2019 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+</div>
+
+<div class="col-md-3">
+ <h6>Eclipse Foundation</h6>
+ <ul>
+ <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
+ <li><a href="http://eclipse.org/">Eclipse</a></li>
+ <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
+ <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
+ <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
+ <li><a href="http://www.eclipse.org/org/foundation/contact.php"> Contact Us</a></li>
+ </ul>
+</div>
+
+
+<div class="col-md-3">
+ <h6>Project Links</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo">About this project</a></li>
+ <li><a href="http://wiki.eclipse.org/Acceleo">Wiki</a></li>
+ <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=24&">Forum</a></li>
+ <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=VERIFIED&list_id=9161179&product=Acceleo&query_format=advanced">Bugs</a></li>
+ <li><a href="https://projects.eclipse.org/projects/modeling.m2t.acceleo/developer">Source Code</a></li>
+ </ul>
+</div>
+ </div>
+ </div>
+</footer>
+
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>
+
+<script src="/acceleo//common_assets/js/wow.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.min.js" defer></script>
+<script src="/acceleo//common_assets/js/magnific-popup.video.js" defer></script>
+<!-- Call wow function -->
+<script>
+ jQuery(document).ready(function(){
+ "use strict";
+ new WOW().init();
+ });
+</script>
+
+ </body>
+</html>
diff --git a/support/_index.html b/support/_index.html
deleted file mode 100644
index d03ed9d..0000000
--- a/support/_index.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<div id="midcolumn">
-
- <div>
- <h2>Getting Started</h2>
- <div class="contents">
- <ul>
- <li>Tutorial: create your <a href="http://wiki.eclipse.org/Acceleo/Getting_Started">First Acceleo Generator</a></li>
- <li>Complete <a href="https://wiki.eclipse.org/Acceleo/User_Guide">User Guide</a></li>
- <li><a href="https://www.obeo.fr/en/acceleo-best-practices">Best Practices Guide</a></li>
- </ul>
- </div>
- </div>
-
- <div>
- <h2>Documentation Portals</h2>
- <div class="contents">
- <p>The full documentation is included in the Help Content of Eclipse. Within your Eclipse, go to
- <i>Help => Help Contents</i> and navigate to the <b>Acceleo Model To Text</b> section.</p>
- <ul>
- <li><a href="https://help.eclipse.org/topic/org.eclipse.acceleo.doc/pages/index.html?cp=5" rel="nofollow">Eclipse Help Center</a> : Online documentation of Eclipse</li>
- <li><a href="http://wiki.eclipse.org/Acceleo">Acceleo wiki</a> : Acceleo featured on the Eclispepedia</li>
- </ul>
- </div>
- </div>
-
- <div>
- <h2>Community Support</h2>
- <div class="contents">
- <ul>
- <li>
- <b><a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" title="M2T
- Newsgroup">M2T Newsgroup</a></b> - please, remember to prefix the subject of your
- Acceleo-related posts with "[Acceleo]".
- </li>
- <li>
- <b><a href="https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling&product=Acceleo&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED"
- title="Acceleo Bugs" rel="nofollow">Acceleo Bugzilla</a></b> - review and create Bugzilla
- entries.
- </li>
- <li>
- <b><a href="http://stackoverflow.com/questions/tagged/acceleo" title="Acceleo Stackoverflow"
- rel="nofollow">Acceleo on Stackoverflow</a></b> - Remember to tag your questions with the
- Acceleo tag.
- </li>
- </ul>
- </div>
- </div>
-
- <div>
- <h2>Professional Support and Training</h2>
- <div class="contents">
- <p>
- Obeo, creator of Acceleo, provides professional services to help you produce and maintain generators of industrial grade:
- <ul>
- <li><a href="http://www.obeo.fr/en/services/training">Training</a></li>
- <li><a href="http://www.obeo.fr/en/services/coaching">Consulting & coaching</a></li>
- <li><a href="http://www.obeo.fr/en/services/custom-development">Custom development</a></li>
- <li><a href="http://www.obeo.fr/en/services/support-maintenance">Support & maintenance</a></li>
- </ul>
- </p>
- <br />
- </div>
- </div>
-
-</div>
diff --git a/support/index.php b/support/index.php
deleted file mode 100644
index 2b07910..0000000
--- a/support/index.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
- require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
- $App = new App();
- $Nav = new Nav();
- $Menu = new Menu();
-
- include($App->getProjectCommon());
-
- $pageTitle = "Support";
-
- $html = file_get_contents('_index.html');
-
- # Generate the web page
- $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/test.html b/test.html
deleted file mode 100644
index 3ae6a15..0000000
--- a/test.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<div id="midcolumnhome">
- <h3>Acceleo - transforming models into code</h3>
- <div id="introText">
- <p class="left">
- <a href="http://wiki.eclipse.org/Acceleo">Acceleo</a> is a pragmatic implementation of the
- <a href="http://www.omg.org/">Object Management Group (OMG)</a> <a href="http://www.omg.org/spec/MOFM2T/1.0/">
- MOF Model to Text Language (MTL)</a> standard. You do not need to be an expert to start using the
- plug-ins and create your first code generator : using the provided example projects and the powerful
- completion feature of the Acceleo editor, it is very easy to get started and understand the basic principles.
- </p>
- <p class="right">
- Acceleo is the result of several man-years of R&D started in the French company Obeo. Junction between the
- OMG MTL standard, its team's experience with industrial code generation and the latest research advances into
- the M2T field, it offers outstanding advantages : High ability to customize, Interoperability, Easy kick off,
- Traceability Management, and many more!
- </p>
- </div>
-
- <div id="screencast">
- <a href="http://www.obeo.fr/videos/acceleo-eclipse/eclipse-modeling-runaway-acceleo.htm" title="See Acceleo in action" rel="nofollow">
- <div class="prezi-player">
- <style type="text/css" media="screen">
- .prezi-player { width: 640px; }
- .prezi-player-links { text-align: center; }
- </style>
- <object id="prezi_xpdkccxjlj-e" name="prezi_xpdkccxjlj-e" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="480">
- <param name="movie" value="http://prezi.com/bin/preziloader.swf"/>
- <param name="allowfullscreen" value="true"/>
- <param name="allowscriptaccess" value="always"/>
- <param name="bgcolor" value="#ffffff"/>
- <param name="flashvars" value="prezi_id=xpdkccxjlj-e&lock_to_path=0&color=ffffff&autoplay=yes&autohide_ctrls=1"/>
- <embed id="preziEmbed_xpdkccxjlj-e" name="preziEmbed_xpdkccxjlj-e" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480" bgcolor="#ffffff" flashvars="prezi_id=xpdkccxjlj-e&lock_to_path=0&color=ffffff&autoplay=no&autohide_ctrls=0"></embed>
- </object>
- <div class="prezi-player-links">
- <p>
- <a title="Acceleo at the Eclipse-OMG Workshop" href="http://prezi.com/xpdkccxjlj-e/acceleo-at-the-eclipse-omg-workshop/">Acceleo at the Eclipse-OMG Workshop 2012</a>
- </p>
- </div>
- </div>
- </div>
-
- <h3>From Acceleo.org to Eclipse.org </h3>
- <div id="introText">
- <p class="left">
- The <a href="http://acceleo.org/pages/home">Acceleo</a> project was started 4 years ago. Over the years, it
- steadily grew from its first stable release up to its 2.x versions. Yet, the team has been more and more
- convinced that the future of code generation lied in the OMG
- <a href="http://www.omg.org/spec/MOFM2T/1.0/">MTL</a> specification, and that it was the way to go for the
- project.
- </p>
- <p class="right">
- The reference implementation we provide within the Eclipse M2T project, Acceleo 3, combines nice tooling,
- simple syntax and efficient code generation with all the pragmatism we had with the 2.x stream.
- </p>
- </div>
-
- <div id="feature">
- <h4>User Experience</h4>
- <p>
- The Acceleo generation module Editor supports the user with most of the features you would expect from modern
- IDEs : content assist, quick outline, navigation links to the declaration of model elements, template elements
- and variables, quick fixes, refactoring, syntax highlighting, occurences highlighting... and so much more!
- </p>
- </div>
-
-
- <div id="feature_discovery">
- <h4>Discovering features...</h4>
- <p>
- Read the <a href="/acceleo/documentation">documentation</a>, join the discussion at the
- <a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=24&" rel="nofollow">newsgroup</a>, or get in touch with
- the team on <a href="https://twitter.com/#!/acceleo">Twitter</a> or <a href="https://plus.google.com/b/114651471803085159652/" rel="publisher">Google+</a>.
- </p>
- </div>
-
- <div id="acceleoInAction">
- <h4>See it in action !</h4>
- <p>
- <a href="http://www.obeo.fr/videos/acceleo-eclipse/eclipse-modeling-runaway-acceleo.htm" rel="nofollow">
- Acceleo used to create an Android application</a><br/>
- <a href="http://literate.modeling.free.fr/modeling/acceleo/06-acceleo-editor-features.htm" rel="nofollow">
- The Acceleo generation modules editor</a><br/>
- <a href="http://live.eclipse.org/node/926">Helios In Action: Modeling</a>. Modeling components in Helios.<br/>
- Take a look at the <a href="http://wiki.eclipse.org/Acceleo/Demonstrations">wiki page</a> for more !
- </p>
- </div>
-</div>
-
-<div id="rightcolumn">
- <div class="sideitem" id="obeo">
- <a href="http://www.obeo.fr" title="Main Obeo website"><img src="images/logo/logo_obeo.png"/></a>
- </div>
-
- <div class="sideitem maintenance">
- <a id="maintenanceLink" href="http://www.acceleo.org/pages/welcome/en" title="Maintenance 2.x stream website" rel="nofollow">
- 2.x legacy stream website</a>
- </div>
-
- <div class="sideitem">
- <h6>Project Summary</h6>
- <div class="modal">
- <p>
- Read more <a href="http://www.eclipse.org/projects/project_summary.php?projectid=modeling.acceleo">about
- this project</a> and get all useful information and links about it in a nutshell.
- </p>
- </div>
- </div>
-
- <div class="sideitem">
- <h6><a href="awards">Awards</a></h6>
- <div class="modal">
- <br />
- <div id="OWFInnovationAward"><a href="awards"></a></div>
- <br />
- <div id="olderNews"><a href="awards">See more...</a></div>
- </div>
- </div>
-
- <div class="sideitem">
-%%HEADLINES%%
- </div>
-</div>