diff options
| author | Marc Florisson | 2013-04-19 16:49:35 +0200 |
|---|---|---|
| committer | Marc Florisson | 2013-04-19 16:49:35 +0200 |
| commit | a99e5fb5112b862231bfd2ec8411de4be69f7f7e (patch) | |
| tree | b5ca22001de841d622ce2bd5d157cb2d504dd6a9 | |
| parent | 54b5872872ac80513c23406b900a66bfe1cd1996 (diff) | |
| parent | 0912b2a45ab974b70e453d3693fa93d5208e82f5 (diff) | |
| download | chouette-core-a99e5fb5112b862231bfd2ec8411de4be69f7f7e.tar.bz2 | |
Merge branch 'master' into complete_api_v1
73 files changed, 1638 insertions, 1440 deletions
@@ -3,7 +3,7 @@ source 'http://rubygems.org' gem 'rails', '3.2.6' platforms :jruby do - gem 'activerecord-jdbcpostgresql-adapter' + gem 'activerecord-jdbcpostgresql-adapter', '1.2.9' gem 'activerecord-jdbcsqlite3-adapter' gem 'jruby-openssl' gem "jruby-rack-worker" @@ -29,10 +29,10 @@ gem "georuby-ext", "0.0.2" gem 'user_interface', "0.0.2" gem 'gravatar_image_tag' gem 'calendar_helper', "0.2.5" -gem 'cocoon' +gem 'cocoon', "1.1.2" gem 'formtastic' gem 'RedCloth' -gem 'jquery-rails' +gem 'jquery-rails', '2.2.1' gem "modernizr-rails", "~> 2.0.6" # Format Output @@ -45,7 +45,7 @@ gem 'inherited_resources' gem 'will_paginate', '~> 3.0' gem 'ransack' gem 'squeel' -gem 'ninoxe', '0.1.0' +gem 'ninoxe', '0.1.2' gem 'acts_as_list', '0.1.6' gem "acts_as_tree-1.8", '1.1.0', :require => "acts_as_tree" diff --git a/Gemfile.lock b/Gemfile.lock index f7a91bf68..9aebe2e77 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -25,9 +25,9 @@ GEM activesupport (= 3.2.6) arel (~> 3.0.2) tzinfo (~> 0.3.29) - activerecord-jdbc-adapter (1.2.7) - activerecord-jdbcpostgresql-adapter (1.2.7) - activerecord-jdbc-adapter (~> 1.2.7) + activerecord-jdbc-adapter (1.2.9) + activerecord-jdbcpostgresql-adapter (1.2.9) + activerecord-jdbc-adapter (~> 1.2.9) jdbc-postgres (>= 9.1, < 9.3) activerecord-jdbcsqlite3-adapter (1.2.1) activerecord-jdbc-adapter (~> 1.2.1) @@ -66,7 +66,7 @@ GEM xpath (~> 0.1.4) childprocess (0.3.5) ffi (~> 1.0, >= 1.0.6) - cocoon (1.0.22) + cocoon (1.1.2) coffee-rails (3.2.2) coffee-script (>= 2.2.0) railties (~> 3.2.0) @@ -107,8 +107,6 @@ GEM ffi (1.0.11-java) ffi-geos (0.1.1) ffi (>= 1.0.0) - rake (~> 0.9) - rdoc foreigner (1.4.0) activerecord (>= 3.0.0) formtastic (2.2.1) @@ -134,17 +132,17 @@ GEM guard (>= 1.1) has_scope (0.5.1) highline (1.6.15) - hike (1.2.1) - i18n (0.6.1) + hike (1.2.2) + i18n (0.6.4) inherited_resources (1.3.1) has_scope (~> 0.5.0) responders (~> 0.6) jdbc-postgres (9.2.1002.1) jdbc-sqlite3 (3.7.2.1) journey (1.0.4) - jquery-rails (2.1.1) - railties (>= 3.1.0, < 5.0) - thor (~> 0.14) + jquery-rails (2.2.1) + railties (>= 3.0, < 5.0) + thor (>= 0.14, < 2.0) jruby-jars (1.6.7.2) jruby-openssl (0.7.7) bouncy-castle-java (>= 1.5.0146.1) @@ -153,7 +151,7 @@ GEM jruby-rack (>= 1.1.1) json (1.7.7) json (1.7.7-java) - json_pure (1.7.5) + json_pure (1.7.7) launchy (2.1.0) addressable (~> 2.2.6) launchy (2.1.0-java) @@ -174,7 +172,7 @@ GEM map_layers (0.0.4) mime-types (1.19) modernizr-rails (2.0.6) - multi_json (1.6.1) + multi_json (1.7.2) net-scp (1.0.4) net-ssh (>= 1.99.1) net-sftp (2.0.5) @@ -182,13 +180,13 @@ GEM net-ssh (2.6.2) net-ssh-gateway (1.1.0) net-ssh (>= 1.99.1) - ninoxe (0.1.0) + ninoxe (0.1.2) activerecord (>= 3.1.3) acts_as_list (= 0.1.6) foreigner (= 1.4.0) georuby-ext (= 0.0.2) - nokogiri (1.5.5) - nokogiri (1.5.5-java) + nokogiri (1.5.9) + nokogiri (1.5.9-java) open4 (1.3.0) orm_adapter (0.4.0) pg (0.11.0) @@ -220,7 +218,7 @@ GEM rake (>= 0.8.7) rdoc (~> 3.4) thor (>= 0.14.6, < 2.0) - rake (0.9.6) + rake (10.0.4) ransack (0.7.0) actionpack (~> 3.0) activerecord (~> 3.0) @@ -287,12 +285,12 @@ GEM therubyrhino (2.0.1) therubyrhino_jar (>= 1.7.3) therubyrhino_jar (1.7.4) - thor (0.17.0) - tilt (1.3.3) + thor (0.18.1) + tilt (1.3.6) treetop (1.4.12) polyglot polyglot (>= 0.3.1) - tzinfo (0.3.35) + tzinfo (0.3.37) uglifier (1.2.7) execjs (>= 0.3.0) multi_json (~> 1.3) @@ -316,7 +314,7 @@ PLATFORMS DEPENDENCIES RedCloth SyslogLogger - activerecord-jdbcpostgresql-adapter + activerecord-jdbcpostgresql-adapter (= 1.2.9) activerecord-jdbcsqlite3-adapter acts_as_list (= 0.1.6) acts_as_tree-1.8 (= 1.1.0) @@ -324,7 +322,7 @@ DEPENDENCIES capistrano capistrano-ext capybara - cocoon + cocoon (= 1.1.2) coffee-rails (~> 3.2.1) coffee-script-source delayed_job_active_record @@ -338,14 +336,14 @@ DEPENDENCIES guard guard-rspec inherited_resources - jquery-rails + jquery-rails (= 2.2.1) jruby-openssl jruby-rack-worker json launchy map_layers (= 0.0.4) modernizr-rails (~> 2.0.6) - ninoxe (= 0.1.0) + ninoxe (= 0.1.2) pg (~> 0.11.0) rabl rails (= 3.2.6) diff --git a/README.textile b/README.textile index ac5d04707..94a4d75c9 100644 --- a/README.textile +++ b/README.textile @@ -34,6 +34,13 @@ The fact that you are presently reading this means that you have had knowledge o h2. Notes de version +h3. V2.0.3 + +* Ajout des imports/export NeTex +* Fonctionnement sous windows +* Prise en compte de grandes quantités de calendriers. +* Reprise des logs d'import Neptune + h3. V2.0.2 * Ajout de l'import GTFS (expérimental, ne traite pas les stations) diff --git a/app/assets/javascripts/exports.js.coffee b/app/assets/javascripts/exports.js.coffee index 6de0d4692..6430c38ba 100644 --- a/app/assets/javascripts/exports.js.coffee +++ b/app/assets/javascripts/exports.js.coffee @@ -18,6 +18,6 @@ jQuery -> export_type_change = (event) -> export_type = $("select option:selected").attr("value") - $(form).toggle($(form).is("#" + export_type + "_new")) for form in $('form.export') + $(form).toggle($(form).is("#" + export_type + "_new")) for form in $('form.export[method = "post"]') $('#export_type').change(export_type_change) diff --git a/app/assets/javascripts/group_of_line.js.coffee b/app/assets/javascripts/group_of_line.js.coffee index c49b0d54a..315fb19e6 100644 --- a/app/assets/javascripts/group_of_line.js.coffee +++ b/app/assets/javascripts/group_of_line.js.coffee @@ -12,4 +12,4 @@ jQuery -> $.get(this.href, null, null, 'script') false - $('.group_of_lines.show .lines_detail .pagination a').live("click", make_ajax_pagination) + $(document).on("click", '.group_of_lines.show .lines_detail .pagination a', make_ajax_pagination) diff --git a/app/assets/javascripts/imports.js.coffee b/app/assets/javascripts/imports.js.coffee index ba7372e13..6bccc3ef6 100644 --- a/app/assets/javascripts/imports.js.coffee +++ b/app/assets/javascripts/imports.js.coffee @@ -3,6 +3,6 @@ jQuery -> import_type_change = (event) -> import_type = $("select option:selected").attr("value") - $(form).toggle($(form).is("#" + import_type + "_new")) for form in $('form.import') + $(form).toggle($(form).is("#" + import_type + "_new")) for form in $('form.import[method = "post"]') $('#import_type').change(import_type_change) diff --git a/app/assets/javascripts/journey_pattern.js.coffee b/app/assets/javascripts/journey_pattern.js.coffee index 6ea0c01de..062fc611e 100644 --- a/app/assets/javascripts/journey_pattern.js.coffee +++ b/app/assets/javascripts/journey_pattern.js.coffee @@ -9,11 +9,11 @@ jQuery -> else selectFeature.unselectAll() - $('.journey_patterns.show div.stop_points .stop_point').live("hover", select_stop_on_map) + $(document).on("hover", '.journey_patterns.show div.stop_points .stop_point', select_stop_on_map) make_ajax_pagination = () -> $.get(this.href, null, null, 'script') false - $('.stop_points_detail .pagination a').live("click", make_ajax_pagination) + $(document).on("click", '.stop_points_detail .pagination a', make_ajax_pagination) diff --git a/app/assets/javascripts/public/formtastic.qtip2.min.js b/app/assets/javascripts/public/formtastic.qtip2.min.js index 2f81a7a54..52a1ef1f7 100644 --- a/app/assets/javascripts/public/formtastic.qtip2.min.js +++ b/app/assets/javascripts/public/formtastic.qtip2.min.js @@ -1,74 +1,2 @@ -// formtastic.qtip2.js -// -// author: Gyorgy Schreiber -// gydotschreiberatmobilitydothu -// -// this script allows a simple replacement of formtastic's inline hints with qTip2 -// tooltips for all formtastic forms in your rails app by binding a qtip to the -// parent of each '.inline-hints' class element of the app's pages (those normally -// should be the default hints generated by formtastic). -// -// REQUIRES: -// formtastic - https://github.com/justinfrench/formtastic -// jQuery (for qTip2) - http://jquery.com/ -// qTip2 - http://craigsworks.com/projects/qtip2/ -// -// INSTALLATION: -// (assuming you have a rails app set up with formtastic and jQuery > 1.4.2) -// 1) include this file in your app's javascripts directory (optionally you can -// use the min version of this file) -// 2) add the following line to your application.html.erb (and other templates -// where you intend to use qTip2 for formtastic): -// <%= javascript_include_tag 'jquery.qtip.min', 'formtastic.qtip2.min' %> -// also include the qTip2 CSS -// <%= stylesheet_link_tag 'jquery.qtip.min.css' %> -// 3) you should reload a page that was displaying a formtastic form with inline -// hints and you should see those hints gone (hidden) and a qTip2 tooltip should -// pop-up as the mouse moves over the formtastic input element showing the text -// of the inline hint... enjoy! :) -// -// LICENSING: -// GPL & MIT dual license (as qTip2) -// GPL - http://www.gnu.org/copyleft/gpl.html -// -// MIT License -// Copyright (C) 2012 Gyorgy Schreiber (gydotschreiberatmobilitydothu) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -// of the Software, and to permit persons to whom the Software is furnished to do -// so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -$(function() { -// hide all inline-hints -$(".inline-hints").hide(); -// set qtip2 tooltips in conjunction with formtastic's 'inline-hints' class -$(".inline-hints").each(function(){ - var input = $(this.parentNode); - //$(this).hide(); // hide the inline-hint - // assign tooltip - input.qtip({ - position: {at: "bottom middle", my: "top middle"}, - content: {text: function(api) { - var hinttext = $(this)[0].lastChild.firstChild.parentElement.attributes[0].nodeName == 'class' && $(this)[0].lastChild.firstChild.parentElement.attributes[0].nodeValue == 'inline-errors' ? $(this)[0].children[$(this)[0].children.length-2].firstChild.wholeText : $(this)[0].lastChild.firstChild.wholeText; - return hinttext; - //return $(this)[0].children[2].firstChild.wholeText; - } - } - }); -}); - -});
\ No newline at end of file +// formtastic.qtip2.min.js Copyright (C) 2012 Gyorgy Schreiber (gydotschreiberatmobilitydothu) - MIT & GPL licenses apply +$(".inline-hints").hide();$(".inline-hints").each(function(){var input = $(this.parentNode);input.qtip({position: {at: "bottom middle", my: "top middle"},content: {text: function(api) {var hinttext = $(this)[0].lastChild.firstChild.parentElement.attributes[0].nodeName == 'class' && $(this)[0].lastChild.firstChild.parentElement.attributes[0].nodeValue == 'inline-errors' ? $(this)[0].children[$(this)[0].children.length-2].firstChild.wholeText : $(this)[0].lastChild.firstChild.wholeText;return hinttext;}}});}); diff --git a/app/assets/javascripts/public/jquery.qtip.min.js b/app/assets/javascripts/public/jquery.qtip.min.js index 891523841..1ed034ee3 100644 --- a/app/assets/javascripts/public/jquery.qtip.min.js +++ b/app/assets/javascripts/public/jquery.qtip.min.js @@ -1,13 +1,2 @@ -/*! -* qTip2 - Pretty powerful tooltips -* http://craigsworks.com/projects/qtip2/ -* -* Version: nightly -* Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com -* -* Dual licensed under MIT or GPLv2 licenses -* http://en.wikipedia.org/wiki/MIT_License -* http://en.wikipedia.org/wiki/GNU_General_Public_License -* -* Date: Tue Jul 3 15:45:43.0000000000 2012 -*//*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true *//*global window: false, jQuery: false, console: false, define: false */(function(a){typeof define==="function"&&define.amd?define(["jquery"],a):a(jQuery)})(function(a){function K(e,f){var g,h,i,j,k,l=a(this),m=a(document.body),n=this===document?m:l,o=l.metadata?l.metadata(f.metadata):d,p=f.metadata.type==="html5"&&o?o[f.metadata.name]:d,q=l.data(f.metadata.name||"qtipopts");try{q=typeof q==="string"?(new Function("return "+q))():q}catch(t){H("Unable to parse HTML5 attribute data: "+q)}j=a.extend(b,{},r.defaults,f,typeof q==="object"?I(q):d,I(p||o)),h=j.position,j.id=e;if("boolean"===typeof j.content.text){i=l.attr(j.content.attr);if(j.content.attr!==c&&i)j.content.text=i;else{H("Unable to locate content for tooltip! Aborting render of tooltip on element: ",l);return c}}h.container.length||(h.container=m),h.target===c&&(h.target=n),j.show.target===c&&(j.show.target=n),j.show.solo===b&&(j.show.solo=h.container.closest("body")),j.hide.target===c&&(j.hide.target=n),j.position.viewport===b&&(j.position.viewport=h.container),h.container=h.container.eq(0),h.at=new s.Corner(h.at),h.my=new s.Corner(h.my);if(a.data(this,"qtip"))if(j.overwrite)l.qtip("destroy");else if(j.overwrite===c)return c;j.suppress&&(k=a.attr(this,"title"))&&a(this).removeAttr("title").attr(F,k).attr("title",""),g=new J(l,j,e,!!i),a.data(this,"qtip",g),l.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){g.destroy()});return g}function J(f,g,o,p){function X(){var b=[g.show.target[0],g.hide.target[0],q.rendered&&M.tooltip[0],g.position.container[0],g.position.viewport[0],window,document];q.rendered?a([]).pushStack(a.grep(b,function(a){return typeof a==="object"})).unbind(L):g.show.target.unbind(L+"-create")}function W(){function m(a){q.rendered&&K[0].offsetWidth>0&&q.reposition(a)}function l(a){if(K.hasClass(x))return c;clearTimeout(q.timers.inactive),q.timers.inactive=setTimeout(function(){q.hide(a)},g.hide.inactive)}function k(b){if(K.hasClass(x)||H||J)return c;var f=a(b.relatedTarget||b.target),h=f.closest(y)[0]===K[0],i=f[0]===e.show[0];clearTimeout(q.timers.show),clearTimeout(q.timers.hide);if(d.target==="mouse"&&h||g.hide.fixed&&(/mouse(out|leave|move)/.test(b.type)&&(h||i)))try{b.preventDefault(),b.stopImmediatePropagation()}catch(j){}else g.hide.delay>0?q.timers.hide=setTimeout(function(){q.hide(b)},g.hide.delay):q.hide(b)}function j(a){if(K.hasClass(x))return c;clearTimeout(q.timers.show),clearTimeout(q.timers.hide);var d=function(){q.toggle(b,a)};g.show.delay>0?q.timers.show=setTimeout(d,g.show.delay):d()}var d=g.position,e={show:g.show.target,hide:g.hide.target,viewport:a(d.viewport),document:a(document),body:a(document.body),window:a(window)},h={show:a.trim(""+g.show.event).split(" "),hide:a.trim(""+g.hide.event).split(" ")},i=a.browser.msie&&parseInt(a.browser.version,10)===6;K.bind("mouseenter"+L+" mouseleave"+L,function(a){var b=a.type==="mouseenter";b&&q.focus(a),K.toggleClass(B,b)}),/mouse(out|leave)/i.test(g.hide.event)&&(g.hide.leave==="window"&&e.window.bind("mouseleave"+L+" blur"+L,function(a){!/select|option/.test(a.target.nodeName)&&!a.relatedTarget&&q.hide(a)})),g.hide.fixed?(e.hide=e.hide.add(K),K.bind("mouseover"+L,function(){K.hasClass(x)||clearTimeout(q.timers.hide)})):/mouse(over|enter)/i.test(g.show.event)&&e.hide.bind("mouseleave"+L,function(a){clearTimeout(q.timers.show)}),(""+g.hide.event).indexOf("unfocus")>-1&&d.container.closest("html").bind("mousedown"+L,function(b){var c=a(b.target),d=q.rendered&&!K.hasClass(x)&&K[0].offsetWidth>0,e=c.parents(y).filter(K[0]).length>0;c[0]!==f[0]&&c[0]!==K[0]&&!e&&!f.has(c[0]).length&&!c.attr("disabled")&&q.hide(b)}),"number"===typeof g.hide.inactive&&(e.show.bind("qtip-"+o+"-inactive",l),a.each(r.inactiveEvents,function(a,b){e.hide.add(M.tooltip).bind(b+L+"-inactive",l)})),a.each(h.hide,function(b,c){var d=a.inArray(c,h.show),f=a(e.hide);d>-1&&f.add(e.show).length===f.length||c==="unfocus"?(e.show.bind(c+L,function(a){K[0].offsetWidth>0?k(a):j(a)}),delete h.show[d]):e.hide.bind(c+L,k)}),a.each(h.show,function(a,b){e.show.bind(b+L,j)}),"number"===typeof g.hide.distance&&e.show.add(K).bind("mousemove"+L,function(a){var b=N.origin||{},c=g.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&q.hide(a)}),d.target==="mouse"&&(e.show.bind("mousemove"+L,function(a){t={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),d.adjust.mouse&&(g.hide.event&&(K.bind("mouseleave"+L,function(a){(a.relatedTarget||a.target)!==e.show[0]&&q.hide(a)}),M.target.bind("mouseenter"+L+" mouseleave"+L,function(a){N.onTarget=a.type==="mouseenter"})),e.document.bind("mousemove"+L,function(a){q.rendered&&N.onTarget&&!K.hasClass(x)&&K[0].offsetWidth>0&&q.reposition(a||t)}))),(d.adjust.resize||e.viewport.length)&&(a.event.special.resize?e.viewport:e.window).bind("resize"+L,m),(e.viewport.length||i&&K.css("position")==="fixed")&&e.viewport.bind("scroll"+L,m)}function V(b,d){function h(b){function i(e){e&&(delete h[e.src],clearTimeout(q.timers.img[e.src]),a(e).unbind(L)),a.isEmptyObject(h)&&(q.redraw(),d!==c&&q.reposition(N.event),b())}var f,h={};if((f=g.find("img[src]:not([height]):not([width])")).length===0)return i();f.each(function(b,c){if(h[c.src]===e){var d=0,f=3;(function g(){if(c.height||c.width||d>f)return i(c);d+=1,q.timers.img[c.src]=setTimeout(g,700)})(),a(c).bind("error"+L+" load"+L,function(){i(this)}),h[c.src]=c}})}var g=M.content;if(!q.rendered||!b)return c;a.isFunction(b)&&(b=b.call(f,N.event,q)||""),b.jquery&&b.length>0?g.empty().append(b.css({display:"block"})):g.html(b),q.rendered<0?K.queue("fx",h):(J=0,h(a.noop));return q}function U(b,d){var e=M.title;if(!q.rendered||!b)return c;a.isFunction(b)&&(b=b.call(f,N.event,q));if(b===c||!b&&b!=="")return Q(c);b.jquery&&b.length>0?e.empty().append(b.css({display:"block"})):e.html(b),q.redraw(),d!==c&&q.rendered&&K[0].offsetWidth>0&&q.reposition(N.event)}function T(a){var b=M.button,d=M.title;if(!q.rendered)return c;a?(d||S(),R()):b.remove()}function S(){var c=E+"-title";M.titlebar&&Q(),M.titlebar=a("<div />",{"class":v+"-titlebar "+(g.style.widget?"ui-widget-header":"")}).append(M.title=a("<div />",{id:c,"class":v+"-title","aria-atomic":b})).insertBefore(M.content).delegate(".ui-tooltip-close","mousedown keydown mouseup keyup mouseout",function(b){a(this).toggleClass("ui-state-active ui-state-focus",b.type.substr(-4)==="down")}).delegate(".ui-tooltip-close","mouseover mouseout",function(b){a(this).toggleClass("ui-state-hover",b.type==="mouseover")}),g.content.title.button?R():q.rendered&&q.redraw()}function R(){var b=g.content.title.button,d=typeof b==="string",e=d?b:"Close tooltip";M.button&&M.button.remove(),b.jquery?M.button=b:M.button=a("<a />",{"class":"ui-state-default ui-tooltip-close "+(g.style.widget?"":v+"-icon"),title:e,"aria-label":e}).prepend(a("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),M.button.appendTo(M.titlebar).attr("role","button").click(function(a){K.hasClass(x)||q.hide(a);return c}),q.redraw()}function Q(a){M.title&&(M.titlebar.remove(),M.titlebar=M.title=M.button=d,a!==c&&q.reposition())}function P(){var a=g.style.widget;K.toggleClass(w,a).toggleClass(z,g.style.def&&!a),M.content.toggleClass(w+"-content",a),M.titlebar&&M.titlebar.toggleClass(w+"-header",a),M.button&&M.button.toggleClass(v+"-icon",!a)}function O(a){var b=0,c,d=g,e=a.split(".");while(d=d[e[b++]])b<e.length&&(c=d);return[c||g,e.pop()]}var q=this,D=document.body,E=v+"-"+o,H=0,J=0,K=a(),L=".qtip-"+o,M,N;q.id=o,q.destroyed=q.rendered=c,q.elements=M={target:f},q.timers={img:{}},q.options=g,q.checks={},q.plugins={},q.cache=N={event:{},target:a(),disabled:c,attr:p,onTarget:c,lastClass:""},q.checks.builtin={"^id$":function(d,e,f){var g=f===b?r.nextid:f,h=v+"-"+g;g!==c&&g.length>0&&!a("#"+h).length&&(K[0].id=h,M.content[0].id=h+"-content",M.title[0].id=h+"-title")},"^content.text$":function(a,b,c){V(c)},"^content.title.text$":function(a,b,c){if(!c)return Q();!M.title&&c&&S(),U(c)},"^content.title.button$":function(a,b,c){T(c)},"^position.(my|at)$":function(a,b,c){"string"===typeof c&&(a[b]=new s.Corner(c))},"^position.container$":function(a,b,c){q.rendered&&K.appendTo(c)},"^show.ready$":function(){q.rendered?q.toggle(b):q.render(1)},"^style.classes$":function(a,b,c){K.attr("class",v+" qtip ui-helper-reset "+c)},"^style.widget|content.title":P,"^events.(render|show|move|hide|focus|blur)$":function(b,c,d){K[(a.isFunction(d)?"":"un")+"bind"]("tooltip"+c,d)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var a=g.position;K.attr("tracking",a.target==="mouse"&&a.adjust.mouse),X(),W()}},a.extend(q,{render:function(d){if(q.rendered)return q;var e=g.content.text,h=g.content.title.text,i=g.position,j=a.Event("tooltiprender");a.attr(f[0],"aria-describedby",E),K=M.tooltip=a("<div/>",{id:E,"class":v+" qtip ui-helper-reset "+z+" "+g.style.classes+" "+v+"-pos-"+g.position.my.abbrev(),width:g.style.width||"",height:g.style.height||"",tracking:i.target==="mouse"&&i.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":c,"aria-describedby":E+"-content","aria-hidden":b}).toggleClass(x,N.disabled).data("qtip",q).appendTo(g.position.container).append(M.content=a("<div />",{"class":v+"-content",id:E+"-content","aria-atomic":b})),q.rendered=-1,H=J=1,h&&(S(),a.isFunction(h)||U(h,c)),a.isFunction(e)||V(e,c),q.rendered=b,P(),a.each(g.events,function(b,c){a.isFunction(c)&&K.bind(b==="toggle"?"tooltipshow tooltiphide":"tooltip"+b,c)}),a.each(s,function(){this.initialize==="render"&&this(q)}),W(),K.queue("fx",function(a){j.originalEvent=N.event,K.trigger(j,[q]),H=J=0,q.redraw(),(g.show.ready||d)&&q.toggle(b,N.event,c),a()});return q},get:function(a){var b,c;switch(a.toLowerCase()){case"dimensions":b={height:K.outerHeight(),width:K.outerWidth()};break;case"offset":b=s.offset(K,g.position.container);break;default:c=O(a.toLowerCase()),b=c[0][c[1]],b=b.precedance?b.string():b}return b},set:function(e,f){function n(a,b){var c,d,e;for(c in l)for(d in l[c])if(e=(new RegExp(d,"i")).exec(a))b.push(e),l[c][d].apply(q,b)}var h=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,i=/^content\.(title|attr)|style/i,j=c,k=c,l=q.checks,m;"string"===typeof e?(m=e,e={},e[m]=f):e=a.extend(b,{},e),a.each(e,function(b,c){var d=O(b.toLowerCase()),f;f=d[0][d[1]],d[0][d[1]]="object"===typeof c&&c.nodeType?a(c):c,e[b]=[d[0],d[1],c,f],j=h.test(b)||j,k=i.test(b)||k}),I(g),H=J=1,a.each(e,n),H=J=0,q.rendered&&K[0].offsetWidth>0&&(j&&q.reposition(g.position.target==="mouse"?d:N.event),k&&q.redraw());return q},toggle:function(e,f){function u(){e?(a.browser.msie&&K[0].style.removeAttribute("filter"),K.css("overflow",""),"string"===typeof i.autofocus&&a(i.autofocus,K).focus(),i.target.trigger("qtip-"+o+"-inactive")):K.css({display:"",visibility:"",opacity:"",left:"",top:""}),s=a.Event("tooltip"+(e?"visible":"hidden")),s.originalEvent=f?N.event:d,K.trigger(s,[q])}if(!q.rendered)return e?q.render(1):q;var h=e?"show":"hide",i=g[h],j=g[e?"hide":"show"],k=g.position,l=g.content,m=K[0].offsetWidth>0,n=e||i.target.length===1,p=!f||i.target.length<2||N.target[0]===f.target,r,s;(typeof e).search("boolean|number")&&(e=!m);if(!K.is(":animated")&&m===e&&p)return q;if(f){if(/over|enter/.test(f.type)&&/out|leave/.test(N.event.type)&&g.show.target.add(f.target).length===g.show.target.length&&K.has(f.relatedTarget).length)return q;N.event=a.extend({},f)}s=a.Event("tooltip"+h),s.originalEvent=f?N.event:d,K.trigger(s,[q,90]);if(s.isDefaultPrevented())return q;a.attr(K[0],"aria-hidden",!e),e?(N.origin=a.extend({},t),q.focus(f),a.isFunction(l.text)&&V(l.text,c),a.isFunction(l.title.text)&&U(l.title.text,c),!G&&k.target==="mouse"&&k.adjust.mouse&&(a(document).bind("mousemove.qtip",function(a){t={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),G=b),q.reposition(f,arguments[2]),(s.solo=!!i.solo)&&a(y,i.solo).not(K).qtip("hide",s)):(clearTimeout(q.timers.show),delete N.origin,G&&!a(y+'[tracking="true"]:visible',i.solo).not(K).length&&(a(document).unbind("mousemove.qtip"),G=c),q.blur(f)),i.effect===c||n===c?(K[h](),u.call(K)):a.isFunction(i.effect)?(K.stop(1,1),i.effect.call(K,q),K.queue("fx",function(a){u(),a()})):K.fadeTo(90,e?1:0,u),e&&i.target.trigger("qtip-"+o+"-inactive");return q},show:function(a){return q.toggle(b,a)},hide:function(a){return q.toggle(c,a)},focus:function(b){if(!q.rendered)return q;var c=a(y),d=parseInt(K[0].style.zIndex,10),e=r.zindex+c.length,f=a.extend({},b),g,h;K.hasClass(A)||(h=a.Event("tooltipfocus"),h.originalEvent=f,K.trigger(h,[q,e]),h.isDefaultPrevented()||(d!==e&&(c.each(function(){this.style.zIndex>d&&(this.style.zIndex=this.style.zIndex-1)}),c.filter("."+A).qtip("blur",f)),K.addClass(A)[0].style.zIndex=e));return q},blur:function(b){var c=a.extend({},b),d;K.removeClass(A),d=a.Event("tooltipblur"),d.originalEvent=c,K.trigger(d,[q]);return q},reposition:function(b,d){if(!q.rendered||H)return q;H=1;var e=g.position.target,f=g.position,h=f.my,i=f.at,o=f.adjust,p=o.method.split(" "),r=K.outerWidth(),u=K.outerHeight(),v=0,w=0,x=a.Event("tooltipmove"),y=K.css("position")==="fixed",z=f.viewport,A={left:0,top:0},B=f.container,C=K[0].offsetWidth>0,D,E,F;if(a.isArray(e)&&e.length===2)i={x:k,y:j},A={left:e[0],top:e[1]};else if(e==="mouse"&&(b&&b.pageX||N.event.pageX))i={x:k,y:j},b=(b&&(b.type==="resize"||b.type==="scroll")?N.event:b&&b.pageX&&b.type==="mousemove"?b:t&&t.pageX&&(o.mouse||!b||!b.pageX)?{pageX:t.pageX,pageY:t.pageY}:!o.mouse&&N.origin&&N.origin.pageX&&g.show.distance?N.origin:b)||b||N.event||t||{},A={top:b.pageY,left:b.pageX};else{e==="event"&&b&&b.target&&b.type!=="scroll"&&b.type!=="resize"?N.target=a(b.target):e!=="event"&&(N.target=a(e.jquery?e:M.target)),e=N.target,e=a(e).eq(0);if(e.length===0)return q;e[0]===document||e[0]===window?(v=s.iOS?window.innerWidth:e.width(),w=s.iOS?window.innerHeight:e.height(),e[0]===window&&(A={top:(z||e).scrollTop(),left:(z||e).scrollLeft()})):s.imagemap&&e.is("area")?D=s.imagemap(q,e,i,s.viewport?p:c):s.svg&&typeof e[0].xmlbase==="string"?D=s.svg(q,e,i,s.viewport?p:c):(v=e.outerWidth(),w=e.outerHeight(),A=s.offset(e,B)),D&&(v=D.width,w=D.height,E=D.offset,A=D.position);if(s.iOS>3.1&&s.iOS<4.1||s.iOS>=4.3&&s.iOS<4.33||!s.iOS&&y)F=a(window),A.left-=F.scrollLeft(),A.top-=F.scrollTop();A.left+=i.x===m?v:i.x===n?v/2:0,A.top+=i.y===l?w:i.y===n?w/2:0}A.left+=o.x+(h.x===m?-r:h.x===n?-r/2:0),A.top+=o.y+(h.y===l?-u:h.y===n?-u/2:0),s.viewport?(A.adjusted=s.viewport(q,A,f,v,w,r,u),E&&A.adjusted.left&&(A.left+=E.left),E&&A.adjusted.top&&(A.top+=E.top)):A.adjusted={left:0,top:0},x.originalEvent=a.extend({},b),K.trigger(x,[q,A,z.elem||z]);if(x.isDefaultPrevented())return q;delete A.adjusted,d===c||!C||isNaN(A.left)||isNaN(A.top)||e==="mouse"||!a.isFunction(f.effect)?K.css(A):a.isFunction(f.effect)&&(f.effect.call(K,q,a.extend({},A)),K.queue(function(b){a(this).css({opacity:"",height:""}),a.browser.msie&&this.style.removeAttribute("filter"),b()})),H=0;return q},redraw:function(){if(q.rendered<1||J)return q;var a=g.position.container,b,c,d,e;J=1,g.style.height&&K.css(i,g.style.height),g.style.width?K.css(h,g.style.width):(K.css(h,"").addClass(C),c=K.width()+1,d=K.css("max-width")||"",e=K.css("min-width")||"",b=(d+e).indexOf("%")>-1?a.width()/100:0,d=(d.indexOf("%")>-1?b:1)*parseInt(d,10)||c,e=(e.indexOf("%")>-1?b:1)*parseInt(e,10)||0,c=d+e?Math.min(Math.max(c,e),d):c,K.css(h,Math.round(c)).removeClass(C)),J=0;return q},disable:function(b){"boolean"!==typeof b&&(b=!K.hasClass(x)&&!N.disabled),q.rendered?(K.toggleClass(x,b),a.attr(K[0],"aria-disabled",b)):N.disabled=!!b;return q},enable:function(){return q.disable(c)},destroy:function(){var c=f[0],d=a.attr(c,F),e=f.data("qtip");q.destroyed=b,q.rendered&&(K.stop(1,0).remove(),a.each(q.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(q.timers.show),clearTimeout(q.timers.hide),X();if(!e||q===e)a.removeData(c,"qtip"),g.suppress&&d&&(a.attr(c,"title",d),f.removeAttr(F)),f.removeAttr("aria-describedby");f.unbind(".qtip-"+o),delete u[q.id];return f}})}function I(b){var e;if(!b||"object"!==typeof b)return c;if(b.metadata===d||"object"!==typeof b.metadata)b.metadata={type:b.metadata};if("content"in b){if(b.content===d||"object"!==typeof b.content||b.content.jquery)b.content={text:b.content};e=b.content.text||c,!a.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"===typeof e&&!e.jquery)&&(b.content.text=c);if("title"in b.content){if(b.content.title===d||"object"!==typeof b.content.title)b.content.title={text:b.content.title};e=b.content.title.text||c,!a.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"===typeof e&&!e.jquery)&&(b.content.title.text=c)}}if("position"in b)if(b.position===d||"object"!==typeof b.position)b.position={my:b.position,at:b.position};if("show"in b)if(b.show===d||"object"!==typeof b.show)b.show.jquery?b.show={target:b.show}:b.show={event:b.show};if("hide"in b)if(b.hide===d||"object"!==typeof b.hide)b.hide.jquery?b.hide={target:b.hide}:b.hide={event:b.hide};if("style"in b)if(b.style===d||"object"!==typeof b.style)b.style={classes:b.style};a.each(s,function(){this.sanitize&&this.sanitize(b)});return b}function H(){H.history=H.history||[],H.history.push(arguments);if("object"===typeof console){var a=console[console.warn?"warn":"log"],b=Array.prototype.slice.call(arguments),c;typeof arguments[0]==="string"&&(b[0]="qTip2: "+b[0]),c=a.apply?a.apply(console,b):a(b)}}"use strict";var b=!0,c=!1,d=null,e,f="x",g="y",h="width",i="height",j="top",k="left",l="bottom",m="right",n="center",o="flip",p="flipinvert",q="shift",r,s,t,u={},v="ui-tooltip",w="ui-widget",x="ui-state-disabled",y="div.qtip."+v,z=v+"-default",A=v+"-focus",B=v+"-hover",C=v+"-fluid",D="-31000px",E="_replacedByqTip",F="oldtitle",G;r=a.fn.qtip=function(f,g,h){var i=(""+f).toLowerCase(),j=d,k=a.makeArray(arguments).slice(1),l=k[k.length-1],m=this[0]?a.data(this[0],"qtip"):d;if(!arguments.length&&m||i==="api")return m;if("string"===typeof f){this.each(function(){var d=a.data(this,"qtip");if(!d)return b;l&&l.timeStamp&&(d.cache.event=l);if(i!=="option"&&i!=="options"||!g)d[i]&&d[i].apply(d[i],k);else if(a.isPlainObject(g)||h!==e)d.set(g,h);else{j=d.get(g);return c}});return j!==d?j:this}if("object"===typeof f||!arguments.length){m=I(a.extend(b,{},f));return r.bind.call(this,m,l)}},r.bind=function(d,f){return this.each(function(g){function n(b){function d(){l.render(typeof b==="object"||h.show.ready),i.show.add(i.hide).unbind(k)}if(l.cache.disabled)return c;l.cache.event=a.extend({},b),l.cache.target=b?a(b.target):[e],h.show.delay>0?(clearTimeout(l.timers.show),l.timers.show=setTimeout(d,h.show.delay),j.show!==j.hide&&i.hide.bind(j.hide,function(){clearTimeout(l.timers.show)})):d()}var h,i,j,k,l,m;m=a.isArray(d.id)?d.id[g]:d.id,m=!m||m===c||m.length<1||u[m]?r.nextid++:u[m]=m,k=".qtip-"+m+"-create",l=K.call(this,m,d);if(l===c)return b;h=l.options,a.each(s,function(){this.initialize==="initialize"&&this(l)}),i={show:h.show.target,hide:h.hide.target},j={show:a.trim(""+h.show.event).replace(/ /g,k+" ")+k,hide:a.trim(""+h.hide.event).replace(/ /g,k+" ")+k},/mouse(over|enter)/i.test(j.show)&&!/mouse(out|leave)/i.test(j.hide)&&(j.hide+=" mouseleave"+k),i.show.bind("mousemove"+k,function(a){t={pageX:a.pageX,pageY:a.pageY,type:"mousemove"},l.cache.onTarget=b}),i.show.bind(j.show,n),(h.show.ready||h.prerender)&&n(f)})},s=r.plugins={Corner:function(a){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,n).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var b=a.charAt(0);this.precedance=b==="t"||b==="b"?g:f,this.string=function(){return this.precedance===g?this.y+this.x:this.x+this.y},this.abbrev=function(){var a=this.x.substr(0,1),b=this.y.substr(0,1);return a===b?a:this.precedance===g?b+a:a+b},this.invertx=function(a){this.x=this.x===k?m:this.x===m?k:a||this.x},this.inverty=function(a){this.y=this.y===j?l:this.y===l?j:a||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(b,c){function j(a,b){d.left+=b*a.scrollLeft(),d.top+=b*a.scrollTop()}var d=b.offset(),e=b.closest("body")[0],f=c,g,h,i;if(f){do f.css("position")!=="static"&&(h=f.position(),d.left-=h.left+(parseInt(f.css("borderLeftWidth"),10)||0)+(parseInt(f.css("marginLeft"),10)||0),d.top-=h.top+(parseInt(f.css("borderTopWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0),!g&&(i=f.css("overflow"))!=="hidden"&&i!=="visible"&&(g=f));while((f=a(f[0].offsetParent)).length);g&&g[0]!==e&&j(g,1)}return d},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||c,fn:{attr:function(b,c){if(this.length){var d=this[0],e="title",f=a.data(d,"qtip");if(b===e&&f&&"object"===typeof f&&f.options.suppress){if(arguments.length<2)return a.attr(d,F);f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",c);return this.attr(F,c)}}return a.fn["attr"+E].apply(this,arguments)},clone:function(b){var c=a([]),d="title",e=a.fn["clone"+E].apply(this,arguments);b||e.filter("["+F+"]").attr("title",function(){return a.attr(this,F)}).removeAttr(F);return e}}},a.each(s.fn,function(c,d){if(!d||a.fn[c+E])return b;var e=a.fn[c+E]=a.fn[c];a.fn[c]=function(){return d.apply(this,arguments)||e.apply(this,arguments)}}),a.ui||(a["cleanData"+E]=a.cleanData,a.cleanData=function(b){for(var c=0,d;(d=b[c])!==e;c++)try{a(d).triggerHandler("removeqtip")}catch(f){}a["cleanData"+E](b)}),r.version="nightly",r.nextid=0,r.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),r.zindex=15e3,r.defaults={prerender:c,id:c,overwrite:b,suppress:b,content:{text:b,attr:"title",title:{text:c,button:c}},position:{my:"top left",at:"bottom right",target:c,container:c,viewport:c,adjust:{x:0,y:0,mouse:b,resize:b,method:"flip flip"},effect:function(b,d,e){a(this).animate(d,{duration:200,queue:c})}},show:{target:c,event:"mouseenter",effect:b,delay:90,solo:c,ready:c,autofocus:c},hide:{target:c,event:"mouseleave",effect:b,delay:0,fixed:c,inactive:c,leave:"window",distance:c},style:{classes:"",widget:c,width:c,height:c,def:b},events:{render:d,move:d,show:d,hide:d,toggle:d,visible:d,hidden:d,focus:d,blur:d}}})
\ No newline at end of file +/*! qTip2 v2.0.1 (includes: svg ajax tips modal viewport imagemap ie6 / basic css3) | qtip2.com | Licensed MIT, GPL | Mon Dec 31 2012 14:55:17 */ +(function(e,t,n){(function(e){"use strict";typeof define=="function"&&define.amd?define(["jquery"],e):jQuery&&!jQuery.fn.qtip&&e(jQuery)})(function(r){function _(n){E={pageX:n.pageX,pageY:n.pageY,type:"mousemove",scrollX:e.pageXOffset||t.body.scrollLeft||t.documentElement.scrollLeft,scrollY:e.pageYOffset||t.body.scrollTop||t.documentElement.scrollTop}}function D(e){var t=function(e){return e===o||"object"!=typeof e},n=function(e){return!r.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"==typeof e&&!e.jquery&&!e.then)};if(!e||"object"!=typeof e)return s;t(e.metadata)&&(e.metadata={type:e.metadata});if("content"in e){if(t(e.content)||e.content.jquery)e.content={text:e.content};n(e.content.text||s)&&(e.content.text=s),"title"in e.content&&(t(e.content.title)&&(e.content.title={text:e.content.title}),n(e.content.title.text||s)&&(e.content.title.text=s))}return"position"in e&&t(e.position)&&(e.position={my:e.position,at:e.position}),"show"in e&&t(e.show)&&(e.show=e.show.jquery?{target:e.show}:{event:e.show}),"hide"in e&&t(e.hide)&&(e.hide=e.hide.jquery?{target:e.hide}:{event:e.hide}),"style"in e&&t(e.style)&&(e.style={classes:e.style}),r.each(w,function(){this.sanitize&&this.sanitize(e)}),e}function P(u,a,f,l){function q(e){var t=0,n,r=a,i=e.split(".");while(r=r[i[t++]])t<i.length&&(n=r);return[n||a,i.pop()]}function R(e){return T.concat("").join(e?"-"+e+" ":" ")}function U(){var e=a.style.widget,t=H.hasClass(j);H.removeClass(j),j=e?"ui-state-disabled":"qtip-disabled",H.toggleClass(j,t),H.toggleClass("ui-helper-reset "+R(),e).toggleClass(C,a.style.def&&!e),F.content&&F.content.toggleClass(R("content"),e),F.titlebar&&F.titlebar.toggleClass(R("header"),e),F.button&&F.button.toggleClass(S+"-icon",!e)}function z(e){F.title&&(F.titlebar.remove(),F.titlebar=F.title=F.button=o,e!==s&&m.reposition())}function W(){var e=a.content.title.button,t=typeof e=="string",n=t?e:"Close tooltip";F.button&&F.button.remove(),e.jquery?F.button=e:F.button=r("<a />",{"class":"qtip-close "+(a.style.widget?"":S+"-icon"),title:n,"aria-label":n}).prepend(r("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),F.button.appendTo(F.titlebar||H).attr("role","button").click(function(e){return H.hasClass(j)||m.hide(e),s})}function X(){var e=y+"-title";F.titlebar&&z(),F.titlebar=r("<div />",{"class":S+"-titlebar "+(a.style.widget?R("header"):"")}).append(F.title=r("<div />",{id:e,"class":S+"-title","aria-atomic":i})).insertBefore(F.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(e){r(this).toggleClass("ui-state-active ui-state-focus",e.type.substr(-4)==="down")}).delegate(".qtip-close","mouseover mouseout",function(e){r(this).toggleClass("ui-state-hover",e.type==="mouseover")}),a.content.title.button&&W()}function V(e){var t=F.button;if(!m.rendered)return s;e?W():t.remove()}function J(e,t){var n=F.title;if(!m.rendered||!e)return s;r.isFunction(e)&&(e=e.call(u,I.event,m));if(e===s||!e&&e!=="")return z(s);e.jquery&&e.length>0?n.empty().append(e.css({display:"block"})):n.html(e),t!==s&&m.rendered&&H[0].offsetWidth>0&&m.reposition(I.event)}function K(e){e&&r.isFunction(e.done)&&e.done(function(e){Q(e,null,s)})}function Q(e,t,i){function f(e){function a(n){n&&(delete u[n.src],clearTimeout(m.timers.img[n.src]),r(n).unbind(B)),r.isEmptyObject(u)&&(t!==s&&m.reposition(I.event),e())}var i,u={};if((i=o.find("img[src]:not([height]):not([width])")).length===0)return a();i.each(function(e,t){if(u[t.src]!==n)return;var i=0,s=3;(function o(){if(t.height||t.width||i>s)return a(t);i+=1,m.timers.img[t.src]=setTimeout(o,700)})(),r(t).bind("error"+B+" load"+B,function(){a(this)}),u[t.src]=t})}var o=F.content;return!m.rendered||!e?s:(r.isFunction(e)&&(e=e.call(u,I.event,m)||""),i!==s&&K(a.content.deferred),e.jquery&&e.length>0?o.empty().append(e.css({display:"block"})):o.html(e),m.rendered<0?H.queue("fx",f):(P=0,f(r.noop)),m)}function G(){function h(e){if(H.hasClass(j))return s;clearTimeout(m.timers.show),clearTimeout(m.timers.hide);var t=function(){m.toggle(i,e)};a.show.delay>0?m.timers.show=setTimeout(t,a.show.delay):t()}function p(e){if(H.hasClass(j)||A||P)return s;var t=r(e.relatedTarget||e.target),i=t.closest(N)[0]===H[0],u=t[0]===o.show[0];clearTimeout(m.timers.show),clearTimeout(m.timers.hide);if(n.target==="mouse"&&i||a.hide.fixed&&/mouse(out|leave|move)/.test(e.type)&&(i||u)){try{e.preventDefault(),e.stopImmediatePropagation()}catch(f){}return}a.hide.delay>0?m.timers.hide=setTimeout(function(){m.hide(e)},a.hide.delay):m.hide(e)}function d(e){if(H.hasClass(j))return s;clearTimeout(m.timers.inactive),m.timers.inactive=setTimeout(function(){m.hide(e)},a.hide.inactive)}function v(e){m.rendered&&H[0].offsetWidth>0&&m.reposition(e)}var n=a.position,o={show:a.show.target,hide:a.hide.target,viewport:r(n.viewport),document:r(t),body:r(t.body),window:r(e)},l={show:r.trim(""+a.show.event).split(" "),hide:r.trim(""+a.hide.event).split(" ")},c=r.browser.msie&&parseInt(r.browser.version,10)===6;H.bind("mouseenter"+B+" mouseleave"+B,function(e){var t=e.type==="mouseenter";t&&m.focus(e),H.toggleClass(L,t)}),/mouse(out|leave)/i.test(a.hide.event)&&a.hide.leave==="window"&&o.window.bind("mouseout"+B+" blur"+B,function(e){!/select|option/.test(e.target.nodeName)&&!e.relatedTarget&&m.hide(e)}),a.hide.fixed?(o.hide=o.hide.add(H),H.bind("mouseover"+B,function(){H.hasClass(j)||clearTimeout(m.timers.hide)})):/mouse(over|enter)/i.test(a.show.event)&&o.hide.bind("mouseleave"+B,function(e){clearTimeout(m.timers.show)}),(""+a.hide.event).indexOf("unfocus")>-1&&n.container.closest("html").bind("mousedown"+B+" touchstart"+B,function(e){var t=r(e.target),n=m.rendered&&!H.hasClass(j)&&H[0].offsetWidth>0,i=t.parents(N).filter(H[0]).length>0;t[0]!==u[0]&&t[0]!==H[0]&&!i&&!u.has(t[0]).length&&!t.attr("disabled")&&m.hide(e)}),"number"==typeof a.hide.inactive&&(o.show.bind("qtip-"+f+"-inactive",d),r.each(b.inactiveEvents,function(e,t){o.hide.add(F.tooltip).bind(t+B+"-inactive",d)})),r.each(l.hide,function(e,t){var n=r.inArray(t,l.show),i=r(o.hide);n>-1&&i.add(o.show).length===i.length||t==="unfocus"?(o.show.bind(t+B,function(e){H[0].offsetWidth>0?p(e):h(e)}),delete l.show[n]):o.hide.bind(t+B,p)}),r.each(l.show,function(e,t){o.show.bind(t+B,h)}),"number"==typeof a.hide.distance&&o.show.add(H).bind("mousemove"+B,function(e){var t=I.origin||{},n=a.hide.distance,r=Math.abs;(r(e.pageX-t.pageX)>=n||r(e.pageY-t.pageY)>=n)&&m.hide(e)}),n.target==="mouse"&&(o.show.bind("mousemove"+B,_),n.adjust.mouse&&(a.hide.event&&(H.bind("mouseleave"+B,function(e){(e.relatedTarget||e.target)!==o.show[0]&&m.hide(e)}),F.target.bind("mouseenter"+B+" mouseleave"+B,function(e){I.onTarget=e.type==="mouseenter"})),o.document.bind("mousemove"+B,function(e){m.rendered&&I.onTarget&&!H.hasClass(j)&&H[0].offsetWidth>0&&m.reposition(e||E)}))),(n.adjust.resize||o.viewport.length)&&(r.event.special.resize?o.viewport:o.window).bind("resize"+B,v),o.window.bind("scroll"+B,v)}function Y(){var n=[a.show.target[0],a.hide.target[0],m.rendered&&F.tooltip[0],a.position.container[0],a.position.viewport[0],a.position.container.closest("html")[0],e,t];m.rendered?r([]).pushStack(r.grep(n,function(e){return typeof e=="object"})).unbind(B):a.show.target.unbind(B+"-create")}var m=this,g=t.body,y=S+"-"+f,A=0,P=0,H=r(),B=".qtip-"+f,j="qtip-disabled",F,I;m.id=f,m.rendered=s,m.destroyed=s,m.elements=F={target:u},m.timers={img:{}},m.options=a,m.checks={},m.plugins={},m.cache=I={event:{},target:r(),disabled:s,attr:l,onTarget:s,lastClass:""},m.checks.builtin={"^id$":function(e,t,n){var o=n===i?b.nextid:n,u=S+"-"+o;o!==s&&o.length>0&&!r("#"+u).length&&(H[0].id=u,F.content[0].id=u+"-content",F.title[0].id=u+"-title")},"^content.text$":function(e,t,n){Q(a.content.text)},"^content.deferred$":function(e,t,n){K(a.content.deferred)},"^content.title.text$":function(e,t,n){if(!n)return z();!F.title&&n&&X(),J(n)},"^content.title.button$":function(e,t,n){V(n)},"^position.(my|at)$":function(e,t,n){"string"==typeof n&&(e[t]=new w.Corner(n))},"^position.container$":function(e,t,n){m.rendered&&H.appendTo(n)},"^show.ready$":function(){m.rendered?m.toggle(i):m.render(1)},"^style.classes$":function(e,t,n){H.attr("class",S+" qtip "+n)},"^style.width|height":function(e,t,n){H.css(t,n)},"^style.widget|content.title":U,"^events.(render|show|move|hide|focus|blur)$":function(e,t,n){H[(r.isFunction(n)?"":"un")+"bind"]("tooltip"+t,n)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var e=a.position;H.attr("tracking",e.target==="mouse"&&e.adjust.mouse),Y(),G()}},r.extend(m,{_triggerEvent:function(e,t,n){var i=r.Event("tooltip"+e);return i.originalEvent=(n?r.extend({},n):o)||I.event||o,H.trigger(i,[m].concat(t||[])),!i.isDefaultPrevented()},render:function(e){if(m.rendered)return m;var t=a.content.text,n=a.content.title,o=a.position;return r.attr(u[0],"aria-describedby",y),H=F.tooltip=r("<div/>",{id:y,"class":[S,C,a.style.classes,S+"-pos-"+a.position.my.abbrev()].join(" "),width:a.style.width||"",height:a.style.height||"",tracking:o.target==="mouse"&&o.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":s,"aria-describedby":y+"-content","aria-hidden":i}).toggleClass(j,I.disabled).data("qtip",m).appendTo(a.position.container).append(F.content=r("<div />",{"class":S+"-content",id:y+"-content","aria-atomic":i})),m.rendered=-1,A=1,n.text?(X(),r.isFunction(n.text)||J(n.text,s)):n.button&&W(),(!r.isFunction(t)||t.then)&&Q(t,s),m.rendered=i,U(),r.each(a.events,function(e,t){r.isFunction(t)&&H.bind(e==="toggle"?"tooltipshow tooltiphide":"tooltip"+e,t)}),r.each(w,function(){this.initialize==="render"&&this(m)}),G(),H.queue("fx",function(t){m._triggerEvent("render"),A=0,(a.show.ready||e)&&m.toggle(i,I.event,s),t()}),m},get:function(e){var t,n;switch(e.toLowerCase()){case"dimensions":t={height:H.outerHeight(s),width:H.outerWidth(s)};break;case"offset":t=w.offset(H,a.position.container);break;default:n=q(e.toLowerCase()),t=n[0][n[1]],t=t.precedance?t.string():t}return t},set:function(e,t){function h(e,t){var n,r,i;for(n in l)for(r in l[n])if(i=(new RegExp(r,"i")).exec(e))t.push(i),l[n][r].apply(m,t)}var n=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,u=/^content\.(title|attr)|style/i,f=s,l=m.checks,c;return"string"==typeof e?(c=e,e={},e[c]=t):e=r.extend(i,{},e),r.each(e,function(t,i){var s=q(t.toLowerCase()),o;o=s[0][s[1]],s[0][s[1]]="object"==typeof i&&i.nodeType?r(i):i,e[t]=[s[0],s[1],i,o],f=n.test(t)||f}),D(a),A=1,r.each(e,h),A=0,m.rendered&&H[0].offsetWidth>0&&f&&m.reposition(a.position.target==="mouse"?o:I.event),m},toggle:function(e,n){function b(){e?(r.browser.msie&&H[0].style.removeAttribute("filter"),H.css("overflow",""),"string"==typeof u.autofocus&&r(u.autofocus,H).focus(),u.target.trigger("qtip-"+f+"-inactive")):H.css({display:"",visibility:"",opacity:"",left:"",top:""}),m._triggerEvent(e?"visible":"hidden")}if(n){if(/over|enter/.test(n.type)&&/out|leave/.test(I.event.type)&&a.show.target.add(n.target).length===a.show.target.length&&H.has(n.relatedTarget).length)return m;I.event=r.extend({},n)}if(!m.rendered)return e?m.render(1):m;var o=e?"show":"hide",u=a[o],l=a[e?"hide":"show"],c=a.position,h=a.content,p=H[0].offsetWidth>0,d=e||u.target.length===1,v=!n||u.target.length<2||I.target[0]===n.target,g,y;return(typeof e).search("boolean|number")&&(e=!p),!H.is(":animated")&&p===e&&v?m:m._triggerEvent(o,[90])?(r.attr(H[0],"aria-hidden",!e),e?(I.origin=r.extend({},E),m.focus(n),r.isFunction(h.text)&&Q(h.text,s),r.isFunction(h.title.text)&&J(h.title.text,s),!M&&c.target==="mouse"&&c.adjust.mouse&&(r(t).bind("mousemove.qtip",_),M=i),m.reposition(n,arguments[2]),!u.solo||r(N,u.solo).not(H).qtip("hide",r.Event("tooltipsolo"))):(clearTimeout(m.timers.show),delete I.origin,M&&!r(N+'[tracking="true"]:visible',u.solo).not(H).length&&(r(t).unbind("mousemove.qtip"),M=s),m.blur(n)),u.effect===s||d===s?(H[o](),b.call(H)):r.isFunction(u.effect)?(H.stop(1,1),u.effect.call(H,m),H.queue("fx",function(e){b(),e()})):H.fadeTo(90,e?1:0,b),e&&u.target.trigger("qtip-"+f+"-inactive"),m):m},show:function(e){return m.toggle(i,e)},hide:function(e){return m.toggle(s,e)},focus:function(e){if(!m.rendered)return m;var t=r(N),n=parseInt(H[0].style.zIndex,10),i=b.zindex+t.length,s=r.extend({},e),o;return H.hasClass(k)||m._triggerEvent("focus",[i],s)&&(n!==i&&(t.each(function(){this.style.zIndex>n&&(this.style.zIndex=this.style.zIndex-1)}),t.filter("."+k).qtip("blur",s)),H.addClass(k)[0].style.zIndex=i),m},blur:function(e){return H.removeClass(k),m._triggerEvent("blur",[H.css("zIndex")],e),m},reposition:function(n,i){if(!m.rendered||A)return m;A=1;var o=a.position.target,u=a.position,f=u.my,l=u.at,g=u.adjust,y=g.method.split(" "),b=H.outerWidth(s),S=H.outerHeight(s),x=0,T=0,N=H.css("position"),C=u.viewport,k={left:0,top:0},L=u.container,O=H[0].offsetWidth>0,M=n&&n.type==="scroll",_=r(e),D,P;if(r.isArray(o)&&o.length===2)l={x:h,y:c},k={left:o[0],top:o[1]};else if(o==="mouse"&&(n&&n.pageX||I.event.pageX))l={x:h,y:c},n=E&&E.pageX&&(g.mouse||!n||!n.pageX)?{pageX:E.pageX,pageY:E.pageY}:(!n||n.type!=="resize"&&n.type!=="scroll"?n&&n.pageX&&n.type==="mousemove"?n:!g.mouse&&I.origin&&I.origin.pageX&&a.show.distance?I.origin:n:I.event)||n||I.event||E||{},N!=="static"&&(k=L.offset()),k={left:n.pageX-k.left,top:n.pageY-k.top},g.mouse&&M&&(k.left-=E.scrollX-_.scrollLeft(),k.top-=E.scrollY-_.scrollTop());else{o==="event"&&n&&n.target&&n.type!=="scroll"&&n.type!=="resize"?I.target=r(n.target):o!=="event"&&(I.target=r(o.jquery?o:F.target)),o=I.target,o=r(o).eq(0);if(o.length===0)return m;o[0]===t||o[0]===e?(x=w.iOS?e.innerWidth:o.width(),T=w.iOS?e.innerHeight:o.height(),o[0]===e&&(k={top:(C||o).scrollTop(),left:(C||o).scrollLeft()})):w.imagemap&&o.is("area")?D=w.imagemap(m,o,l,w.viewport?y:s):w.svg&&o[0].ownerSVGElement?D=w.svg(m,o,l,w.viewport?y:s):(x=o.outerWidth(s),T=o.outerHeight(s),k=w.offset(o,L)),D&&(x=D.width,T=D.height,P=D.offset,k=D.position);if(w.iOS>3.1&&w.iOS<4.1||w.iOS>=4.3&&w.iOS<4.33||!w.iOS&&N==="fixed")k.left-=_.scrollLeft(),k.top-=_.scrollTop();k.left+=l.x===d?x:l.x===v?x/2:0,k.top+=l.y===p?T:l.y===v?T/2:0}return k.left+=g.x+(f.x===d?-b:f.x===v?-b/2:0),k.top+=g.y+(f.y===p?-S:f.y===v?-S/2:0),w.viewport?(k.adjusted=w.viewport(m,k,u,x,T,b,S),P&&k.adjusted.left&&(k.left+=P.left),P&&k.adjusted.top&&(k.top+=P.top)):k.adjusted={left:0,top:0},m._triggerEvent("move",[k,C.elem||C],n)?(delete k.adjusted,i===s||!O||isNaN(k.left)||isNaN(k.top)||o==="mouse"||!r.isFunction(u.effect)?H.css(k):r.isFunction(u.effect)&&(u.effect.call(H,m,r.extend({},k)),H.queue(function(e){r(this).css({opacity:"",height:""}),r.browser.msie&&this.style.removeAttribute("filter"),e()})),A=0,m):m},disable:function(e){return"boolean"!=typeof e&&(e=!H.hasClass(j)&&!I.disabled),m.rendered?(H.toggleClass(j,e),r.attr(H[0],"aria-disabled",e)):I.disabled=!!e,m},enable:function(){return m.disable(s)},destroy:function(){var e=u[0],t=r.attr(e,O),n=u.data("qtip");m.destroyed=i,m.rendered&&(H.stop(1,0).remove(),r.each(m.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(m.timers.show),clearTimeout(m.timers.hide),Y();if(!n||m===n)r.removeData(e,"qtip"),a.suppress&&t&&(r.attr(e,"title",t),u.removeAttr(O)),u.removeAttr("aria-describedby");return u.unbind(".qtip-"+f),delete x[m.id],u}})}function H(e,n){var u,a,f,l,c,h=r(this),p=r(t.body),d=this===t?p:h,v=h.metadata?h.metadata(n.metadata):o,m=n.metadata.type==="html5"&&v?v[n.metadata.name]:o,g=h.data(n.metadata.name||"qtipopts");try{g=typeof g=="string"?r.parseJSON(g):g}catch(y){}l=r.extend(i,{},b.defaults,n,typeof g=="object"?D(g):o,D(m||v)),a=l.position,l.id=e;if("boolean"==typeof l.content.text){f=h.attr(l.content.attr);if(l.content.attr===s||!f)return s;l.content.text=f}a.container.length||(a.container=p),a.target===s&&(a.target=d),l.show.target===s&&(l.show.target=d),l.show.solo===i&&(l.show.solo=a.container.closest("body")),l.hide.target===s&&(l.hide.target=d),l.position.viewport===i&&(l.position.viewport=a.container),a.container=a.container.eq(0),a.at=new w.Corner(a.at),a.my=new w.Corner(a.my);if(r.data(this,"qtip"))if(l.overwrite)h.qtip("destroy");else if(l.overwrite===s)return s;return l.suppress&&(c=r.attr(this,"title"))&&r(this).removeAttr("title").attr(O,c).attr("title",""),u=new P(h,l,e,!!f),r.data(this,"qtip",u),h.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){u.destroy()}),u}function B(e){var t=this,n=e.elements.tooltip,o=e.options.content.ajax,u=b.defaults.content.ajax,a=".qtip-ajax",f=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,l=i,c=s,h;e.checks.ajax={"^content.ajax":function(e,r,i){r==="ajax"&&(o=i),r==="once"?t.init():o&&o.url?t.load():n.unbind(a)}},r.extend(t,{init:function(){return o&&o.url&&n.unbind(a)[o.once?"one":"bind"]("tooltipshow"+a,t.load),t},load:function(n){function g(){var t;if(e.destroyed)return;l=s,v&&(c=i,e.show(n.originalEvent)),(t=u.complete||o.complete)&&r.isFunction(t)&&t.apply(o.context||e,arguments)}function y(t,n,i){var s;if(e.destroyed)return;d&&"string"==typeof t&&(t=r("<div/>").append(t.replace(f,"")).find(d)),(s=u.success||o.success)&&r.isFunction(s)?s.call(o.context||e,t,n,i):e.set("content.text",t)}function b(t,n,r){if(e.destroyed||t.status===0)return;e.set("content.text",n+": "+r)}if(c){c=s;return}var a=o.url.lastIndexOf(" "),p=o.url,d,v=!o.loading&&l;if(v)try{n.preventDefault()}catch(m){}else if(n&&n.isDefaultPrevented())return t;h&&h.abort&&h.abort(),a>-1&&(d=p.substr(a),p=p.substr(0,a)),h=r.ajax(r.extend({error:u.error||b,context:e},o,{url:p,success:y,complete:g}))},destroy:function(){h&&h.abort&&h.abort(),e.destroyed=i}}),t.init()}function j(e,t,n){var r=Math.ceil(t/2),i=Math.ceil(n/2),s={bottomright:[[0,0],[t,n],[t,0]],bottomleft:[[0,0],[t,0],[0,n]],topright:[[0,n],[t,0],[t,n]],topleft:[[0,0],[0,n],[t,n]],topcenter:[[0,n],[r,0],[t,n]],bottomcenter:[[0,0],[t,0],[r,n]],rightcenter:[[0,0],[t,i],[0,n]],leftcenter:[[t,0],[t,n],[0,i]]};return s.lefttop=s.bottomright,s.righttop=s.bottomleft,s.leftbottom=s.topright,s.rightbottom=s.topleft,s[e.string()]}function F(e,t){function A(e){var t=E.is(":visible");E.show(),e(),E.toggle(t)}function O(){x.width=g.height,x.height=g.width}function M(){x.width=g.width,x.height=g.height}function _(t,r,o,f){if(!b.tip)return;var l=m.corner.clone(),w=o.adjusted,E=e.options.position.adjust.method.split(" "),x=E[0],T=E[1]||E[0],N={left:s,top:s,x:0,y:0},C,k={},L;m.corner.fixed!==i&&(x===y&&l.precedance===u&&w.left&&l.y!==v?l.precedance=l.precedance===u?a:u:x!==y&&w.left&&(l.x=l.x===v?w.left>0?h:d:l.x===h?d:h),T===y&&l.precedance===a&&w.top&&l.x!==v?l.precedance=l.precedance===a?u:a:T!==y&&w.top&&(l.y=l.y===v?w.top>0?c:p:l.y===c?p:c),l.string()!==S.corner.string()&&(S.top!==w.top||S.left!==w.left)&&m.update(l,s)),C=m.position(l,w),C[l.x]+=P(l,l.x),C[l.y]+=P(l,l.y),C.right!==n&&(C.left=-C.right),C.bottom!==n&&(C.top=-C.bottom),C.user=Math.max(0,g.offset);if(N.left=x===y&&!!w.left)l.x===v?k["margin-left"]=N.x=C["margin-left"]:(L=C.right!==n?[w.left,-C.left]:[-w.left,C.left],(N.x=Math.max(L[0],L[1]))>L[0]&&(o.left-=w.left,N.left=s),k[C.right!==n?d:h]=N.x);if(N.top=T===y&&!!w.top)l.y===v?k["margin-top"]=N.y=C["margin-top"]:(L=C.bottom!==n?[w.top,-C.top]:[-w.top,C.top],(N.y=Math.max(L[0],L[1]))>L[0]&&(o.top-=w.top,N.top=s),k[C.bottom!==n?p:c]=N.y);b.tip.css(k).toggle(!(N.x&&N.y||l.x===v&&N.y||l.y===v&&N.x)),o.left-=C.left.charAt?C.user:x!==y||N.top||!N.left&&!N.top?C.left:0,o.top-=C.top.charAt?C.user:T!==y||N.left||!N.left&&!N.top?C.top:0,S.left=w.left,S.top=w.top,S.corner=l.clone()}function D(){var t=g.corner,n=e.options.position,r=n.at,o=n.my.string?n.my.string():n.my;return t===s||o===s&&r===s?s:(t===i?m.corner=new w.Corner(o):t.string||(m.corner=new w.Corner(t),m.corner.fixed=i),S.corner=new w.Corner(m.corner.string()),m.corner.string()!=="centercenter")}function P(e,t,n){t=t?t:e[e.precedance];var r=b.titlebar&&e.y===c,i=r?b.titlebar:E,s="border-"+t+"-width",o=function(e){return parseInt(e.css(s),10)},u;return A(function(){u=(n?o(n):o(b.content)||o(i)||o(E))||0}),u}function H(e){var t=b.titlebar&&e.y===c,n=t?b.titlebar:b.content,i=r.browser.mozilla,s=i?"-moz-":r.browser.webkit?"-webkit-":"",o="border-radius-"+e.y+e.x,u="border-"+e.y+"-"+e.x+"-radius",a=function(e){return parseInt(n.css(e),10)||parseInt(E.css(e),10)},f;return A(function(){f=a(u)||a(s+u)||a(s+o)||a(o)||0}),f}function B(e){function N(e,t,n){var r=e.css(t)||p;return n&&r===e.css(n)?s:f.test(r)?s:r}var t,n,o,u=b.tip.css("cssText",""),a=e||m.corner,f=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,l="border-"+a[a.precedance]+"-color",h="background-color",p="transparent",d=" !important",y=b.titlebar,w=y&&(a.y===c||a.y===v&&u.position().top+x.height/2+g.offset<y.outerHeight(i)),S=w?y:b.content;A(function(){T.fill=N(u,h)||N(S,h)||N(b.content,h)||N(E,h)||u.css(h),T.border=N(u,l,"color")||N(S,l,"color")||N(b.content,l,"color")||N(E,l,"color")||E.css(l),r("*",u).add(u).css("cssText",h+":"+p+d+";border:0"+d+";")})}function F(e){var t=e.precedance===a,n=x[t?f:l],r=x[t?l:f],i=e.string().indexOf(v)>-1,s=n*(i?.5:1),o=Math.pow,u=Math.round,c,h,p,d=Math.sqrt(o(s,2)+o(r,2)),m=[N/s*d,N/r*d];return m[2]=Math.sqrt(o(m[0],2)-o(N,2)),m[3]=Math.sqrt(o(m[1],2)-o(N,2)),c=d+m[2]+m[3]+(i?0:m[0]),h=c/d,p=[u(h*r),u(h*n)],{height:p[t?0:1],width:p[t?1:0]}}function I(e,t,n){return"<qvml:"+e+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(t||"")+' style="behavior: url(#default#VML); '+(n||"")+'" />'}var m=this,g=e.options.style.tip,b=e.elements,E=b.tooltip,S={top:0,left:0},x={width:g.width,height:g.height},T={},N=g.border||0,C=".qtip-tip",k=!!(r("<canvas />")[0]||{}).getContext,L;m.corner=o,m.mimic=o,m.border=N,m.offset=g.offset,m.size=x,e.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){m.init()||m.destroy(),e.reposition()},"^style.tip.(height|width)$":function(){x={width:g.width,height:g.height},m.create(),m.update(),e.reposition()},"^content.title.text|style.(classes|widget)$":function(){b.tip&&b.tip.length&&m.update()}},r.extend(m,{init:function(){var e=D()&&(k||r.browser.msie);return e&&(m.create(),m.update(),E.unbind(C).bind("tooltipmove"+C,_)),e},create:function(){var e=x.width,t=x.height,n;b.tip&&b.tip.remove(),b.tip=r("<div />",{"class":"qtip-tip"}).css({width:e,height:t}).prependTo(E),k?r("<canvas />").appendTo(b.tip)[0].getContext("2d").save():(n=I("shape",'coordorigin="0,0"',"position:absolute;"),b.tip.html(n+n),r("*",b.tip).bind("click mousedown",function(e){e.stopPropagation()}))},update:function(e,t){var n=b.tip,f=n.children(),l=x.width,y=x.height,C=g.mimic,L=Math.round,A,_,D,H,q;e||(e=S.corner||m.corner),C===s?C=e:(C=new w.Corner(C),C.precedance=e.precedance,C.x==="inherit"?C.x=e.x:C.y==="inherit"?C.y=e.y:C.x===C.y&&(C[e.precedance]=e[e.precedance])),A=C.precedance,e.precedance===u?O():M(),b.tip.css({width:l=x.width,height:y=x.height}),B(e),T.border!=="transparent"?(N=P(e,o),g.border===0&&N>0&&(T.fill=T.border),m.border=N=g.border!==i?g.border:N):m.border=N=0,D=j(C,l,y),m.size=q=F(e),n.css(q).css("line-height",q.height+"px"),e.precedance===a?H=[L(C.x===h?N:C.x===d?q.width-l-N:(q.width-l)/2),L(C.y===c?q.height-y:0)]:H=[L(C.x===h?q.width-l:0),L(C.y===c?N:C.y===p?q.height-y-N:(q.height-y)/2)],k?(f.attr(q),_=f[0].getContext("2d"),_.restore(),_.save(),_.clearRect(0,0,3e3,3e3),_.fillStyle=T.fill,_.strokeStyle=T.border,_.lineWidth=N*2,_.lineJoin="miter",_.miterLimit=100,_.translate(H[0],H[1]),_.beginPath(),_.moveTo(D[0][0],D[0][1]),_.lineTo(D[1][0],D[1][1]),_.lineTo(D[2][0],D[2][1]),_.closePath(),N&&(E.css("background-clip")==="border-box"&&(_.strokeStyle=T.fill,_.stroke()),_.strokeStyle=T.border,_.stroke()),_.fill()):(D="m"+D[0][0]+","+D[0][1]+" l"+D[1][0]+","+D[1][1]+" "+D[2][0]+","+D[2][1]+" xe",H[2]=N&&/^(r|b)/i.test(e.string())?parseFloat(r.browser.version,10)===8?2:1:0,f.css({coordsize:l+N+" "+(y+N),antialias:""+(C.string().indexOf(v)>-1),left:H[0],top:H[1],width:l+N,height:y+N}).each(function(e){var t=r(this);t[t.prop?"prop":"attr"]({coordsize:l+N+" "+(y+N),path:D,fillcolor:T.fill,filled:!!e,stroked:!e}).toggle(!!N||!!e),!e&&t.html()===""&&t.html(I("stroke",'weight="'+N*2+'px" color="'+T.border+'" miterlimit="1000" joinstyle="miter"'))})),t!==s&&m.position(e)},position:function(e){var t=b.tip,n={},i=Math.max(0,g.offset),o,p,d;return g.corner===s||!t?s:(e=e||m.corner,o=e.precedance,p=F(e),d=[e.x,e.y],o===u&&d.reverse(),r.each(d,function(t,r){var s,u,d;r===v?(s=o===a?h:c,n[s]="50%",n["margin-"+s]=-Math.round(p[o===a?f:l]/2)+i):(s=P(e,r),u=P(e,r,b.content),d=H(e),n[r]=t?u:i+(d>s?d:-s))}),n[e[o]]-=p[o===u?f:l],t.css({top:"",bottom:"",left:"",right:"",margin:""}).css(n),n)},destroy:function(){b.tip&&b.tip.remove(),b.tip=!1,E.unbind(C)}}),m.init()}function I(n){function y(){m=r(v,f).not("[disabled]").map(function(){return typeof this.focus=="function"?this:null})}function b(e){m.length<1&&e.length?e.not("body").blur():m.first().focus()}function E(e){var t=r(e.target),n=t.closest(".qtip"),i;i=n.length<1?s:parseInt(n[0].style.zIndex,10)>parseInt(f[0].style.zIndex,10),!i&&r(e.target).closest(N)[0]!==f[0]&&b(t)}var o=this,u=n.options.show.modal,a=n.elements,f=a.tooltip,l="#qtip-overlay",c=".qtipmodal",h=c+n.id,p="is-modal-qtip",d=r(t.body),v=w.modal.focusable.join(","),m={},g;n.checks.modal={"^show.modal.(on|blur)$":function(){o.init(),a.overlay.toggle(f.is(":visible"))},"^content.text$":function(){y()}},r.extend(o,{init:function(){return u.on?(g=o.create(),f.attr(p,i).css("z-index",w.modal.zindex+r(N+"["+p+"]").length).unbind(c).unbind(h).bind("tooltipshow"+c+" tooltiphide"+c,function(e,t,n){var i=e.originalEvent;if(e.target===f[0])if(i&&e.type==="tooltiphide"&&/mouse(leave|enter)/.test(i.type)&&r(i.relatedTarget).closest(g[0]).length)try{e.preventDefault()}catch(s){}else(!i||i&&!i.solo)&&o[e.type.replace("tooltip","")](e,n)}).bind("tooltipfocus"+c,function(e){if(e.isDefaultPrevented()||e.target!==f[0])return;var t=r(N).filter("["+p+"]"),n=w.modal.zindex+t.length,i=parseInt(f[0].style.zIndex,10);g[0].style.zIndex=n-2,t.each(function(){this.style.zIndex>i&&(this.style.zIndex-=1)}),t.end().filter("."+k).qtip("blur",e.originalEvent),f.addClass(k)[0].style.zIndex=n;try{e.preventDefault()}catch(s){}}).bind("tooltiphide"+c,function(e){e.target===f[0]&&r("["+p+"]").filter(":visible").not(f).last().qtip("focus",e)}),u.escape&&r(t).unbind(h).bind("keydown"+h,function(e){e.keyCode===27&&f.hasClass(k)&&n.hide(e)}),u.blur&&a.overlay.unbind(h).bind("click"+h,function(e){f.hasClass(k)&&n.hide(e)}),y(),o):o},create:function(){function i(){g.css({height:n.height(),width:n.width()})}var t=r(l),n=r(e);return t.length?a.overlay=t.insertAfter(r(N).last()):(g=a.overlay=r("<div />",{id:l.substr(1),html:"<div></div>",mousedown:function(){return s}}).hide().insertAfter(r(N).last()),n.unbind(c).bind("resize"+c,i),i(),g)},toggle:function(e,t,n){if(e&&e.isDefaultPrevented())return o;var a=u.effect,l=t?"show":"hide",c=g.is(":visible"),v=r("["+p+"]").filter(":visible").not(f),m;return g||(g=o.create()),g.is(":animated")&&c===t&&g.data("toggleState")!==s||!t&&v.length?o:(t?(g.css({left:0,top:0}),g.toggleClass("blurs",u.blur),u.stealfocus!==s&&(d.bind("focusin"+h,E),b(r("body :focus")))):d.unbind("focusin"+h),g.stop(i,s).data("toggleState",t),r.isFunction(a)?a.call(g,t):a===s?g[l]():g.fadeTo(parseInt(n,10)||90,t?1:0,function(){t||r(this).hide()}),t||g.queue(function(e){g.css({left:"",top:""}).removeData("toggleState"),e()}),o)},show:function(e,t){return o.toggle(e,i,t)},hide:function(e,t){return o.toggle(e,s,t)},destroy:function(){var e=g;return e&&(e=r("["+p+"]").not(f).length<1,e?(a.overlay.remove(),r(t).unbind(c)):a.overlay.unbind(c+n.id),d.unbind("focusin"+h)),f.removeAttr(p).unbind(c)}}),o.init()}function q(n){var o=this,u=n.elements,a=n.options,c=u.tooltip,h=".ie6-"+n.id,p=r("select, object").length<1,d=0,v=s,m;n.checks.ie6={"^content|style$":function(e,t,n){redraw()}},r.extend(o,{init:function(){var n=r(e),s;p&&(u.bgiframe=r('<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>'),u.bgiframe.appendTo(c),c.bind("tooltipmove"+h,o.adjustBGIFrame)),m=r("<div/>",{id:"qtip-rcontainer"}).appendTo(t.body),o.redraw(),u.overlay&&!v&&(s=function(){u.overlay[0].style.top=n.scrollTop()+"px"},n.bind("scroll.qtip-ie6, resize.qtip-ie6",s),s(),u.overlay.addClass("qtipmodal-ie6fix"),v=i)},adjustBGIFrame:function(){var e=n.get("dimensions"),t=n.plugins.tip,r=u.tip,i,s;s=parseInt(c.css("border-left-width"),10)||0,s={left:-s,top:-s},t&&r&&(i=t.corner.precedance==="x"?["width","left"]:["height","top"],s[i[1]]-=r[i[0]]()),u.bgiframe.css(s).css(e)},redraw:function(){if(n.rendered<1||d)return o;var e=a.style,t=a.position.container,r,i,s,u;return d=1,e.height&&c.css(l,e.height),e.width?c.css(f,e.width):(c.css(f,"").appendTo(m),i=c.width(),i%2<1&&(i+=1),s=c.css("max-width")||"",u=c.css("min-width")||"",r=(s+u).indexOf("%")>-1?t.width()/100:0,s=(s.indexOf("%")>-1?r:1)*parseInt(s,10)||i,u=(u.indexOf("%")>-1?r:1)*parseInt(u,10)||0,i=s+u?Math.min(Math.max(i,u),s):i,c.css(f,Math.round(i)).appendTo(t)),d=0,o},destroy:function(){p&&u.bgiframe.remove(),c.unbind(h)}}),o.init()}var i=!0,s=!1,o=null,u="x",a="y",f="width",l="height",c="top",h="left",p="bottom",d="right",v="center",m="flip",g="flipinvert",y="shift",b,w,E,S="qtip",x={},T=["ui-widget","ui-tooltip"],N="div.qtip."+S,C=S+"-default",k=S+"-focus",L=S+"-hover",A="_replacedByqTip",O="oldtitle",M;b=r.fn.qtip=function(e,t,u){var a=(""+e).toLowerCase(),f=o,l=r.makeArray(arguments).slice(1),c=l[l.length-1],h=this[0]?r.data(this[0],"qtip"):o;if(!arguments.length&&h||a==="api")return h;if("string"==typeof e)return this.each(function(){var e=r.data(this,"qtip");if(!e)return i;c&&c.timeStamp&&(e.cache.event=c);if(a!=="option"&&a!=="options"||!t)e[a]&&e[a].apply(e[a],l);else{if(!r.isPlainObject(t)&&u===n)return f=e.get(t),s;e.set(t,u)}}),f!==o?f:this;if("object"==typeof e||!arguments.length)return h=D(r.extend(i,{},e)),b.bind.call(this,h,c)},b.bind=function(e,t){return this.each(function(o){function p(e){function t(){c.render(typeof e=="object"||u.show.ready),a.show.add(a.hide).unbind(l)}if(c.cache.disabled)return s;c.cache.event=r.extend({},e),c.cache.target=e?r(e.target):[n],u.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(t,u.show.delay),f.show!==f.hide&&a.hide.bind(f.hide,function(){clearTimeout(c.timers.show)})):t()}var u,a,f,l,c,h;h=r.isArray(e.id)?e.id[o]:e.id,h=!h||h===s||h.length<1||x[h]?b.nextid++:x[h]=h,l=".qtip-"+h+"-create",c=H.call(this,h,e);if(c===s)return i;u=c.options,r.each(w,function(){this.initialize==="initialize"&&this(c)}),a={show:u.show.target,hide:u.hide.target},f={show:r.trim(""+u.show.event).replace(/ /g,l+" ")+l,hide:r.trim(""+u.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(f.show)&&!/mouse(out|leave)/i.test(f.hide)&&(f.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(e){_(e),c.cache.onTarget=i}),a.show.bind(f.show,p),(u.show.ready||u.prerender)&&p(t)}).attr("data-hasqtip",i)},w=b.plugins={Corner:function(e){e=(""+e).replace(/([A-Z])/," $1").replace(/middle/gi,v).toLowerCase(),this.x=(e.match(/left|right/i)||e.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(e.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var t=e.charAt(0);this.precedance=t==="t"||t==="b"?a:u,this.string=function(){return this.precedance===a?this.y+this.x:this.x+this.y},this.abbrev=function(){var e=this.x.substr(0,1),t=this.y.substr(0,1);return e===t?e:this.precedance===a?t+e:e+t},this.invertx=function(e){this.x=this.x===h?d:this.x===d?h:e||this.x},this.inverty=function(e){this.y=this.y===c?p:this.y===p?c:e||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(e,n){function c(e,t){i.left+=t*e.scrollLeft(),i.top+=t*e.scrollTop()}var i=e.offset(),s=e.closest("body"),o=r.browser.msie&&t.compatMode!=="CSS1Compat",u=n,a,f,l;if(u){do u.css("position")!=="static"&&(f=u.position(),i.left-=f.left+(parseInt(u.css("borderLeftWidth"),10)||0)+(parseInt(u.css("marginLeft"),10)||0),i.top-=f.top+(parseInt(u.css("borderTopWidth"),10)||0)+(parseInt(u.css("marginTop"),10)||0),!a&&(l=u.css("overflow"))!=="hidden"&&l!=="visible"&&(a=u));while((u=r(u[0].offsetParent)).length);(a&&a[0]!==s[0]||o)&&c(a||s,1)}return i},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||s,fn:{attr:function(e,t){if(this.length){var n=this[0],i="title",s=r.data(n,"qtip");if(e===i&&s&&"object"==typeof s&&s.options.suppress)return arguments.length<2?r.attr(n,O):(s&&s.options.content.attr===i&&s.cache.attr&&s.set("content.text",t),this.attr(O,t))}return r.fn["attr"+A].apply(this,arguments)},clone:function(e){var t=r([]),n="title",i=r.fn["clone"+A].apply(this,arguments);return e||i.filter("["+O+"]").attr("title",function(){return r.attr(this,O)}).removeAttr(O),i}}},r.each(w.fn,function(e,t){if(!t||r.fn[e+A])return i;var n=r.fn[e+A]=r.fn[e];r.fn[e]=function(){return t.apply(this,arguments)||n.apply(this,arguments)}}),r.ui||(r["cleanData"+A]=r.cleanData,r.cleanData=function(e){for(var t=0,i;(i=e[t])!==n;t++)try{r(i).triggerHandler("removeqtip")}catch(s){}r["cleanData"+A](e)}),b.version="2.0.1",b.nextid=0,b.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),b.zindex=15e3,b.defaults={prerender:s,id:s,overwrite:i,suppress:i,content:{text:i,attr:"title",deferred:s,title:{text:s,button:s}},position:{my:"top left",at:"bottom right",target:s,container:s,viewport:s,adjust:{x:0,y:0,mouse:i,resize:i,method:"flipinvert flipinvert"},effect:function(e,t,n){r(this).animate(t,{duration:200,queue:s})}},show:{target:s,event:"mouseenter",effect:i,delay:90,solo:s,ready:s,autofocus:s},hide:{target:s,event:"mouseleave",effect:i,delay:0,fixed:s,inactive:s,leave:"window",distance:s},style:{classes:"",widget:s,width:s,height:s,def:i},events:{render:o,move:o,show:o,hide:o,toggle:o,visible:o,hidden:o,focus:o,blur:o}},w.svg=function(e,n,i,s){var o=r(t),u=n[0],a={width:0,height:0,position:{top:1e10,left:1e10}},f,l,c,h,p;while(!u.getBBox)u=u.parentNode;if(u.getBBox&&u.parentNode){f=u.getBBox(),l=u.getScreenCTM(),c=u.farthestViewportElement||u;if(!c.createSVGPoint)return a;h=c.createSVGPoint(),h.x=f.x,h.y=f.y,p=h.matrixTransform(l),a.position.left=p.x,a.position.top=p.y,h.x+=f.width,h.y+=f.height,p=h.matrixTransform(l),a.width=p.x-a.position.left,a.height=p.y-a.position.top,a.position.left+=o.scrollLeft(),a.position.top+=o.scrollTop()}return a},w.ajax=function(e){var t=e.plugins.ajax;return"object"==typeof t?t:e.plugins.ajax=new B(e)},w.ajax.initialize="render",w.ajax.sanitize=function(e){var t=e.content,n;t&&"ajax"in t&&(n=t.ajax,typeof n!="object"&&(n=e.content.ajax={url:n}),"boolean"!=typeof n.once&&n.once&&(n.once=!!n.once))},r.extend(i,b.defaults,{content:{ajax:{loading:i,once:i}}}),w.tip=function(e){var t=e.plugins.tip;return"object"==typeof t?t:e.plugins.tip=new F(e)},w.tip.initialize="render",w.tip.sanitize=function(e){var t=e.style,n;t&&"tip"in t&&(n=e.style.tip,typeof n!="object"&&(e.style.tip={corner:n}),/string|boolean/i.test(typeof n.corner)||(n.corner=i),typeof n.width!="number"&&delete n.width,typeof n.height!="number"&&delete n.height,typeof n.border!="number"&&n.border!==i&&delete n.border,typeof n.offset!="number"&&delete n.offset)},r.extend(i,b.defaults,{style:{tip:{corner:i,mimic:s,width:6,height:6,border:i,offset:0}}}),w.modal=function(e){var t=e.plugins.modal;return"object"==typeof t?t:e.plugins.modal=new I(e)},w.modal.initialize="render",w.modal.sanitize=function(e){e.show&&(typeof e.show.modal!="object"?e.show.modal={on:!!e.show.modal}:typeof e.show.modal.on=="undefined"&&(e.show.modal.on=i))},w.modal.zindex=b.zindex-200,w.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],r.extend(i,b.defaults,{show:{modal:{on:s,effect:i,blur:i,stealfocus:i,escape:i}}}),w.viewport=function(n,r,i,s,o,m,b){function j(e,t,n,i,s,o,u,a,f){var l=r[s],c=x[e],h=T[e],p=n===y,d=-O.offset[s]+A.offset[s]+A["scroll"+s],m=c===s?f:c===o?-f:-f/2,b=h===s?a:h===o?-a:-a/2,w=_&&_.size?_.size[u]||0:0,E=_&&_.corner&&_.corner.precedance===e&&!p?w:0,S=d-l+E,N=l+f-A[u]-d+E,C=m-(x.precedance===e||c===x[t]?b:0)-(h===v?a/2:0);return p?(E=_&&_.corner&&_.corner.precedance===t?w:0,C=(c===s?1:-1)*m-E,r[s]+=S>0?S:N>0?-N:0,r[s]=Math.max(-O.offset[s]+A.offset[s]+(E&&_.corner[e]===v?_.offset:0),l-C,Math.min(Math.max(-O.offset[s]+A.offset[s]+A[u],l+C),r[s]))):(i*=n===g?2:0,S>0&&(c!==s||N>0)?(r[s]-=C+i,H["invert"+e](s)):N>0&&(c!==o||S>0)&&(r[s]-=(c===v?-C:C)+i,H["invert"+e](o)),r[s]<d&&-r[s]>N&&(r[s]=l,H=x.clone())),r[s]-l}var w=i.target,E=n.elements.tooltip,x=i.my,T=i.at,N=i.adjust,C=N.method.split(" "),k=C[0],L=C[1]||C[0],A=i.viewport,O=i.container,M=n.cache,_=n.plugins.tip,D={left:0,top:0},P,H,B;if(!A.jquery||w[0]===e||w[0]===t.body||N.method==="none")return D;P=E.css("position")==="fixed",A={elem:A,height:A[(A[0]===e?"h":"outerH")+"eight"](),width:A[(A[0]===e?"w":"outerW")+"idth"](),scrollleft:P?0:A.scrollLeft(),scrolltop:P?0:A.scrollTop(),offset:A.offset()||{left:0,top:0}},O={elem:O,scrollLeft:O.scrollLeft(),scrollTop:O.scrollTop(),offset:O.offset()||{left:0,top:0}};if(k!=="shift"||L!=="shift")H=x.clone();return D={left:k!=="none"?j(u,a,k,N.x,h,d,f,s,m):0,top:L!=="none"?j(a,u,L,N.y,c,p,l,o,b):0},H&&M.lastClass!==(B=S+"-pos-"+H.abbrev())&&E.removeClass(n.cache.lastClass).addClass(n.cache.lastClass=B),D},w.imagemap=function(e,t,n,i){function E(e,t,n){var r=0,i=1,s=1,o=0,u=0,a=e.width,f=e.height;while(a>0&&f>0&&i>0&&s>0){a=Math.floor(a/2),f=Math.floor(f/2),n.x===h?i=a:n.x===d?i=e.width-a:i+=Math.floor(a/2),n.y===c?s=f:n.y===p?s=e.height-f:s+=Math.floor(f/2),r=t.length;while(r--){if(t.length<2)break;o=t[r][0]-e.position.left,u=t[r][1]-e.position.top,(n.x===h&&o>=i||n.x===d&&o<=i||n.x===v&&(o<i||o>e.width-i)||n.y===c&&u>=s||n.y===p&&u<=s||n.y===v&&(u<s||u>e.height-s))&&t.splice(r,1)}}return{left:t[0][0],top:t[0][1]}}t.jquery||(t=r(t));var s=e.cache.areas={},o=(t[0].shape||t.attr("shape")).toLowerCase(),u=t[0].coords||t.attr("coords"),a=u.split(","),f=[],l=r('img[usemap="#'+t.parent("map").attr("name")+'"]'),m=l.offset(),g={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},y=0,b=0,w;m.left+=Math.ceil((l.outerWidth()-l.width())/2),m.top+=Math.ceil((l.outerHeight()-l.height())/2);if(o==="poly"){y=a.length;while(y--)b=[parseInt(a[--y],10),parseInt(a[y+1],10)],b[0]>g.position.right&&(g.position.right=b[0]),b[0]<g.position.left&&(g.position.left=b[0]),b[1]>g.position.bottom&&(g.position.bottom=b[1]),b[1]<g.position.top&&(g.position.top=b[1]),f.push(b)}else{y=-1;while(y++<a.length)f.push(parseInt(a[y],10))}switch(o){case"rect":g={width:Math.abs(f[2]-f[0]),height:Math.abs(f[3]-f[1]),position:{left:Math.min(f[0],f[2]),top:Math.min(f[1],f[3])}};break;case"circle":g={width:f[2]+2,height:f[2]+2,position:{left:f[0],top:f[1]}};break;case"poly":g.width=Math.abs(g.position.right-g.position.left),g.height=Math.abs(g.position.bottom-g.position.top),n.abbrev()==="c"?g.position={left:g.position.left+g.width/2,top:g.position.top+g.height/2}:(s[n+u]||(g.position=E(g,f.slice(),n),i&&(i[0]==="flip"||i[1]==="flip")&&(g.offset=E(g,f.slice(),{x:n.x===h?d:n.x===d?h:v,y:n.y===c?p:n.y===p?c:v}),g.offset.left-=g.position.left,g.offset.top-=g.position.top),s[n+u]=g),g=s[n+u]),g.width=g.height=0}return g.position.left+=m.left,g.position.top+=m.top,g},w.ie6=function(e){var t=r.browser,n=e.plugins.ie6;return!t.msie||(""+t.version).charAt(0)!=="6"?s:"object"==typeof n?n:e.plugins.ie6=new q(e)},w.ie6.initialize="render"})})(window,document);
\ No newline at end of file diff --git a/app/assets/javascripts/route.js.coffee b/app/assets/javascripts/route.js.coffee index 274e87f77..b679f1893 100644 --- a/app/assets/javascripts/route.js.coffee +++ b/app/assets/javascripts/route.js.coffee @@ -23,10 +23,10 @@ jQuery -> else selectFeature.unselectAll() - $('.routes.show div.stop_points .stop_point').live("hover", select_stop_on_map) + $(document).on("hover", '.routes.show div.stop_points .stop_point', select_stop_on_map) make_ajax_pagination = () -> $.get(this.href, null, null, 'script') false - $('.routes.show .stop_points_detail .pagination a').live("click", make_ajax_pagination) + $(document).on("click", '.routes.show .stop_points_detail .pagination a', make_ajax_pagination) diff --git a/app/assets/javascripts/vehicle_journey.js.coffee b/app/assets/javascripts/vehicle_journey.js.coffee index 89bc8825f..94c45602c 100644 --- a/app/assets/javascripts/vehicle_journey.js.coffee +++ b/app/assets/javascripts/vehicle_journey.js.coffee @@ -10,13 +10,13 @@ jQuery -> event.preventDefault() swap_hour_minute( '.departure_time', '.arrival_time') - $('.vehicle_journeys a.to_arrivals').live("click", copy_departures_to_arrivals) + $(document).on("click", '.vehicle_journeys a.to_arrivals', copy_departures_to_arrivals) copy_arrivals_to_departures = (event) -> event.preventDefault() swap_hour_minute( '.arrival_time', '.departure_time') - $('.vehicle_journeys a.to_departures').live("click", copy_arrivals_to_departures) + $(document).on("click", '.vehicle_journeys a.to_departures', copy_arrivals_to_departures) switch_vehicle_journey_at_stops = (event) -> event.preventDefault() diff --git a/app/assets/stylesheets/errors.css.scss b/app/assets/stylesheets/errors.css.scss new file mode 100644 index 000000000..b314da37a --- /dev/null +++ b/app/assets/stylesheets/errors.css.scss @@ -0,0 +1,15 @@ +#workspace.errors { + + body {text-align: center; } + div.error { + width: 45em; + padding:1em; + margin: 2em auto 0 auto; + border: 1px solid #ccc; + border-right-color: #999; + border-bottom-color: #999; + } + h2 { font-size: 100%; color: #f00; line-height: 1.5em; font-weight: bold} + a,a:visited { text-decoration: underline; color: blue} + +} diff --git a/app/assets/stylesheets/jquery.qtip.min.css b/app/assets/stylesheets/jquery.qtip.min.css index 65d786f52..9e1ab087d 100644 --- a/app/assets/stylesheets/jquery.qtip.min.css +++ b/app/assets/stylesheets/jquery.qtip.min.css @@ -1 +1 @@ -/*!* qTip2 - Pretty powerful tooltips * http://craigsworks.com/projects/qtip2/ * * Version:nightly * Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com * * Dual licensed under MIT or GPLv2 licenses * http://en.wikipedia.org/wiki/MIT_License * http://en.wikipedia.org/wiki/GNU_General_Public_License * * Date:Tue Jul 3 15:45:43.0000000000 2012 */ .ui-tooltip,.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;border-width:1px;border-style:solid;}.ui-tooltip-fluid{display:block;visibility:hidden;position:static!important;float:left!important;}.ui-tooltip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word;overflow:hidden;}.ui-tooltip-titlebar{position:relative;min-height:14px;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:bold;}.ui-tooltip-titlebar+.ui-tooltip-content{border-top-width:0!important;}/*!Default close button class */ .ui-tooltip-titlebar .ui-state-default{position:absolute;right:4px;top:50%;margin-top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;}* html .ui-tooltip-titlebar .ui-state-default{top:16px;}.ui-tooltip-titlebar .ui-icon,.ui-tooltip-icon .ui-icon{display:block;text-indent:-1000em;}.ui-tooltip-icon,.ui-tooltip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none;}.ui-tooltip-icon .ui-icon{width:18px;height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em;}/*!Default tooltip style */ .ui-tooltip-default{border-color:#F1D031;background-color:#FFFFA3;color:#555;}.ui-tooltip-default .ui-tooltip-titlebar{background-color:#FFEF93;}.ui-tooltip-default .ui-tooltip-icon{border-color:#CCC;background:#F1F1F1;color:#777;}.ui-tooltip-default .ui-tooltip-titlebar .ui-state-hover{border-color:#AAA;color:#111;}
\ No newline at end of file +/*! qTip2 v2.0.1 (includes: svg ajax tips modal viewport imagemap ie6 / basic css3) | qtip2.com | Licensed MIT, GPL | Mon Dec 31 2012 14:55:17 */.qtip,.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr;vertical-align:middle}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));background-image:-webkit-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,black 100%)}.qtip-youtube .qtip-titlebar{background-color:#4A4A4A;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px black}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:-10000em;top:-10000em}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
\ No newline at end of file diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb new file mode 100644 index 000000000..c68a60804 --- /dev/null +++ b/app/controllers/errors_controller.rb @@ -0,0 +1,9 @@ +class ErrorsController < ApplicationController + def not_found + render :status => 404, :formats => [:html] + end + + def server_error + render :status => 500, :formats => [:html] + end +end
\ No newline at end of file diff --git a/app/controllers/journey_patterns_controller.rb b/app/controllers/journey_patterns_controller.rb index 377ddf7c8..0274b9b71 100644 --- a/app/controllers/journey_patterns_controller.rb +++ b/app/controllers/journey_patterns_controller.rb @@ -35,5 +35,10 @@ class JourneyPatternsController < ChouetteController @vehicle_journey.update_journey_pattern(resource) render "vehicle_journeys/select_journey_pattern" end + # overwrite inherited resources to use delete instead of destroy + # foreign keys will propagate deletion) + def destroy_resource(object) + object.delete + end end diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb index c8655908d..acae8348e 100644 --- a/app/controllers/lines_controller.rb +++ b/app/controllers/lines_controller.rb @@ -14,6 +14,12 @@ class LinesController < ChouetteController show! end + # overwrite inherited resources to use delete instead of destroy + # foreign keys will propagate deletion) + def destroy_resource(object) + object.delete + end + def destroy_all objects = get_collection_ivar || set_collection_ivar(end_of_association_chain.where(:id => params[:ids])) diff --git a/app/controllers/routes_controller.rb b/app/controllers/routes_controller.rb index 078694ea0..7b5e096db 100644 --- a/app/controllers/routes_controller.rb +++ b/app/controllers/routes_controller.rb @@ -21,6 +21,12 @@ class RoutesController < ChouetteController show! end + # overwrite inherited resources to use delete instead of destroy + # foreign keys will propagate deletion) + def destroy_resource(object) + object.delete + end + def destroy destroy! do |success, failure| success.html { redirect_to referential_line_path(@referential,@line) } diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index e83c3c3ff..1aec533c1 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -30,6 +30,12 @@ class VehicleJourneysController < ChouetteController update!(:alert => t('activerecord.errors.models.vehicle_journey.invalid_times')) end + # overwrite inherited resources to use delete instead of destroy + # foreign keys will propagate deletion) + def destroy_resource(object) + object.delete + end + protected alias_method :vehicle_journey, :resource diff --git a/app/models/export.rb b/app/models/export.rb index 73694239b..58d3466b5 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -141,7 +141,7 @@ class Export < ActiveRecord::Base subclasses.map(&:to_s) else # FIXME - %w{NeptuneExport CsvExport GtfsExport} + %w{NeptuneExport CsvExport GtfsExport NetexExport} end end diff --git a/app/models/import.rb b/app/models/import.rb index 414e667b9..4ea931e92 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -36,7 +36,7 @@ class Import < ActiveRecord::Base subclasses.map(&:to_s) else # FIXME - %w{NeptuneImport CsvImport GtfsImport} + %w{NeptuneImport CsvImport GtfsImport NetexImport} end end @@ -88,7 +88,7 @@ class Import < ActiveRecord::Base end def name - "#{Import.model_name.humanize} #{id}" + "#{self.class.model_name.human} #{id}" end def import_options diff --git a/app/models/netex_export.rb b/app/models/netex_export.rb new file mode 100644 index 000000000..c29ef2b45 --- /dev/null +++ b/app/models/netex_export.rb @@ -0,0 +1,7 @@ +class NetexExport < Export + + def export_options + super.merge(:format => :netex) + end + +end diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb new file mode 100644 index 000000000..74e76e47c --- /dev/null +++ b/app/models/netex_import.rb @@ -0,0 +1,7 @@ +class NetexImport < Import + + def import_options + super.merge(:format => :netex) + end + +end diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb new file mode 100644 index 000000000..8d761413f --- /dev/null +++ b/app/views/errors/not_found.html.erb @@ -0,0 +1,13 @@ + <div class="error"> + <h2>Désolé, la page demandée n'existe pas</h2> + <a href="http://www.chouette.mobi/spip.php?rubrique38" target="_blank">N'hésitez pas à nous décrire le problème</a>, nous essaierons de le résoudre.<br/>Merci d'avance<br/> <br/> + Vous pouvez néanmoins continuer à utiliser l'application CHOUETTE<br/> + <br/> + <br/> + <br/> + <br/> + <h2>The page you were looking for doesn't exist.</h2> + You may have mistyped the address or the page may have moved. <br/> + <a href="http://www.chouette.mobi/spip.php?rubrique38" target="_blank">Please describe us what happened</a>, we'll try to come back with an answer. <br/>Thank you. <br/> <br/> + You can still continue the use the CHOUETTE application. <br/> + </div> diff --git a/app/views/errors/server_error.html.erb b/app/views/errors/server_error.html.erb new file mode 100644 index 000000000..0a000df2e --- /dev/null +++ b/app/views/errors/server_error.html.erb @@ -0,0 +1,14 @@ + <div class="error"> + <h2>Désolé, une erreur est survenue</h2> + <a href="http://www.chouette.mobi/spip.php?rubrique38" target="_blank">N'hésitez pas à nous décrire le problème</a>, nous essaierons de le résoudre.<br/>Merci d'avance<br/> <br/> + Vous pouvez néanmoins continuer à utiliser l'application CHOUETTE<br/> + <br/> + <br/> + <br/> + <br/> + <h2>We're sorry, but something went wrong.</h2> + You may have mistyped the address or the page may have moved. <br/> + <a href="http://www.chouette.mobi/spip.php?rubrique38" target="_blank">Please describe us what happened</a>, we'll try to come back with an answer. <br/>Thank you. <br/> <br/> + You can still continue the use the CHOUETTE application. <br/> + </div> + diff --git a/app/views/exports/new.html.erb b/app/views/exports/new.html.erb index a62116ed7..4e7276656 100644 --- a/app/views/exports/new.html.erb +++ b/app/views/exports/new.html.erb @@ -1,9 +1,9 @@ <%= title_tag t(".title") %> -<%= form_for([@referential, @export], :as => :export, :url => new_referential_export_path(@referential), :method => :get) do |form| %> - <%= form.label :type %> - <%= form.collection_select :type, Export.types, :to_s, :to_s %> - <%= form.submit "Sélectionner", :id => "export_type_submit" %> +<%= semantic_form_for([@referential, @export], :as => :export, :url => new_referential_export_path(@referential), :method => :get) do |form| %> + <%= form.inputs do %> + <%= form.input :type, :as => :select, :collection => Export.types, :required => true, :include_blank => false %> + <% end %> <% end %> <% @available_exports.each do |export| %> diff --git a/app/views/exports/new.js.coffee b/app/views/exports/new.js.coffee index 4a1d59f92..f3d815d82 100644 --- a/app/views/exports/new.js.coffee +++ b/app/views/exports/new.js.coffee @@ -1,4 +1,4 @@ jQuery -> <% Export.references_types.each do |type| %> - $("textarea.<%= export_references_type(type).input_class %>").tokenInput('<%= references_referential_exports_path(@referential, :type => export_references_type(type).relation_name, :format => :json) %>', { prePopulate: $('#').data('pre'), minChars: 3 }); + $("textarea.<%= export_references_type(type).input_class %>").tokenInput('<%= references_referential_exports_path(@referential, :type => export_references_type(type).relation_name, :format => :json) %>', { prePopulate: $('#').data('pre'), minChars: 1 }); <% end %> diff --git a/app/views/help/index.textile b/app/views/help/index.textile index 8e9818803..f26bc6350 100644 --- a/app/views/help/index.textile +++ b/app/views/help/index.textile @@ -3,7 +3,7 @@ layout: default title: Chouette v2 --- -Version 2.0.2 +Version 2.0.3 h3. Logiciel libre propriété de : @@ -21,3 +21,32 @@ Ce logiciel est régi par la licence CeCILL-B soumise au droit français et resp En contrepartie de l'accessibilité au code source et des droits de copie, de modification et de redistribution accordés par cette licence, il n'est offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, seule une responsabilité restreinte pèse sur l'auteur du programme, le titulaire des droits patrimoniaux et les concédants successifs. A cet égard l'attention de l'utilisateur est attirée sur les risques associés au chargement, à l'utilisation, à la modification et/ou au développement et à la reproduction du logiciel par l'utilisateur étant donné sa spécificité de logiciel libre, qui peut le rendre complexe à manipuler et qui le réserve donc à des développeurs et des professionnels avertis possédant des connaissances informatiques approfondies. Les utilisateurs sont donc invités à charger et tester l'adéquation du logiciel à leurs besoins dans des conditions permettant d'assurer la sécurité de leurs systèmes et ou de leurs données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. + +h3. Notes de version + +h4. V2.0.3 + +* Ajout des imports/export NeTex +* Fonctionnement sous windows +* Prise en compte de grandes quantités de calendriers. +* Reprise des logs d'import Neptune + +h4. V2.0.2 + +* Ajout de l'import GTFS (expérimental, ne traite pas les stations) +* Ajout d'API Rest pour accéder aux données depuis une autre application + +h4. V2.0.1 + +* Ajout de la gestion des groupes de lignes +* Ajout de la gestion des accès et des relations arrêts-accès +* Ajout d'une vue calendaire des calendriers d'application +* Améliorations ergonomiques et cartographiques +* L'import Neptune accepte les principaux formats d'encodage : ISO-8859-1, UTF-8, ... + +h4. V2.0.0 + +* refonte de l'interface graphique +* ajout d'une gestion simplifiée d'utilisateurs : +** ajout d'une notion d'organisation +** ajout d'une notion d'espace de données diff --git a/app/views/imports/new.html.erb b/app/views/imports/new.html.erb index 206967073..08995aa87 100644 --- a/app/views/imports/new.html.erb +++ b/app/views/imports/new.html.erb @@ -1,9 +1,9 @@ <%= title_tag t(".title") %> -<%= form_for([@referential, @import], :as => :import, :url => new_referential_import_path(@referential), :method => :get) do |form| %> - <%= form.label :type %> - <%= form.collection_select :type, Import.types, :to_s, :to_s %> - <%= form.submit "Sélectionner", :id => "import_type_submit" %> +<%= semantic_form_for([@referential, @import], :as => :import, :url => new_referential_import_path(@referential), :method => :get) do |form| %> + <%= form.inputs do %> + <%= form.input :type, :as => :select, :collection => Import.types, :required => true, :include_blank => false %> + <% end %> <% end %> <% @available_imports.each do |import| %> diff --git a/app/views/test_sheet/3_6.html b/app/views/test_sheet/3_6.html index 47633eb05..d26b60765 100644 --- a/app/views/test_sheet/3_6.html +++ b/app/views/test_sheet/3_6.html @@ -1,62 +1,62 @@ <h1 class="western" style="border: 1pt solid rgb(0, 0, 0); padding: 0.05cm 0.12cm; margin-top: 0.21cm;" align="center"> <font face="Arial, sans-serif"><font style="font-size: 20pt;" size="5"><i> - point de contrôle N° 3.6<br> -Localisation des points d’arrêt à l’intérieur d’un périmètre défini<br> + point de contrôle N° 3.6<br> +Localisation des points dÂ’arrêt à lÂ’intérieur dÂ’un périmètre défini<br> </i></font></font></h1> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><u><b>Objectif: </b></u> -S’assurer que les coordonnées -des POINTs D’ARRÊT SUR PARCOURS (« StopPoint ») du jeu de -données sont situées à l’intérieur d’un périmètre défini.<br> +SÂ’assurer que les coordonnées +des POINTs DÂ’ARRÊT SUR PARCOURS (« StopPoint ») du jeu de +données sont situées à lÂ’intérieur dÂ’un périmètre défini.<br> </font></p> -<p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><u><b>Priorité: </b></u> Obligatoire</font><br> +<p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><u><b>Priorité: </b></u> Obligatoire</font><br> </p><font face="Arial, sans-serif"></font><p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><u><b>Explications:</b></u> </font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -Si le jeu de données appartient à un exploitant dont le réseau dessert un groupe de communes, les coordonnées des POINTs D’ARRÊT SUR PARCOURS (« StopPoint ») doivent se situer dans cette zone.</font></font></font></p> +Si le jeu de données appartient à un exploitant dont le réseau dessert un groupe de communes, les coordonnées des POINTs DÂ’ARRÊT SUR PARCOURS (« StopPoint ») doivent se situer dans cette zone.</font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -Ce point de contrôle consiste donc à vérifier que les coordonnées en latitude et longitude de chaque POINT D’ARRÊT SUR PARCOURS (« StopPoint ») sont incluses dans un territoire délimité.</font></font></font></p> +Ce point de contrôle consiste donc à vérifier que les coordonnées en latitude et longitude de chaque POINT DÂ’ARRÊT SUR PARCOURS (« StopPoint ») sont incluses dans un territoire délimité.</font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> <b><u>Exemple: </u></b></font></font></font></p> <p><font face="Arial, sans-serif"><img src="image017.jpg" height="624" width="450"></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -<b><u>N° test:</u></b> +<b><u>N° test:</u></b> Test 3.6.1</font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -<u>Libellé:</u> -Vérification que les coordonnées de chaque POINT D’ARRÊT SUR PARCOURS (« StopPoint »)</font></font></font></p><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2">sont inscrites dans une zone déterminée et qu’elles sont dans le bon système de projection. </font></font></font> +<u>Libellé:</u> +Vérification que les coordonnées de chaque POINT DÂ’ARRÊT SUR PARCOURS (« StopPoint »)</font></font></font></p><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2">sont inscrites dans une zone déterminée et quÂ’elles sont dans le bon système de projection. </font></font></font> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"><span style="text-decoration: underline;"> -Champ d’application:</span> <StopPoint></font></font></font></p> +Champ dÂ’application:</span> <StopPoint></font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -<u>Vérification:</u> </font></font></font></p> +<u>Vérification:</u> </font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -Soit PG le polygone de la zone couverte par le réseau dans une projection PJ.</font></font></font></p> +Soit PG le polygone de la zone couverte par le réseau dans une projection PJ.</font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -- Si l’objet « StopPoint » mentionné dans les champs -d’application est présent une ou plusieurs fois, poursuivre le test, -sinon le test est abandonné.</font></font></font></p> +- Si lÂ’objet « StopPoint » mentionné dans les champs +dÂ’application est présent une ou plusieurs fois, poursuivre le test, +sinon le test est abandonné.</font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -- Si la valeur de l’attribut de l’élément « longLatType » -contenu dans l’objet « StopPoint » est différente de PJ alors -le test fournit le message d'avertissement « test 3.6.1a : le -point d’arrêt d’identifiant « ObjectId » n’est pas dans le -bon système de projection », sinon poursuivre le test.</font></font></font></p> +- Si la valeur de lÂ’attribut de l’élément « longLatType » +contenu dans lÂ’objet « StopPoint » est différente de PJ alors +le test fournit le message d'avertissement « test 3.6.1a : le +point dÂ’arrêt dÂ’identifiant « ObjectId » nÂ’est pas dans le +bon système de projection », sinon poursuivre le test.</font></font></font></p> <p style="margin-bottom: 0cm;"><font face="Arial, sans-serif"><font face="Arial, sans-serif"><font style="font-size: 11pt;" size="2"> -- Si la projection du point, calculée à partir des valeurs des -attributs des éléments « longitude », « latitude » -contenus dans l’objet « StopPoint », est contenue dans le -polygone PG le test est validé, sinon le test est invalidé et fournit -le message : « test 3.6.1b : le point d’arrêt -d’identifiant « ObjectId » a des coordonnées qui sont hors du -polygone de la zone couverte ».</font></font></font></p> +- Si la projection du point, calculée à partir des valeurs des +attributs des éléments « longitude », « latitude » +contenus dans lÂ’objet « StopPoint », est contenue dans le +polygone PG le test est validé, sinon le test est invalidé et fournit +le message : « test 3.6.1b : le point dÂ’arrêt +dÂ’identifiant « ObjectId » a des coordonnées qui sont hors du +polygone de la zone couverte ».</font></font></font></p> diff --git a/config/application.rb b/config/application.rb index 837542855..2d411fb2c 100644 --- a/config/application.rb +++ b/config/application.rb @@ -29,6 +29,9 @@ module ChouetteIhm # Activate observers that should always be running. # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # custom exception pages + config.exceptions_app = self.routes # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. diff --git a/config/environments/development.rb b/config/environments/development.rb index a9e742bd6..e92b9246e 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -30,6 +30,9 @@ ChouetteIhm::Application.configure do config.assets.debug = true config.active_record.mass_assignment_sanitizer = :strict + + # uncomment to show chouette error view in development + #config.consider_all_requests_local = false config.active_record.auto_explain_threshold_in_seconds = (RUBY_PLATFORM == "java" ? nil : 0.5) diff --git a/config/environments/production.rb b/config/environments/production.rb index 24d9d33ce..5793f9ab1 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -34,10 +34,16 @@ ChouetteIhm::Application.configure do #config.log_level = :info # Use a different logger for distributed setups - require 'syslog_logger' - config.logger = SyslogLogger.new("rails/chouette2").tap do |logger| - # logger.level = Logger::INFO - end + if ENV['OS'] == 'Windows_NT' + # args = log_path,number of files,file sizes + config.logger = Logger.new("C:/chouette/logs/chouette2.log", 5, 10.megabytes) + else + require 'syslog_logger' + config.logger = SyslogLogger.new("rails/chouette2").tap do |logger| + # logger.level = Logger::INFO + end + end + # Use a different cache store in production # config.cache_store = :mem_cache_store @@ -65,14 +71,44 @@ ChouetteIhm::Application.configure do config.action_mailer.default_url_options = { :host => 'chouette.dryade.net/chouette2' } - ActionMailer::Base.delivery_method = :sendmail + # mailer configuration : + # by default : set to smtp on windows platforms and sendmail on unix one + # may be changed as convenience + if ENV['OS'] == 'Windows_NT' + ## using SMTP (maybe useful for Windows or VM platforms): + ActionMailer::Base.delivery_method = :smtp + ActionMailer::Base.server_settings = { + :address => "smtp.sample.com", + #:port => 25, + :domain => "sample.com", + #:authentication => :login, + :user_name => "username", + #:password => "password", + #:enable_starttls_auto => true, + #openssl_verify_mode => # set one in ‘none’ ‘peer’ ‘client_once’ ‘fail_if_no_peer_cert’ + } + else + ## using SENDMAIL (easy on Linux platforms) : + ActionMailer::Base.delivery_method = :sendmail + end - config.to_prepare do - Devise::Mailer.layout "mailer" - Chouette::Command.command = "/usr/local/opt/chouette-command/chouette-gui-2.0.2/chouette" - Import.root = "/var/lib/chouette/imports" - Export.root = "/var/lib/chouette/exports" - FileValidation.root = "/var/lib/chouette/validations" + # paths for external resources + if ENV['OS'] == 'Windows_NT' + config.to_prepare do + Devise::Mailer.layout "mailer" + Chouette::Command.command = "C:/chouette/chouette-cmd_2.0.3/chouette.bat" + Import.root = "C:/chouette/chouette/imports" + Export.root = "C:/chouette/chouette/exports" + FileValidation.root = "C:/chouette/chouette/validations" + end + else + config.to_prepare do + Devise::Mailer.layout "mailer" + Chouette::Command.command = "/usr/local/opt/chouette-command/chouette-gui-2.0.3/chouette" + Import.root = "/var/lib/chouette/imports" + Export.root = "/var/lib/chouette/exports" + FileValidation.root = "/var/lib/chouette/validations" + end end end diff --git a/config/locales/access_links.yml b/config/locales/access_links.yml index f6f19bbf8..3c85585b4 100644 --- a/config/locales/access_links.yml +++ b/config/locales/access_links.yml @@ -1,44 +1,44 @@ en: access_links: actions: - new: Add a new access link - edit: Edit this access link - destroy: Remove this access link - destroy_confirm: Are you sure you want destroy this access link? + new: "Add a new access link" + edit: "Edit this access link" + destroy: "Remove this access link" + destroy_confirm: "Are you sure you want destroy this access link?" new: - title_access_point_to_stop_area: Create an access link from access %{access_point} to stop area %{stop_area} - title_stop_area_to_access_point: Create an access link from stop area %{stop_area} to access %{access_point} + title_access_point_to_stop_area: "Create an access link from access %{access_point} to stop area %{stop_area}" + title_stop_area_to_access_point: "Create an access link from stop area %{stop_area} to access %{access_point}" edit: - title_access_point_to_stop_area: Update an access link from access %{access_point} to stop area %{stop_area} - title_stop_area_to_access_point: Update an access link from stop area %{stop_area} to access %{access_point} + title_access_point_to_stop_area: "Update an access link from access %{access_point} to stop area %{stop_area}" + title_stop_area_to_access_point: "Update an access link from stop area %{stop_area} to access %{access_point} " show: title: "access link %{access_link}" durations: "Durations (hh mm ss):" activerecord: models: access_link: - zero: access link - one: access link - other: access links + zero: "access link" + one: "access link" + other: "access links" attributes: access_link: - access_point: Access Point - stop_area: Stop Area - name: Name - comment: Comment - link_distance: Distance (m) - access_link_type: Type - default_duration: Average - frequent_traveller_duration: Regular passenger - occasional_traveller_duration: Occasional passenger - mobility_restricted_traveller_duration: Mobility reduced passenger - mobility_restricted_suitability: Mobility reduced passenger suitable - stairs_availability: Escalator - lift_availability: Lift - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creatorid: Created by + access_point: "Access Point" + stop_area: "Stop Area" + name: "Name" + comment: "Comment" + link_distance: "Distance (m)" + access_link_type: "Type" + default_duration: "Average" + frequent_traveller_duration: "Regular passenger" + occasional_traveller_duration: "Occasional passenger" + mobility_restricted_traveller_duration: "Mobility reduced passenger" + mobility_restricted_suitability: "Mobility reduced passenger suitable" + stairs_availability: "Escalator" + lift_availability: "Lift" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creatorid: "Created by " formtastic: hints: access_link: @@ -47,10 +47,10 @@ en: fr: access_links: actions: - new: Ajouter un lien - edit: Modifier ce lien - destroy: Supprimer ce lien - destroy_confirm: Etes vous sûr de détruire ce lien ? + new: "Ajouter un lien" + edit: "Modifier ce lien" + destroy: "Supprimer ce lien" + destroy_confirm: "Etes vous sûr de détruire ce lien ?" new: title_access_point_to_stop_area: "Créer un lien depuis l'accès %{access_point} vers l'arrêt %{stop_area}" title_stop_area_to_access_point: "Créer un lien depuis l'arrêt %{stop_area} vers l'accès %{access_point}" @@ -63,28 +63,28 @@ fr: activerecord: models: access_link: - zero: lien - one: lien - other: liens + zero: "lien" + one: "lien" + other: "liens" attributes: access_link: - access_point: Accès - stop_area: Arrêt - name: Nom - comment: Commentaire - link_distance: Distance (m) - access_link_type: Type - default_duration: moyenne - frequent_traveller_duration: pour un habitué - occasional_traveller_duration: pour un voyageur occasionnel - mobility_restricted_traveller_duration: pour un voyageur à mobilité réduite - mobility_restricted_suitability: Accès pour voyageur à mobilité réduite - stairs_availability: Escalator - lift_availability: Ascenseur - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + access_point: "Accès" + stop_area: "Arrêt" + name: "Nom" + comment: "Commentaire" + link_distance: "Distance (m)" + access_link_type: "Type" + default_duration: "moyenne" + frequent_traveller_duration: "pour un habitué" + occasional_traveller_duration: "pour un voyageur occasionnel" + mobility_restricted_traveller_duration: "pour un voyageur à mobilité réduite" + mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite" + stairs_availability: "Escalator" + lift_availability: "Ascenseur" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" formtastic: hints: access_link: diff --git a/config/locales/access_points.yml b/config/locales/access_points.yml index 67be0f75a..83007d088 100644 --- a/config/locales/access_points.yml +++ b/config/locales/access_points.yml @@ -1,56 +1,56 @@ en: access_points: access_point: - no_position: No Position + no_position: "No Position" actions: - new: Add a new access point - edit: Edit this access point - destroy: Remove this access point - destroy_confirm: Are you sure you want destroy this access point? + new: "Add a new access point" + edit: "Edit this access point" + destroy: "Remove this access point" + destroy_confirm: "Are you sure you want destroy this access point?" new: - title: Add a new access point + title: "Add a new access point" edit: - title: Update access point %{access_point} + title: "Update access point %{access_point}" show: - title: Access point %{access_point} - geographic_data: Geographic data - no_geographic_data: None - generic_access_links: Glogal access links - detail_access_links: Specific access links + title: "Access point %{access_point}" + geographic_data: "Geographic data " + no_geographic_data: "None" + generic_access_links: "Glogal access links" + detail_access_links: "Specific access links" access_link_legend_1: "grays arrows for undefined links, green for defined ones" access_link_legend_2: "clic on arrows to create/edit a link" index: - title: Access points - name_or_country_code: Name + title: "Access points" + name_or_country_code: "Name" activerecord: models: access_point: - zero: access point - one: access point - other: access points + zero: "access point" + one: "access point" + other: "access points" attributes: access_point: - stop_area: Contain in Stop Area - name: Name - comment: Comments - access_point_type: Access point type - street_name: Street name - country_code: INSEE code - openning_time: Opening time - closing_time: Closing time - projection_type: Projection type - x: x-position - y: y-position - long_lat_type: Projection type - longitude: Longitude - latitude: Latitude - mobility_restricted_suitability: Mobility reduced passenger suitable - stairs_availability: Escalator - lift_availability: Lift - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creatorid: Created by + stop_area: "Contain in Stop Area" + name: "Name" + comment: "Comments" + access_point_type: "Access point type" + street_name: "Street name" + country_code: "INSEE code" + openning_time: "Opening time" + closing_time: "Closing time" + projection_type: "Projection type" + x: "x-position" + y: "y-position" + long_lat_type: "Projection type" + longitude: "Longitude" + latitude: "Latitude" + mobility_restricted_suitability: "Mobility reduced passenger suitable" + stairs_availability: "Escalator" + lift_availability: "Lift" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creatorid: "Created by" formtastic: hints: access_point: @@ -59,56 +59,56 @@ en: fr: access_points: access_point: - no_position: Pas de position + no_position: "Pas de position" actions: - new: Ajouter un accès - edit: Modifier cet accès - destroy: Supprimer cet accès - destroy_confirm: Etes vous sûr de détruire cet accès ? + new: "Ajouter un accès" + edit: "Modifier cet accès" + destroy: "Supprimer cet accès" + destroy_confirm: "Etes vous sûr de détruire cet accès ?" new: - title: Ajouter un accès + title: "Ajouter un accès" edit: title: "Modifier l'accès %{access_point}" show: - title: Accès %{access_point} - geographic_data: Données géographiques - no_geographic_data: Aucune + title: "Accès %{access_point}" + geographic_data: "Données géographiques" + no_geographic_data: "Aucune" generic_access_links: "Liens Arrêts - Accès globaux" detail_access_links: "Liens Arrêts - Accès détaillés" access_link_legend_1: "Les flêches grises représentent des liens non définis" access_link_legend_2: "cliquer sur les flêches pour créer/éditer un lien" index: - name_or_country_code: Nom - title: Accès de %{stop_area} + name_or_country_code: "Nom" + title: "Accès de %{stop_area}" activerecord: models: access_point: - zero: accès - one: accès - other: accès + zero: "accès" + one: "accès" + other: "accès" attributes: access_point: stop_area: "Zone d'arrêts" - name: Nom - comment: Commentaire + name: "Nom" + comment: "Commentaire" access_point_type: "Type d'accès" - street_name: Nom de la rue - country_code: Code INSEE - projection_type: Projection - x: Position X - y: Position Y - long_lat_type: Projection - longitude: Longitude - latitude: Latitude + street_name: "Nom de la rue" + country_code: "Code INSEE" + projection_type: "Projection" + x: "Position X" + y: "Position Y" + long_lat_type: "Projection" + longitude: "Longitude" + latitude: "Latitude" openning_time: "Horaire d'ouverture" - closing_time: Horaire de fermeture - mobility_restricted_suitability: Accès pour voyageur à mobilité réduite - stairs_availability: Escalator - lift_availability: Ascenseur - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + closing_time: "Horaire de fermeture" + mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite" + stairs_availability: "Escalator" + lift_availability: "Ascenseur" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" formtastic: hints: access_point: diff --git a/config/locales/access_types.yml b/config/locales/access_types.yml index 6d6d2764c..60fe17d0f 100644 --- a/config/locales/access_types.yml +++ b/config/locales/access_types.yml @@ -1,13 +1,13 @@ en: access_types: label: - in: Entrance - out: Exit - in_out: Both ways + in: "Entrance" + out: "Exit" + in_out: "Both ways" fr: access_types: label: - in: Entrée - out: Sortie + in: "Entrée" + out: "Sortie" in_out: "Entrée/Sortie" diff --git a/config/locales/actions.yml b/config/locales/actions.yml index 98460aafd..bbc7d9bc0 100644 --- a/config/locales/actions.yml +++ b/config/locales/actions.yml @@ -1,16 +1,16 @@ en: actions: - edit: Edit - destroy: Destroy - search: Search - add: Add new - or: or - cancel: Cancel + edit: "Edit" + destroy: "Destroy" + search: "Search" + add: "Add new" + or: "or" + cancel: "Cancel" fr: actions: - edit: Modifier - destroy: Supprimer - search: Chercher - add: Ajouter - or: ou - cancel: Annuler
\ No newline at end of file + edit: "Modifier" + destroy: "Supprimer" + search: "Chercher" + add: "Ajouter" + or: "ou" + cancel: "Annuler"
\ No newline at end of file diff --git a/config/locales/api_keys.yml b/config/locales/api_keys.yml index 1cbb90867..8df3a2397 100644 --- a/config/locales/api_keys.yml +++ b/config/locales/api_keys.yml @@ -1,17 +1,17 @@ en: api_keys: actions: - new: Add a new api key - edit: Edit this api key - destroy: Remove this api key - destroy_confirm: Are you sure you want destroy this api key? + new: "Add a new api key" + edit: "Edit this api key" + destroy: "Remove this api key" + destroy_confirm: "Are you sure you want destroy this api key?" new: - title: Add a new api key + title: "Add a new api key" edit: - title: Update api key + title: "Update api key" activerecord: models: - api_key: Api Key + api_key: "Api Key" fr: api_keys: actions: @@ -28,5 +28,5 @@ fr: api_key: "Clé d'accès API" attributes: api_key: - name: Nom + name: "Nom" diff --git a/config/locales/area_types.yml b/config/locales/area_types.yml index ecaf45d78..95d154521 100644 --- a/config/locales/area_types.yml +++ b/config/locales/area_types.yml @@ -1,17 +1,17 @@ en: area_types: label: - boarding_position: Boarding Position - quay: Quay - commercial_stop_point: Commercial Stop Point - stop_place: Stop Place - itl: Restriction Constraint + boarding_position: "Boarding Position" + quay: "Quay" + commercial_stop_point: "Commercial Stop Point" + stop_place: "Stop Place" + itl: "Restriction Constraint" fr: area_types: label: boarding_position: "Point d'embarquement" - quay: Quai - commercial_stop_point: Arrêt commercial + quay: "Quai" + commercial_stop_point: "Arrêt commercial" stop_place: "Pôle d'échange" - itl: ITL + itl: "ITL" diff --git a/config/locales/clean_ups.yml b/config/locales/clean_ups.yml index 1bb16d2ae..09abc5adf 100644 --- a/config/locales/clean_ups.yml +++ b/config/locales/clean_ups.yml @@ -17,11 +17,11 @@ en: attributes: clean_up: expected_date: "Final date" - keep_lines: keep lines - keep_stops: keep stop areas - keep_companies: keep companies - keep_networks: keep networks - keep_group_of_lines: keep groups of lines + keep_lines: "keep lines" + keep_stops: "keep stop areas" + keep_companies: "keep companies" + keep_networks: "keep networks" + keep_group_of_lines: "keep groups of lines" formtastic: hints: clean_up: @@ -45,11 +45,11 @@ fr: attributes: clean_up: expected_date: "date limite" - keep_lines: conserver les lignes - keep_stops: conserver les arrêts - keep_companies: conserver les transporteurs - keep_networks: conserver les réseaux - keep_group_of_lines: conserver les groupes de lignes + keep_lines: "conserver les lignes" + keep_stops: "conserver les arrêts" + keep_companies: "conserver les transporteurs" + keep_networks: "conserver les réseaux" + keep_group_of_lines: "conserver les groupes de lignes" formtastic: hints: clean_up: diff --git a/config/locales/companies.yml b/config/locales/companies.yml index b9750ebff..620b721ce 100644 --- a/config/locales/companies.yml +++ b/config/locales/companies.yml @@ -13,14 +13,14 @@ en: title: "Company %{company}" index: title: "Companies" - name: Name + name: "Name" activerecord: models: company: - zero: company - one: company - other: companies + zero: "company" + one: "company" + other: "companies" attributes: company: registration_number: "Registration number" @@ -32,14 +32,14 @@ en: phone: "Phone number" fax: "Fax number" email: "Email" - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by " formtastic: hints: company: - registration_number: only alphanumerical or underscore characters + registration_number: "only alphanumerical or underscore characters " objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character" fr: @@ -57,14 +57,14 @@ fr: title: "Transporteur %{company}" index: title: "Transporteurs" - name: Nom + name: "Nom" activerecord: models: company: - zero: transporteur - one: transporteur - other: transporteurs + zero: "transporteur" + one: "transporteur" + other: "transporteurs" attributes: company: registration_number: "Numéro d'enregistrement" diff --git a/config/locales/connection_link_types.yml b/config/locales/connection_link_types.yml index 2404aeeff..0f4f9d408 100644 --- a/config/locales/connection_link_types.yml +++ b/config/locales/connection_link_types.yml @@ -1,13 +1,13 @@ en: connection_link_types: label: - underground: Underground - mixed: Mixed - overground: Overground + underground: "Underground" + mixed: "Mixed" + overground: "Overground" fr: connection_link_types: label: - underground: Souterrain - mixed: Mixte - overground: Aérien + underground: "Souterrain" + mixed: "Mixte" + overground: "Aérien" diff --git a/config/locales/connection_links.yml b/config/locales/connection_links.yml index 7597e43d5..4a008199b 100644 --- a/config/locales/connection_links.yml +++ b/config/locales/connection_links.yml @@ -1,62 +1,62 @@ en: connection_links: actions: - new: Add a new connection link - edit: Edit this connection link - destroy: Remove this connection link - destroy_confirm: Are you sure you want destroy this connection link? + new: "Add a new connection link" + edit: "Edit this connection link" + destroy: "Remove this connection link" + destroy_confirm: "Are you sure you want destroy this connection link?" select_areas: "Update start/end of link" new: - title: Add a new connection link + title: "Add a new connection link" edit: - title: Update connection link %{connection_link} + title: "Update connection link %{connection_link}" show: - title: Connection link %{connection_link} + title: "Connection link %{connection_link}" durations: "Durations (hh mm ss):" connection_link: - from: From - to: to + from: "From" + to: "to" index: - title: Connection links - name: Name - departure: Start of link - arrival: End of link - selection: Selection - selection_all: All + title: "Connection links" + name: "Name" + departure: "Start of link" + arrival: "End of link" + selection: "Selection" + selection_all: "All" select_departure: - title: Select start stop area for %{connection_link} + title: "Select start stop area for %{connection_link}" select_arrival: - title: Select end stop area for %{connection_link} + title: "Select end stop area for %{connection_link}" select_areas: title: "Select start and end stops for %{connection_link}" activerecord: models: connection_link: - zero: connection link - one: connection link - other: connection links + zero: "connection link" + one: "connection link" + other: "connection links" attributes: connection_link: - departure: Start of link - arrival: End of link - departure_id: Start of link - arrival_id: End of link - undefined: not yet set - name: Name - comment: Comment - link_distance: Distance (m) - connection_link_type: Type - default_duration: Average - frequent_traveller_duration: Regular passenger - occasional_traveller_duration: Occasional passenger - mobility_restricted_traveller_duration: Mobility reduced passenger - mobility_restricted_suitability: Mobility reduced passenger suitable - stairs_availability: Escalator - lift_availability: Lift - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + departure: "Start of link" + arrival: "End of link" + departure_id: "Start of link" + arrival_id: "End of link" + undefined: "not yet set" + name: "Name" + comment: "Comment" + link_distance: "Distance (m)" + connection_link_type: "Type" + default_duration: "Average" + frequent_traveller_duration: "Regular passenger" + occasional_traveller_duration: "Occasional passenger" + mobility_restricted_traveller_duration: "Mobility reduced passenger" + mobility_restricted_suitability: "Mobility reduced passenger suitable" + stairs_availability: "Escalator" + lift_availability: "Lift" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by" formtastic: hints: connection_link: @@ -65,28 +65,28 @@ en: fr: connection_links: actions: - new: Ajouter une correspondance - edit: Modifier cette correspondance - destroy: Supprimer cette correspondance - destroy_confirm: Etes vous sûr de détruire cette correspondance ? + new: "Ajouter une correspondance" + edit: "Modifier cette correspondance" + destroy: "Supprimer cette correspondance" + destroy_confirm: "Etes vous sûr de détruire cette correspondance ?" select_areas: "Modifier les départs/arrivées" new: - title: Ajouter une correspondance + title: "Ajouter une correspondance" edit: - title: Modifier la correspondance %{connection_link} + title: "Modifier la correspondance %{connection_link}" show: - title: Correspondance %{connection_link} + title: "Correspondance %{connection_link}" durations: "Durées (hh mm ss) :" connection_link: - from: De - to: vers + from: "De" + to: "vers" index: - name: Nom - title: Correspondances - departure: Arrêt de départ + name: "Nom" + title: "Correspondances" + departure: "Arrêt de départ" arrival: "Arrêt d'arrivée" - selection: Sélection - selection_all: Tous + selection: "Sélection" + selection_all: "Tous" select_departure: title: "Sélection de l'arrêt de départ de %{connection_link}" select_arrival: @@ -96,31 +96,31 @@ fr: activerecord: models: connection_link: - zero: correspondance - one: correspondance - other: correspondances + zero: "correspondance" + one: "correspondance" + other: "correspondances" attributes: connection_link: - departure: Arrêt de départ + departure: "Arrêt de départ" arrival: "Arrêt d'arrivée" - departure_id: Arrêt de départ + departure_id: "Arrêt de départ" arrival_id: "Arrêt d'arrivée" - undefined: non défini - name: Nom - comment: Commentaire - link_distance: Distance (m) - connection_link_type: Type - default_duration: moyenne - frequent_traveller_duration: pour un habitué - occasional_traveller_duration: pour un voyageur occasionnel - mobility_restricted_traveller_duration: pour un voyageur à mobilité réduite - mobility_restricted_suitability: Accès pour voyageur à mobilité réduite - stairs_availability: Escalator - lift_availability: Ascenseur - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + undefined: "non défini" + name: "Nom" + comment: "Commentaire" + link_distance: "Distance (m)" + connection_link_type: "Type" + default_duration: "moyenne" + frequent_traveller_duration: "pour un habitué" + occasional_traveller_duration: "pour un voyageur occasionnel" + mobility_restricted_traveller_duration: "pour un voyageur à mobilité réduite" + mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite" + stairs_availability: "Escalator" + lift_availability: "Ascenseur" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" formtastic: hints: connection_link: diff --git a/config/locales/directions.yml b/config/locales/directions.yml index 8e59b0b84..6e541c274 100644 --- a/config/locales/directions.yml +++ b/config/locales/directions.yml @@ -1,31 +1,31 @@ en: directions: label: - straight_forward: straight forward - backward: backward - clock_wise: clockwise - counter_clock_wise: counterclockwise - north: north - north_west: north west - west: west - south_west: south west - south: south - south_east: south east - east: east - north_east: north east + straight_forward: "straight forward" + backward: "backward" + clock_wise: "clockwise" + counter_clock_wise: "counterclockwise" + north: "north" + north_west: "north west" + west: "west" + south_west: "south west" + south: "south" + south_east: "south east" + east: "east" + north_east: "north east" fr: directions: label: - straight_forward: aller - backward: retour - clock_wise: sens horaire - counter_clock_wise: sens anti horaire - north: nord - north_west: nord ouest - west: ouest - south_west: sud ouest - south: sud - south_east: sud est - east: est - north_east: nord est + straight_forward: "aller" + backward: "retour" + clock_wise: "sens horaire" + counter_clock_wise: "sens anti horaire" + north: "nord" + north_west: "nord ouest" + west: "ouest" + south_west: "sud ouest" + south: "sud" + south_east: "sud est" + east: "est" + north_east: "nord est" diff --git a/config/locales/exports.yml b/config/locales/exports.yml index 6080bb5fe..3d359d609 100644 --- a/config/locales/exports.yml +++ b/config/locales/exports.yml @@ -1,36 +1,40 @@ en: exports: actions: - new: New export - destroy: Destroy - destroy_confirm: Are you sure you want destroy this export? - download: Download + new: "New export" + destroy: "Destroy" + destroy_confirm: "Are you sure you want destroy this export?" + download: "Download" new: - title: New export - all: All + title: "New export" + all: "All" index: - title: Exports + title: "Exports" warning: "" show: - report: Report + report: "Report" statuses: - pending: Pending - completed: Completed - failed: Failed + pending: "Pending" + completed: "Completed" + failed: "Failed" export_log_messages: messages: - started: Started export - completed: Completed export - failed: Failed export + started: "Started export" + completed: "Completed export" + failed: "Failed export" undefined: "%{key} undefined" + EXPORT: %{0} Export + EXPORTED_LINE: "Line %{0} (%{1}) exported" + EMPTY_LINE: "Line without valid vehicle journey : not exported" EXPORT_ERROR: "Error durring export" EXCEPTION: "Origin %{0}" - NEPTUNE_EXPORT: Neptune Export + # old report for backward compatibility + NEPTUNE_EXPORT: "Neptune Export" NEPTUNE_EXPORTED_LINE: "Line %{0} (%{1}) exported" NEPTUNE_EMPTY_LINE: "Line %{0} (%{1}) without valid vehicle journey : not exported" - GTFS_EXPORT: GTFS Export - GTFS_OK: Export GTFS terminated - GTFS_NO_LINE: No line to export + GTFS_EXPORT: "GTFS Export" + GTFS_OK: "Export GTFS terminated" + GTFS_NO_LINE: "No line to export" GTFS_MISSING_PARAMETER: "Missing parameter : %{0}" GTFS_UNKNOWN_PARAMETER: "Unknown parameter : %{0}" GTFS_FILE_ACCESS: "Unable to access file %{0}" @@ -38,72 +42,87 @@ en: GTFS_EMPTY_DATA: "No %{0} data to export" GTFS_INVALID_DATA: "%{0} %{1} : invalid data %{2}=%{3}" GTFS_MISSING_DATA: "%{0} %{1} : missing value for : %{2}" - CSV_EXPORT: CSV Export + CSV_EXPORT: "CSV Export" CSV_OK_LINE: "Line %{0} exported" CSV_TOO_MUCH_ROUTES: "Line %{0} rejected : more than 2 routes" + NETEX_EXPORT: "NeTEx Export" + NETEX_EXPORTED_LINE: "Line %{0} (%{1}) exported" + NETEX_EMPTY_LINE: "Line %{0} (%{1}) without valid vehicle journey : not exported" severities: - info: Information - ok: Ok - warning: Warning - error: Error - fatal: Fatal + info: "Information" + ok: "Ok" + warning: "Warning" + error: "Error" + fatal: "Fatal" activerecord: models: export: - zero: export - one: export - other: exports + zero: "export" + one: "export" + other: "exports" + neptune_export: + zero: "Export" + one: "Neptune Export" + other: "Exports" csv_export: - zero: CSV Export - one: CSV Export - other: CSV Exports + zero: "Export" + one: "CSV Export" + other: "Exports" gtfs_export: - zero: GTFS Export - one: GTFS Export - other: GTFS Exports + zero: "Export" + one: "GTFS Export" + other: "Exports" + netex_export: + zero: "Export" + one: "NeTEx Export" + other: "Exports" attributes: export: - status: Status - references_type: Associated Data Type - reference_ids: Associated Data - time_zone: Time Zone + status: "Status" + references_type: "Associated Data Type" + reference_ids: "Associated Data" + time_zone: "Time Zone" export_log_message: - created_at: Date - position: N. - full_message: Message + created_at: "Date" + position: "N." + full_message: "Message" fr: exports: actions: - new: Nouvel export - destroy: Supprimer cet export - destroy_confirm: Etes vous sûr de détruire cet export ? - download: Télécharger + new: "Nouvel export" + destroy: "Supprimer cet export" + destroy_confirm: "Etes vous sûr de détruire cet export ?" + download: "Télécharger" new: - title: Nouvel export - all: Toutes + title: "Nouvel export" + all: "Toutes" index: - title: Exports + title: "Exports" warning: "" show: - report: Rapport + report: "Rapport" statuses: - pending: En cours - completed: Achevé - failed: Echoué + pending: "En cours" + completed: "Achevé" + failed: "Echoué" export_log_messages: messages: - started: Export démarré - completed: Export achevé avec succès - failed: Export interrompu + started: "Export démarré" + completed: "Export achevé avec succès" + failed: "Export interrompu" undefined: "%{key} non défini" + EXPORT: "Export %{0}" + EXPORTED_LINE: "Ligne %{0} (%{1}) exportée" + EMPTY_LINE: "Ligne sans course valide : non exportée" EXPORT_ERROR: "Erreur lors de l'export" EXCEPTION: "Cause %{0}" - NEPTUNE_EXPORT: Export Neptune + # old report for backward compatibility + NEPTUNE_EXPORT: "Export Neptune" NEPTUNE_EXPORTED_LINE: "Ligne %{0} (%{1}) exportée" NEPTUNE_EMPTY_LINE: "Ligne %{0} (%{1}) sans course valide : non exportée" - GTFS_EXPORT: Export GTFS - GTFS_OK: Export GTFS terminé - GTFS_NO_LINE: Pas de ligne à exporter + GTFS_EXPORT: "Export GTFS" + GTFS_OK: "Export GTFS terminé" + GTFS_NO_LINE: "Pas de ligne à exporter" GTFS_MISSING_PARAMETER: "Paramètre %{0} manquant" GTFS_UNKNOWN_PARAMETER: "Paramètre %{0} inconnu" GTFS_FILE_ACCESS: "Accès au fichier %{0} impossible" @@ -111,43 +130,50 @@ fr: GTFS_EMPTY_DATA: "Pas de donné de type %{0} à exporter" GTFS_INVALID_DATA: "%{0} %{1} : attribut %{2}=%{3} invalide" GTFS_MISSING_DATA: "%{0} %{1} : valeur manquante : %{2}" - CSV_EXPORT: Export CSV + CSV_EXPORT: "Export CSV" CSV_OK_LINE: "Ligne %{0} exportée" CSV_TOO_MUCH_ROUTES: "Ligne %{0} non exportable : plus de 2 séquences d'arrêt" + NETEX_EXPORT: "Export NeTEx" + NETEX_EXPORTED_LINE: "Ligne %{0} (%{1}) exportée" + NETEX_EMPTY_LINE: "Ligne %{0} (%{1}) sans course valide : non exportée" severities: - info: Information - ok: Ok - warning: Alerte - error: Erreur - fatal: Fatal + info: "Information" + ok: "Ok" + warning: "Alerte" + error: "Erreur" + fatal: "Fatal" activerecord: models: export: - zero: export - one: export - other: exports + zero: "export" + one: "export" + other: "exports" neptune_export: - zero: Export Neptune - one: Export Neptune - other: Exports Neptune + zero: "Export" + one: "Export Neptune" + other: "Exports" csv_export: - zero: Export CSV - one: Export CSV - other: Exports CSV + zero: "Export" + one: "Export CSV" + other: "Exports" gtfs_export: - zero: Export GTFS - one: Export GTFS - other: Exports GTFS + zero: "Export" + one: "Export GTFS" + other: "Exports" + netex_export: + zero: "Export" + one: "Export NeTEx" + other: "Exports" attributes: export: - status: Status - references_type: Type de données incluses - reference_ids: Données incluses - time_zone: Fuseau horaire + status: "Status" + references_type: "Type de données incluses" + reference_ids: "Données incluses" + time_zone: "Fuseau horaire" export_log_message: - created_at: Date + created_at: "Date" position: "No" - full_message: Message + full_message: "Message" formtastic: hints: time_zone: "selon le codage TZ (http://fr.wikipedia.org/wiki/Tz_database)"
\ No newline at end of file diff --git a/config/locales/file_validations.yml b/config/locales/file_validations.yml index 0cc418013..4c7e66829 100644 --- a/config/locales/file_validations.yml +++ b/config/locales/file_validations.yml @@ -1,33 +1,33 @@ en: file_validations: index: - title: Neptune Validation + title: "Neptune Validation" warning: "" edit: title: "Edit the Validation" show: - title: Neptune Validation - summary: Rapport de conformité à la norme NEPTUNE + title: "Neptune Validation" + summary: "Rapport de conformité à la norme NEPTUNE" new: - title: Create a new validation + title: "Create a new validation" submit: "Create a validation" actions: - new: Add a validation + new: "Add a validation" destroy_confirm: "Do you confirm to destroy this validation ?" - destroy: Destroy this validation - edit: Edit this validation + destroy: "Destroy this validation" + edit: "Edit this validation" statuses: - pending: Pending - completed: Completed - failed: Failed + pending: "Pending" + completed: "Completed" + failed: "Failed" file_validation_log_messages: messages: undefined: "%{key} undefined" TooMuchDetails: ( %{0} erreurs / warnings supplémentaires ) ONE: "Catégorie 1 : Syntaxe" Test1_Sheet1: 'Fiche n° 1.1 : Conformité à la syntaxe XML suivant les recommandations du W3C' - Test1_Sheet1_Step1: Conformité à la syntaxe XML - Test1_Sheet1_Step2: Conformité au schéma XML du profil NEPTUNE + Test1_Sheet1_Step1: "Conformité à la syntaxe XML" + Test1_Sheet1_Step2: "Conformité au schéma XML du profil NEPTUNE" Test1_Sheet1_Step0_fatal: "Erreur fatale : Impossible d'ouvrir le fichier %{0}" Test1_Sheet1_Step0_error: "Impossible d'importer cette entrée %{0} du zip" Test1_Sheet1_Step0_warning: "Cette entrée %{0} du zip n'est pas un fichier xml et a été ignoré" @@ -235,79 +235,79 @@ en: Test3_Sheet21_Step1_error_c: "c : la vitesse fixée par l'élément < OccasionalTravellerDuration > n'est pas conforme à la valeur paramétrable %{Vitesse minimale %{0} et Vitesse maximale %{1} fixée pour le lien d'accès dont l'identifiant est < %{2} >" Test3_Sheet21_Step1_error_d: "d : la vitesse fixée par l'élément < MobilityRestrictedTravellerDuration > n'est pas conforme à la valeur paramétrable Vitesse minimale %{0} et Vitesse maximale %{1} fixée pour le lien d'accès dont l'identifiant est < %{2} >" severities: - uncheck: Unchecked - ok: Ok - warning: Warning - error: Error - fatal: Fatal + uncheck: "Unchecked" + ok: "Ok" + warning: "Warning" + error: "Error" + fatal: "Fatal" activerecord: models: file_validation: - zero: Neptune Validation - one: Neptune Validation - other: Neptune Validation + zero: "Neptune Validation" + one: "Neptune Validation" + other: "Neptune Validation" attributes: file_validation: - resources: File to validate - status: Status - file_name: Tested data + resources: "File to validate" + status: "Status" + file_name: "Tested data" file_validation_log_message: - created_at: Date - position: N. - full_message: Message + created_at: "Date" + position: "N." + full_message: "Message" fr: file_validations: index: - title: Validation Neptune + title: "Validation Neptune" warning: "" edit: title: "Editer la validation" show: - title: Validation Neptune - summary: Rapport de conformité à la norme NEPTUNE - details: Détails - parameters: Paramètres des tests + title: "Validation Neptune" + summary: "Rapport de conformité à la norme NEPTUNE" + details: "Détails" + parameters: "Paramètres des tests" new: - title: Démarrer une nouvelle validation + title: "Démarrer une nouvelle validation" submit: "Lancer la validation" actions: - new: Ajouter une validation + new: "Ajouter une validation" destroy_confirm: "Voulez-vous supprimer ce résultat de validation ?" - destroy: Supprimer cette validation - edit: Editer cette validation + destroy: "Supprimer cette validation" + edit: "Editer cette validation" statuses: - pending: En cours - completed: Achevé - failed: Echoué + pending: "En cours" + completed: "Achevé" + failed: "Echoué" uncheck_count: - zero: aucun inapplicable - one: un inapplicable + zero: "aucun inapplicable" + one: "un inapplicable" other: "%{count} inapplicables" ok_count: - zero: aucun test réussi - one: un test réussi + zero: "aucun test réussi" + one: "un test réussi" other: "%{count} tests réussis" warning_count: - zero: aucun warning - one: un warning + zero: "aucun warning" + one: "un warning" other: "%{count} warnings" error_count: - zero: aucune erreur - one: une erreur + zero: "aucune erreur" + one: "une erreur" other: "%{count} erreurs" fatal_count: - zero: aucune erreur fatale - one: une erreur fatale + zero: "aucune erreur fatale" + one: "une erreur fatale" other: "%{count} erreurs fatales" file_validation_log_messages: messages: undefined: "%{key} non défini" - TooMuchDetails: ( %{0} erreurs / warnings supplémentaires ) + TooMuchDetails: "( %{0} erreurs / warnings supplémentaires )" ONE: "Catégorie 1 : Syntaxe" Test1_Sheet1: 'Fiche n° 1.1 : Conformité à la syntaxe XML suivant les recommandations du W3C' - Test1_Sheet1_Step1: Conformité à la syntaxe XML - Test1_Sheet1_Step2: Conformité au schéma XML du profil NEPTUNE + Test1_Sheet1_Step1: "Conformité à la syntaxe XML" + Test1_Sheet1_Step2: "Conformité au schéma XML du profil NEPTUNE" Test1_Sheet1_Step0_fatal: "Erreur fatale : Impossible d'ouvrir le fichier %{0}" Test1_Sheet1_Step0_error: "Impossible d'importer cette entrée %{0} du zip" Test1_Sheet1_Step0_warning: "Cette entrée %{0} du zip n'est pas un fichier xml et a été ignoré" @@ -332,7 +332,7 @@ fr: Test2_Sheet2_Step1: "Correcte référence à des LIGNEs/Chouette ( < Line >) dans GROUPE DE LIGNES ( < GroupOfLine >)" Test2_Sheet2_Step1_error: "la valeur de l'élément < lineId > : %{0} de la classe d'objets < GroupOfLine > n'a pas été repérée dans l'élément < objectId > de la classe d'objets < Line >" Test2_Sheet3: "Fiche n° 2.3 : Cohérence entre les arrêts et leurs composants" - Test2_Sheet3_Step1: "Correcte référence à des ARRÊTs/Chouette ( < StopArea >) et/ou à des POINTs D''ARRÊT SUR PARCOURS ( < StopPoint >) dans les ARRÊTs/Chouette ( < StopArea >) " + Test2_Sheet3_Step1: Conformité au schéma XML du profil NEPTUNE"Correcte référence à des ARRÊTs/Chouette ( < StopArea >) et/ou à des POINTs D''ARRÊT SUR PARCOURS ( < StopPoint >) dans les ARRÊTs/Chouette ( < StopArea >) " Test2_Sheet3_Step1_unchecked: "non implémenté" Test2_Sheet3_Step1_error: "une ou plusieurs valeurs de l'élément < contains > de l'objet < StopArea > %{0} n'est pas repérée dans la classe d'objets correspondant < StopPoint > ou < StopArea >. >" Test2_Sheet4: "Fiche n° 2.4 : Définition des correspondances" @@ -515,22 +515,22 @@ fr: Test3_Sheet21_Step1_error_c: "c : la vitesse fixée par l'élément < OccasionalTravellerDuration > n'est pas conforme à la valeur paramétrable %{Vitesse minimale %{0} et Vitesse maximale %{1} fixée pour le lien d'accès dont l'identifiant est < %{2} >" Test3_Sheet21_Step1_error_d: "d : la vitesse fixée par l'élément < MobilityRestrictedTravellerDuration > n'est pas conforme à la valeur paramétrable Vitesse minimale %{0} et Vitesse maximale %{1} fixée pour le lien d'accès dont l'identifiant est < %{2} >" severities: - uncheck: Non testé - ok: Ok - warning: Alerte - error: Erreur - fatal: Fatal + uncheck: "Non testé" + ok: "Ok" + warning: "Alerte" + error: "Erreur" + fatal: "Fatal" activerecord: models: file_validation: - zero: Validation Neptune - one: Validation Neptune - other: Validation Neptune + zero: "Validation Neptune" + one: "Validation Neptune" + other: "Validations Neptune" attributes: file_validation: - resources: Fichier à valider - status: Status - file_name: Jeu de données + resources: "Fichier à valider" + status: "Status" + file_name: "Jeu de données" test3_1_minimal_distance: "Distance minimale (test 3.1)" test3_2_minimal_distance: "Distance minimale (test 3.2)" test3_2_polygon_points: "Polygone (long lat) (test 3.6)" @@ -561,6 +561,6 @@ fr: test3_21d_maximal_speed: " / " projection_reference: "Système de projection de référence" file_validation_log_message: - created_at: Date - position: N. - full_message: Message + created_at: "Date" + position: "N." + full_message: "Message" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 6563c1af6..31075abe5 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -227,8 +227,8 @@ fr: # FIN: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/fr.yml "true": "oui" "false": "non" - or: ou - back: Revenir + or: "ou" + back: "Revenir" today: "Aujourd'hui" yesterday: "Hier" edit_periods: "Editer Périodes" diff --git a/config/locales/group_of_lines.yml b/config/locales/group_of_lines.yml index d4475b03d..963dc769e 100644 --- a/config/locales/group_of_lines.yml +++ b/config/locales/group_of_lines.yml @@ -1,9 +1,9 @@ en: group_of_lines: actions: - new: Add a new group of lines - edit: Edit this group of lines - destroy: Remove this group of lines + new: "Add a new group of lines" + edit: "Edit this group of lines" + destroy: "Remove this group of lines" destroy_confirm: "Are you sure you want destroy this group of lines?" new: title: "Add a new group of lines" @@ -11,27 +11,27 @@ en: title: "Update group of lines %{group_of_line}" show: title: "Group of lines %{group_of_line}" - lines: Lines list + lines: "Lines list" index: title: "Group of Lines" - name: Name + name: "Name" form: - lines: Associated lines + lines: "Associated lines" activerecord: models: group_of_line: - zero: group of line - one: group of line - other: groups of lines + zero: "group of line" + one: "group of line" + other: "groups of lines" attributes: group_of_line: name: "Name" comment: "Comments" - line_count: Number of lines - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + line_count: "Number of lines" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by" formtastic: hints: group_of_line: @@ -40,33 +40,33 @@ en: fr: group_of_lines: actions: - new: Ajouter un groupe de lignes - edit: Modifier ce groupe de lignes - destroy: Supprimer ce groupe de lignes + new: "Ajouter un groupe de lignes" + edit: "Modifier ce groupe de lignes" + destroy: "Supprimer ce groupe de lignes" destroy_confirm: "Etes vous sûr de détruire ce groupe de lignes ?" new: title: "Ajouter un groupe de lignes" edit: - title: Modifier le groupe de lignes %{group_of_line} + title: "Modifier le groupe de lignes %{group_of_line}" show: - title: Groupe de lignes %{group_of_line} - lines: Liste des lignes + title: "Groupe de lignes %{group_of_line}" + lines: "Liste des lignes" index: title: "Groupes de lignes" - name: Nom + name: "Nom" form: - lines: Lignes associées + lines: "Lignes associées" activerecord: models: group_of_line: - zero: groupe de lignes - one: groupe de lignes - other: groupes de lignes + zero: "groupe de lignes" + one: "groupe de lignes" + other: "groupes de lignes" attributes: group_of_line: name: "Nom" comment: "Commentaire" - line_count: Nombre de lignes + line_count: "Nombre de lignes" objectid: "Identifiant Neptune" object_version: "Version" creation_time: "Créé le" diff --git a/config/locales/imports.yml b/config/locales/imports.yml index 6f353a7d4..b10888a35 100644 --- a/config/locales/imports.yml +++ b/config/locales/imports.yml @@ -1,28 +1,60 @@ en: imports: actions: - new: New import - destroy: Destroy - destroy_confirm: Are you sure you want destroy this import? + new: "New import" + destroy: "Destroy" + destroy_confirm: "Are you sure you want destroy this import?" new: - title: New import + title: "New import" index: - title: Imports + title: "Imports" warning: "" show: - report: Report + report: "Report" statuses: - pending: Pending - completed: Completed - failed: Failed + pending: "Pending" + completed: "Completed" + failed: "Failed" import_log_messages: messages: - started: Started import - completed: Completed import - failed: Failed import + started: "Started import" + completed: "Completed import" + failed: "Failed import" undefined: "%{key} undefined" - NEPTUNE_ONE: Conformité du fichier - NEPTUNE_TooMuchDetails: ( %{0} erreurs / warnings supplémentaires ) + IMPORT: "Import on %{0} format" + ZIP_FILE: "ZIP File %{0}" + ZIP_ERROR: "Error %{0}" + FILE: "File %{0}" + FILE_ERROR: "Error %{0}" + FILE_IGNORED: "Unknown file format ; ignored" + VALIDATION_ERROR: "Wrong grammar : %{0}" + VALIDATION_CAUSE: "%{0}" + IMPORTED_LINE: "Imported Line : %{0}" + LINE_COUNT: "Line count : %{0}" + TIME_TABLE_COUNT: "Tiemtable count : %{0}" + ROUTE_COUNT: "Route count : %{0}" + JOURNEY_PATTERN_COUNT: "Journey pattern count : %{0}" + VEHICLE_JOURNEY_COUNT: "Vehicle journey count : %{0}" + STOP_AREA_COUNT: "Stop area count : %{0}" + CONNECTION_LINK_COUNT: "Connection link count : %{0}" + ACCES_POINT_COUNT: "Access Point count : %{0}" + MANDATORY_TAG: "Mandatory tag : %{0} " + UNKNOWN_ENUM: "Unknown enum vaule for %{0} : %{1} " + EMPTY_TAG: "Empty value : %{0}" + BAD_REFERENCE: "Missing reference %{0} for %{1}" + EMPTY_LINE: "Empty Line %{0} " + EMPTY_ROUTE: "Empty Route {0} " + EMPTY_JOURNEY_PATTERN: "Empty Journey pattern %{0}" + EMPTY_VEHICLE_JOURNEY: "Empty Vehicle journey %{0} " + EMPTY_TIMETABLE: "Empty Timetable %{0} " + SAVE_OK: "%{0} saved" + SAVE_ERROR: "%{0} save failed : %{1}" + IMPORT_ERROR: "Import Error" + EXCEPTION: "Problem : %{0}" + # old Import reports (before 2.0.3) + SAVE: "Save" + NEPTUNE_ONE: "Conformité du fichier" + NEPTUNE_TooMuchDetails: "( %{0} erreurs / warnings supplémentaires )" NEPTUNE_Test1_Sheet1: 'Fiche n° 1.1 : Conformité à la syntaxe XML suivant les recommandations du W3C' NEPTUNE_Test1_Sheet1_Step1: Conformité à la syntaxe XML NEPTUNE_Test1_Sheet1_Step2: Conformité au schéma XML du profil NEPTUNE @@ -38,72 +70,71 @@ en: NEPTUNE_Test1_Sheet2_Step1_error: "le fichier %{0} ne respecte pas le modèle NEPTUNE" NEPTUNE_Test1_Sheet2_Step1_encoding: "le fichier %{0} ne respecte pas le codage de caractères du modèle NEPTUNE (ISO-8859-1)" NEPTUNE_Test1_Sheet2_Step1_fatal: "Erreur fatale : Aucune entrée valide trouvée dans le fichier" - CSV_IMPORT: Import CVS file - CSV_OK_LINE: line %{0} imported - CSV_OK_TIMETABLE: timetables %{0} (%{1}) imported + CSV_IMPORT: "Import CVS file" + CSV_OK_LINE: "line %{0} imported" + CSV_OK_TIMETABLE: "timetables %{0} (%{1}) imported" CSV_OK_PTNETWORK: "network %{0} : %{1} imported" - CSV_OK_COMPANY: company %{0} imported + CSV_OK_COMPANY: "company %{0} imported" CSV_FILE_NOT_FOUND: "file %{0} : error %{1}" - CSV_FILE_IGNORED: file %{0} ignored (not XML) + CSV_FILE_IGNORED: "file %{0} ignored (not XML) " CSV_VALIDATION_ERROR: "XML file don't agree with Neptune XSD : %{0}" CSV_VALIDATION_CAUSE: "%{0}" - CSV_PARSE_OBJECT: Analyse %{0} + CSV_PARSE_OBJECT: "Analyse %{0}" CSV_MANDATORY_TAG: "missing or empty mandatory tag : %{0}" CSV_UNKNOWN_ENUM: "Unknown %{0} enumaration value : %{1}" CSV_EMPTY_TAG: "empty tag : %{0}" CSV_TIMETABLE_COUNT: "timetable count : %{0}" CSV_LINE_COUNT: "line count : %{0}" - CSV_END_OF_FILE: Unexpected end of file - CSV_BAD_TIMETABLE_PERIODS: Bad timetable periods + CSV_END_OF_FILE: "Unexpected end of file" + CSV_BAD_TIMETABLE_PERIODS: "Bad timetable periods" CSV_INVALID_LINE: "invalid line : %{0}" CSV_STOP_WITHOUT_COORDS: "Stop without coords : %{0}" CSV_VJ_MISSING_TIMETABLE: "Unable to find timetable of vehicle journey : %{0}" - CSV_FILE_FORMAT: Invalid or deprecated CSV format + CSV_FILE_FORMAT: "Invalid or deprecated CSV format" CSV_BAD_ID: "Invalid built Neptune Object ID : %{1} for %{0} " - CSV_UNUSED_TIMETABLE: Unused timetable %{0} (%{1}) - SAVE: Save - SAVE_OK: "%{0} saved" - SAVE_ERROR: "%{0} save failed : %{1}" - IMPORT_ERROR: "Import Error" - EXCEPTION: "Problem : %{0}" + CSV_UNUSED_TIMETABLE: "Unused timetable %{0} (%{1})" severities: - info: Information - uncheck: Unchecked - ok: Ok - warning: Warning - error: Error - fatal: Fatal + info: "Information" + uncheck: "Unchecked" + ok: "Ok" + warning: "Warning" + error: "Error" + fatal: "Fatal" activerecord: models: import: - zero: import - one: import - other: imports + zero: "import" + one: "import" + other: "imports" neptune_import: - zero: Neptune import - one: Neptune import - other: Neptune imports + zero: "import" + one: "Neptune import" + other: "imports" csv_import: - zero: CSV import - one: CSV import - other: CSV imports + zero: "import" + one: "CSV import" + other: "imports" gtfs_import: - zero: GTFS import - one: GTFS import - other: GTFS imports + zero: "import" + one: "GTFS import" + other: "imports" + netex_import: + zero: "import" + one: "NeTEx import" + other: "imports" attributes: import: - resources: File to import - status: Status + resources: "File to import" + status: "Status" objectid_prefix: "Neptune Id prefix" max_distance_for_commercial: "Max distance for commercial stop" max_distance_for_connection_link: "Max distance for connection link" ignore_last_word: "ignore last word" ignore_end_chars: "ignore last chars" import_log_message: - created_at: Date - position: N. - full_message: Message + created_at: "Date" + position: "N." + full_message: "Message" formtastic: hints: import: @@ -114,31 +145,63 @@ en: fr: imports: actions: - new: Nouvel import - destroy: Supprimer cet import - destroy_confirm: Etes vous sûr de détruire cet import ? + new: "Nouvel import" + destroy: "Supprimer cet import" + destroy_confirm: "Etes vous sûr de détruire cet import ?" new: - title: Nouvel import + title: "Nouvel import" index: - title: Imports + title: "Imports" warning: "" show: - report: Rapport + report: "Rapport" statuses: - pending: En cours - completed: Achevé - failed: Echoué + pending: "En cours" + completed: "Achevé" + failed: "Echoué" import_log_messages: messages: - started: Import démarré - completed: Import achevé avec succès - failed: Import interrompu + started: "Import démarré" + completed: "Import achevé avec succès" + failed: "Import interrompu" undefined: "%{key} non défini" - NEPTUNE_ONE: Conformité du fichier - NEPTUNE_TooMuchDetails: ( %{0} erreurs / warnings supplémentaires ) + IMPORT: "Import au format %{0}" + ZIP_FILE: "Fichier ZIP %{0}" + ZIP_ERROR: "Erreur %{0}" + FILE: "Fichier %{0}" + FILE_ERROR: "Erreur %{0}" + FILE_IGNORED: "Format non traité; ignoré" + VALIDATION_ERROR: "Le fichier ne respecte pas la grammaire : %{0}" + VALIDATION_CAUSE: "%{0}" + IMPORTED_LINE: "Ligne importée %{0}" + LINE_COUNT: "Nombre de lignes extraites : %{0}" + TIME_TABLE_COUNT: "Nombre de calendriers extraits : %{0}" + ROUTE_COUNT: "Nombre de séquences d'arrêts extraites : %{0}" + JOURNEY_PATTERN_COUNT: "Nombre de missions extraites : %{0}" + VEHICLE_JOURNEY_COUNT: "Nombre de courses extraites : %{0}" + STOP_AREA_COUNT: "Nombre d'arrêts extraits : %{0}" + CONNECTION_LINK_COUNT: "Nombre de correspondances extraites : %{0}" + ACCES_POINT_COUNT: "Nombre de points d'accès extraits : %{0}" + MANDATORY_TAG: "Valeur obligatoire absente ou vide : %{0} " + UNKNOWN_ENUM: "Valeur de l'enum %{0} inconnue : %{1} " + EMPTY_TAG: "Valeur vide : %{0}" + BAD_REFERENCE: "Référence %{0} manquante pour %{1}" + EMPTY_LINE: "Ligne %{0} sans séquence d'arrêt" + EMPTY_ROUTE: "Séquence d'arrêts %{0} sans mission ou arrêt" + EMPTY_JOURNEY_PATTERN: "Mission %{0} sans arrêt ou course" + EMPTY_VEHICLE_JOURNEY: "Course %{0} sans horaire" + EMPTY_TIMETABLE: "Calendrier %{0} sans jours ni période" + SAVE_OK: "%{0} enregistré" + SAVE_ERROR: "Echec de l'enregistrement de %{0} : %{1}" + IMPORT_ERROR: "Erreur d'import" + EXCEPTION: "Problème : %{0}" + # old Import reports (before 2.0.3) + SAVE: "Sauvegarde" + NEPTUNE_ONE: "Conformité du fichier" + NEPTUNE_TooMuchDetails: "( %{0} erreurs / warnings supplémentaires )" NEPTUNE_Test1_Sheet1: 'Fiche n° 1.1 : Conformité à la syntaxe XML suivant les recommandations du W3C' - NEPTUNE_Test1_Sheet1_Step1: Conformité à la syntaxe XML - NEPTUNE_Test1_Sheet1_Step2: Conformité au schéma XML du profil NEPTUNE + NEPTUNE_Test1_Sheet1_Step1: "Conformité à la syntaxe XML" + NEPTUNE_Test1_Sheet1_Step2: "Conformité au schéma XML du profil NEPTUNE" NEPTUNE_Test1_Sheet1_Step0_fatal: "Erreur fatale : Impossible d'ouvrir le fichier %{0}" NEPTUNE_Test1_Sheet1_Step0_error: "Impossible d'importer cette entrée %{0} du zip" NEPTUNE_Test1_Sheet1_Step0_warning: "Cette entrée %{0} du zip n'est pas un fichier xml et a été ignoré" @@ -151,76 +214,75 @@ fr: NEPTUNE_Test1_Sheet2_Step1_error: "le fichier %{0} ne respecte pas le modèle NEPTUNE" NEPTUNE_Test1_Sheet2_Step1_encoding: "le fichier %{0} ne respecte pas le codage de caractères du modèle NEPTUNE (ISO-8859-1)" NEPTUNE_Test1_Sheet2_Step1_fatal: "Erreur fatale : Aucune entrée valide trouvée dans le fichier" - CSV_IMPORT: Import de fichier au format CSV - CSV_OK_LINE: Ligne %{0} importée - CSV_OK_TIMETABLE: Tableau de marche %{0} (%{1}) importé + CSV_IMPORT: "Import de fichier au format CSV" + CSV_OK_LINE: "Ligne %{0} importée" + CSV_OK_TIMETABLE: "Tableau de marche %{0} (%{1}) importé" CSV_OK_PTNETWORK: "Réseau %{0} : %{1} importé" CSV_OK_COMPANY: "Transporteur %{0} importé" CSV_FILE_ERROR: "Fichier %{0} : erreur %{1}" CSV_FILE_IGNORED: "Fichier %{0} ignoré (non CSV) " CSV_VALIDATION_ERROR: "Fichier CSV ne respecte pas le format Chouette : %{0}" CSV_VALIDATION_CAUSE: "%{0}" - CSV_PARSE_OBJECT: Analyse %{0} + CSV_PARSE_OBJECT: "Analyse %{0}" CSV_MANDATORY_TAG: "Tag obligatoire absent ou vide : %{0}" CSV_UNKNOWN_ENUM: "Valeur de l'enum %{0} inconnue : %{1}" CSV_EMPTY_TAG: "Tag vide : %{0}" CSV_TIMETABLE_COUNT: "Nombre de tableaux de marche : %{0}" CSV_LINE_COUNT: "Nombre de lignes : %{0}" - CSV_END_OF_FILE: Fichier tronqué - CSV_BAD_TIMETABLE_PERIODS: Mauvaises périodes dans le tableau de marche + CSV_END_OF_FILE: "Fichier tronqué" + CSV_BAD_TIMETABLE_PERIODS: "Mauvaises périodes dans le tableau de marche" CSV_INVALID_LINE: "ligne invalide : %{0}" CSV_STOP_WITHOUT_COORDS: "Arret sans coordonnées : %{0}" CSV_VJ_MISSING_TIMETABLE: "Impossible de trouver le tableau de marche de la course : %{0}" - CSV_FILE_FORMAT: Format CSV invalide ou obsolète + CSV_FILE_FORMAT: "Format CSV invalide ou obsolète" CSV_BAD_ID: "Identifiant Neptune produit invalide : %{1} pour %{0} " CSV_UNUSED_TIMETABLE: "Tableau de marche %{0} (%{1}) inutilisé" - SAVE: Sauvegarde - SAVE_OK: "%{0} enregistré" - SAVE_ERROR: "Echec de l'enregistrement de %{0} : %{1}" - IMPORT_ERROR: "Erreur d'import" - EXCEPTION: "Problème : %{0}" severities: - info: Information - uncheck: Non testé - ok: Ok - warning: Alerte - error: Erreur - fatal: Fatal + info: "Information" + uncheck: "Non testé" + ok: "Ok" + warning: "Alerte" + error: "Erreur" + fatal: "Fatal" activerecord: models: import: - zero: import - one: import - other: imports + zero: "import" + one: "import" + other: "imports" neptune_import: - zero: import Neptune - one: import Neptune - other: imports Neptune + zero: "import" + one: "import Neptune" + other: "imports" csv_import: - zero: import CSV - one: import CSV - other: imports CSV + zero: "import" + one: "import CSV" + other: "imports" gtfs_import: - zero: import GTFS - one: import GTFS - other: imports GTFS + zero: "import" + one: "import GTFS" + other: "imports" + netex_import: + zero: "import" + one: "import NeTEx" + other: "imports" attributes: import: - resources: Fichier à importer - status: Status + resources: "Fichier à importer" + status: "Status" objectid_prefix: "Préfixe d'identifiants" max_distance_for_commercial: "Distance max pour créer les zones" max_distance_for_connection_link: "Distance max pour créer les correspondances" ignore_last_word: "ignorer le dernier mot" ignore_end_chars: "ignorer les n derniers caractères" import_log_message: - created_at: Date + created_at: "Date" position: "No" - full_message: Message + full_message: "Message" formtastic: hints: import: max_distance_for_commercial: "Distance maximale entre deux arrêts homonymes pour créer les zones d'arrêt (en mètre)" max_distance_for_connection_link: "Distance maximale entre deux arrêts pour créer les correspondances (en mètre)" - ignore_last_word: "ignorer le dernier mot pour détecter l'homonymie des noms d'arrêt (inappliable quand le nom ne comporte qu'un mot)" + ignore_last_word: "ignorer le dernier mot pour détecter l'homonymie des noms d'arrêt (inapplicable quand le nom ne comporte qu'un mot)" ignore_end_chars: "ignorer les n derniers caractères du nom de l'arrêt pour détecter l'homonymie" diff --git a/config/locales/journey_patterns.yml b/config/locales/journey_patterns.yml index 301c4b7e7..120e27d1d 100644 --- a/config/locales/journey_patterns.yml +++ b/config/locales/journey_patterns.yml @@ -6,39 +6,39 @@ en: vehicle_journeys_count: "Vehicle journeys: %{count}" vehicle_journey_at_stops: "Vehicle journey at stops" actions: - new: Add a new journey_pattern - edit: Edit this journey pattern - destroy: Remove this journey pattern - destroy_confirm: Are you sure you want destroy this journey pattern ? + new: "Add a new journey_pattern" + edit: "Edit this journey pattern" + destroy: "Remove this journey pattern" + destroy_confirm: A"re you sure you want destroy this journey pattern ?" new: - title: Add a new journey pattern + title: "Add a new journey pattern" edit: - title: Update journey pattern %{journey_pattern} + title: "Update journey pattern %{journey_pattern}" show: - title: Journey Pattern %{journey_pattern} + title: "Journey Pattern %{journey_pattern}" stop_points: "Stop point on journey pattern list" index: - title: Journey Patterns + title: "Journey Patterns" form: warning: "Be careful, selection is also applied to the %{count} vehicle journeys associated to this journey pattern" activerecord: models: journey_pattern: - zero: journey pattern - one: journey pattern - other: journey patterns + zero: "journey pattern" + one: "journey pattern" + other: "journey patterns" attributes: journey_pattern: - route: Route - name: Name - published_name: Published name - comment: Comments - registration_number: Registration number + route: "Route" + name: "Name" + published_name: "Published name" + comment: "Comments" + registration_number: "Registration number" stop_point_ids: "Route's stop selection" - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by" fr: journey_patterns: @@ -48,36 +48,36 @@ fr: vehicle_journeys_count: "Courses: %{count}" vehicle_journey_at_stops: "Horaires des courses" actions: - new: Ajouter une mission - edit: Modifier cette mission - destroy: Supprimer cette mission + new: "Ajouter une mission" + edit: "Modifier cette mission" + destroy: "Supprimer cette mission" destroy_confirm: "Etes vous sûr de vouloir détruire cette mission ?" new: - title: Ajouter une mission + title: "Ajouter une mission" edit: - title: Modifier la mission %{journey_pattern} + title: "Modifier la mission %{journey_pattern}" show: - title: Mission %{journey_pattern} + title: "Mission %{journey_pattern}" stop_points: "Liste des arrêts de la mission" index: - title: Missions + title: "Missions" form: warning: "Attention, la sélection s'applique aussi aux %{count} courses de la mission" activerecord: models: journey_pattern: - zero: mission - one: mission - other: missions + zero: "mission" + one: "mission" + other: "missions" attributes: journey_pattern: route: "Séquence d'arrêts" - name: Nom - published_name: Nom public - comment: Commentaire + name: "Nom" + published_name: "Nom public" + comment: "Commentaire" registration_number: "Numéro d'enregistrement" - stop_point_ids: Sélection des arrêts desservis - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + stop_point_ids: "Sélection des arrêts desservis" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" diff --git a/config/locales/layouts.yml b/config/locales/layouts.yml index 852e48450..6c9165bf2 100644 --- a/config/locales/layouts.yml +++ b/config/locales/layouts.yml @@ -1,7 +1,7 @@ en: layouts: back_to_dashboard: "Back to Dashboard" - help: Help + help: "Help" home: "Home" user: profile: "My Profile" @@ -9,11 +9,11 @@ en: tabs: dashboard: "dashboard" creation_tag: - title: Create + title: "Create" fr: layouts: back_to_dashboard: "Retour au Tableau de Bord" - help: Besoin d'aide? + help: "Besoin d'aide?" home: "Accueil" user: profile: "Mon Profil" @@ -21,4 +21,4 @@ fr: tabs: dashboard: "Tableau de bord" creation_tag: - title: Création + title: "Création" diff --git a/config/locales/lines.yml b/config/locales/lines.yml index 9670e88a2..23406fcc8 100644 --- a/config/locales/lines.yml +++ b/config/locales/lines.yml @@ -1,117 +1,117 @@ en: lines: actions: - new: Add a new line - edit: Edit this line - destroy: Remove this line - destroy_confirm: Are you sure you want destroy this line? - import: Import lines + new: "Add a new line" + edit: "Edit this line" + destroy: "Remove this line" + destroy_confirm: "Are you sure you want destroy this line?" + import: "Import lines" new: - title: Add a new line + title: "Add a new line" edit: - title: Update line %{line} + title: "Update line %{line}" show: - title: Line %{line} + title: "Line %{line}" itineraries: "Line's route list" - group_of_lines: Groups of lines + group_of_lines: "Groups of lines" index: - title: Lines - name_or_number: Name or number - selection: Filter on - selection_all: All - multi_selection: Multiple selection - multi_selection_enable: Enable multiple selection - multi_selection_disable: Disable multiple selection - delete_selected: Delete lines - export_selected: Export lines - select_all: Select all - deselect_all: Deselect all - unset: undefined + title: "Lines" + name_or_number: "Name or number" + selection: "Filter on" + selection_all: "All" + multi_selection: "Multiple selection" + multi_selection_enable: "Enable multiple selection" + multi_selection_disable: "Disable multiple selection" + delete_selected: "Delete lines" + export_selected: "Export lines" + select_all: "Select all" + deselect_all: "Deselect all" + unset: "undefined" form: - group_of_lines: Associated groups of lines - no_group_of_line: No group of line + group_of_lines: "Associated groups of lines" + no_group_of_line: "No group of line" several_group_of_lines: "%{count} groups of lines" activerecord: models: line: - zero: line - one: line - other: lines + zero: "line" + one: "line" + other: "lines" attributes: line: - network: Network - company: Company - registration_number: Registration number - name: Name - published_name: Published name - number: Number - transport_mode: Transport mode - group_of_line: Group of lines - comment: Comments - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + network: "Network" + company: "Company" + registration_number: "Registration number" + name: "Name" + published_name: "Published name" + number: "Number" + transport_mode: "Transport mode" + group_of_line: "Group of lines" + comment: "Comments" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by" formtastic: hints: line: - registration_number: only alphanumerical or underscore characters + registration_number: "only alphanumerical or underscore characters" objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character" fr: lines: actions: - new: Ajouter une ligne - edit: Modifier cette ligne - destroy: Supprimer cette ligne - destroy_confirm: Etes vous sûr de détruire cette ligne ? - import: Importer des lignes + new: "Ajouter une ligne" + edit: "Modifier cette ligne" + destroy: "Supprimer cette ligne" + destroy_confirm: "Etes vous sûr de détruire cette ligne ?" + import: "Importer des lignes" new: - title: Ajouter une ligne + title: "Ajouter une ligne" edit: - title: Modifier la ligne %{line} + title: "Modifier la ligne %{line}" show: - title: Ligne %{line} + title: "Ligne %{line}" itineraries: "Liste des séquences d'arrêts de la ligne" - group_of_lines: Groupes de lignes + group_of_lines: "Groupes de lignes" index: - name_or_number: Nom ou indice - title: Lignes - selection: Filtrer sur - selection_all: Tous - multi_selection: Sélection multiple - multi_selection_enable: Activer la sélection multiple - multi_selection_disable: Désactiver la sélection multiple - delete_selected: Supprimer les lignes - export_selected: Exporter les lignes - select_all: Tout sélectionner - deselect_all: Tout désélectionner - unset: non défini + name_or_number: "Nom ou indice" + title: "Lignes" + selection: "Filtrer sur" + selection_all: "Tous" + multi_selection: "Sélection multiple" + multi_selection_enable: "Activer la sélection multiple" + multi_selection_disable: "Désactiver la sélection multiple" + delete_selected: "Supprimer les lignes" + export_selected: "Exporter les lignes" + select_all: "Tout sélectionner" + deselect_all: "Tout désélectionner" + unset: "non défini" form: - group_of_lines: Groupes de lignes associés - no_group_of_line: Aucun groupe de lignes + group_of_lines: "Groupes de lignes associés" + no_group_of_line: "Aucun groupe de lignes" several_group_of_lines: "%{count} groupes of lignes" activerecord: models: line: - zero: ligne - one: ligne - other: lignes + zero: "ligne" + one: "ligne" + other: "lignes" attributes: line: - network: Réseau - company: Transporteur + network: "Réseau" + company: "Transporteur" registration_number: "Numéro d'enregistrement" - name: Nom - published_name: Nom public - number: Indice - transport_mode: Mode de transport - group_of_line: Groupe de lignes - comment: Commentaire - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + name: "Nom" + published_name: "Nom public" + number: "Indice" + transport_mode: "Mode de transport" + group_of_line: "Groupe de lignes" + comment: "Commentaire" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" formtastic: hints: line: diff --git a/config/locales/networks.yml b/config/locales/networks.yml index 3415495ca..8387730eb 100644 --- a/config/locales/networks.yml +++ b/config/locales/networks.yml @@ -1,9 +1,9 @@ en: networks: actions: - new: Add a new network - edit: Edit this network - destroy: Remove this network + new: "Add a new network" + edit: "Edit this network" + destroy: "Remove this network" destroy_confirm: "Are you sure you want destroy this network?" new: title: "Add a new network" @@ -13,63 +13,63 @@ en: title: "Network" index: title: "Networks" - name: Name + name: "Name" activerecord: models: network: - zero: network - one: network - other: networks + zero: "network" + one: "network" + other: "networks" attributes: network: registration_number: "Registration number" name: "Name" comment: "Comments" version_date: "Date of this network's version" - description: Description - source_type: Source type - source_name: Source name - source_identifier: Source identifier - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + description: "Description" + source_type: "Source type" + source_name: "Source name" + source_identifier: "Source identifier" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by " formtastic: hints: network: - registration_number: only alphanumerical or underscore characters + registration_number: "only alphanumerical or underscore characters" objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character" fr: networks: actions: - new: Ajouter un réseau - edit: Modifier ce réseau - destroy: Supprimer ce réseau + new: "Ajouter un réseau" + edit: "Modifier ce réseau" + destroy: "Supprimer ce réseau" destroy_confirm: "Etes vous sûr de détruire ce réseau ?" new: title: "Ajouter un réseau" edit: - title: Modifier le réseau %{network} + title: "Modifier le réseau %{network}" show: - title: Réseau %{network} + title: "Réseau %{network}" index: title: "Réseaux" - name: Nom + name: "Nom" activerecord: models: network: - zero: réseau - one: réseau - other: réseaux + zero: "réseau" + one: "réseau" + other: "réseaux" attributes: network: registration_number: "Numéro d'enregistrement" name: "Nom" comment: "Commentaire" - version_date: Date de version - description: Description + version_date: "Date de version" + description: "Description" source_type: "Type de système origine" source_name: "Nom du système origine" source_identifier: "Identifiant du système origine" diff --git a/config/locales/referentials.yml b/config/locales/referentials.yml index bfd25de0c..7049949b9 100644 --- a/config/locales/referentials.yml +++ b/config/locales/referentials.yml @@ -3,69 +3,69 @@ en: edit: title: "Edit the data space" show: - lines: lines - networks: networks - vehicle_journeys: vehicle journeys - time_tables: time tables - title: Data space - clean_up: Clean up - api_keys: Authentification keys for an API REST access + lines: "lines" + networks: "networks" + vehicle_journeys: "vehicle journeys" + time_tables: "time tables" + title: "Data space" + clean_up: "Clean up" + api_keys: "Authentification keys for an API REST access" counts: - objects: Data space elements - count: count + objects: "Data space elements" + count: "count" validity_out: - validity_out_time_tables: Closed timetables - validity_out_soon_time_tables: Timetables closed in %{count} days + validity_out_time_tables: "Closed timetables" + validity_out_soon_time_tables: "Timetables closed in %{count} days" new: - title: Create a new data space + title: "Create a new data space" submit: "Create a data space" actions: - new: Add a data space + new: "Add a data space" destroy_confirm: "Do you confirm to destroy this data space ?" - destroy: Destroy this data space - edit: Edit this data space + destroy: "Destroy this data space" + edit: "Edit this data space" errors: pg_excluded: "can't begins with pg_" public_excluded: "public is reserved value" activerecord: models: referential: - zero: Data space - one: Data space - other: Data spaces + zero: "Data space" + one: "Data space" + other: "Data spaces" attributes: referential: - name: Name - slug: Code - prefix: Neptune Object Id prefix - projection_type: Optional spatial reference system code (SRID) - time_zone: time zone + name: "Name" + slug: "Code" + prefix: "Neptune Object Id prefix" + projection_type: "Optional spatial reference system code (SRID)" + time_zone: "time zone" upper_corner: "Top,Right corner for default bounding box" lower_corner: "Bottom,Left corner for default bounding box" - resources: Neptune Import File - validity_period: Validity period - no_validity_period: undefined - start_validity_period: from - end_validity_period: to - networks: Networks - group_of_lines: Group of lines - lines: Lines - vehicle_journeys: Vehicle journeys - companies: Companies - stop_areas: Stop Areas - access_points: Access Points - time_tables: Time tables - connection_links: Connection links - quays: quays - boarding_positions: boarding positions - commercial_stops: commercial stops - stop_places: stop places - itls: routing contraints + resources: "Neptune Import File" + validity_period: "Validity period" + no_validity_period: "undefined" + start_validity_period: "from" + end_validity_period: "to" + networks: "Networks" + group_of_lines: "Group of lines" + lines: "Lines" + vehicle_journeys: "Vehicle journeys" + companies: "Companies" + stop_areas: "Stop Areas" + access_points: "Access Points" + time_tables: "Time tables" + connection_links: "Connection links" + quays: "quays" + boarding_positions: "boarding positions" + commercial_stops: "commercial stops" + stop_places: "stop places" + itls: "routing contraints" formtastic: hints: referential: slug: "only lowercase alphanumerical or underscore characters, first character must be a letter" - prefix: only alphanumerical or underscore characters + prefix: "only alphanumerical or underscore characters" upper_corner: "longitude,latitude in WGS84 referential, dot for decimal separator" lower_corner: "longitude,latitude in WGS84 referential, dot for decimal separator" @@ -74,64 +74,64 @@ fr: edit: title: "Modifier l'espace de données" show: - lines: lignes - networks: réseaux - vehicle_journeys: courses - time_tables: calendriers - title: Espace de données - clean_up: Purge des données obsolètes + lines: "lignes" + networks: "réseaux" + vehicle_journeys: "courses" + time_tables: "calendriers" + title: "Espace de données" + clean_up: "Purge des données obsolètes" api_keys: "Clés d'authentification pour un accès à l'API REST" counts: - objects: Eléments - count: Qté + objects: "Eléments" + count: "Qté" validity_out: - validity_out_time_tables: Calendriers échus - validity_out_soon_time_tables: Calendriers à échoir dans %{count} jours + validity_out_time_tables: "Calendriers échus" + validity_out_soon_time_tables: "Calendriers à échoir dans %{count} jours" new: - title: Créer un nouvel espace de données + title: "Créer un nouvel espace de données" submit: "Créer un espace de données" actions: - new: Ajouter un espace de données + new: "Ajouter un espace de données" destroy_confirm: "Etes vous sûr de vouloir supprimer cet espace de données ?" - destroy: Supprimer cet espace de données - edit: Modifier cet espace de données + destroy: "Supprimer cet espace de données" + edit: "Modifier cet espace de données" errors: pg_excluded: "ne peut pas commencer par pg_ (valeurs réservées)" public_excluded: "public est une valeur réservée" activerecord: models: referential: - zero: Espace de Données - one: Espace de Données - other: Espaces de Données + zero: "Espace de Données" + one: "Espace de Données" + other: "Espaces de Données" attributes: referential: - name: Nom - slug: Code - prefix: Préfixe des identifiants Neptune - projection_type: Système de référence spatiale (SRID) optionnel - time_zone: Fuseau horaire + name: "Nom" + slug: "Code" + prefix: "Préfixe des identifiants Neptune" + projection_type: "Système de référence spatiale (SRID) optionnel" + time_zone: "Fuseau horaire" upper_corner: "Point haut/droite de l'emprise par défaut" lower_corner: "Point bas/gauche de l'emprise par défaut" - resources: Import Neptune - validity_period: Période de validité - no_validity_period: non définie - start_validity_period: du - end_validity_period: au - networks: Réseaux - group_of_lines: Groupes de lignes - lines: Lignes - vehicle_journeys: Courses - companies: Transporteurs - stop_areas: Arrêts + resources: "Import Neptune" + validity_period: "Période de validité" + no_validity_period: "non définie" + start_validity_period: "du" + end_validity_period: "au" + networks: "Réseaux" + group_of_lines: "Groupes de lignes" + lines: "Lignes" + vehicle_journeys: "Courses" + companies: "Transporteurs" + stop_areas: "Arrêts" access_points: "points d'accès" - time_tables: Calendriers - connection_links: Correspondances - quays: quais + time_tables: "Calendriers" + connection_links: "Correspondances" + quays: "quais" boarding_positions: "points d'embarquement" - commercial_stops: arrêts commerciaux + commercial_stops: "arrêts commerciaux" stop_places: "pôles d'échange" - itls: ITL + itls: "ITL" formtastic: hints: referential: diff --git a/config/locales/routes.yml b/config/locales/routes.yml index e5d631bd2..5e6b12f9f 100644 --- a/config/locales/routes.yml +++ b/config/locales/routes.yml @@ -1,57 +1,57 @@ en: routes: actions: - new: Add a new route - edit: Edit this route - destroy: Remove this route - destroy_confirm: Are you sure you want destroy this route? + new: "Add a new route" + edit: "Edit this route" + destroy: "Remove this route" + destroy_confirm: "Are you sure you want destroy this route?" new: - title: Add a new route + title: "Add a new route" edit: - title: Update route %{route} + title: "Update route %{route}" show: - title: Route %{route} + title: "Route %{route}" stop_points: "Stop point on route list" journey_patterns: "Route journey patterns list" - no_opposite_route: No reversed route associated - undefined: Undefined + no_opposite_route: "No reversed route associated" + undefined: "Undefined" index: - title: Routes - selection: Selection - selection_all: All + title: "Routes" + selection: "Selection" + selection_all: "All" route: - no_journey_pattern: No Journey pattern + no_journey_pattern: "No Journey pattern" wayback: - positive: forward - negative: backward - opposite: Opposite route - no_opposite: No opposite route + positive: "forward" + negative: "backward" + opposite: "Opposite route" + no_opposite: "No opposite route" activerecord: models: route: - zero: route - one: route - other: routes + zero: "route" + one: "route" + other: "routes" attributes: route: wayback: - positive: forward - negative: backward - line: Line - vehicle_journeys: Vehicle journeys - journey_patterns: Journey patterns - name: Name - published_name: Published name - comment: Comments - number: Number - direction_code: Direction - wayback_code: Wayback - opposite_route: Reversed route - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + positive: "forward" + negative: "backward" + line: "Line" + vehicle_journeys: "Vehicle journeys" + journey_patterns: "Journey patterns" + name: "Name" + published_name: "Published name" + comment: "Comments" + number: "Number" + direction_code: "Direction" + wayback_code: "Wayback" + opposite_route: "Reversed route" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by" fr: routes: @@ -69,18 +69,18 @@ fr: stop_points: "Liste des arrêts de la séquence d'arrêts" journey_patterns: "Liste des missions" no_opposite_route: "Aucune séquence d'arrêts associée en sens opposé" - undefined: Non défini + undefined: "Non défini" index: title: "Séquences d'arrêts" - selection: Sélection - selection_all: Tous + selection: "Sélection" + selection_all: "Tous" route: - no_journey_pattern: Pas de mission + no_journey_pattern: "Pas de mission" wayback: - positive: Aller - negative: Retour - opposite: Séquence opposée - no_opposite: Pas de séquence opposée + positive: "Aller" + negative: "Retour" + opposite: "Séquence opposée" + no_opposite: "Pas de séquence opposée" activerecord: models: route: @@ -90,22 +90,22 @@ fr: attributes: route: wayback: - positive: Aller - negative: Retour - line: Ligne - vehicle_journeys: Courses - journey_patterns: Missions - name: Nom - published_name: Nom public - number: Indice - comment: Commentaire - direction_code: Direction - wayback_code: Sens + positive: "Aller" + negative: "Retour" + line: "Ligne" + vehicle_journeys: "Courses" + journey_patterns: "Missions" + name: "Nom" + published_name: "Nom public" + number: "Indice" + comment: "Commentaire" + direction_code: "Direction" + wayback_code: "Sens" opposite_route: "Séquence d'arrêts associée en sens opposé" - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par - no_journey_pattern: Pas de mission + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" + no_journey_pattern: "Pas de mission" diff --git a/config/locales/stop_areas.yml b/config/locales/stop_areas.yml index 0d0ae207b..b7201b983 100644 --- a/config/locales/stop_areas.yml +++ b/config/locales/stop_areas.yml @@ -2,124 +2,124 @@ en: stop_areas: default_geometry_success: "%{count} modified stop areas" stop_area: - no_position: No Position + no_position: "No Position" lines: "Lines :" actions: - new: Add a new stop - edit: Edit this stop - destroy: Remove this stop - destroy_confirm: Are you sure you want destroy this stop? - select_parent: Manage Parent - add_children: Manage Children - manage_access_points: Manage Access Points - manage_access_links: Manage Access Links + new: "Add a new stop" + edit: "Edit this stop" + destroy: "Remove this stop" + destroy_confirm: "Are you sure you want destroy this stop?" + select_parent: "Manage Parent" + add_children: "Manage Children" + manage_access_points: "Manage Access Points" + manage_access_links: "Manage Access Links" add_routing_lines: "Manage constraint's lines" add_routing_stops: "Manage constraint's stops" default_geometry: "Compute missing geometries" new: - title: Add a new stop + title: "Add a new stop" edit: - title: Update stop %{stop_area} + title: "Update stop %{stop_area}" show: - title: Stop %{stop_area} - geographic_data: Geographic data - no_geographic_data: None + title: "Stop %{stop_area}" + geographic_data: "Geographic data" + no_geographic_data: "None" itl_managment: "Routing constraint's links managment" stop_managment: "Parent-Child links managment" access_managment: "Access Points and Links managment" - access_points: Access Points + access_points: "Access Points" genealogical: - genealogical: Links between stop area + genealogical: "Links between stop area" genealogical_routing: "Routing constraint's links" index: - title: Stop areas - name_or_country_code: Name or Country code - selection: Filter on - selection_all: All - area_type: Area Type + title: "Stop areas" + name_or_country_code: "Name or Country code" + selection: "Filter on" + selection_all: "All" + area_type: "Area Type" access_links: title: "Access links for %{stop_area}'s access" - generic_access_links: Glogal links - detail_access_links: Specific links + generic_access_links: "Glogal links" + detail_access_links: "Specific links" access_link_legend_1: "grays arrows for undefined links, green for defined ones" access_link_legend_2: "clic on arrows to create/edit a link" select_parent: - title: Manage parent of stop area %{stop_area} + title: "Manage parent of stop area %{stop_area}" add_children: - title: Manage children of stop area %{stop_area} + title: "Manage children of stop area %{stop_area}" add_lines: - title: Manage lines of routing constraint %{stop_area} + title: "Manage lines of routing constraint %{stop_area}" add_stops: - title: Manage stop areas of routing constraint %{stop_area} + title: "Manage stop areas of routing constraint %{stop_area}" activerecord: models: stop_area: - zero: stop area - one: stop area - other: stop areas + zero: "stop area" + one: "stop area" + other: "stop areas" attributes: stop_area: - name: Name - registration_number: Registration number - comment: Comments - stop_area_type: Area type - nearest_topic_name: Nearest point of interest - street_name: Street name - country_code: INSEE code - fare_code: Fare code - projection_type: Projection type - x: x-position - y: y-position - long_lat_type: Projection type - longitude: Longitude - latitude: Latitude - objectid: Neptune identifier - object_version: Version - creation_time: Created on + name: "Name" + registration_number: "Registration number" + comment: "Comments" + stop_area_type: "Area type" + nearest_topic_name: "Nearest point of interest" + street_name: "Street name" + country_code: "INSEE code" + fare_code: "Fare code" + projection_type: "Projection type" + x: "x-position" + y: "y-position" + long_lat_type: "Projection type" + longitude: "Longitude" + latitude: "Latitude" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" creatorid: Created by - children_ids: Children - routing_stop_ids: Attached stops - routing_line_ids: Attached lines - parent: Parent + children_ids: "Children" + routing_stop_ids: "Attached stops" + routing_line_ids: "Attached lines" + parent: "Parent" formtastic: hints: stop_area: - registration_number: only alphanumerical or underscore characters + registration_number: "only alphanumerical or underscore characters" objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character" fr: stop_areas: default_geometry_success: "%{count} arrêts modifiés" stop_area: - no_position: Pas de position + no_position: "Pas de position" lines: "Lignes :" actions: - new: Ajouter un arrêt - edit: Modifier cet arrêt - destroy: Supprimer cet arrêt - destroy_confirm: Etes vous sûr de détruire cet arrêt ? - select_parent: Gérer le parent - add_children: Gérer les fils + new: "Ajouter un arrêt" + edit: "Modifier cet arrêt" + destroy: "Supprimer cet arrêt" + destroy_confirm: "Etes vous sûr de détruire cet arrêt ?" + select_parent: "Gérer le parent" + add_children: "Gérer les fils" add_routing_lines: "Gérer les lignes de l'ITL" add_routing_stops: "Gérer les arrêts de l'ITL" - manage_access_points: Gérer les accès - manage_access_links: Gérer les liens arrêt-accès - add_children: Gérer les fils + manage_access_points: "Gérer les accès" + manage_access_links: "Gérer les liens arrêt-accès" + add_children: "Gérer les fils" default_geometry: "Calculer les géométries manquantes" new: - title: Ajouter un arrêt + title: "Ajouter un arrêt" edit: title: "Modifier l'arrêt %{stop_area}" show: - title: Arrêt %{stop_area} - geographic_data: Données géographiques - no_geographic_data: Aucune + title: "Arrêt %{stop_area}" + geographic_data: "Données géographiques" + no_geographic_data: "Aucune" itl_managment: "Gestion des liens de l'ITL" stop_managment: "Gestion des relations père-fils" access_managment: "Gestion des accès et liens associés" access_points: "Points d'accès" genealogical: - genealogical: Lien entre arrêts + genealogical: "Lien entre arrêts" genealogical_routing: "Liens de l'ITL" access_links: title: "Liens Accès-Arrêts des accès de %{stop_area}" @@ -128,10 +128,10 @@ fr: access_link_legend_1: "Les flêches grises représentent des liens non définis" access_link_legend_2: "cliquer sur les flêches pour créer/éditer un lien" index: - name_or_country_code: Nom ou Code INSEE - title: Arrêts - selection: Filtrer sur - selection_all: Tous + name_or_country_code: "Nom ou Code INSEE" + title: "Arrêts" + selection: "Filtrer sur" + selection_all: "Tous" area_type: "Type d'arrêt" select_parent: title: "Gérer le parent de l'arrêt %{stop_area}" @@ -144,34 +144,34 @@ fr: activerecord: models: stop_area: - zero: arrêt - one: arrêt - other: arrêts + zero: "arrêt" + one: "arrêt" + other: "arrêts" attributes: stop_area: - name: Nom + name: "Nom" registration_number: "Numéro d'enregistrement" - published_name: Nom public - comment: Commentaire + published_name: "Nom public" + comment: "Commentaire" stop_area_type: "Type d'arrêt" nearest_topic_name: "Point d'intérêt le plus proche" - street_name: Nom de la rue - country_code: Code INSEE - fare_code: Zone tarifaire - projection_type: Projection - x: Position X - y: Position Y - long_lat_type: Projection - longitude: Longitude - latitude: Latitude - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par - children_ids: Fils + street_name: "Nom de la rue" + country_code: "Code INSEE" + fare_code: "Zone tarifaire" + projection_type: "Projection" + x: "Position X" + y: "Position Y" + long_lat_type: "Projection" + longitude: "Longitude" + latitude: "Latitude" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" + children_ids: "Fils" routing_stop_ids: "Arrêts concernés par l'ITL" routing_line_ids: "Lignes affectées par l'ITL" - parent: Parent + parent: "Parent" formtastic: hints: stop_area: diff --git a/config/locales/stop_points.yml b/config/locales/stop_points.yml index cea5debcf..2a4c90766 100644 --- a/config/locales/stop_points.yml +++ b/config/locales/stop_points.yml @@ -3,43 +3,43 @@ en: reorder_success: "Stop list saved" reorder_failure: "Fail in reordering" actions: - sort: Manage stops on route - show: Show - index: Stops on route list - new: Add a new stop on route - edit: Edit this stop on route - destroy: Remove this stop on route - destroy_confirm: Are you sure you want destroy this stop on route ? + sort: "Manage stops on route" + show: "Show" + index: "Stops on route list" + new: "Add a new stop on route" + edit: "Edit this stop on route" + destroy: "Remove this stop on route" + destroy_confirm: "Are you sure you want destroy this stop on route ?" new: - title: Add a new stop route - select_area: Select a stop area + title: "Add a new stop route" + select_area: "Select a stop area" index: - reorder_button: Save reordering - title: Stops on route %{route} - subtitle: Stops on route ordered - move: Move - no_stop_point: No stop point on route + reorder_button: "Save reordering" + title: "Stops on route %{route}" + subtitle: "Stops on route ordered" + move: "Move" + no_stop_point: "No stop point on route" activerecord: models: stop_point: - zero: stop point on route - one: stop point on route - other: stop points on route + zero: "stop point on route" + one: "stop point on route" + other: "stop points on route" attributes: stop_point: - lines: lines + lines: "lines" fr: stop_points: reorder_success: "La list des arrêts a été mise à jour" reorder_failure: "Echec de la mise à jour" actions: - sort: Gérer les arrêts de la séquence - show: Consulter - index: Liste des arrêts de la séquence - new: Ajouter un arrêt à la séquence - edit: Modifier cet arrêt de la séquence - destroy: Supprimer cet arrêt de la séquence - destroy_confirm: Etes vous sûr de retirer cet arrêt de la séquence ? + sort: "Gérer les arrêts de la séquence" + show: "Consulter" + index: "Liste des arrêts de la séquence" + new: "Ajouter un arrêt à la séquence" + edit: "Modifier cet arrêt de la séquence" + destroy: "Supprimer cet arrêt de la séquence" + destroy_confirm: "Etes vous sûr de retirer cet arrêt de la séquence ?" new: title: "Ajouter un arrêt à la séquence %{route}" select_area: "Sélectionner un arrêt" @@ -47,8 +47,8 @@ fr: reorder_button: "Mettre à jour l'ordre" title: "Liste ordonnée des arrêts de la séquence d'arrêts %{route}" subtitle: "Arrêts dans l'ordre de parcours" - move: Déplacer - no_stop_point: Aucun arrêt dans la séquence + move: "Déplacer" + no_stop_point: "Aucun arrêt dans la séquence" activerecord: models: stop_point: @@ -57,4 +57,4 @@ fr: other: "arrêts sur séquence d'arrêts" attributes: stop_point: - lines: lignes + lines: "lignes" diff --git a/config/locales/subscriptions.yml b/config/locales/subscriptions.yml index 458e6132d..44ce892f2 100644 --- a/config/locales/subscriptions.yml +++ b/config/locales/subscriptions.yml @@ -6,23 +6,23 @@ en: attributes: subscription: organisation_name: "Organisation" - user_name: User full name + user_name: "User full name" email: "Email address" password: "Password" password_confirmation: "Password confirmation" current_password: "Actual password" subscriptions: new: - title: Create your account + title: "Create your account" actions: - new: Create an account + new: "Create an account" fr: subscriptions: success: "Inscription enregistrée" failure: "Inscription invalide" activemodel: models: - subscription: compte + subscription: "compte" attributes: subscription: organisation_name: "Organisation" @@ -33,6 +33,6 @@ fr: current_password: "Mot de passe actuel" subscriptions: new: - title: Créer votre compte + title: "Créer votre compte" actions: - new: Créer un compte + new: "Créer un compte" diff --git a/config/locales/time_tables.yml b/config/locales/time_tables.yml index 4659f0f3e..ec60adf11 100644 --- a/config/locales/time_tables.yml +++ b/config/locales/time_tables.yml @@ -1,66 +1,66 @@ en: time_tables: time_table: - empty: empty - bounding: from %{start} to %{end} + empty: "empty" + bounding: "from %{start} to %{end}" periods_count: "periods: %{count}" dates_count: "dates: %{count}" periods_dates_count: "dates: %{dates_count}, periods: %{periods_count}" actions: - new: Add a new timetable - edit: Edit this timetable - destroy: Remove this timetable - destroy_confirm: Are you sure you want destroy this timetable? - destroy_date_confirm: Are you sure you want destroy this date ? - destroy_period_confirm: Are you sure you want destroy this period ? + new: "Add a new timetable" + edit: "Edit this timetable" + destroy: "Remove this timetable" + destroy_confirm: "Are you sure you want destroy this timetable ?" + destroy_date_confirm: "Are you sure you want destroy this date ?" + destroy_period_confirm: "Are you sure you want destroy this period ?" new: - title: Add a new timetable + title: "Add a new timetable" edit: - title: Update timetable %{time_table} + title: "Update timetable %{time_table}" show: resume: "From %{start_date} to %{end_date} (independently of any period day types)" resume_empty: "Empty timetable" - title: Timetable %{time_table} + title: "Timetable %{time_table}" dates: "Application dates" periods: "Application periods" - from: from - to: to - add_period: Add a period - add_date: Add a date + from: "from" + to: "to" + add_period: "Add a period" + add_date: "Add a date" index: - title: Timetables - comment: Comment - selection: Selection - selection_all: All + title: "Timetables" + comment: "Comment" + selection: "Selection" + selection_all: "All" activerecord: models: time_table: - zero: timetable - one: timetable - other: timetables + zero: "timetable" + one: "timetable" + other: "timetables" attributes: time_table: - comment: Comment - version: Version - day_types: Day types - none: none - monday: Monday - tuesday: Tuesday - wednesday: Wednesday - thursday: Thursday - friday: Friday - saturday: Saturday - sunday: Sunday - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + comment: "Comment" + version: "Version" + day_types: "Day types" + none: "none" + monday: "Monday" + tuesday: "Tuesday" + wednesday: "Wednesday" + thursday: "Thursday" + friday: "Friday" + saturday: "Saturday" + sunday: "Sunday" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by " calendars: "Calendar view" - dates: Application dates - date: On - periods: Application periods - period_start: From - period_end: to + dates: "Application dates" + date: "On" + periods: "Application periods" + period_start: "From" + period_end: "to" formtastic: hints: @@ -70,22 +70,22 @@ en: fr: time_tables: time_table: - empty: vide - bounding: du %{start} au %{end} + empty: "vide" + bounding: "du %{start} au %{end}" periods_count: "périodes: %{count}" dates_count: "dates: %{count}" periods_dates_count: "dates: %{dates_count}, périodes: %{periods_count}" actions: - new: Ajouter un calendrier - edit: Modifier ce calendrier - destroy: Supprimer ce calendrier - destroy_confirm: Etes vous sûr de détruire ce calendrier ? - destroy_date_confirm: Etes vous sûr de détruire cette date ? - destroy_period_confirm: Etes vous sûr de détruire cette période ? - add_period: Ajouter une période - add_date: Ajouter une date + new: "Ajouter un calendrier" + edit: "Modifier ce calendrier" + destroy: "Supprimer ce calendrier" + destroy_confirm: "Etes vous sûr de détruire ce calendrier ?" + destroy_date_confirm: "Etes vous sûr de détruire cette date ?" + destroy_period_confirm: "Etes vous sûr de détruire cette période ?" + add_period: "Ajouter une période" + add_date: "Ajouter une date" new: - title: Ajouter un calendrier + title: "Ajouter un calendrier" edit: title: "Modifier le calendrier %{time_table}" show: @@ -94,44 +94,44 @@ fr: title: Calendrier %{time_table} dates: "Dates d'application" periods: "Périodes d'application" - from: du - to: au - add_period: Ajouter une période - add_date: Ajouter une date + from: "du" + to: "au" + add_period: "Ajouter une période" + add_date: "Ajouter une date" index: - comment: Description - title: calendriers - selection: Sélection - selection_all: Tous + comment: "Description" + title: "calendriers" + selection: "Sélection" + selection_all: "Tous" activerecord: models: time_table: - zero: calendrier - one: calendrier - other: calendriers + zero: "calendrier" + one: "calendrier" + other: "calendriers" attributes: time_table: - comment: Description - version: Version + comment: "Description" + version: "Version" day_types: "Jours d'application" - none: aucun - monday: Lundi - tuesday: Mardi - wednesday: Mercredi - thursday: Jeudi - friday: Vendredi - saturday: Samedi - sunday: Dimanche - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + none: "aucun" + monday: "Lundi" + tuesday: "Mardi" + wednesday: "Mercredi" + thursday: "Jeudi" + friday: "Vendredi" + saturday: "Samedi" + sunday: "Dimanche" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" calendars: "Présentation calendaire" dates: "Dates d'application" - date: Date + date: "Date" periods: "Périodes d'application" - period_start: Du - period_end: au + period_start: "Du" + period_end: "au" formtastic: hints: diff --git a/config/locales/transport_modes.yml b/config/locales/transport_modes.yml index 49d60f5de..3c89e4524 100644 --- a/config/locales/transport_modes.yml +++ b/config/locales/transport_modes.yml @@ -1,47 +1,47 @@ en: transport_modes: label: - unknown: unknown - air: Air - train: Train - long_distance_train: Long distance train - local_train: Local train - rapid_transit: Rapid transit - metro: Metro - tramway: Tramway - coach: Coach - bus: Bus - ferry: Ferry - waterborne: Waterborne - private_vehicle: Private vehicle - walk: Walk - trolley_bus: Trolleybus - bicycle: Bicycle - shuttle: Shuttle - taxi: Taxi - val: VAL - other: Other + unknown: "unknown" + air: "Air" + train: "Train" + long_distance_train: "Long distance train" + local_train: "Local train" + rapid_transit: "Rapid transit" + metro: "Metro" + tramway: "Tramway" + coach: "Coach" + bus: "Bus" + ferry: "Ferry" + waterborne: "Waterborne" + private_vehicle: "Private vehicle" + walk: "Walk" + trolley_bus: "Trolleybus" + bicycle: "Bicycle" + shuttle: "Shuttle" + taxi: "Taxi" + val: "VAL" + other: "Other" fr: transport_modes: label: - unknown: Inconnu - air: Air - train: Train - long_distance_train: Train Grande Ligne - local_train: TER - rapid_transit: RER - metro: Métro - tramway: Tramway - coach: Autocar - bus: Bus - ferry: Ferry - waterborne: Bac - private_vehicle: Voiture particulière - walk: Marche à pied - trolley_bus: Trolleybus - bicycle: Vélo - shuttle: Navette - taxi: Taxi - val: VAL - other: Autre + unknown: "Inconnu" + air: "Air" + train: "Train" + long_distance_train: "Train Grande Ligne" + local_train: "TER" + rapid_transit: "RER" + metro: "Métro" + tramway: "Tramway" + coach: "Autocar" + bus: "Bus" + ferry: "Ferry" + waterborne: "Bac" + private_vehicle: "Voiture particulière" + walk: "Marche à pied" + trolley_bus: "Trolleybus" + bicycle: "Vélo" + shuttle: "Navette" + taxi: "Taxi" + val: "VAL" + other: "Autre" diff --git a/config/locales/users.yml b/config/locales/users.yml index 075c23851..7de65d406 100644 --- a/config/locales/users.yml +++ b/config/locales/users.yml @@ -1,43 +1,43 @@ en: users: actions: - new: Add a new user - edit: Edit this user - destroy: Remove this user - destroy_confirm: Are you sure you want destroy this user? + new: "Add a new user" + edit: "Edit this user" + destroy: "Remove this user" + destroy_confirm: "Are you sure you want destroy this user?" new: - title: Add a new user + title: "Add a new user" edit: - title: Update user %{user} + title: "Update user %{user}" show: - title: User %{user} + title: "User %{user}" index: - title: Users + title: "Users" activerecord: models: - user: user + user: "user" attributes: user: - name: Full name + name: "Full name" fr: users: actions: - new: Ajouter un utilisateur - edit: Modifier cet utilisateur - destroy: Supprimer cet utilisateur - destroy_confirm: Etes vous sûr de détruire cet utilisateur ? + new: "Ajouter un utilisateur" + edit: "Modifier cet utilisateur" + destroy: "Supprimer cet utilisateur" + destroy_confirm: "Etes vous sûr de détruire cet utilisateur ?" new: - title: Ajouter un utilisateur + title: "Ajouter un utilisateur" edit: title: "Modifier l'utilisateur %{user}" show: - title: Utilisateur %{user} + title: "Utilisateur %{user}" index: - title: Utilisateurs + title: "Utilisateurs" activerecord: models: - user: utilisateur + user: "utilisateur" attributes: user: - name: Nom complet + name: "Nom complet" diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml index 4c643134b..fa88caa95 100644 --- a/config/locales/vehicle_journeys.yml +++ b/config/locales/vehicle_journeys.yml @@ -1,74 +1,74 @@ en: vehicle_journeys: vehicle_journey: - title_stopless: Vehicle journey %{name} - title: Vehicle journey %{name} leaving from %{stop} at %{time} + title_stopless: "Vehicle journey %{name}" + title: "Vehicle journey %{name} leaving from %{stop} at %{time}" actions: index: "Vehicle time's board" - new: Add a new vehicle journey - edit: Edit this vehicle journey - destroy: Remove this vehicle journey - destroy_confirm: Are you sure you want destroy this vehicle journey? + new: "Add a new vehicle journey" + edit: "Edit this vehicle journey" + destroy: "Remove this vehicle journey" + destroy_confirm: "Are you sure you want destroy this vehicle journey?" new: - title: Add a new vehicle journey + title: "Add a new vehicle journey" edit: - title_stopless: Update vehicle journey %{name} - title: Update vehicle journey %{name} leaving from %{stop} at %{time} + title_stopless: "Update vehicle journey %{name}" + title: "Update vehicle journey %{name} leaving from %{stop} at %{time}" form: - stop_title: Stop - departure: Departure - arrival: Arrival - to_arrivals: Copy departures to arrivals - to_departures: Copy arrivals to departures - time_tables: Associated calendars to vehicle journey + stop_title: "Stop" + departure: "Departure" + arrival: "Arrival" + to_arrivals: "Copy departures to arrivals" + to_departures: "Copy arrivals to departures" + time_tables: "Associated calendars to vehicle journey" timeless: - title: Timeless vehicle journeys - vehicle_journeys: Vehicle journeys with times at stop - vehicles_list: Vehicles list + title: "Timeless vehicle journeys" + vehicle_journeys: "Vehicle journeys with times at stop" + vehicles_list: "Vehicle journeys list" show: - title: Vehicle Journey %{vehicle journey} - stop_title: Stop - departure: Departure - arrival: Arrival - time_tables: Calendars list - bounding: From %{start} to %{end} - validation: Clone - translation_form: Vehicle journey translations + title: "Vehicle Journey %{vehicle journey}" + stop_title: "Stop" + departure: "Departure" + arrival: "Arrival" + time_tables: "Calendars list" + bounding: "From %{start} to %{end}" + validation: "Clone" + translation_form: "Vehicle journey translations" index: - title: Vehicle journeys on route %{route} + title: "Vehicle journeys on route %{route}" vehicle_journeys: "Departure's times" - selection: Filter on - selection_all: All - time_range: Departure time threshold + selection: "Filter on" + selection_all: "All" + time_range: "Departure time threshold" time_filter: - time_range_filter: Filter + time_range_filter: "Filter" activerecord: models: vehicle_journey: - zero: vehicle journey - one: vehicle journey - other: vehicle journeys + zero: "vehicle journey" + one: "vehicle journey" + other: "vehicle journeys" attributes: vehicle_journey: - line: Line - route: Route - journey_pattern: Journey Pattern - time_tables: Calendars - time_slot: Time Slot - company: Company - comment: Comments - status_value: Status Value - transport_mode: Transport Mode - published_journey_name: Published Name - published_journey_identifier: Published Identifier - facility: Facility - vehicletypeidentifier: Vehicle Type Identifier - time_table_ids: Calendar list - vehicle_journey_at_stop_ids: Time list - objectid: Neptune identifier - object_version: Version - creation_time: Created on - creator_id: Created by + line: "Line" + route: "Route" + journey_pattern: "Journey Pattern" + time_tables: "Calendars" + time_slot: "Time Slot" + company: "Company" + comment: "Comments" + status_value: "Status Value" + transport_mode: "Transport Mode" + published_journey_name: "Published Name" + published_journey_identifier: "Published Identifier" + facility: "Facility" + vehicletypeidentifier: "Vehicle Type Identifier" + time_table_ids: "Calendar list" + vehicle_journey_at_stop_ids: "Time list" + objectid: "Neptune identifier" + object_version: "Version" + creation_time: "Created on" + creator_id: "Created by" errors: models: vehicle_journey: @@ -77,8 +77,8 @@ en: fr: vehicle_journeys: vehicle_journey: - title_stopless: Course %{name} - title: Course %{name} partant de %{stop} à %{time} + title_stopless: "Course %{name}" + title: "Course %{name} partant de %{stop} à %{time}" actions: index: "Horaires des courses" new: "Ajouter une course" @@ -91,34 +91,34 @@ fr: title_stopless: "Modifier la course %{name}" title: "Modifier la course partant de %{stop} à %{time}" form: - stop_title: Arrêt - departure: Départ - arrival: Arrivée - to_arrivals: Copie départs vers arrivées - to_departures: Copie arrivées vers départs - time_tables: Calendriers associés à la course + stop_title: "Arrêt" + departure: "Départ" + arrival: "Arrivée" + to_arrivals: "Copie départs vers arrivées" + to_departures: "Copie arrivées vers départs" + time_tables: "Calendriers associés à la course" timeless: - title: Courses sans horaire - vehicle_journeys: Courses ayant des horaires - vehicles_list: Liste des courses + title: "Courses sans horaire" + vehicle_journeys: "Courses ayant des horaires" + vehicles_list: "Liste des courses" show: title: "Course au départ de %{stop} à %{time} sur la séquence %{route}" - stop_title: Arrêt - departure: Départ - arrival: Arrivée - time_tables: Liste des calendriers - bounding: De %{start} à %{end} - validation: Cloner - translation_form: Cloner la course + stop_title: "Arrêt" + departure: "Départ" + arrival: "Arrivée" + time_tables: "Liste des calendriers" + bounding: "De %{start} à %{end}" + validation: "Cloner" + translation_form: "Cloner la course" index: title: "Courses de la séquence d'arrêts %{route}" - timeless: Courses sans horaire + timeless: "Courses sans horaire" vehicle_journeys: "Horaires de départ aux arrêts" - selection: Filtrer sur - selection_all: Tous - time_range: Seuil horaire au départ + selection: "Filtrer sur" + selection_all: "Tous" + time_range: "Seuil horaire au départ" time_filter: - time_range_filter: Filtrer + time_range_filter: "Filtrer" activerecord: models: vehicle_journey: @@ -127,25 +127,25 @@ fr: other: "Courses" attributes: vehicle_journey: - line: Ligne + line: "Ligne" route: "Séquence d'arrêt" - journey_pattern: Mission - time_tables: Calendriers - time_slot: Fréquence - company: Transporteur - comment: Commentaires - status_value: Etat de trafic - transport_mode: Mode de transport - published_journey_name: Nom public - published_journey_identifier: Identifiant public - facility: Equipement + journey_pattern: "Mission" + time_tables: "Calendriers" + time_slot: "Fréquence" + company: "Transporteur" + comment: "Commentaires" + status_value: "Etat de trafic" + transport_mode: "Mode de transport" + published_journey_name: "Nom public" + published_journey_identifier: "Identifiant public" + facility: "Equipement" vehicle_type_identifier: "Type d'identifiant du véhicule" time_table_ids: "Liste des calendriers" - vehicle_journey_at_stop_ids: Liste des horaires - objectid: Identifiant Neptune - object_version: Version - creation_time: Créé le - creator_id: Créé par + vehicle_journey_at_stop_ids: "Liste des horaires" + objectid: "Identifiant Neptune" + object_version: "Version" + creation_time: "Créé le" + creator_id: "Créé par" errors: models: vehicle_journey: diff --git a/config/locales/vehicle_translations.yml b/config/locales/vehicle_translations.yml index f945cc81c..3d1e0b702 100644 --- a/config/locales/vehicle_translations.yml +++ b/config/locales/vehicle_translations.yml @@ -5,8 +5,8 @@ en: activemodel: attributes: vehicle_translation: - duration: Duration - count: Count + duration: "Duration" + count: "Count" fr: vehicle_translations: success: "%{count} course(s) crée(s) par translation" diff --git a/config/locales/waybacks.yml b/config/locales/waybacks.yml index 6891b844d..c3bf8cc3d 100644 --- a/config/locales/waybacks.yml +++ b/config/locales/waybacks.yml @@ -1,11 +1,11 @@ en: waybacks: label: - straight_forward: straight forward - backward: backward + straight_forward: "straight forward" + backward: "backward" fr: waybacks: label: - straight_forward: aller - backward: retour + straight_forward: "aller" + backward: "retour" diff --git a/config/locales/will_paginate.yml b/config/locales/will_paginate.yml index a44d740c0..e666fce92 100644 --- a/config/locales/will_paginate.yml +++ b/config/locales/will_paginate.yml @@ -5,8 +5,8 @@ en: page_gap: "…" page_entries_info: - search: Search - list: Paginated list + search: "Search" + list: "Paginated list" single_page: zero: "No item found" one: "1 %{model} shown" @@ -26,8 +26,8 @@ fr: page_gap: "…" page_entries_info: - search: Recherche - list: Liste paginée + search: "Recherche" + list: "Liste paginée" single_page: zero: "Aucun élément trouvé" one: "1 %{model} affiché(e)" diff --git a/config/routes.rb b/config/routes.rb index 7928c228a..238217099 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -167,5 +167,9 @@ ChouetteIhm::Application.routes.draw do match '/help/(*slug)' => 'help#show' match '/test_sheet/(*slug)' => 'test_sheet#show' + match '/404', :to => 'errors#not_found' + match '/422', :to => 'errors#server_error' + match '/500', :to => 'errors#server_error' + root :to => 'referentials#index' end diff --git a/db/migrate/20130412083016_add_shortcut_to_time_table.ninoxe_engine.rb b/db/migrate/20130412083016_add_shortcut_to_time_table.ninoxe_engine.rb new file mode 100644 index 000000000..f4a351965 --- /dev/null +++ b/db/migrate/20130412083016_add_shortcut_to_time_table.ninoxe_engine.rb @@ -0,0 +1,7 @@ +# This migration comes from ninoxe_engine (originally 20130410063411) +class AddShortcutToTimeTable < ActiveRecord::Migration + def change + add_column "time_tables", "start_date", "date" + add_column "time_tables", "end_date", "date" + end +end diff --git a/db/migrate/20130412083017_set_shortcut_to_existing_time_table.ninoxe_engine.rb b/db/migrate/20130412083017_set_shortcut_to_existing_time_table.ninoxe_engine.rb new file mode 100644 index 000000000..b8cea84a5 --- /dev/null +++ b/db/migrate/20130412083017_set_shortcut_to_existing_time_table.ninoxe_engine.rb @@ -0,0 +1,11 @@ +# This migration comes from ninoxe_engine (originally 20130410100706) +class SetShortcutToExistingTimeTable < ActiveRecord::Migration + def up + Chouette::TimeTable.all.each do |t| + t.shortcuts_update + end + end + + def down + end +end diff --git a/db/migrate/20130412083423_resize_chouette_columns.ninoxe_engine.rb b/db/migrate/20130412083423_resize_chouette_columns.ninoxe_engine.rb new file mode 100644 index 000000000..d32753d6f --- /dev/null +++ b/db/migrate/20130412083423_resize_chouette_columns.ninoxe_engine.rb @@ -0,0 +1,6 @@ +# This migration comes from ninoxe_engine (originally 20130410143542) +class ResizeChouetteColumns < ActiveRecord::Migration + def change + change_column "vehicle_journeys", "number", "integer", {:limit => 8} + end +end diff --git a/db/migrate/20130412094550_resize_columns.rb b/db/migrate/20130412094550_resize_columns.rb new file mode 100644 index 000000000..c780c752d --- /dev/null +++ b/db/migrate/20130412094550_resize_columns.rb @@ -0,0 +1,11 @@ +class ResizeColumns < ActiveRecord::Migration + def change + change_column "referentials", "organisation_id", "integer", {:limit => 8} + change_column "imports", "referential_id", "integer", {:limit => 8} + change_column "import_log_messages", "import_id", "integer", {:limit => 8} + change_column "exports", "referential_id", "integer", {:limit => 8} + change_column "export_log_messages", "export_id", "integer", {:limit => 8} + change_column "file_validations", "organisation_id", "integer", {:limit => 8} + change_column "file_validation_log_messages", "file_validation_id", "integer", {:limit => 8} + end +end diff --git a/db/schema.rb b/db/schema.rb index 22203c823..abb811eb1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130207123618) do +ActiveRecord::Schema.define(:version => 20130412094550) do create_table "access_links", :force => true do |t| t.integer "access_point_id", :limit => 8 @@ -123,31 +123,31 @@ ActiveRecord::Schema.define(:version => 20130207123618) do t.datetime "failed_at" t.string "locked_by" t.string "queue" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" create_table "export_log_messages", :force => true do |t| - t.integer "export_id" + t.integer "export_id", :limit => 8 t.string "key" t.string "arguments", :limit => 1000 t.integer "position" t.string "severity" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end add_index "export_log_messages", ["export_id"], :name => "index_export_log_messages_on_export_id" create_table "exports", :force => true do |t| - t.integer "referential_id" + t.integer "referential_id", :limit => 8 t.string "status" t.string "type" t.string "options" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "references_type" t.string "reference_ids" end @@ -186,7 +186,7 @@ ActiveRecord::Schema.define(:version => 20130207123618) do end create_table "file_validation_log_messages", :force => true do |t| - t.integer "file_validation_id" + t.integer "file_validation_id", :limit => 8 t.string "key" t.string "arguments", :limit => 1000 t.integer "position" @@ -204,17 +204,7 @@ ActiveRecord::Schema.define(:version => 20130207123618) do t.string "file_type" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false - t.integer "organisation_id" - end - - create_table "geometry_columns", :id => false, :force => true do |t| - t.string "f_table_catalog", :limit => 256, :null => false - t.string "f_table_schema", :limit => 256, :null => false - t.string "f_table_name", :limit => 256, :null => false - t.string "f_geometry_column", :limit => 256, :null => false - t.integer "coord_dimension", :null => false - t.integer "srid", :null => false - t.string "type", :limit => 30, :null => false + t.integer "organisation_id", :limit => 8 end create_table "group_of_lines", :force => true do |t| @@ -234,22 +224,22 @@ ActiveRecord::Schema.define(:version => 20130207123618) do end create_table "import_log_messages", :force => true do |t| - t.integer "import_id" + t.integer "import_id", :limit => 8 t.string "key" t.string "arguments", :limit => 1000 t.integer "position" t.string "severity" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end add_index "import_log_messages", ["import_id"], :name => "index_import_log_messages_on_import_id" create_table "imports", :force => true do |t| - t.integer "referential_id" + t.integer "referential_id", :limit => 8 t.string "status" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "type" t.string "options" t.string "file_type" @@ -342,14 +332,13 @@ ActiveRecord::Schema.define(:version => 20130207123618) do create_table "referentials", :force => true do |t| t.string "name" t.string "slug" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "prefix" t.string "projection_type" t.string "time_zone" - t.string "the_geom" t.string "bounds" - t.integer "organisation_id" + t.integer "organisation_id", :limit => 8 end create_table "routes", :force => true do |t| @@ -374,14 +363,6 @@ ActiveRecord::Schema.define(:version => 20130207123618) do t.integer "line_id", :limit => 8 end - create_table "spatial_ref_sys", :id => false, :force => true do |t| - t.integer "srid", :null => false - t.string "auth_name", :limit => 256 - t.integer "auth_srid" - t.string "srtext", :limit => 2048 - t.string "proj4text", :limit => 2048 - end - create_table "stop_areas", :force => true do |t| t.integer "parent_id", :limit => 8 t.string "objectid", :null => false @@ -463,6 +444,8 @@ ActiveRecord::Schema.define(:version => 20130207123618) do t.string "version" t.string "comment" t.integer "int_day_types", :default => 0 + t.date "start_date" + t.date "end_date" end add_index "time_tables", ["objectid"], :name => "time_tables_objectid_key", :unique => true @@ -486,8 +469,8 @@ ActiveRecord::Schema.define(:version => 20130207123618) do t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.integer "organisation_id" t.string "name" t.string "confirmation_token" @@ -540,7 +523,7 @@ ActiveRecord::Schema.define(:version => 20130207123618) do t.string "published_journey_identifier" t.string "facility" t.string "vehicle_type_identifier" - t.integer "number" + t.integer "number", :limit => 8 end add_index "vehicle_journeys", ["objectid"], :name => "vehicle_journeys_objectid_key", :unique => true diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index c59689f4a..4d5556998 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -46,7 +46,7 @@ describe Export do describe ".types" do it "should return available Export implementations" do - Export.types.should =~ %w{NeptuneExport CsvExport GtfsExport} + Export.types.should =~ %w{NeptuneExport CsvExport GtfsExport NetexExport} end end diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb index 6f00429f9..bbf6725d7 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -45,7 +45,7 @@ describe Import do describe ".types" do it "should return available Import implementations" do - Import.types.should =~ %w{NeptuneImport CsvImport GtfsImport} + Import.types.should =~ %w{NeptuneImport CsvImport GtfsImport NetexImport} end end diff --git a/spec/models/netex_export_spec.rb b/spec/models/netex_export_spec.rb new file mode 100644 index 000000000..385f6aa5a --- /dev/null +++ b/spec/models/netex_export_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +describe NetexExport do + + its(:export_options) { should include(:format => :netex) } + +end |
