<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="Olivier Lamy" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Archiva &#x2013; Archiva Javascript application General design</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
<!-- Google Analytics -->
        <script src='//www.google-analytics.com/analytics.js'></script>
        <script>
          window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;

          ga('create', 'UA-140879-5', 'auto');
          ga('send', 'pageview');

        </script>
      </head>
    <body class="topBarEnabled">
                      <a href="https://github.com/apache/archiva">
      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
        src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"
        alt="Fork me on GitHub">
    </a>
      <div id="topbar" class="navbar navbar-fixed-top ">
      <div class="navbar-inner">
            <div class="container"><div class="nav-collapse">
            <ul class="nav">
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Introduction <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="../index.html" title="About">About</a></li>
            <li><a href="../download.html" title="Downloads">Downloads</a></li>
            <li><a href="../versions.html" title="Versions">Versions</a></li>
            <li><a href="../mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
            <li><a href="../security.html" title="Security">Security</a></li>
            <li class="dropdown-submenu">
<a href="../" title="Documentation">Documentation</a>
              <ul class="dropdown-menu">
                  <li><a href="../docs/2.2.4/" title="Release 2.2.4">Release 2.2.4</a></li>
                  <li><a href="../docs/3.0.0-SNAPSHOT/" title="Dev 3.0.0-SNAPSHOT">Dev 3.0.0-SNAPSHOT</a></li>
              </ul>
            </li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="../developers/building.html" title="Build Apache Archiva">Build Apache Archiva</a></li>
            <li><a href="../get-involved.html" title="Get involved">Get involved</a></li>
            <li><a href="../developers/how-we-do-things.html" title="How we do things">How we do things</a></li>
            <li><a href="../redback" title="Redback">Redback</a></li>
            <li><a href="../redback/components" title="Redback Components">Redback Components</a></li>
            <li class="dropdown-submenu">
<a href="../jsui/index.html" title="Javascript application Architecture">Javascript application Architecture</a>
              <ul class="dropdown-menu">
                  <li><a href="../jsui/rest.html" title="Rest service">Rest service</a></li>
                  <li><a href="../jsui/template-loading.html" title="JS Template loading">JS Template loading</a></li>
                  <li><a href="../jsui/i18n.html" title="i18n">i18n</a></li>
                  <li><a href="../jsui/knockout-binding.html" title="Knockout Binding">Knockout Binding</a></li>
                  <li><a href="../jsui/generics-js.html" title="Generic Javascipts">Generic Javascipts</a></li>
              </ul>
            </li>
            <li><a href="../developers/releasing.html" title="Releasing">Releasing</a></li>
            <li><a href="../developers/publishing-site.html" title="Site Publish">Site Publish</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="http://www.apache.org/foundation/how-it-works.html" title="How Apache Works">How Apache Works</a></li>
            <li><a href="http://www.apache.org/foundation/" title="Foundation">Foundation</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsoring Apache">Sponsoring Apache</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li class="dropdown-submenu">
<a href="../project-info.html" title="Project Information">Project Information</a>
              <ul class="dropdown-menu">
                  <li><a href="../ci-management.html" title="CI Management">CI Management</a></li>
                  <li><a href="../mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
                  <li><a href="../issue-management.html" title="Issue Management">Issue Management</a></li>
                  <li><a href="../licenses.html" title="Licenses">Licenses</a></li>
                  <li><a href="../team.html" title="Team">Team</a></li>
                  <li><a href="../scm.html" title="Source Code Management">Source Code Management</a></li>
              </ul>
            </li>
        </ul>
      </li>
              </ul>
<form id="search-form" action="https://www.google.com/search" method="get"  class="navbar-search pull-right" >
      <input value="http://archiva.apache.org/" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript">asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
                    </div>
        </div>
      </div>
    </div>
    <div class="container">
      <div id="banner">
        <div class="pull-left"><a href="../index.html" id="bannerLeft"><img src="../images/archiva.png"  alt="Apache Archiva"/></a></div>
        <div class="pull-right"><a href="http://www.apache.org/" id="bannerRight"><img src="https://www.apache.org/images/asf_logo_wide_2016.png"  alt="Apache Software Foundation"/></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate" class="pull-right">Last Published: 02 May 2019</li>
        </ul>
      </div>
        <div id="bodyColumn" >

  

    <script src="../js/jquery.fancybox.pack.2.1.5.js" type="text/javascript"></script>
    <script src="../js/jquery.mousewheel-3.0.6.pack.js" type="text/javascript"></script>
    <link rel="stylesheet" href="../css/jquery.fancybox.2.1.5.css" type="text/css" media="screen" />
    <script type="text/javascript" src="../js/fancy-box-activation.js"></script>


    
<ul>
<li><a href="#Archiva_Javascript_Web_Application">Archiva Javascript Web Application</a>
<ul>
<li><a href="#General_design">General design</a></li>
<li><a href="#Runtime_Properties">Runtime Properties</a></li>
<li><a href="#Used_Javascript_frameworks">Used Javascript frameworks</a></li>
<li><a href="#Sources_organisation">Sources organisation</a></li>
<li><a href="#js_directory">js directory</a></li>
<li><a href="#Start_page">Start page</a></li>
<li><a href="#Grid.2Fedit_model">Grid/edit model</a></li></ul></li></ul>

    
<div class="section">
<h2><a name="Archiva_Javascript_Web_Application"></a>Archiva Javascript Web Application</h2>
      
<div class="section">
<h3><a name="General_design"></a>General design</h3>
        
<p>
          The goal is to have a &quot;one page loading&quot; javascript application.
          <br />
          For this the only html page will contains a div with id &quot;main-content&quot; this div will be populated
          by jquery template execution (see <a href="./template-loading.html">template loading</a>).
          <br />
          The server will be contacted only for REST request/response (see <a href="./rest.html">details</a>).
          <br />
          <b>All UI rendering will be done only on client side.</b>
          <br />
          As we are not designer :-), the application will use the <a class="externalLink" href="http://twitter.github.com/bootstrap" target="_blank">twitter bootstrap css</a>.
        </p>
      </div>
      
<div class="section">
<h3><a name="Runtime_Properties"></a>Runtime Properties</h3>
        
<p>The application is designed to use http cache mechanism for css, javascript. Except REST call to get datas which will never use cache as a query timestamp parameter is used.
          But as this can cause issue in developpement phase, two system properties (disabled by default) prevent can prevent caching and/or help debuging
          </p>
<ul>
            
<li>archiva.devMode=true/false: if true will add a timestamp query parameter for loading js and html templates.</li>
            
<li>archiva.javascriptLog=true/false: will activate javascript log, method available with $.log(msg)</li>
            
<li>archiva.logMissingI18n=true/false: will activate remote logging of missing i18n key in the servlet container log:  INFO  archivaMissingi18n.logger  - missing i18n key : 'proxy-connectors.grid.managedrepo.title'</li>
          </ul>
        
      </div>
      
<div class="section">
<h3><a name="Used_Javascript_frameworks"></a>Used Javascript frameworks</h3>
        
<p>
        We use some well known javascript framework librairies :
        </p>
<ul>
          
<li><a class="externalLink" href="http://jquery.com/" target="_blank">jquery</a>.</li>

          
<li><a class="externalLink" href="http://sammyjs.org" target="_blank">sammyjs for hash navigation</a></li>

          
<li><a class="externalLink" href="http://requirejs.org" target="_blank">requirejs</a> for template loading (see <a href="./template-loading.html">details</a>).</li>

          
<li><a class="externalLink" href="http://code.google.com/p/jquery-i18n-properties" target="_blank">jquery-i18n-properties</a> for i18n loading (see <a href="./i18n.html">details</a>).</li>

          
<li><a class="externalLink" href="http://knockoutjs.com" target="_blank">knockoutjs</a> as we use a MVVM pattern (see <a href="./knockout-binding.html">knockout binding</a>).</li>

          
<li><a class="externalLink" href="http://twitter.github.com/bootstrap/javascript.html" target="_blank">twitter bootstrap js</a> to magnify the ui.</li>

          
<li><a class="externalLink" href="http://bassistance.de/jquery-plugins/jquery-plugin-validation" target="_blank">jquery validate</a> for form validation.</li>
        </ul>
        
      </div>
      
<div class="section">
<h3><a name="Sources_organisation"></a>Sources organisation</h3>
        
<p>
          Sources are located in src/main/webapp of the archiva-webapp module :
          </p>
<ul>
            
<li>css</li>
            
<li>images</li>
            
<li>js</li>
          </ul>
        
        </div>
<div class="section">
<h3><a name="js_directory"></a>js directory</h3>
          
<p>
            Root directory contains external libraries.
          </p>
          
<p>
            archiva directory contains archiva js files with a subdirectory templates which contains templates
          </p>
          
<p>
            redback directory contains redback js files with a subdirectory templates which contains templates
          </p>
        </div>
      

      
<div class="section">
<h3><a name="Start_page"></a>Start page</h3>
        
<p>
          The main page will load javascript files, load <a href="./i18n.html">i18n</a>, <a href="./template-loading.html">load templates</a> and insert menu.
          <br />
          This main page is divided in 3 parts:
          
<p>
            <a href="../images/start-screen.png" class="single_image" title="Start Page">
              <img src="../images/start-screen.png" width="150" height="93" style="border: 1px solid silver; margin-left: 0.25em; margin-bottom: 0.25em" alt="" /><br />
              Start Page
            </a>
          </p>
          
<p>
            </p>
<ul>
              
<li>#topbar-menu-container is populated with the template js/archiva/templates/topbar.html.</li>
              
<li>#sidebar-content is populated with the template js/archiva/templates/menu.html.</li>
              
<li>#main-content is the place where screen will appear.</li>
              
<li>hidden #html-fragments will contains loaded templates.</li>
            </ul>
          
          
<p>
            Link are visible/hide depending on needed redback karmas.
            You can configure redback operations needed for a link using the attribute redback-permissions in your html element
            (by default element needed karma must be marked display: none):
            </p>
<div class="source"><pre class="prettyprint">

Support array: at least one operation is needed:
&lt;div .... redback-permissions=&quot;{permissions: ['archiva-manage-users','archiva-manage-configuration']}&quot; style=&quot;display: none&quot;&gt;
Support single value:
&lt;li style=&quot;display: none&quot; redback-permissions=&quot;{permissions: ['archiva-manage-users']}&quot;&gt;

            </pre></div>

          
        
      </div>

      
<div class="section">
<h3><a name="Grid.2Fedit_model"></a>Grid/edit model</h3>
        
<p>We use a tab/pill models to display grid of datas and edit/add form:
          </p>
<ul>
            
<li>
              One tab/pill display the grid
              <a href="../images/repo-grids.png" class="single_image" title="Repositories Grid">
                <img src="../images/repo-grids.png" width="150" height="93" style="border: 1px solid silver; margin-left: 0.25em; margin-bottom: 0.25em" alt="" /><br />
                Repositories Grid
              </a>
            </li>
            
<li>
              One tab/pill display the edit/add form. <b>As we use knockout framework grid will be updated with new value from add/edit form automatically.</b>
              <a href="../images/repo-edit.png" class="single_image" title="Repositories Edit/Add">
                <img src="../images/repo-edit.png" width="150" height="93" style="border: 1px solid silver; margin-left: 0.25em; margin-bottom: 0.25em" alt="" /><br />
                Repositories Edit/Add
              </a>
            </li>
          </ul>
          Have a look at the page <a href="./knockout-binding.html">knockout-binding</a> for more explanation.
        
      </div>

    </div>
  

        </div>
    </div>
    <hr/>
    <footer>
      <div class="container">
        <div class="row">
<div class="row pull-left">Apache Archiva, Archiva, Apache, the Apache feather logo, and the Apache Archiva project logos are trademarks of The Apache Software Foundation.</div>
      <div class="row">
        &nbsp;
      </div>
      <div class="row">
      <p>
        <a href="http://archiva.apache.org/privacy-policy.html">Privacy Policy</a>
        </p>
      </div>
        </div>
        <p id="poweredBy" class="pull-right">  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
  </p>
                          <div id="ohloh" class="pull-right">
      <script type="text/javascript" src="https://www.ohloh.net/p/6670/widgets/project_thin_badge.js"></script>
    </div>
        </div>
    </footer>
    </body>
</html>