瀏覽代碼

Merge commit '159ea5a22a3e81108f15336e567f228e0cde14d0'

* commit '159ea5a22a3e81108f15336e567f228e0cde14d0':
  expand first version, show package description, automatically adjust width for package data popup
  fixing small margin error
  footer, ie8 compatibility, fixing tabs
  removed web fonts, new logo
  First preview, not finished yet

Conflicts:
	src/Packagist/WebBundle/Resources/views/layout.html.twig
Nils Adermann 13 年之前
父節點
當前提交
3d9520c2ba

+ 224 - 45
src/Packagist/WebBundle/Resources/public/css/main.css

@@ -79,14 +79,19 @@ h1, h2, h3, h4, h5, h6 { font-weight: bold; }
     \\ ========================================== //
 */
 
+html {
+  height: 100%;
+}
+
 body {
-  background: #888;
+  background: #555 url("../img/texture.png");
   font-size: 15px;
-  font-family: "PT Sans", sans-serif;
+  font-family: Helvetica, Arial;
   color: #555;
+  min-height: 100%;
 }
 
-a, a:active, a:visited {
+a, a:visited, a:active {
   color: #fb9700;
   text-decoration: none;
 }
@@ -95,57 +100,90 @@ a:hover {
 }
 
 .container {
+  background: #e5e5e5 url("../img/texture.png");
+  padding-bottom: 20px;
+  border-bottom: 1px solid #fafafa;
+  min-height: 400px;
+}
+
+.container > div, .container > header {
   width: 900px;
-  background: #fff;
   margin: auto;
-  padding: 20px 40px 40px;
 }
 
 header h1 {
-  font-size: 50px;
-  margin-top: 0;
-  float: left;
+  margin: 10px 0 0;
+  padding: 0;
+}
+header h1 a {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  width: 0;
+  height: 0;
+  padding: 85px 0 0 435px;
+  background: url("../img/logo.png") 0 0 no-repeat;
+  overflow: hidden;
 }
 
 header h2 {
-  font-size: 30px;
-  position: relative;
-  top: 20px;
-  left: 20px;
-  display: inline;
+  display: none;
 }
 
 header p {
-  font-size: 20px;
-}
-
-header a {
-  text-shadow: 0 1px 0 #bf7300;
+  clear: both;
+  margin: 0 -8px 10px;
 }
-
-header a:hover {
-  text-shadow: 0 1px 0 #663e00;
+header p, .main {
+  font-size: 15px;
+  padding: 5px 7px;
+  background: #f5f5f5;
+  border: 1px solid #fff;
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+  box-shadow: rgba(0, 0, 0, 0.25) 0 1px 3px;
 }
 
 header {
-  margin-bottom: 20px;
+  margin: 0 10px 20px;
   font-size: 15px;
 }
 
-.main, header p {
+.main {
+  margin: 10px 0;
   clear: left;
 }
 
+.main:after {
+  display: block;
+  content: '';
+  clear: both;
+}
+
 footer {
-  border-top: 2px solid #eee;
-  padding-top: 30px;
-  margin-top: 30px;
+  width: 900px;
+  margin: 0 auto;
+  padding: 10px 0 4px;
 }
 footer ul {
   width: 20%;
   list-style: none;
   float: right;
 }
+footer li {
+  margin: 0;
+  padding: 2px;
+}
+footer a, footer a:visited {
+  color: #ddd;
+  padding-left: 11px;
+  background: url("../img/footer_arrows.png") 0 2px no-repeat;
+}
+footer a:hover {
+  color: #fff;
+  background-position: 0 -18px;
+}
 
 .flash-message {
   font-size: 20px;
@@ -171,23 +209,44 @@ p {
 
 .user {
   text-align: right;
-}
+  padding: 4px 8px 5px;
+  color: #fff;
+  background: #bf7300;
+  background: -moz-linear-gradient(top, #bf7300 0%, #cc8f33 100%);
+  background: -webkit-linear-gradient(top, #bf7300 0%, #cc8f33 100%);
+  background: -o-linear-gradient(top, #bf7300 0%, #cc8f33 100%);
+  background: -ms-linear-gradient(top, #bf7300 0%, #cc8f33 100%);
+  background: linear-gradient(top, #bf7300 0%, #cc8f33 100%);
+  box-shadow: rgba(0, 0, 0, 0.25) 0 1px 3px;
+  -webkit-border-bottom-right-radius: 6px;
+  -webkit-border-bottom-left-radius: 6px;
+  -moz-border-radius-bottomright: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  border-bottom-right-radius: 6px;
+  border-bottom-left-radius: 6px;
+}
+.user a, .user a:visited { color: #fff; }
+.user a:hover { text-decoration: underline; }
 
 .submit, .submit:active, .submit:visited, input[type="submit"] {
   font-size: 22px;
-  font-family: "Neuton";
   float: right;
-  background: #64c523;
+  background: #53a51d;
+  background: -moz-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: -webkit-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: -o-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: -ms-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  border-width: 0;
   display: block;
-  padding: 9px 20px 12px;
+  padding: 12px 20px;
   color: #fff;
-  margin-top: 10px;
+  margin: 13px 0 10px;
   text-decoration: none;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-  border: 1px solid #519f1c;
-  box-shadow: 0 0 5px rgba(0, 0, 0, .2);
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+  box-shadow: rgba(0, 0, 0, 0.25) 0 1px 3px;
 }
 
 .submit:hover {
@@ -198,6 +257,8 @@ p {
 .main h1 {
   font-size: 25px;
   margin-bottom: 10px;
+  color: #53a51d;
+  font-weight: normal;
 }
 
 .main h2 {
@@ -205,6 +266,101 @@ p {
   margin-bottom: 10px;
 }
 
+ul.packages {
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+  float: left;
+}
+ul.packages li {
+  margin: 0 -6px;
+  padding: 0;
+  padding-left: 10px;
+}
+ul.packages section {
+  position: relative;  
+}
+ul.packages h1 {
+  font-family: Verdana;
+  font-size: 22px;
+  line-height: 1em;
+  font-weight: normal;
+  margin: 0;
+  padding: 8px 4px 0 0;
+  height: 32px;
+}
+ul.packages h1.has-description {
+  margin-bottom: 15px;
+}
+ul.packages li.has-popup:hover, div.package-details {
+  background: url("../img/package_corners.png") -20px 0 no-repeat;
+}
+ul.packages li.has-popup:hover h1 {
+  color: #fff;
+  background: url("../img/package_bg.png") 0 0 repeat-x;
+}
+ul.packages li.has-popup:hover h1 a, ul.packages li.has-popup:hover h1 a:visited { 
+  color: #fff;
+}
+
+ul.packages p.package-description {
+  position: absolute;
+  height: 21px;
+  overflow: hidden;
+  margin-top: -24px;
+  left: 0;
+  width: 888px;
+  color: #808080;
+}
+div.package-full-details {
+  margin: -4px 0 6px;
+}
+
+div.package-details {
+  display: none;
+  background-position: 0 0;
+  position: absolute;
+  right: -20px;
+  width: 20px;
+  top: 0;
+  bottom: 0;
+}
+div.package-details > div {
+  position: absolute;
+  left: 20px;
+  min-width: 400px;
+  top: 0;
+  z-index: 2;
+  color: #fff;
+  padding: 4px 8px;
+  background: #53a51d;
+  background: -moz-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: -webkit-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: -o-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: -ms-linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  background: linear-gradient(top, #53a51d 0%, #75b74a 100%);
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+  box-shadow: rgba(0, 0, 0, 0.25) 0 1px 3px;
+}
+ul.packages li.has-popup:hover div.package-details, ul.packages li.has-popup:hover div.package-details {
+  display: block;
+}
+
+ul.packages p {
+  margin-bottom: 4px;
+  line-height: 1.4em;
+}
+ul.packages p:last-child {
+  margin-bottom: 0;
+}
+
+ul.packages li.has-popup:hover div a, ul.packages li.has-popup:hover div a:visited, ul.packages li.has-popup:hover div a:hover {
+  color: #fff;
+  text-decoration: underline;
+}
+
 label {
   display: block;
   margin: 20px 0 10px;
@@ -221,14 +377,32 @@ textarea {
 input[type="submit"] {
   width: 406px;
   float: none;
-  background-image: url(../img/arrow.png);
-  background-position: 370px center;
-  background-repeat: no-repeat;
+  background: #64c523 url("../img/arrow.png") 370px center no-repeat;
 }
 input[type="submit"].loading {
-  background-image: url(../img/loader.gif);
+  background-image: url("../img/loader.gif");
+}
+
+input[type="text"], input[type="password"], input[type="email"] {
+  padding: 4px;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  -moz-border-radius: 6px;
+  -webkit-border-radius: 6px;
+  border-radius: 6px;
+  box-shadow: none;
+}
+input[type="text"]:hover, input[type="password"]:hover, input[type="email"]:hover,
+input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {
+  border-color: #64c523;
+  outline-style: none;
+}
+input[type="text"]:invalid, input[type="password"]:invalid, input[type="email"]:invalid {
+  border-color: #fb9700;
+  color: #bf7300;
 }
 
+
 input[type="checkbox"] {
   float: left;
   clear: left;
@@ -243,7 +417,7 @@ form ul {
 }
 
 .package {
-  margin: 15px 0;
+  margin: 0 0 15px;
 }
 .package h2 {
   font-size: 25px;
@@ -260,11 +434,16 @@ form ul {
   clear: left;
 }
 
+.package > p {
+  margin: 6px 0;
+}
+
 pre {
-  background: #ddd;
-  -moz-border-radius: 5px;
-  -webkit-border-radius: 5px;
-  border-radius: 5px;
+  background: #fff;
+  border: 1px solid #ddd;
+  -moz-border-radius: 6px;
+  -webkit-border-radius: 6px;
+  border-radius: 6px;
   display: block;
   padding: 5px;
   margin: 10px 0;

二進制
src/Packagist/WebBundle/Resources/public/img/footer_arrows.png


二進制
src/Packagist/WebBundle/Resources/public/img/logo.png


二進制
src/Packagist/WebBundle/Resources/public/img/package_bg.png


二進制
src/Packagist/WebBundle/Resources/public/img/package_corners.png


二進制
src/Packagist/WebBundle/Resources/public/img/texture.png


+ 4 - 0
src/Packagist/WebBundle/Resources/public/js/html5.js

@@ -0,0 +1,4 @@
+// iepp v2.1pre @jon_neal & @aFarkas github.com/aFarkas/iepp
+// html5shiv @rem remysharp.com/html5-enabling-script
+// Dual licensed under the MIT or GPL Version 2 licenses
+/*@cc_on(function(a,b){function r(a){var b=-1;while(++b<f)a.createElement(e[b])}if(!window.attachEvent||!b.createStyleSheet||!function(){var a=document.createElement("div");return a.innerHTML="<elem></elem>",a.childNodes.length!==1}())return;a.iepp=a.iepp||{};var c=a.iepp,d=c.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|subline|summary|time|video",e=d.split("|"),f=e.length,g=new RegExp("(^|\\s)("+d+")","gi"),h=new RegExp("<(/*)("+d+")","gi"),i=/^\s*[\{\}]\s*$/,j=new RegExp("(^|[^\\n]*?\\s)("+d+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),k=b.createDocumentFragment(),l=b.documentElement,m=b.getElementsByTagName("script")[0].parentNode,n=b.createElement("body"),o=b.createElement("style"),p=/print|all/,q;c.getCSS=function(a,b){try{if(a+""===undefined)return""}catch(d){return""}var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,p.test(b)&&h.push(c.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},c.parseCSS=function(a){var b=[],c;while((c=j.exec(a))!=null)b.push(((i.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(g,"$1.iepp-$2")+c[4]);return b.join("\n")},c.writeHTML=function(){var a=-1;q=q||b.body;while(++a<f){var c=b.getElementsByTagName(e[a]),d=c.length,g=-1;while(++g<d)c[g].className.indexOf("iepp-")<0&&(c[g].className+=" iepp-"+e[a])}k.appendChild(q),l.appendChild(n),n.className=q.className,n.id=q.id,n.innerHTML=q.innerHTML.replace(h,"<$1font")},c._beforePrint=function(){if(c.disablePP)return;o.styleSheet.cssText=c.parseCSS(c.getCSS(b.styleSheets,"all")),c.writeHTML()},c.restoreHTML=function(){if(c.disablePP)return;n.swapNode(q)},c._afterPrint=function(){c.restoreHTML(),o.styleSheet.cssText=""},r(b),r(k);if(c.disablePP)return;m.insertBefore(o,m.firstChild),o.media="print",o.className="iepp-printshim",a.attachEvent("onbeforeprint",c._beforePrint),a.attachEvent("onafterprint",c._afterPrint)})(this,document)@*/

+ 9 - 0
src/Packagist/WebBundle/Resources/public/js/layout.js

@@ -0,0 +1,9 @@
+/*
+    Adjust width for packades data
+*/
+$(window).load(function()
+{
+    var row = $('ul.packages');
+    if(!row.length) return;
+    $('div.package-details > div').css('min-width', Math.max(400, Math.floor(860 - row.width())) + 'px');
+});

+ 36 - 23
src/Packagist/WebBundle/Resources/views/Web/index.html.twig

@@ -2,30 +2,43 @@
 
 {% block content %}
     {% block content_title %}<h1>Packages</h1>{% endblock %}
+    {% if packages|length %}
+    <ul class="packages">
     {% for package in packages %}
-        <section class="package">
-            <h2><a href="{{ url('view', { 'name' : package.name }) }}">{{ package.name }}</a></h2>
-            {% if package.versions|length %}
-                <p class="description">{{ package.versions[0].description }}</p>
-                <p class="license">License: {{ package.versions[0].license ? package.versions[0].license|join(', ') : "Unknown" }}</p>
-                <p class="links">
-                    {% if package.versions[0].homepage %}
-                        Homepage: <a href="{{ package.versions[0].homepage }}">{{ package.versions[0].homepage|replace({'http://': ''}) }}</a><br />
-                    {% endif %}
-                    Tags: {% for tag in package.versions[0].tags %}<a href="{{ url("tag", { "name" : tag.name }) }}">{{ tag.name }}</a>{{ loop.last ? '' : ', ' }}{% endfor %}
-                </p>
-            {% elseif package.crawledAt is null %}
-                <p>This package has not been crawled yet, some information is missing.</p>
-            {% else %}
-                <p>This package has no released version yet, and little information is available yet.</p>
-            {% endif %}
+        <li class="has-popup">
+            <section>
+                {% if package.versions|length and package.versions[0].description|length %}
+                    <h1 class="has-description"><a href="{{ url('view', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
+                    <p class="package-description">{{ package.versions[0].description }}</p>
+                {% else %}
+                    <h1><a href="{{ url('view', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
+                {% endif %}
+                <div class="package-details"><div>
+                {% if package.versions|length %}
+                    <p class="description">{{ package.versions[0].description }}</p>
+                    <p class="license">License: {{ package.versions[0].license ? package.versions[0].license|join(', ') : "Unknown" }}</p>
+                    <p class="links">
+                        {% if package.versions[0].homepage %}
+                            Homepage: <a href="{{ package.versions[0].homepage }}">{{ package.versions[0].homepage|replace({'http://': ''}) }}</a><br />
+                        {% endif %}
+                        Tags: {% for tag in package.versions[0].tags %}<a href="{{ url("tag", { "name" : tag.name }) }}">{{ tag.name }}</a>{{ loop.last ? '' : ', ' }}{% endfor %}
+                    </p>
+                {% elseif package.crawledAt is null %}
+                    <p>This package has not been crawled yet, some information is missing.</p>
+                {% else %}
+                    <p>This package has no released version yet, and little information is available yet.</p>
+                {% endif %}
 
-            <p class="maintainers">Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:
-            {% for maintainer in package.maintainers %}
-                <a href="{{ url("user_packages", { "name" : maintainer.username }) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
-            {% endfor %}</p>
-        </section>
-    {% else %}
-        No packages found.
+                <p class="maintainers">Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:
+                {% for maintainer in package.maintainers %}
+                    <a href="{{ url("user_packages", { "name" : maintainer.username }) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
+                {% endfor %}</p>
+                </div></div>
+            </section>
+        </li>
     {% endfor %}
+    </ul>
+    {% else %}
+        <p>No packages found.</p>
+    {% endif %}
 {% endblock %}

+ 46 - 35
src/Packagist/WebBundle/Resources/views/Web/view.html.twig

@@ -14,48 +14,59 @@
 
     {% if form is defined %}
         <div>
-		    <strong id="add-maintainer"><a href="#">Add Maintainer</a></strong>
-		    <form id="add-maintainer-form" class="hidden" action="" method="POST" {{ form_enctype(form) }}>
-		        <div>
-		            <p>
-		                {{ form_label(form.user, "Username") }}
-		                {{ form_errors(form.user) }}
-		                {{ form_widget(form.user) }}
-		            </p>
-		            {{ form_rest(form) }}
-		            <input id="submit" type="submit" value="Submit" />
-		        </div>
-		    </form>
-	    </div>
+            <strong id="add-maintainer"><a href="#">Add Maintainer</a></strong>
+            <form id="add-maintainer-form" class="hidden" action="" method="POST" {{ form_enctype(form) }}>
+                <div>
+                    <p>
+                        {{ form_label(form.user, "Username") }}
+                        {{ form_errors(form.user) }}
+                        {{ form_widget(form.user) }}
+                    </p>
+                    {{ form_rest(form) }}
+                    <input id="submit" type="submit" value="Submit" />
+                </div>
+            </form>
+        </div>
     {% endif %}
 
     {% if package.versions|length %}
+    <ul class="packages">
         {% for version in package.versions %}
-            <h2>Version {{ version.version }}</h2>
-            <p class="description">{{ version.description }}</p>
-            <p class="license">License: {{ version.license ? version.license|join(', ') : "Unknown" }}</p>
-            <p class="release-date">Date: {{ version.releasedAt|date("Y-m-d") }}</p>
-            <p class="links">
-                {% if version.homepage %}
-                    Homepage: <a href="{{ version.homepage }}">{{ version.homepage|replace({'http://': ''}) }}</a><br />
-                {% endif %}
-                Tags: {% for tag in version.tags %}<a href="{{ url("tag", { "name" : tag.name }) }}">{{ tag.name }}</a>{{ loop.last ? '' : ', ' }}{% endfor %}
-            </p>
-            <p class="authors">Author{{ version.authors|length > 1 ? 's' : '' }}:
-            {% for author in version.authors %}
-                {% if author.homepage %}
-                    <a href="{{ author.homepage }}">{{ author.name }}</a>
+        <li{% if loop.index0 > 0 and not ('-dev' in version.version) %} class="has-popup"{% endif %}>
+            <section>
+                <h1>Version {{ version.version }}</h1>
+                {% if loop.index0 > 0 and not ('-dev' in version.version) %}
+                <div class="package-details"><div>
                 {% else %}
-                    {{ author.name }}
+                <div class="package-full-details"><div>
                 {% endif %}
-                {% if author.email %}&lt;<a href="mailto:{{ author.email }}">{{ author.email }}</a>&gt;{% endif %}
-                <br />
-            {% endfor %}</p>
-            <p class="requires">Requirement{{ version.require|length > 1 ? 's' : '' }}:
-            {% for req in version.require %}
-                {{ req.packageName }} ({{ req.packageVersion }})<br />
-            {% endfor %}</p>
+                <p class="description">{{ version.description }}</p>
+                <p class="license">License: {{ version.license ? version.license|join(', ') : "Unknown" }}</p>
+                <p class="release-date">Date: {{ version.releasedAt|date("Y-m-d") }}</p>
+                <p class="links">
+                    {% if version.homepage %}
+                        Homepage: <a href="{{ version.homepage }}">{{ version.homepage|replace({'http://': ''}) }}</a><br />
+                    {% endif %}
+                    Tags: {% for tag in version.tags %}<a href="{{ url("tag", { "name" : tag.name }) }}">{{ tag.name }}</a>{{ loop.last ? '' : ', ' }}{% endfor %}
+                </p>
+                <p class="authors">Author{{ version.authors|length > 1 ? 's' : '' }}:
+                {% for author in version.authors %}
+                    {% if author.homepage %}
+                        <a href="{{ author.homepage }}">{{ author.name }}</a>
+                    {% else %}
+                        {{ author.name }}
+                    {% endif %}
+                    {% if author.email %}&lt;<a href="mailto:{{ author.email }}">{{ author.email }}</a>&gt;{% endif %}
+                    <br />
+                {% endfor %}</p>
+                <p class="requires">Requirement{{ version.require|length > 1 ? 's' : '' }}:
+                {% for req in version.require %}
+                    {{ req.packageName }} ({{ req.packageVersion }})<br />
+                {% endfor %}</p>
+            </section>
+        </li>
         {% endfor %}
+    </ul>
     {% elseif package.crawledAt is null %}
         <p>This package has not been crawled yet, some information is missing.</p>
     {% else %}

+ 9 - 19
src/Packagist/WebBundle/Resources/views/layout.html.twig

@@ -13,21 +13,10 @@
         <link rel="shortcut icon" href="{{ asset('favicon.ico') }}" />
         <link rel="apple-touch-icon" href="{{ asset('apple-touch-icon.png') }}" />
 
-        <script type="text/javascript">
-            WebFontConfig = {
-                google: { families: [ 'PT Sans' ] }
-            };
-            (function() {
-                var wf = document.createElement('script');
-                wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
-                    '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
-                wf.src = '//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
-                wf.type = 'text/javascript';
-                wf.async = 'true';
-                var s = document.getElementsByTagName('script')[0];
-                s.parentNode.insertBefore(wf, s);
-            })();
-        </script>
+        <!--[if lt IE 9]>
+        <script src="{{ asset('bundles/packagistweb/js/html5.js') }}"></script>
+        <![endif]-->
+
         <link rel="stylesheet" href="{{ asset('bundles/packagistweb/css/main.css') }}" />
 
         {# {% stylesheets '@PackagistWebBundle/Resources/public/css/main.css' filter="yui_css" output='css/main.css' %}
@@ -74,8 +63,9 @@
                 {% block content %}
                 {% endblock %}
             </div>
+        </div>
 
-            <footer>
+        <footer>
                 <ul>
                     <li><a href="{{ path('about') }}">{{ 'menu.about_packagist'|trans }}</a></li>
                     <li><a href="{{ path('about.composer') }}">{{ 'menu.about_composer'|trans }}</a></li>
@@ -90,12 +80,12 @@
                         <li><a href="{{ path('fos_user_security_login') }}">{{ 'menu.login'|trans }}</a></li>
                     {% endif %}
                 </ul>
-                <div class="clearfix"></div>
-            </footer>
-        </div>
+            <div class="clearfix"></div>
+        </footer>
 
         <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
         <script>!window.jQuery && document.write(unescape('%3Cscript src="/js/libs/jquery-1.5.2.min.js"%3E%3C/script%3E'))</script>
+        <script src="{{ asset('bundles/packagistweb/js/layout.js') }}"></script>
         {#<script>
             var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]; // TODO Change UA-XXXXX-X
             (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;