Se tunea Redmine para tener una página de inicio solo para usuarios anónimos

This commit is contained in:
Manuel Cillero 2018-12-08 16:02:49 +01:00
parent d2fc48bda8
commit 3c31ac4771
26 changed files with 3910 additions and 15 deletions

View file

@ -1,6 +1,7 @@
<%= call_hook :view_account_login_top %> <%= call_hook :view_account_login_top %>
<div id="login-form"> <div id="login-form">
<h2><%= l(:label_login) %></h2>
<%= form_tag(signin_path, onsubmit: 'return keepAnchorOnSignIn(this);') do %> <%= form_tag(signin_path, onsubmit: 'return keepAnchorOnSignIn(this);') do %>
<%= back_url_hidden_field_tag %> <%= back_url_hidden_field_tag %>

View file

@ -11,13 +11,16 @@
<%= favicon %> <%= favicon %>
<%= stylesheet_link_tag 'jquery/jquery-ui-1.11.0', 'application', 'responsive', :media => 'all' %> <%= stylesheet_link_tag 'jquery/jquery-ui-1.11.0', 'application', 'responsive', :media => 'all' %>
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
<% is_welcome = !User.current.logged? && current_page?(:controller => 'welcome', :action => 'index') %>
<%= stylesheet_link_tag 'frontpage', :media => 'all' if is_welcome %>
<%= javascript_heads %> <%= javascript_heads %>
<%= heads_for_theme %> <%= heads_for_theme %>
<%= call_hook :view_layouts_base_html_head %> <%= call_hook :view_layouts_base_html_head %>
<!-- page specific tags --> <!-- page specific tags -->
<%= yield :header_tags -%> <%= yield :header_tags -%>
</head> </head>
<body class="<%= body_css_classes %>"> <body class="<%= body_css_classes %><%= ' is-preload' if is_welcome %>">
<%= call_hook :view_layouts_base_body_top %> <%= call_hook :view_layouts_base_body_top %>
<div id="wrapper"> <div id="wrapper">
@ -62,7 +65,7 @@
<div id="top-menu"> <div id="top-menu">
<div id="wrapper-top-menu"> <div id="wrapper-top-menu">
<ul class="social-menu"> <ul class="social-menu">
<li class="social-link-blog"><a href="https://manuel.cillero.es" title="Blog" target="_blank" class="icon-blog"><span>Blog</span></a></li> <li class="social-link-blog"><a href="https://manuel.cillero.es" title="<%= l(:link_my_blog) %>" target="_blank" class="icon-blog"><span><%= l(:link_my_blog) %></span></a></li>
<li class="social-link-twitter"><a href="https://twitter.com/manuelcillero" title="Twitter" target="_blank" class="icon-twitter"><span>Twitter</span></a></li> <li class="social-link-twitter"><a href="https://twitter.com/manuelcillero" title="Twitter" target="_blank" class="icon-twitter"><span>Twitter</span></a></li>
<li class="social-link-facebook"><a href="https://facebook.com/manuelcillero" title="Facebook" target="_blank" class="icon-facebook"><span>Facebook</span></a></li> <li class="social-link-facebook"><a href="https://facebook.com/manuelcillero" title="Facebook" target="_blank" class="icon-facebook"><span>Facebook</span></a></li>
<li class="social-link-linkedin"><a href="https://es.linkedin.com/in/manuelcillero" title="Linkedin" target="_blank" class="icon-linkedin"><span>Linkedin</span></a></li> <li class="social-link-linkedin"><a href="https://es.linkedin.com/in/manuelcillero" title="Linkedin" target="_blank" class="icon-linkedin"><span>Linkedin</span></a></li>
@ -127,13 +130,15 @@
</div> </div>
</div> </div>
<a href="#" id="scrollup"><%=l(:label_sort_higher)%></a><%= javascript_tag "$('#scrollup').click(function(){$('html,body').animate({scrollTop:0},600);return false;});" %>
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div> <div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
<div id="ajax-modal" style="display:none;"></div> <div id="ajax-modal" style="display:none;"></div>
<div id="footer"> <div id="footer">
<div id="wrapper-footer"> <div id="wrapper-footer">
<ul class="social-menu"> <ul class="social-menu">
<li class="social-link-blog"><a href="https://manuel.cillero.es" title="Blog" target="_blank" class="icon-blog"><span>Blog</span></a></li> <li class="social-link-blog"><a href="https://manuel.cillero.es" title="<%= l(:link_my_blog) %>" target="_blank" class="icon-blog"><span><%= l(:link_my_blog) %></span></a></li>
<li class="social-link-twitter"><a href="https://twitter.com/manuelcillero" title="Twitter" target="_blank" class="icon-twitter"><span>Twitter</span></a></li> <li class="social-link-twitter"><a href="https://twitter.com/manuelcillero" title="Twitter" target="_blank" class="icon-twitter"><span>Twitter</span></a></li>
<li class="social-link-facebook"><a href="https://facebook.com/manuelcillero" title="Facebook" target="_blank" class="icon-facebook"><span>Facebook</span></a></li> <li class="social-link-facebook"><a href="https://facebook.com/manuelcillero" title="Facebook" target="_blank" class="icon-facebook"><span>Facebook</span></a></li>
<li class="social-link-linkedin"><a href="https://es.linkedin.com/in/manuelcillero" title="Linkedin" target="_blank" class="icon-linkedin"><span>Linkedin</span></a></li> <li class="social-link-linkedin"><a href="https://es.linkedin.com/in/manuelcillero" title="Linkedin" target="_blank" class="icon-linkedin"><span>Linkedin</span></a></li>
@ -141,6 +146,12 @@
<li class="social-link-mail"><a href="https://manuel.cillero.es/contact" title="Mail" target="_blank" class="icon-mail"><span>Mail</span></a></li> <li class="social-link-mail"><a href="https://manuel.cillero.es/contact" title="Mail" target="_blank" class="icon-mail"><span>Mail</span></a></li>
</ul> </ul>
<div class="bgl"><div class="bgr"> <div class="bgl"><div class="bgr">
<div id="legal">
<span class="legal-notice"><a href="/projects/suitepro/wiki/Legal"><%= l(:label_legal) %></a></span>
<span class="legal-privacy"> &nbsp;|&nbsp; <a href="/projects/suitepro/wiki/Política_de_privacidad"><%= l(:label_legal_privacy) %></a></span>
<span class="legal-cookies"> &nbsp;|&nbsp; <a href="/projects/suitepro/wiki/Política_de_cookies"><%= l(:label_legal_cookies) %></a></span>
<span class="legal-terms"> &nbsp;|&nbsp; <a href="/projects/suitepro/wiki/Términos_de_uso"><%= l(:label_legal_conditions) %></a></span>
</div>
<%= Time.current.year %> &copy; SuitePro (powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %>) <%= Time.current.year %> &copy; SuitePro (powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %>)
</div></div> </div></div>
</div> </div>

View file

@ -1,3 +1,5 @@
<% if User.current.logged? %>
<h2><%= l(:label_home) %></h2> <h2><%= l(:label_home) %></h2>
<div class="splitcontentleft"> <div class="splitcontentleft">
@ -24,3 +26,151 @@
<%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_activity)}") %> :title => "#{Setting.app_title}: #{l(:label_activity)}") %>
<% end %> <% end %>
<% else %><!-- Frontpage -->
<div id="fp"><%= text_field_tag 'forcetop', nil, :style => 'display: none;' %>
<!-- Banner -->
<section id="fp-banner">
<div class="inner">
<h2>SuitePro</h2>
<p><%= l(:welcome_suitepro) %></p>
<ul class="actions special">
<li><a href="#fp-login" class="button primary scrolly"><%= l(:label_login) %></a></li>
</ul>
</div>
<a href="#one" class="more scrolly"><%= l(:welcome_discover) %></a>
</section>
<!-- One -->
<section id="one" class="frapper style1 special">
<div class="inner">
<header class="major">
<h2>A SIMPLE WAY TO GET WORK DONE&nbsp;&nbsp;;)</h2>
<p><%= raw l(:welcome_suitepro_is_redmine, :suitepro => '<strong>SuitePro</strong>', :redmine => '<a href="https://www.redmine.org"><strong>Redmine</strong></a>') %></p>
</header>
<ul class="icons major">
<li><span class="fp-icon fp-icon_1 major style1"><span class="label">Lorem</span></span></li>
<li><span class="fp-icon fp-icon_2 major style2"><span class="label">Ipsum</span></span></li>
<li><span class="fp-icon fp-icon_3 major style3"><span class="label">Dolor</span></span></li>
</ul>
</div>
</section>
<!-- Two -->
<section id="two" class="frapper alt style2">
<section class="spotlight">
<div class="image"><%= image_tag '/themes/circlepro/images/pic01.jpg' %></div><div class="content">
<h2><%= raw l(:welcome_spotlight_1_title) %></h2>
<p><%= l(:welcome_spotlight_1_text) %></p>
</div>
</section>
<section class="spotlight">
<div class="image"><%= image_tag '/themes/circlepro/images/pic02.jpg' %></div><div class="content">
<h2><%= raw l(:welcome_spotlight_2_title) %></h2>
<p><%= l(:welcome_spotlight_2_text) %></p>
</div>
</section>
<section class="spotlight">
<div class="image"><%= image_tag '/themes/circlepro/images/pic03.jpg' %></div><div class="content">
<h2><%= raw l(:welcome_spotlight_3_title) %></h2>
<p><%= l(:welcome_spotlight_3_text) %></p>
</div>
</section>
</section>
<!-- Three -->
<section id="three" class="frapper style3 special">
<div class="inner">
<header class="major">
<h2><%= l(:welcome_other_features) %></h2>
</header>
<ul class="features">
<li class="fp-icon fp-icon_4">
<h3><%= l(:welcome_feature_1_title) %></h3>
<p><%= l(:welcome_feature_1_text) %></p>
</li>
<li class="fp-icon fp-icon_5">
<h3><%= l(:welcome_feature_2_title) %></h3>
<p><%= l(:welcome_feature_2_text) %></p>
</li>
<li class="fp-icon fp-icon_6">
<h3><%= l(:welcome_feature_3_title) %></h3>
<p><%= l(:welcome_feature_3_text) %></p>
</li>
<li class="fp-icon fp-icon_7">
<h3><%= l(:welcome_feature_4_title) %></h3>
<p><%= l(:welcome_feature_4_text) %></p>
</li>
<li class="fp-icon fp-icon_8">
<h3><%= l(:welcome_feature_5_title) %></h3>
<p><%= l(:welcome_feature_5_text) %></p>
</li>
<li class="fp-icon fp-icon_9">
<h3><%= l(:welcome_feature_6_title) %></h3>
<p><%= l(:welcome_feature_6_text) %></p>
</li>
</ul>
</div>
</section>
<!-- Login -->
<section id="fp-login" class="frapper style4">
<div class="inner">
<%= call_hook :view_account_login_top %>
<div id="login-form">
<h2><%= l(:label_login) %></h2>
<%= form_tag(signin_path, onsubmit: 'return keepAnchorOnSignIn(this);') do %>
<%= back_url_hidden_field_tag %>
<label for="username"><%=l(:field_login)%></label>
<%= text_field_tag 'username', params[:username], :tabindex => '1' %>
<label for="password">
<%=l(:field_password)%>
<%= link_to l(:label_password_lost), lost_password_path, :class => "lost_password" if Setting.lost_password? %>
</label>
<%= password_field_tag 'password', nil, :tabindex => '2' %>
<% if Setting.openid? %>
<label for="openid_url"><%=l(:field_identity_url)%></label>
<%= text_field_tag "openid_url", nil, :tabindex => '3' %>
<% end %>
<% if Setting.autologin? %>
<label for="autologin"><%= check_box_tag 'autologin', 1, false, :tabindex => 4 %> <%= l(:label_stay_logged_in) %></label>
<% end %>
<input type="submit" name="login" value="<%=l(:button_login)%>" tabindex="5" id="login-submit" />
<% end %>
</div>
<%= call_hook :view_account_login_bottom %>
</div>
</section>
<!-- CTA -->
<section id="fp-cta" class="frapper style4">
<div class="inner">
<header>
<h2><%= l(:welcome_any_questions) %></h2>
<p><%= l(:welcome_please_contact) %></p>
</header>
<ul class="actions stacked">
<li><a href="https://manuel.cillero.es/contact" class="button fit primary"><%= l(:welcome_contact) %></a></li>
<li><a href="https://manuel.cillero.es" class="button fit"><%= l(:welcome_about_me) %></a></li>
</ul>
</div>
</section>
</div>
<script src="/themes/circlepro/javascripts/frontpage/jquery.scrolly.min.js"></script>
<script src="/themes/circlepro/javascripts/frontpage/browser.min.js"></script>
<script src="/themes/circlepro/javascripts/frontpage/breakpoints.min.js"></script>
<script src="/themes/circlepro/javascripts/frontpage/util.js"></script>
<script src="/themes/circlepro/javascripts/frontpage/main.js"></script>
<% end %>

View file

@ -1209,3 +1209,40 @@ en:
description_issue_category_reassign: Choose issue category description_issue_category_reassign: Choose issue category
description_wiki_subpages_reassign: Choose new parent page description_wiki_subpages_reassign: Choose new parent page
text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.' text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.'
welcome_suitepro: Planning, knowledge sharing, clients support and personal productivity, with both powerful and simplicity in mind.
welcome_discover: Discover
welcome_suitepro_is_redmine: "%{suitepro} is powered by %{redmine}, the popular project management and issue tracking solution based on the Ruby on Rails framework. Redmine lets us have a powerful workflow for getting tasks done and keep information in one place."
welcome_spotlight_1_title: "The Basics: Projects,<br /> Tasks, Issue Tracking"
welcome_spotlight_1_text: Keep track of everything, with visual indicators to monitorize tasks and subtasks in order to stay up to date with milestones, track of time, workflows and all that requires attention.
welcome_spotlight_2_title: "Documents, Wikis,<br /> File Management"
welcome_spotlight_2_text: Keep documents and files availables wherever you are. Use the wiki project to save project requeriments, attached files, install and user guides, or meeting minutes at your fingertips.
welcome_spotlight_3_title: "Flexible control<br /> of user access"
welcome_spotlight_3_text: Using a role-based approach, roles are a collection of permissions outlining how users can operate with the projects. Each member of a project can have one or more roles assigned by administrators.
welcome_other_features: Other Features
welcome_feature_1_title: Gantt Chart And Calendar
welcome_feature_1_text: The gantt chart displays issues that have a start date and a due date. The calendar provides an overview of a project as a monthly view.
welcome_feature_2_title: News And Forums
welcome_feature_2_text: News to show information about the status of projects or any other subjects. The forums allow users from a project to communicate with each others.
welcome_feature_3_title: Email notifications And Feeds
welcome_feature_3_text: SuitePro can be configured to receive notifications via email. It also provides web feeds to use with external readers or aggregators.
welcome_feature_4_title: Code Repositories
welcome_feature_4_text: Version Control Systems like Git or Subversion can be used as code repositories and also keep track of changes made to the code.
welcome_feature_5_title: Responsive Design
welcome_feature_5_text: SuitePro is optimized to look great on mobile devices thanks to its responsive design. All pages adapt automatically to the screen size on a mobile phone, tablet or desktop computer.
welcome_feature_6_title: Is Open Source Software
welcome_feature_6_text: It means you are not locked into using a particular vendors system, and its continually evolving in real time as developers add to it and modify it.
welcome_any_questions: Any Questions?
welcome_please_contact: Please feel free to contact me if you need any further information.
welcome_contact: Contact
welcome_about_me: More About Me
link_my_blog: My Blog
label_legal: Legal notice
label_legal_privacy: Privacy policy
label_legal_cookies: Cookies policy
label_legal_conditions: Terms of use

View file

@ -1256,3 +1256,41 @@ es:
permission_view_news: View news permission_view_news: View news
label_no_preview_alternative_html: No preview available. %{link} the file instead. label_no_preview_alternative_html: No preview available. %{link} the file instead.
label_no_preview_download: Download label_no_preview_download: Download
welcome_suitepro: Potencia y sencillez para planificar, compartir conocimiento, prestar soporte a clientes y acelerar la productividad.
welcome_discover: Descubre
welcome_suitepro_is_redmine: "%{suitepro} es %{redmine}, la conocida herramienta para la gestión de proyectos y el seguimiento de peticiones basada en Ruby on Rails. Redmine apremia la finalización de las tareas y mantiene la información en un único sitio."
welcome_spotlight_1_title: "Lo Básico: Proyectos,<br /> Tareas, Peticiones"
welcome_spotlight_1_text: Podrás hacer un seguimiento completo de todo, monitorizar tareas y subtareas para estar al día de los hitos de proyecto, controlar los tiempos, los flujos de trabajo o cualquier elemento que requiera atención.
welcome_spotlight_2_title: "Documentos, Wikis,<br /> Gestión de Archivos"
welcome_spotlight_2_text: Organizados para disponer de los documentos y los archivos allá donde se esté. Y el wiki de proyecto para estructurar los requerimientos, las guías de instalación y de usuario, o las actas de trabajo.
welcome_spotlight_3_title: "Control de accesos<br /> flexible"
welcome_spotlight_3_text: Usando permisos agrupados en roles para establecer cómo pueden operar los usuarios en los proyectos. Cada miembro de un proyecto podrá tener uno o más roles asignados por los administradores.
welcome_other_features: Otras Características
welcome_feature_1_title: Diagrama de Gantt y Calendario
welcome_feature_1_text: El diagrama de Gantt muestra las tareas que tienen fecha de inicio y vencimiento. Y el calendario da una visión general de los proyectos en una vista mensual.
welcome_feature_2_title: Noticias y Foros
welcome_feature_2_text: Las noticias muestran información sobre novedades en los proyectos u otros temas de interés. Y los foros permiten que los usuarios de un proyecto se comuniquen entre sí.
welcome_feature_3_title: Notificaciones y Sindicación
welcome_feature_3_text: SuitePro se puede configurar para recibir notificaciones por correo electrónico. Y también proporciona sindicaciones para utilizar con agregadores externos.
welcome_feature_4_title: Repositorios de Código
welcome_feature_4_text: Sistemas de Control de Versiones como Git o Subversion pueden usarse como repositorios de código y seguir desde SuitePro los cambios realizados en el código.
welcome_feature_5_title: Responsive Design
welcome_feature_5_text: SuitePro está optimizado para visualizarse en dispositivos móviles. Las páginas se adaptan automáticamente al tamaño de la pantalla, ya sea un teléfono móvil, una tableta o un ordenador.
welcome_feature_6_title: Es Software de Código Abierto
welcome_feature_6_text: Esto supone no estar limitado por ningún proveedor, y seguir en permanente evolución con desarrolladores que se involucran continuamente.
welcome_any_questions: ¿Alguna Pregunta?
welcome_please_contact: No dudar en contactar conmigo para obtener más información.
welcome_contact: Contactar
welcome_about_me: Más Sobre Mí
link_my_blog: Mi blog personal
label_legal: Aviso legal
label_legal_privacy: Política de privacidad
label_legal_cookies: Uso de cookies
label_legal_conditions: Términos de uso

View file

@ -10,10 +10,28 @@
<glyph glyph-name="mail" unicode="&#xe801;" d="M30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" /> <glyph glyph-name="mail" unicode="&#xe801;" d="M30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
<glyph glyph-name="blog" unicode="&#xe802;" d="M85 749l608 0c57 0 83-26 83-85l0-387c0-55-26-82-83-82l-274 0-303-244 63 244-94 0c-57 0-85 27-85 84l0 385c0 59 28 86 85 85z m75-157l0-83 456 0 0 83-456 0z m456-239l0 82-456 0 0-82 456 0z" horiz-adv-x="776" /> <glyph glyph-name="open" unicode="&#xe802;" d="M678 793q86 0 146-61t61-147l0-156q0-21-15-37t-36-16-37 16-16 37l0 156q0 44-30 74t-73 30q-44 0-75-31t-30-73l0-105 52 0q43 0 73-31t31-73l0-365q0-42-31-73t-73-31l-521 0q-44 0-74 31t-30 73l0 365q0 43 30 73t74 31l156 0 0-51 209 0 0 156q0 86 61 147t148 61z m-313-744q28 0 48 20t20 47-20 48-48 20-47-20-20-48 20-47 47-20z" horiz-adv-x="885" />
<glyph glyph-name="projects" unicode="&#xe803;" d="M500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-8-6l-87-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-12-17-46-50t-43-33q-7 0-12 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v104q0 5 4 10t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 12 12 16 46 49t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 42-17l65 49q5 4 12 4 6 0 11-4 81-75 81-90 0-4-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q6-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-37q12 1 17 1t17-1q28 39 51 62l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
<glyph glyph-name="tasks" unicode="&#xe804;" d="M868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
<glyph glyph-name="news" unicode="&#xe805;" d="M0-25l0 625q0 39 27 66t67 28l31 0 0 62q0 39 27 67t67 27l687 0q39 0 67-27t27-67l0-781q0-53-36-89t-89-36l-750 0q-53 0-89 36t-36 89z m63 0q0-25 18-44t44-19l750 0q25 0 44 19t18 44l0 781q0 14-8 23t-23 8l-687 0q-14 0-23-8t-8-23l0-750q0-13-9-22t-23-9-22 9-9 22l0 625-31 0q-14 0-23-9t-8-22l0-625z m187 16q0 15 16 15l250 0q15 0 15-15t-15-16l-250 0q-16 0-16 16z m0 93q0 16 16 16l250 0q15 0 15-16t-15-15l-250 0q-16 0-16 15z m0 94q0 16 16 16l250 0q15 0 15-16 0-6-5-11t-10-4l-250 0q-16 0-16 15z m0 94q0 16 16 16l593 0q16 0 16-16t-16-16l-593 0q-16 0-16 16z m0 94q0 15 16 15l593 0q16 0 16-15t-16-16l-593 0q-16 0-16 16z m0 109l0 219q0 13 9 22t22 9l219 0q14 0 22-9t9-22l0-219q0-14-9-22t-22-9l-219 0q-13 0-22 9t-9 22z m63 31l156 0 0 156-156 0 0-156z m281-515q0 15 15 15l250 0q16 0 16-15t-16-16l-250 0q-15 0-15 16z m0 93q0 16 15 16l250 0q16 0 16-16t-16-15l-250 0q-15 0-15 15z m0 94q0 16 15 16l250 0q16 0 16-16 0-6-5-11t-11-4l-250 0q-15 0-15 15z m0 281q0 16 15 16l250 0q16 0 16-16t-16-15l-250 0q-15 0-15 15z m0 94q0 16 15 16l250 0q16 0 16-16t-16-15l-250 0q-15 0-15 15z m0 94q0 15 15 15l250 0q16 0 16-15t-16-16l-250 0q-15 0-15 16z" horiz-adv-x="1000" />
<glyph glyph-name="notifications" unicode="&#xe806;" d="M0-29l324 342 176-100 176 100 324-342-1000 0z m0 114l0 414 254-147z m0 503l0 141 1000 0 0-141-500-285z m746-236l254 147 0-414z" horiz-adv-x="1000" />
<glyph glyph-name="wordpress" unicode="&#xe808;" d="M0 350q0 136 67 251t182 182 251 67 251-67 182-182 67-251-67-251-182-182-251-67-251 67-182 182-67 251z m39 0q0-135 72-247t188-168l-220 603q-40-89-40-188z m75 253l30 0q48 0 123 6 12 1 18-8t1-19-16-11l-53-5 168-499 101 302-72 197q-24 3-48 5-12 1-16 11t2 19 17 8l121-6q49 0 123 6 12 1 18-8t1-19-16-11l-52-5 166-496 46 154q36 117 36 149 0 64-39 128-2 3-12 21t-14 24-9 19-8 23-2 21q0 33 23 58t55 24q1 0 3 0t3-1q-131 121-312 121-119 0-221-56t-165-152z m256-696q62-18 130-18 80 0 153 26l-3 6-142 389z m362 44q105 61 167 168t62 231q0 120-56 221 3-21 3-47 0-63-35-165z" horiz-adv-x="1000" />
<glyph glyph-name="github" unicode="&#xf09b;" d="M429 779q116 0 215-58t156-156 57-215q0-140-82-252t-211-155q-15-3-22 4t-7 17q0 1 0 43t0 75q0 54-29 79 32 3 57 10t53 22 45 37 30 58 11 84q0 67-44 115 21 51-4 114-16 5-46-6t-51-25l-21-13q-52 15-107 15t-108-15q-8 6-23 15t-47 22-47 7q-25-63-5-114-44-48-44-115 0-47 12-83t29-59 45-37 52-22 57-10q-21-20-27-58-12-5-25-8t-32-3-36 12-31 35q-11 18-27 29t-28 14l-11 1q-12 0-16-2t-3-7 5-8 7-6l4-3q12-6 24-21t18-29l6-13q7-21 24-34t37-17 39-3 31 1l13 3q0-22 0-50t1-30q0-10-8-17t-22-4q-129 43-211 155t-82 252q0 117 58 215t155 156 216 58z m-267-616q2 4-3 7-6 1-8-1-1-4 4-7 5-3 7 1z m18-19q4 3-1 9-6 5-9 2-4-3 1-9 5-6 9-2z m16-25q6 4 0 11-4 7-9 3-5-3 0-10t9-4z m24-23q4 4-2 10-7 7-11 2-5-5 2-11 6-6 11-1z m32-14q1 6-8 9-8 2-10-4t7-9q8-3 11 4z m35-3q0 7-10 6-9 0-9-6 0-7 10-6 9 0 9 6z m32 5q-1 7-10 5-9-1-8-8t10-4 8 7z" horiz-adv-x="857.1" /> <glyph glyph-name="github" unicode="&#xf09b;" d="M429 779q116 0 215-58t156-156 57-215q0-140-82-252t-211-155q-15-3-22 4t-7 17q0 1 0 43t0 75q0 54-29 79 32 3 57 10t53 22 45 37 30 58 11 84q0 67-44 115 21 51-4 114-16 5-46-6t-51-25l-21-13q-52 15-107 15t-108-15q-8 6-23 15t-47 22-47 7q-25-63-5-114-44-48-44-115 0-47 12-83t29-59 45-37 52-22 57-10q-21-20-27-58-12-5-25-8t-32-3-36 12-31 35q-11 18-27 29t-28 14l-11 1q-12 0-16-2t-3-7 5-8 7-6l4-3q12-6 24-21t18-29l6-13q7-21 24-34t37-17 39-3 31 1l13 3q0-22 0-50t1-30q0-10-8-17t-22-4q-129 43-211 155t-82 252q0 117 58 215t155 156 216 58z m-267-616q2 4-3 7-6 1-8-1-1-4 4-7 5-3 7 1z m18-19q4 3-1 9-6 5-9 2-4-3 1-9 5-6 9-2z m16-25q6 4 0 11-4 7-9 3-5-3 0-10t9-4z m24-23q4 4-2 10-7 7-11 2-5-5 2-11 6-6 11-1z m32-14q1 6-8 9-8 2-10-4t7-9q8-3 11 4z m35-3q0 7-10 6-9 0-9-6 0-7 10-6 9 0 9 6z m32 5q-1 7-10 5-9-1-8-8t10-4 8 7z" horiz-adv-x="857.1" />
<glyph glyph-name="gantt" unicode="&#xf0ae;" d="M571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-14-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
<glyph glyph-name="desktop" unicode="&#xf108;" d="M1000 296v465q0 7-5 12t-13 6h-893q-7 0-12-6t-6-12v-465q0-7 6-12t12-5h893q7 0 13 5t5 12z m71 465v-607q0-37-26-63t-63-27h-303q0-20 9-43t17-40 9-24q0-14-10-25t-25-11h-286q-15 0-25 11t-11 25q0 8 9 25t18 39 9 43h-304q-36 0-63 27t-26 63v607q0 37 26 63t63 26h893q37 0 63-26t26-63z" horiz-adv-x="1071.4" />
<glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
<glyph glyph-name="ruby" unicode="&#xf219;" d="M118 421l348-371-167 371h-181z m453-430l195 430h-389z m-271 502l114 214h-146l-161-214h193z m377-443l348 371h-181z m-296 443h381l-114 214h-153z m462 0h193l-161 214h-146z m78 271l215-286q7-10 7-23t-10-22l-535-572q-10-11-27-11t-26 11l-535 572q-9 9-10 22t7 23l215 286q10 15 28 15h643q18 0 28-15z" horiz-adv-x="1142.9" />
<glyph glyph-name="gitlab" unicode="&#xf296;" d="M58 456l442-566-484 351q-10 7-14 19t0 24l56 172z m258 0h368l-184-566z m-111 342l111-342h-258l111 342q4 12 18 12t18-12z m737-342l56-172q4-12 0-24t-14-19l-484-351 442 566z m0 0h-258l111 342q4 12 18 12t19-12z" horiz-adv-x="1000" /> <glyph glyph-name="gitlab" unicode="&#xf296;" d="M58 456l442-566-484 351q-10 7-14 19t0 24l56 172z m258 0h368l-184-566z m-111 342l111-342h-258l111 342q4 12 18 12t18-12z m737-342l56-172q4-12 0-24t-14-19l-484-351 442 566z m0 0h-258l111 342q4 12 18 12t19-12z" horiz-adv-x="1000" />
<glyph glyph-name="twitter" unicode="&#xf309;" d="M920 636q-36-54-94-98l0-24q0-130-60-250t-186-203-290-83q-160 0-290 84 14-2 46-2 132 0 234 80-62 2-110 38t-66 94q10-4 34-4 26 0 50 6-66 14-108 66t-42 120l0 2q36-20 84-24-84 58-84 158 0 48 26 94 154-188 390-196-6 18-6 42 0 78 55 133t135 55q82 0 136-58 60 12 120 44-20-66-82-104 56 8 108 30z" horiz-adv-x="920" /> <glyph glyph-name="twitter" unicode="&#xf309;" d="M920 636q-36-54-94-98l0-24q0-130-60-250t-186-203-290-83q-160 0-290 84 14-2 46-2 132 0 234 80-62 2-110 38t-66 94q10-4 34-4 26 0 50 6-66 14-108 66t-42 120l0 2q36-20 84-24-84 58-84 158 0 48 26 94 154-188 390-196-6 18-6 42 0 78 55 133t135 55q82 0 136-58 60 12 120 44-20-66-82-104 56 8 108 30z" horiz-adv-x="920" />

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Before After
Before After

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30px" height="30px" viewBox="0 0 30 30" zoomAndPan="disable" preserveAspectRatio="none">
<style type="text/css"><![CDATA[ line { stroke: #ffffff; stroke-width: 3; } ]]></style>
<line x1="0" y1="15" x2="15" y2="30" />
<line x1="30" y1="15" x2="15" y2="30" />
<line x1="15" y1="30" x2="15" y2="0" />
</svg>

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View file

@ -0,0 +1,2 @@
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e<t.events.length;e++)n=t.events[e],t.active(n.query)?n.state||(n.state=!0,n.handler()):n.state&&(n.state=!1)}};return e._=t,e.on=function(e,n){t.on(e,n)},e.active=function(e){return t.active(e)},e}();!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.breakpoints=t()}(this,function(){return breakpoints});

View file

@ -0,0 +1,2 @@
/* browser.js v1.0 | @ajlkn | MIT licensed */
var browser=function(){"use strict";var e={name:null,version:null,os:null,osVersion:null,touch:null,mobile:null,_canUse:null,canUse:function(n){e._canUse||(e._canUse=document.createElement("div"));var o=e._canUse.style,r=n.charAt(0).toUpperCase()+n.slice(1);return n in o||"Moz"+r in o||"Webkit"+r in o||"O"+r in o||"ms"+r in o},init:function(){var n,o,r,i,t=navigator.userAgent;for(n="other",o=0,r=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(RegExp.$1);break}for(e.name=n,e.version=o,n="other",o=0,r=[["ios",/([0-9_]+) like Mac OS X/,function(e){return e.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(e){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(e){return e.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null],["linux",/Linux/,null],["bsd",/BSD/,null],["unix",/X11/,null]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(r[i][2]?r[i][2](RegExp.$1):RegExp.$1);break}e.os=n,e.osVersion=o,e.touch="wp"==e.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),e.mobile="wp"==e.os||"android"==e.os||"ios"==e.os||"bb"==e.os}};return e.init(),e}();!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.browser=n()}(this,function(){return browser});

View file

@ -0,0 +1,2 @@
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);

View file

@ -0,0 +1,53 @@
/*
Spectral by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/
(function($) {
var $window = $(window),
$body = $('body'),
$wrapper = $('#fp'),
$banner = $('#fp-banner'),
$header = $('#header');
// Breakpoints.
breakpoints({
xlarge: [ '1281px', '1680px' ],
large: [ '981px', '1280px' ],
medium: [ '737px', '980px' ],
small: [ '481px', '736px' ],
xsmall: [ null, '480px' ]
});
// Play initial animations on page load.
$window.on('load', function() {
window.setTimeout(function() {
$body.removeClass('is-preload');
}, 100);
});
// Mobile?
if (browser.mobile)
$body.addClass('is-mobile');
else {
breakpoints.on('>medium', function() {
$body.removeClass('is-mobile');
});
breakpoints.on('<=medium', function() {
$body.addClass('is-mobile');
});
}
// Scrolly.
$('.scrolly')
.scrolly({
speed: 1500,
offset: $header.outerHeight() + 31
});
})(jQuery);

View file

@ -0,0 +1,587 @@
(function($) {
/**
* Generate an indented list of links from a nav. Meant for use with panel().
* @return {jQuery} jQuery object.
*/
$.fn.navList = function() {
var $this = $(this);
$a = $this.find('a'),
b = [];
$a.each(function() {
var $this = $(this),
indent = Math.max(0, $this.parents('li').length - 1),
href = $this.attr('href'),
target = $this.attr('target');
b.push(
'<a ' +
'class="link depth-' + indent + '"' +
( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
'>' +
'<span class="indent-' + indent + '"></span>' +
$this.text() +
'</a>'
);
});
return b.join('');
};
/**
* Panel-ify an element.
* @param {object} userConfig User config.
* @return {jQuery} jQuery object.
*/
$.fn.panel = function(userConfig) {
// No elements?
if (this.length == 0)
return $this;
// Multiple elements?
if (this.length > 1) {
for (var i=0; i < this.length; i++)
$(this[i]).panel(userConfig);
return $this;
}
// Vars.
var $this = $(this),
$body = $('body'),
$window = $(window),
id = $this.attr('id'),
config;
// Config.
config = $.extend({
// Delay.
delay: 0,
// Hide panel on link click.
hideOnClick: false,
// Hide panel on escape keypress.
hideOnEscape: false,
// Hide panel on swipe.
hideOnSwipe: false,
// Reset scroll position on hide.
resetScroll: false,
// Reset forms on hide.
resetForms: false,
// Side of viewport the panel will appear.
side: null,
// Target element for "class".
target: $this,
// Class to toggle.
visibleClass: 'visible'
}, userConfig);
// Expand "target" if it's not a jQuery object already.
if (typeof config.target != 'jQuery')
config.target = $(config.target);
// Panel.
// Methods.
$this._hide = function(event) {
// Already hidden? Bail.
if (!config.target.hasClass(config.visibleClass))
return;
// If an event was provided, cancel it.
if (event) {
event.preventDefault();
event.stopPropagation();
}
// Hide.
config.target.removeClass(config.visibleClass);
// Post-hide stuff.
window.setTimeout(function() {
// Reset scroll position.
if (config.resetScroll)
$this.scrollTop(0);
// Reset forms.
if (config.resetForms)
$this.find('form').each(function() {
this.reset();
});
}, config.delay);
};
// Vendor fixes.
$this
.css('-ms-overflow-style', '-ms-autohiding-scrollbar')
.css('-webkit-overflow-scrolling', 'touch');
// Hide on click.
if (config.hideOnClick) {
$this.find('a')
.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
$this
.on('click', 'a', function(event) {
var $a = $(this),
href = $a.attr('href'),
target = $a.attr('target');
if (!href || href == '#' || href == '' || href == '#' + id)
return;
// Cancel original event.
event.preventDefault();
event.stopPropagation();
// Hide panel.
$this._hide();
// Redirect to href.
window.setTimeout(function() {
if (target == '_blank')
window.open(href);
else
window.location.href = href;
}, config.delay + 10);
});
}
// Event: Touch stuff.
$this.on('touchstart', function(event) {
$this.touchPosX = event.originalEvent.touches[0].pageX;
$this.touchPosY = event.originalEvent.touches[0].pageY;
})
$this.on('touchmove', function(event) {
if ($this.touchPosX === null
|| $this.touchPosY === null)
return;
var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
th = $this.outerHeight(),
ts = ($this.get(0).scrollHeight - $this.scrollTop());
// Hide on swipe?
if (config.hideOnSwipe) {
var result = false,
boundary = 20,
delta = 50;
switch (config.side) {
case 'left':
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
break;
case 'right':
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
break;
case 'top':
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
break;
case 'bottom':
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
break;
default:
break;
}
if (result) {
$this.touchPosX = null;
$this.touchPosY = null;
$this._hide();
return false;
}
}
// Prevent vertical scrolling past the top or bottom.
if (($this.scrollTop() < 0 && diffY < 0)
|| (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
event.preventDefault();
event.stopPropagation();
}
});
// Event: Prevent certain events inside the panel from bubbling.
$this.on('click touchend touchstart touchmove', function(event) {
event.stopPropagation();
});
// Event: Hide panel if a child anchor tag pointing to its ID is clicked.
$this.on('click', 'a[href="#' + id + '"]', function(event) {
event.preventDefault();
event.stopPropagation();
config.target.removeClass(config.visibleClass);
});
// Body.
// Event: Hide panel on body click/tap.
$body.on('click touchend', function(event) {
$this._hide(event);
});
// Event: Toggle.
$body.on('click', 'a[href="#' + id + '"]', function(event) {
event.preventDefault();
event.stopPropagation();
config.target.toggleClass(config.visibleClass);
});
// Window.
// Event: Hide on ESC.
if (config.hideOnEscape)
$window.on('keydown', function(event) {
if (event.keyCode == 27)
$this._hide(event);
});
return $this;
};
/**
* Apply "placeholder" attribute polyfill to one or more forms.
* @return {jQuery} jQuery object.
*/
$.fn.placeholder = function() {
// Browser natively supports placeholders? Bail.
if (typeof (document.createElement('input')).placeholder != 'undefined')
return $(this);
// No elements?
if (this.length == 0)
return $this;
// Multiple elements?
if (this.length > 1) {
for (var i=0; i < this.length; i++)
$(this[i]).placeholder();
return $this;
}
// Vars.
var $this = $(this);
// Text, TextArea.
$this.find('input[type=text],textarea')
.each(function() {
var i = $(this);
if (i.val() == ''
|| i.val() == i.attr('placeholder'))
i
.addClass('polyfill-placeholder')
.val(i.attr('placeholder'));
})
.on('blur', function() {
var i = $(this);
if (i.attr('name').match(/-polyfill-field$/))
return;
if (i.val() == '')
i
.addClass('polyfill-placeholder')
.val(i.attr('placeholder'));
})
.on('focus', function() {
var i = $(this);
if (i.attr('name').match(/-polyfill-field$/))
return;
if (i.val() == i.attr('placeholder'))
i
.removeClass('polyfill-placeholder')
.val('');
});
// Password.
$this.find('input[type=password]')
.each(function() {
var i = $(this);
var x = $(
$('<div>')
.append(i.clone())
.remove()
.html()
.replace(/type="password"/i, 'type="text"')
.replace(/type=password/i, 'type=text')
);
if (i.attr('id') != '')
x.attr('id', i.attr('id') + '-polyfill-field');
if (i.attr('name') != '')
x.attr('name', i.attr('name') + '-polyfill-field');
x.addClass('polyfill-placeholder')
.val(x.attr('placeholder')).insertAfter(i);
if (i.val() == '')
i.hide();
else
x.hide();
i
.on('blur', function(event) {
event.preventDefault();
var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
if (i.val() == '') {
i.hide();
x.show();
}
});
x
.on('focus', function(event) {
event.preventDefault();
var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
x.hide();
i
.show()
.focus();
})
.on('keypress', function(event) {
event.preventDefault();
x.val('');
});
});
// Events.
$this
.on('submit', function() {
$this.find('input[type=text],input[type=password],textarea')
.each(function(event) {
var i = $(this);
if (i.attr('name').match(/-polyfill-field$/))
i.attr('name', '');
if (i.val() == i.attr('placeholder')) {
i.removeClass('polyfill-placeholder');
i.val('');
}
});
})
.on('reset', function(event) {
event.preventDefault();
$this.find('select')
.val($('option:first').val());
$this.find('input,textarea')
.each(function() {
var i = $(this),
x;
i.removeClass('polyfill-placeholder');
switch (this.type) {
case 'submit':
case 'reset':
break;
case 'password':
i.val(i.attr('defaultValue'));
x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
if (i.val() == '') {
i.hide();
x.show();
}
else {
i.show();
x.hide();
}
break;
case 'checkbox':
case 'radio':
i.attr('checked', i.attr('defaultValue'));
break;
case 'text':
case 'textarea':
i.val(i.attr('defaultValue'));
if (i.val() == '') {
i.addClass('polyfill-placeholder');
i.val(i.attr('placeholder'));
}
break;
default:
i.val(i.attr('defaultValue'));
break;
}
});
});
return $this;
};
/**
* Moves elements to/from the first positions of their respective parents.
* @param {jQuery} $elements Elements (or selector) to move.
* @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
*/
$.prioritize = function($elements, condition) {
var key = '__prioritize';
// Expand $elements if it's not already a jQuery object.
if (typeof $elements != 'jQuery')
$elements = $($elements);
// Step through elements.
$elements.each(function() {
var $e = $(this), $p,
$parent = $e.parent();
// No parent? Bail.
if ($parent.length == 0)
return;
// Not moved? Move it.
if (!$e.data(key)) {
// Condition is false? Bail.
if (!condition)
return;
// Get placeholder (which will serve as our point of reference for when this element needs to move back).
$p = $e.prev();
// Couldn't find anything? Means this element's already at the top, so bail.
if ($p.length == 0)
return;
// Move element to top of parent.
$e.prependTo($parent);
// Mark element as moved.
$e.data(key, $p);
}
// Moved already?
else {
// Condition is true? Bail.
if (condition)
return;
$p = $e.data(key);
// Move element back to its original location (using our placeholder).
$e.insertAfter($p);
// Unmark element as moved.
$e.removeData(key);
}
});
};
})(jQuery);

View file

@ -66,6 +66,16 @@ if (window.jQuery) {
$("a").filter(function() { $("a").filter(function() {
return this.hostname && this.hostname !== location.hostname; return this.hostname && this.hostname !== location.hostname;
}).addClass("external").attr("target", "_blank"); }).addClass("external").attr("target", "_blank");
});
// Scroll to top:
$(window).scroll(function(){
if ($(this).scrollTop() > 100) {
$('#scrollup').fadeIn();
} else {
$('#scrollup').fadeOut();
}
}); });
} else { } else {
document.observe("dom:loaded", function() { document.observe("dom:loaded", function() {

View file

@ -36,7 +36,11 @@
/**********************************************************/ /**********************************************************/
html { html {
background: transparent url(../images/bg_wa.png) repeat-x 0 bottom; height: 100%;
}
body {
min-height: 100%;
background-color: #182330;
} }
#wrapper-top-menu, #wrapper-top-menu,
@ -259,7 +263,7 @@ div.wiki .external {
.icon-rss:before { content: '\e800'; } .icon-rss:before { content: '\e800'; }
.icon-mail:before { content: '\e801'; } .icon-mail:before { content: '\e801'; }
.icon-blog:before { content: '\e802'; } .icon-blog:before { content: '\e808'; }
.icon-github:before { content: '\f09b'; } .icon-github:before { content: '\f09b'; }
.icon-gitlab:before { content: '\f296'; } .icon-gitlab:before { content: '\f296'; }
.icon-twitter:before { content: '\f309'; } .icon-twitter:before { content: '\f309'; }
@ -320,6 +324,12 @@ div.wiki .external {
padding-top: 1px; padding-top: 1px;
font-size: 12px; font-size: 12px;
} }
@media screen and (max-width: 899px) {
#quick-search .drdn-trigger {
font-size: 1.85em !important;
line-height: 1.85em !important;
}
}
/**********************************************************/ /**********************************************************/
/* 4. TOP-MENU */ /* 4. TOP-MENU */
@ -565,10 +575,28 @@ ul.social-menu .social-link-mail:hover a {
/* 8. FOOTER */ /* 8. FOOTER */
/**********************************************************/ /**********************************************************/
#scrollup {
width: 40px;
height: 40px;
opacity: 0.2;
position: fixed;
bottom: 50px;
right: 60px;
display: none;
text-indent: -9999px;
background: url(../images/icon2top.png) no-repeat;
z-index: 999;
}
@media screen and (max-width: 899px) {
#scrollup {
bottom: 20px;
right: 20px;
}
}
#footer { #footer {
height: 36px;
padding: 0; padding: 0;
border: 1px solid #182230; border: 1px solid #182330;
background-color: #182330; background-color: #182330;
text-align: left; text-align: left;
font-size: 11px; font-size: 11px;
@ -577,7 +605,7 @@ ul.social-menu .social-link-mail:hover a {
} }
#footer div.bgl { #footer div.bgl {
display: inline-block; display: inline-block;
margin: 14px 0 0 30px; margin: 14px 0 4.4em 30px;
} }
#footer a, #footer a:visited { #footer a, #footer a:visited {
color: #ced4d9; color: #ced4d9;
@ -587,6 +615,23 @@ ul.social-menu .social-link-mail:hover a {
text-decoration: none; text-decoration: none;
} }
#legal {
position: absolute;
margin-top: 2.8em;
line-height: 1.6em;
}
#legal a {
color: #ffbf00;
font-weight: 700;
font-size: 10pt;
}
#legal a:hover,
#legal a:visited {
color: #ffbf00;
text-decoration: underline;
}
/**********************************************************/ /**********************************************************/
/* 9. WIKI */ /* 9. WIKI */
/**********************************************************/ /**********************************************************/
@ -643,17 +688,63 @@ div.flash.warning, .conflict {
/* 11. LOGIN FORM */ /* 11. LOGIN FORM */
/**********************************************************/ /**********************************************************/
body.action-login #main.nosidebar #content { body.action-login #wrapper-main {
background: #ebeae9 url(../images/bg_login.jpg) repeat-x top center; max-width: 100%;
}
body.action-login #wrapper3 {
padding-bottom: 0;
}
body.action-login #content {
background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../images/bg_banner.jpg");
background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../images/bg_banner.jpg");
background-image: -ms-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../images/bg_banner.jpg");
background-image: linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../images/bg_banner.jpg");
background-attachment: fixed;
background-position: center center;
background-repeat: no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
padding: 6em 2.35em;
} }
#login-form { #login-form {
border: 0; border: 0;
border-radius: 0; border-radius: 0;
background-color: rgba(252, 255, 255, 0.45); background-color: rgba(252, 255, 255, 0.45);
margin-top: 3em; margin: 0 auto;
padding: 10px 40px 30px;
width: 440px;
}
#login-form h2 {
font-size: 1.8em;
line-height: 1.75em;
color: #fff;
margin: 0 0 1em 0;
letter-spacing: 0.215em;
text-transform: uppercase;
}
#login-form label {
letter-spacing: 0;
font-size: 15pt;
color: #fff;
line-height: 1.65em;
}
#login-form a.lost_password {
font-size: .85em;
-moz-transition: color 0.2s ease, border-bottom-color 0.2s ease;
-webkit-transition: color 0.2s ease, border-bottom-color 0.2s ease;
-ms-transition: color 0.2s ease, border-bottom-color 0.2s ease;
transition: color 0.2s ease, border-bottom-color 0.2s ease;
border-bottom: dotted 1px;
color: inherit;
text-decoration: none;
}
#login-form a.lost_password:hover {
border-bottom-color: transparent;
} }
#login-form table { #login-form table {
border: 0px; border: 0;
padding: 30px; padding: 30px;
} }
#login-form input[type=text], #login-form input[type=text],
@ -661,9 +752,67 @@ body.action-login #main.nosidebar #content {
height: 39px; height: 39px;
padding: 6px 12px; padding: 6px 12px;
font-size: 18px; font-size: 18px;
color: #3d454c;
} }
#login-form input#login-submit { #login-form input#login-submit {
padding: 0px; padding: 0;
margin-top: 1.65em;
height: 2.65em;
font-size: 20px;
font-weight: 400;
letter-spacing: 1.5px;
text-transform: uppercase;
color: #fff;
background-color: rgba(144, 144, 144, 0.25);
box-shadow: rgb(255, 255, 255) 0px 0px 0px 2px inset;
border-radius: 3px;
}
@media screen and (max-width: 899px) {
body.action-login #project-jump {
display: none;
}
body.action-login #wrapper-header {
background: url(../images/logo.png) no-repeat 12px 0;
}
body.action-login #header {
height: 88px;
}
body.action-login #header h1 {
display: block !important;
padding-left: 15px;
}
body.action-login #header a.mobile-toggle-button {
margin-top: 10px;
border-left: 0;
}
#login-form {
padding-left: 20px;
padding-right: 20px;
}
#login-form h2 {
font-size: 1.65em;
}
#login-form a.lost_password {
font-size: .78em;
}
}
@media screen and (max-width: 767px) {
#login-form {
padding-left: 10px;
padding-right: 10px;
}
#login-form h2 {
font-size: 1.225em;
}
#login-form a.lost_password {
font-size: .68em;
}
}
@media screen and (max-width: 599px) {
#login-form {
margin-top: 0 !important;
}
} }
/**********************************************************/ /**********************************************************/
@ -714,6 +863,7 @@ div.flash + div.contextual {
margin-top: 0; margin-top: 0;
padding-right: 8px; padding-right: 8px;
} }
div#content > div.contextual label[for="closed"],
div#content > div.contextual:first-child a, div#content > div.contextual:first-child a,
div.flash + div.contextual a { div.flash + div.contextual a {
display: inline-block; display: inline-block;
@ -1287,7 +1437,7 @@ div.details { padding: 20px !important; }
} }
@media all and (max-width: 899px) { @media all and (max-width: 899px) {
body #header { body #header {
background-color: #3d454c; background-color: #003346;
} }
#wrapper-header { #wrapper-header {
background-image: none; background-image: none;

File diff suppressed because it is too large Load diff