Bugzilla – Attachment 116295 Details for
Bug 26051
Elasticsearch uses the wrong field for callnumber sorting
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
cam12263 - plugin Pando - Ajout d'un plugin pour intégrer les utilisateurs Koha avec Pando
cam12263---plugin-Pando---Ajout-dun-plugin-pour-in.patch (text/plain), 94.10 KB, created by
Ivan Dziuba
on 2021-02-03 21:01:13 UTC
(
hide
)
Description:
cam12263 - plugin Pando - Ajout d'un plugin pour intégrer les utilisateurs Koha avec Pando
Filename:
MIME Type:
Creator:
Ivan Dziuba
Created:
2021-02-03 21:01:13 UTC
Size:
94.10 KB
patch
obsolete
>From 9f50f7e83310067876243fcbc3d5578f1061dd15 Mon Sep 17 00:00:00 2001 >From: Maryse Simard <maryse.simard@inlibro.com> >Date: Wed, 3 Feb 2021 03:05:41 -0500 >Subject: [PATCH] =?UTF-8?q?cam12263=20-=20plugin=20Pando=20-=20Ajout=20d'u?= > =?UTF-8?q?n=20plugin=20pour=20int=C3=A9grer=20les=20utilisateurs=20Koha?= > =?UTF-8?q?=20avec=20Pando?= >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >https://bugs.koha-community.org/show_bug.cgi?id=26051 >--- > inlibro-plugins/Pando.pm | 568 ++++++++++++++++++++ > inlibro-plugins/Pando/configure.tt | 281 ++++++++++ > inlibro-plugins/Pando/configure_fr-CA.tt | 281 ++++++++++ > inlibro-plugins/Pando/images/inLibro_en.svg | 202 +++++++ > inlibro-plugins/Pando/images/inLibro_fr.svg | 509 ++++++++++++++++++ > 5 files changed, 1841 insertions(+) > create mode 100644 inlibro-plugins/Pando.pm > create mode 100644 inlibro-plugins/Pando/configure.tt > create mode 100644 inlibro-plugins/Pando/configure_fr-CA.tt > create mode 100644 inlibro-plugins/Pando/images/inLibro_en.svg > create mode 100644 inlibro-plugins/Pando/images/inLibro_fr.svg > >diff --git a/inlibro-plugins/Pando.pm b/inlibro-plugins/Pando.pm >new file mode 100644 >index 0000000000..269e8b48a7 >--- /dev/null >+++ b/inlibro-plugins/Pando.pm >@@ -0,0 +1,568 @@ >+package Koha::Plugin::Pando; >+ >+# Maryse Simard, 2021 - InLibro >+# >+# This plugin allows you to generate a Carrousel of books from available lists >+# and insert the template into the table system preferences;OpacMainUserBlock >+# >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 3 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along >+# with Koha; if not, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+use base qw(Koha::Plugins::Base); >+use Modern::Perl; >+use CGI; >+ >+use String::Util qw(trim); >+use REST::Client; >+use Try::Tiny; >+use JSON; >+ >+our $VERSION = 1.0; >+ >+# mapping entre et les champs utilisés par l'api et ceux de >+# la table borrowers >+our $PANDO_BORROWER_MAPPING = { >+ card_number => 'cardnumber', # can't be modified >+ lastname => 'surname', # can't be modified >+ firstname => 'firstname', # can't be modified >+ house => 'streetnumber', >+ streetname => 'address', >+ city => 'city', >+ state => 'state', >+ zip => 'zipcode', >+ email => 'email', >+ phone => 'phone', >+ cell => 'mobile', >+ birthday => 'dateofbirth', # can't be modified >+ expiration_date => 'dateexpiry', >+ password => 'password', >+ password_confirmation => 'password', >+}; >+ >+=head1 NAME >+ >+Koha::Plugin::Pando - Plugin pour l'intégration avec Pando >+ >+=head2 METHODS >+ >+=head3 new >+ >+=cut >+ >+sub new { >+ my ( $class, $params ) = @_; >+ >+ $params->{"metadata"} = { >+ name => "Intégration Pando", >+ author => "Maryse Simard", >+ description => "Permet l'intégration de la gestion des utilisateurs avec Pando.", >+ date_authored => "2021-01-25", >+ date_updated => "2021-01-25", >+ minimum_version => "20.05", >+ maximum_version => undef, >+ version => $VERSION, >+ }; >+ >+ my $self = $class->SUPER::new($params); >+ return $self; >+} >+ >+=head3 configure >+ >+Gère la page de configuration du plugin : affiche la page ou >+enregistre les valeurs. >+ >+=cut >+ >+sub configure { >+ my ( $self, $params ) = @_; >+ my $cgi = $self->{'cgi'}; >+ >+ if ( $cgi->param("action") && $cgi->param("action") eq "configure" ) { >+ my $base_url = $cgi->param('base_url'); >+ my $client_id = $cgi->param('client_id'); >+ my $client_secret = $cgi->param('client_secret'); >+ my $test_config = $cgi->param('test_config') || ""; >+ my @categories = $cgi->multi_param('categories'); >+ my $categories = encode_json(\@categories); >+ my $attribute = $cgi->param('attribute'); >+ my $auto_uid = $cgi->param('auto_uid') ? 1 : 0; >+ >+ $self->store_data( >+ { >+ base_url => $base_url, >+ client_id => $client_id, >+ client_secret => $client_secret, >+ test_config => $test_config, >+ categories => $categories, >+ attribute => $attribute, >+ auto_uid => $auto_uid, >+ } >+ ); >+ >+ $self->go_home(); >+ } else { >+ my $template = $self->retrieve_template({ name => "configure" }); >+ >+ my $categories = Koha::Patron::Categories->search({}, { order_by => 'description' }); >+ my $selected_categories = decode_json($self->retrieve_data('categories')) if ( defined $self->retrieve_data('categories') ); >+ >+ my $attributes = Koha::Patron::Attribute::Types->search({ unique_id => 1 }, { order_by => 'description' }); >+ my $attribute = $self->retrieve_data('attribute'); >+ >+ my $auto_uid = $self->retrieve_data('auto_uid') // 1; # valeur par défaut >+ >+ $template->param( >+ base_url => $self->retrieve_data('base_url'), >+ client_id => $self->retrieve_data('client_id'), >+ client_secret => $self->retrieve_data('client_secret'), >+ test_config => $self->retrieve_data('test_config'), >+ categories => $categories, >+ selected_categories => $selected_categories, >+ attributes => $attributes, >+ selected_attribute => $attribute, >+ auto_uid => $auto_uid, >+ ); >+ >+ print $cgi->header(-type => 'text/html', -charset => 'utf-8'); >+ print $template->output(); >+ } >+} >+ >+=head3 after_patron_action >+ >+Gère le hook after_patron_action. Appele la bonne routine selon la >+valeur du paramètre action. >+ >+Seul les utilisateurs faisant partie des catégories configurées >+dans le plugin seront affectés. >+ >+=cut >+ >+sub after_patron_action { >+ my ( $self, $params ) = @_; >+ >+ my $action = $params->{action} // ''; >+ my $patron = $params->{patron}; >+ my $borrowernumber = $params->{patron_id}; >+ >+ unless ( $patron ) { >+ $patron = Koha::Patron->find($borrowernumber); >+ } >+ >+ my $categories = decode_json($self->retrieve_data('categories')) if ( defined $self->retrieve_data('categories') ); >+ my $category = $patron->categorycode if ( $patron ); >+ return unless ( grep(/^$category$/, @{$categories}) ); >+ >+ if ( $action eq 'create' ) { >+ $self->after_patron_create($patron); >+ } elsif ( $action eq 'modify' ) { >+ $self->after_patron_modify($patron); >+ } elsif ( $action eq 'delete' ) { >+ # TODO >+ } >+} >+ >+=head3 after_patron_create >+ >+Appele l'endpoint correspondant de l'api pour la création d'un >+utilisateur. >+ >+=cut >+ >+sub after_patron_create { >+ my ( $self, $patron ) = @_; >+ >+ my ($client, undef) = $self->retrieve_token(); >+ >+ my $params = $self->prepare_parameters($patron); >+ my $json = encode_json($params); >+ >+ $client->POST("api/v1/users", $json, { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }); >+ my $response_content = $client->responseContent(); >+ >+ my $data; >+ try { >+ my $response = decode_json($response_content); >+ if ( $response->{status} eq "success" ) { >+ $data = $response->{data}; >+ } else { >+ warn "[Koha::Plugin::Pando] Creating user error: \"" . $response->{message} . "\"."; >+ } >+ } catch { >+ warn "[Koha::Plugin::Pando] Creating user failed for borrowernumber " . $patron->borrowernumber; >+ }; >+ >+ if ( $data ) { >+ $self->verify_patron_data($patron, $data); >+ } >+} >+ >+=head3 after_patron_modify >+ >+Appele l'endpoint correspondant de l'api pour la mise à jour d'un >+utilisateur. >+ >+TODO réessayer avec get_uid_from_email si le uid existe, mais est invalide. >+ >+=cut >+ >+sub after_patron_modify { >+ my ( $self, $patron ) = @_; >+ >+ my ($client, undef) = $self->retrieve_token(); >+ >+ my $attribute = $self->retrieve_data('attribute'); >+ my $patron_attribute = $patron->extended_attributes->search({ code => $attribute })->single; >+ my $uid = trim($patron_attribute->attribute) if ( $patron_attribute ); >+ >+ unless ( $uid ) { >+ my $auto_uid = $self->retrieve_data('auto_uid') // 1; >+ if ( $auto_uid ) { >+ $uid = $self->get_uid_from_email({ client => $client, email => $patron->email }); >+ >+ if ( $uid ) { >+ $patron_attribute->delete if ( $patron_attribute ); >+ $patron->add_extended_attribute( >+ { >+ code => $attribute, >+ attribute => $uid, >+ } >+ ); >+ } >+ } >+ } >+ >+ return unless ( $uid ); >+ >+ my $params = $self->prepare_parameters($patron); >+ my $json = encode_json($params); >+ >+ $client->PATCH("api/v1/users/$uid", $json, { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }); >+ my $response_content = $client->responseContent(); >+ >+ my $data; >+ try { >+ my $response = decode_json($response_content); >+ if ( $response->{status} eq "success" ) { >+ $data = $response->{data}; >+ } else { >+ warn "[Koha::Plugin::Pando] Updating user error: \"" . $response->{message} . "\"."; >+ } >+ } catch { >+ warn "[Koha::Plugin::Pando] Updating user failed for borrowernumber " . $patron->borrowernumber; >+ }; >+ >+ if ( $data ) { >+ $self->verify_patron_data($patron, $data); >+ } >+} >+ >+=head3 prepare_parameters >+ >+Prépare un objet contenant les valeurs d'un Koha::Patron en utilisant >+les clés correspondantes pour l'api. >+Utilise $PANDO_BORROWER_MAPPING. >+ >+=cut >+ >+sub prepare_parameters { >+ my ( $self, $patron ) = @_; >+ >+ my $params = {}; >+ >+ foreach my $key ( keys %{$PANDO_BORROWER_MAPPING} ) { >+ my $field = $PANDO_BORROWER_MAPPING->{$key}; >+ my $value = $patron->${field} if ( $patron ) ; >+ $params->{$key} = $value if ( defined $value ); >+ } >+ >+ return $params; >+} >+ >+=head3 verify_patron_data >+ >+Vérifie que les valeurs retournées par l'api après la sauvegarde >+correspondent à celles de Koha. Sinon, met à jour le borrower dans Koha >+pour que les deux systèmes soient correctement synchronisés. >+ >+Note: Cette routine utilise des requêtes sql pour modifier les données >+directement dans la base de données : On veut éviter d'utiliser >+Koha::Patron->store qui relancerait le hook after_patron_action. >+ >+=cut >+ >+sub verify_patron_data { >+ my ($self, $patron, $data) = @_; >+ >+ # uid >+ my $auto_uid = $self->retrieve_data('auto_uid') // 1; >+ if ( $auto_uid ) { >+ my $attribute = $self->retrieve_data('attribute'); >+ >+ if ( $attribute && $data->{uid} ) { >+ $patron->extended_attributes->search({ code => $attribute })->single->delete; >+ $patron->add_extended_attribute( >+ { >+ code => $attribute, >+ attribute => $data->{uid}, >+ } >+ ); >+ } >+ } >+ >+ # Compare les données reçues en réponse et celles de Koha >+ my @keys; >+ my @values; >+ foreach my $key ( keys %{$PANDO_BORROWER_MAPPING} ) { >+ my $field = $PANDO_BORROWER_MAPPING->{$key}; >+ my $value = $data->{$key}; >+ >+ next unless ( $field && $value ); >+ >+ unless ( $patron->${field} eq $value ) { >+ push @keys, $field; >+ push @values, $value; >+ } >+ } >+ >+ if ( scalar @keys ) { >+ my $dbh = C4::Context->dbh; >+ my $sth = $dbh->prepare("UPDATE borrowers SET " . (join ", ", map { "$_ = ?" } @keys) . " WHERE borrowernumber = ?"); >+ $sth->execute(@values, $patron->borrowernumber); >+ } >+} >+ >+=head3 test_config >+ >+Teste la connexion à l'api pour les valeurs de base_url, client_id >+et client_secret fournies. >+ >+Imprime un document JSON pour réponse; à appeler par Ajax. >+ >+=cut >+ >+sub test_config { >+ my ( $self ) = @_; >+ >+ my $cgi = $self->{'cgi'}; >+ my $base_url = $cgi->param('base_url'); >+ my $client_id = $cgi->param('client_id'); >+ my $client_secret = $cgi->param('client_secret'); >+ >+ my $success = 0; >+ my $result = {}; >+ >+ my $client = REST::Client->new(host => $base_url); >+ $client->GET("api/v1/isalive"); >+ my $response_content = $client->responseContent(); >+ >+ try { >+ my $response = decode_json($response_content); >+ if ( $response->{status} eq "success" ) { >+ $success = $response->{data}->{isalive} >+ } else { >+ $result->{error_base_url} = 1; >+ } >+ } catch { >+ $result->{error_base_url} = 1; >+ }; >+ >+ if ( $success ) { >+ my (undef, $token) = $self->retrieve_token({ client => $client, client_id => $client_id, client_secret => $client_secret}); >+ unless ( $token ) { >+ $success = 0; >+ $result->{error_credentials} = 1; >+ } >+ } >+ >+ $result->{success} = $success; >+ >+ print $cgi->header( -type => 'application/json', -charset => 'utf-8' ); >+ print encode_json($result); >+ exit 0; >+} >+ >+=head3 retrieve_token >+ >+my ($client, $token) = retrieve_token(); >+ >+Récupère et retourne le token de connexion. >+Retourne aussi un REST::Client ayant le host et le token configurés. >+ >+=cut >+ >+sub retrieve_token () { >+ my ( $self, $params ) = @_; >+ >+ my $client = $params->{client}; >+ my $client_id = $params->{client_id} // $self->retrieve_data('client_id'); >+ my $client_secret = $params->{client_secret} // $self->retrieve_data('client_secret'); >+ >+ my $token = undef; >+ >+ unless ( $client ) { >+ my $base_url = $params->{base_url} // $self->retrieve_data('base_url'); >+ $client = REST::Client->new(host => $base_url); >+ } >+ >+ $client->GET("api/v1/auth/access_token", {"Access-Token" => "$client_id|$client_secret"}); >+ my $response_content = $client->responseContent(); >+ >+ try { >+ my $response = decode_json($response_content); >+ $token = $response->{data}->{token} if ( $response->{status} eq "success" ); >+ }; >+ >+ $client->addHeader( "Authorization", "Bearer $token" ) if ( $token ); >+ >+ return ( $client, $token ); >+} >+ >+=head3 get_uid_from_email >+ >+Récupère le uid à partir de la liste de tous les utilisateurs. >+ >+=cut >+ >+sub get_uid_from_email { >+ my ( $self, $params ) = @_; >+ >+ my $email = $params->{email}; >+ my $client = $params->{client}; >+ >+ my $uid = undef; >+ >+ unless ( $client ) { >+ ($client, undef) = $self->retrieve_token(); >+ } >+ >+ $client->GET("api/v1/users"); >+ my $response_content = $client->responseContent(); >+ >+ try { >+ my $response = decode_json($response_content); >+ if ( $response->{status} eq "success" ) { >+ foreach my $user ( @{$response->{data}} ) { >+ if ( $user->{email} eq $email ) { >+ $uid = $user->{uid}; >+ last; >+ } >+ } >+ } >+ }; >+ >+ return $uid; >+} >+ >+=head3 patron_attributes_delete_filter >+ >+Filtre les attributs utilisateurs lors de leur suppression. >+ >+On veut ici empêcher de supprimer l'attribut choisi pour contenir le >+uid. Raison : memberentry.pl met à jour les attributs en les supprimant >+puis les recréant, APRÃS la mise à jour de l'utilisateur. Ce qui >+implique que si l'on touche à la valeur du uid dans ce plugin, ça sera >+écrasé par la valeur contenu dans le formulaire. >+ >+Appelé par Koha::Patron::Attributes->delete. >+ >+Note : l'attribut utilisateur ne pourra donc jamais être supprimé via >+memberentry.pl (plus précisement, tout appel à Koha::Patron::Attributes->delete) >+tant que ce plugin est actif/cet attribut est configuré. >+ >+=cut >+ >+sub patron_attributes_delete_filter { >+ my ( $self, $params ) = @_; >+ >+ my $auto_uid = $self->retrieve_data('auto_uid') // 1; >+ return unless ( $auto_uid ); >+ >+ my $attribute = $self->retrieve_data('attribute'); >+ return unless ( $attribute ); >+ >+ my $attributes = $params->{attributes}; >+ return $attributes->search({ -not => { "me.code" => $attribute } }); >+} >+ >+=head3 intranet_js >+ >+Ajoute du javascript à l'intranet. Retire le champ pour le uid si >+auto_uid est à vrai. >+ >+=cut >+ >+sub intranet_js { >+ my ( $self, $args ) = @_; >+ >+ my $auto_uid = $self->retrieve_data('auto_uid') // 1; >+ return unless ( $auto_uid ); >+ >+ my $attribute = $self->retrieve_data('attribute'); >+ return unless ( $attribute ); >+ >+ return "<script>\$(document).ready(function() {\$(\"#memberentry_patron_attributes input[type='hidden'][value='$attribute']\").parent().remove();});</script>"; >+} >+ >+=head3 retrieve_template >+ >+Retourne le template pour le nom fourni selon la langue. >+ >+=cut >+ >+sub retrieve_template { >+ my ( $self, $params ) = @_; >+ >+ my $name = $params->{name} // "configure"; >+ >+ # Le template dépend du cookie, celui par défault est anglais >+ my $preferedLanguage = $self->{"cgi"}->cookie("KohaOpacLanguage") || ""; >+ my $template = undef; >+ >+ eval {$template = $self->get_template( { file => $name . "_$preferedLanguage.tt" } )}; >+ unless ( $template ) { >+ $preferedLanguage = substr $preferedLanguage, 0, 2; >+ eval {$template = $self->get_template( { file => $name . "_$preferedLanguage.tt" } )}; >+ } >+ $template = $self->get_template( { file => "$name.tt" } ) unless ( $template ); >+ >+ return $template; >+} >+ >+=head3 install >+ >+Installe le plugin. >+ >+=cut >+ >+sub install { >+ my ( $self, $params ) = @_; >+ return 1; >+} >+ >+=head3 uninstall >+ >+Supprime le plugin. >+ >+=cut >+ >+sub uninstall { >+ my ( $self, $params ) = @_; >+ return 1; >+} >+ >+1; >diff --git a/inlibro-plugins/Pando/configure.tt b/inlibro-plugins/Pando/configure.tt >new file mode 100644 >index 0000000000..22b4cfab66 >--- /dev/null >+++ b/inlibro-plugins/Pando/configure.tt >@@ -0,0 +1,281 @@ >+[% USE raw %] >+[% USE Asset %] >+[% SET footerjs = 1 %] >+[% INCLUDE 'doc-head-open.inc' %] >+ <title>Koha › Pando Plugin › Configuration</title> >+ [% INCLUDE 'doc-head-close.inc' %] >+ [% Asset.css("lib/jquery/plugins/multiple-select/multiple-select.css") | $raw %] >+ >+ <style> >+ .main { >+ margin: 25px; >+ } >+ >+ form > .action { >+ padding-top: 25px; >+ } >+ >+ .main select { >+ min-width: 150px; >+ } >+ >+ .ms-parent .ms-drop li { >+ padding: 0; >+ } >+ >+ .ms-parent .ms-drop label { >+ text-align: left; >+ } >+ >+ small span.default { >+ font-weight: normal; >+ font-style: italic; >+ } >+ >+ /* test config */ >+ >+ /* reproduire "fieldset.rows label" de staff-global */ >+ fieldset.rows .action .test-state { >+ padding-top: 4px; >+ float: left; >+ width: 9em; >+ margin-left: 0; >+ } >+ >+ /* reproduire "fieldset.rows label.error" de staff-global */ >+ fieldset.rows li .test-state { >+ float: none; >+ margin-left: 1em; >+ width: auto; >+ } >+ >+ .test-state > * { >+ display: none; >+ max-width: 12px; >+ } >+ >+ .test-state.success .success { >+ display: inline-block; >+ } >+ >+ .test-state.error .error { >+ display: inline-block; >+ } >+ >+ .test-state.warn .warn { >+ display: inline-block; >+ } >+ >+ .test-state.wait .wait { >+ display: inline-block; >+ } >+ >+ /* inlibro-header */ >+ >+ #inlibro-header { >+ width: 450px; >+ margin-bottom: 25px; >+ color: #696969; >+ font-size: 14px; >+ } >+ >+ #inlibro-header p:first-child { >+ text-align: left; >+ } >+ >+ #inlibro-header p:last-child { >+ text-align: right; >+ } >+ </style> >+</head> >+ >+<body> >+[% INCLUDE 'header.inc' %] >+[% INCLUDE 'cat-search.inc' %] >+ >+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/plugins/plugins-home.pl">Plugins</a> › Pando › Configuration</div> >+ >+<div class="main container-fluid"> >+ <div class="row"> >+ <div class="col-md-10"> >+ >+ <div id="inlibro-header"> >+ <p>This plugin created by</p> >+ <img width="450" src="[% PLUGIN_PATH | url %]/images/inLibro_en.svg" alt="inLibro" /> >+ <p>Visit our <a href="https://inlibro.com/en/">website</a> for more Koha plugins</p> >+ </div> >+ >+ <h3>Configuration of Pando integration</h3> >+ >+ <form method="get"> >+ [%# mandatory parameters %] >+ <input type="hidden" name="class" value="[% CLASS | html %]" /> >+ <input type="hidden" name="method" value="[% METHOD | html %]" /> >+ [%# end mandatory %] >+ <input type="hidden" name="action" value="configure" /> >+ >+ <fieldset id="api-config" class="rows"> >+ <legend>API settings</legend> >+ <ol> >+ <li id="base-url"> >+ <label for="base_url">Base url</label> >+ <input id="base_url" type="text" name="base_url" value="[% base_url | html %]" size="45" /> >+ <label for="base_url" class="test-state"> >+ <i class="fa fa-check success" aria-hidden="true" title="Success"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Error"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." /> >+ </label> >+ </li> >+ <li id="client-id"> >+ <label for="client_id">Client ID</label> >+ <input id="client_id" type="text" name="client_id" value="[% client_id | html %]" size="45" /> >+ <label for="client_id" class="test-state credentials"> >+ <i class="fa fa-check success" aria-hidden="true" title="Success"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Error"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." /> >+ </label> >+ </li> >+ <li id="client-secret"> >+ <label for="client_secret">Client Secret</label> >+ <input id="client_secret" type="text" name="client_secret" value="[% client_secret | html %]" size="45" /> >+ <label for="client_secret" class="test-state credentials"> >+ <i class="fa fa-check success" aria-hidden="true" title="Success"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Error"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." /> >+ </label> >+ </li> >+ </ol> >+ >+ <div class="action"> >+ <label for="test-config" class="test-state [% test_config | html %]"> >+ <i class="fa fa-check success" aria-hidden="true" title="Success"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Error"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." /> >+ </label> >+ <button id="test-config" type="button">Test configuration </button> >+ <input type="hidden" name="test_config" value="[% test_config | html %]" /> >+ </div> >+ </fieldset> >+ >+ <fieldset class="rows"> >+ <legend>Patrons</legend> >+ <ol> >+ <li> >+ <label for="categories">Categories</label> >+ <select id="categories" name="categories" multiple="multiple"> >+ [% FOREACH category IN categories %] >+ [% IF selected_categories.grep("^$category.categorycode\$").size %] >+ <option value="[% category.categorycode | html %]" selected="selected">[% category.description | html %]</option> >+ [% ELSE %] >+ <option value="[% category.categorycode | html %]">[% category.description | html %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ <small>Only these categories' patrons will be synchronised.</small> >+ </li> >+ <li> >+ <label for="attribute">Patron attribute</label> >+ <select id="attribute" name="attribute"> >+ [% FOREACH attribute IN attributes %] >+ [% IF selected_attribute == attribute %] >+ <option value="[% attribute.code | html %]" selected="selected">[% attribute.description | html %]</option> >+ [% ELSE %] >+ <option value="[% attribute.code | html %]">[% attribute.description | html %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ <small>Patron attribute where is stored the unique identifier (uid) used by Pando.</small> >+ </li> >+ <li> >+ <label for="auto_uid">Automatic uid</label> >+ [% IF auto_uid == 0 %] >+ <input type="checkbox" id="auto_uid" name="auto_uid" /> >+ [% ELSE %] >+ <input type="checkbox" id="auto_uid" name="auto_uid" checked="checked" /> >+ [% END %] >+ <small>When checked, the plugin automatically takes care of getting and updating Pando's uid in Koha. <strong>Note:</strong> The attribute's value can't be manually changed in the interface. <span class="default">Default: true</span></small> >+ </li> >+ </ol> >+ </fieldset> >+ >+ <div class="action"> >+ <input type="submit" value="Save configuration" /> >+ </div> >+ </form> >+ </div> >+ </div> >+[%# last div closed by intranet-bottom.inc %] >+ >+[% MACRO jsinclude BLOCK %] >+ [% Asset.js("lib/jquery/plugins/multiple-select/jquery.multiple.select.js") | $raw %] >+ >+ <script> >+ $(document).ready(function() { >+ var MS_PLACEHOLDER = _("Please select ..."); >+ var MS_SELECT_ALL = _("Select all"); >+ var MS_ALL_SELECTED = _("All selected"); >+ var MS_COUNT = _("# of % selected"); >+ var MS_NO_MATCHES = _("No matches found"); >+ >+ $("select[multiple='multiple']").multipleSelect( { >+ placeholder: MS_PLACEHOLDER, >+ selectAllText: MS_SELECT_ALL, >+ allSelected: MS_ALL_SELECTED, >+ countSelected: MS_COUNT, >+ noMatchesFound: MS_NO_MATCHES, >+ position: "top" // la page est trop courte et la liste des catégories trop longue >+ } ); >+ >+ $("#api-config input[type='text']").on("change", function () { >+ $("input[name='test_config']").val(""); >+ >+ var nodes = $(this).parent().find(".test-state"); >+ if (nodes.hasClass("credentials")) { >+ nodes = nodes.add(".test-state.credentials"); >+ } >+ nodes = nodes.add(".action .test-state"); >+ >+ nodes.each(function () { >+ var object = $(this); >+ if (!object.hasClass("warn")) { >+ object.removeClass("success error").addClass("warn"); >+ } >+ }); >+ }); >+ >+ $("button#test-config").on('click', function () { >+ $(".test-state").removeClass("success error warn").addClass("wait"); >+ >+ var params = { >+ class : "Koha::Plugin::Pando", >+ method : "test_config", >+ base_url : $("input[name='base_url']").val(), >+ client_id : $("input[name='client_id']").val(), >+ client_secret : $("input[name='client_secret']").val() >+ }; >+ >+ $.getJSON("run.pl", params, >+ function(data) { >+ $(".test-state").removeClass("wait"); >+ if (data.success) { >+ $("input[name='test_config']").val("success"); >+ $(".test-state").removeClass("error warn").addClass("success"); >+ } else { >+ $("input[name='test_config']").val('error'); >+ $(".test-state").removeClass("success warn").addClass("error"); >+ if (data.error_credentials) { >+ $("#base-url .test-state").removeClass("error warn").addClass("success"); >+ } >+ } >+ } >+ ); >+ }); >+ }); >+ </script> >+[% END %] >+ >+[% INCLUDE 'intranet-bottom.inc' %] >diff --git a/inlibro-plugins/Pando/configure_fr-CA.tt b/inlibro-plugins/Pando/configure_fr-CA.tt >new file mode 100644 >index 0000000000..9d0459df30 >--- /dev/null >+++ b/inlibro-plugins/Pando/configure_fr-CA.tt >@@ -0,0 +1,281 @@ >+[% USE raw %] >+[% USE Asset %] >+[% SET footerjs = 1 %] >+[% INCLUDE 'doc-head-open.inc' %] >+ <title>Koha › Plugin Pando › Configuration</title> >+ [% INCLUDE 'doc-head-close.inc' %] >+ [% Asset.css("lib/jquery/plugins/multiple-select/multiple-select.css") | $raw %] >+ >+ <style> >+ .main { >+ margin: 25px; >+ } >+ >+ form > .action { >+ padding-top: 25px; >+ } >+ >+ .main select { >+ min-width: 150px; >+ } >+ >+ .ms-parent .ms-drop li { >+ padding: 0; >+ } >+ >+ .ms-parent .ms-drop label { >+ text-align: left; >+ } >+ >+ small span.default { >+ font-weight: normal; >+ font-style: italic; >+ } >+ >+ /* test config */ >+ >+ /* reproduire "fieldset.rows label" de staff-global */ >+ fieldset.rows .action .test-state { >+ padding-top: 4px; >+ float: left; >+ width: 9em; >+ margin-left: 0; >+ } >+ >+ /* reproduire "fieldset.rows label.error" de staff-global */ >+ fieldset.rows li .test-state { >+ float: none; >+ margin-left: 1em; >+ width: auto; >+ } >+ >+ .test-state > * { >+ display: none; >+ max-width: 12px; >+ } >+ >+ .test-state.success .success { >+ display: inline-block; >+ } >+ >+ .test-state.error .error { >+ display: inline-block; >+ } >+ >+ .test-state.warn .warn { >+ display: inline-block; >+ } >+ >+ .test-state.wait .wait { >+ display: inline-block; >+ } >+ >+ /* inlibro-header */ >+ >+ #inlibro-header { >+ width: 450px; >+ margin-bottom: 25px; >+ color: #696969; >+ font-size: 14px; >+ } >+ >+ #inlibro-header p:first-child { >+ text-align: left; >+ } >+ >+ #inlibro-header p:last-child { >+ text-align: right; >+ } >+ </style> >+</head> >+ >+<body> >+[% INCLUDE 'header.inc' %] >+[% INCLUDE 'cat-search.inc' %] >+ >+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Accueil</a> › <a href="/cgi-bin/koha/plugins/plugins-home.pl">Plugins</a> › Pando › Configuration</div> >+ >+<div class="main container-fluid"> >+ <div class="row"> >+ <div class="col-md-10"> >+ >+ <div id="inlibro-header"> >+ <p>Cette extension a été créée par</p> >+ <img width="450" src="[% PLUGIN_PATH | url %]/images/inLibro_fr.svg" alt="inLibro" /> >+ <p>Visitez notre <a href="https://inlibro.com">site web</a> pour d'autres extension Koha</p> >+ </div> >+ >+ <h3>Configuration de l'intégration Pando</h3> >+ >+ <form method="get"> >+ [%# mandatory parameters %] >+ <input type="hidden" name="class" value="[% CLASS | html %]" /> >+ <input type="hidden" name="method" value="[% METHOD | html %]" /> >+ [%# end mandatory %] >+ <input type="hidden" name="action" value="configure" /> >+ >+ <fieldset id="api-config" class="rows"> >+ <legend>Paramètres de l'API</legend> >+ <ol> >+ <li id="base-url"> >+ <label for="base_url">Url de base</label> >+ <input id="base_url" type="text" name="base_url" value="[% base_url | html %]" size="45" /> >+ <label for="base_url" class="test-state"> >+ <i class="fa fa-check success" aria-hidden="true" title="Succès"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." /> >+ </label> >+ </li> >+ <li id="client-id"> >+ <label for="client_id">Client ID</label> >+ <input id="client_id" type="text" name="client_id" value="[% client_id | html %]" size="45" /> >+ <label for="client_id" class="test-state credentials"> >+ <i class="fa fa-check success" aria-hidden="true" title="Succès"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." /> >+ </label> >+ </li> >+ <li id="client-secret"> >+ <label for="client_secret">Client Secret</label> >+ <input id="client_secret" type="text" name="client_secret" value="[% client_secret | html %]" size="45" /> >+ <label for="client_secret" class="test-state credentials"> >+ <i class="fa fa-check success" aria-hidden="true" title="Succès"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." /> >+ </label> >+ </li> >+ </ol> >+ >+ <div class="action"> >+ <label for="test-config" class="test-state [% test_config | html %]"> >+ <i class="fa fa-check success" aria-hidden="true" title="Succès"></i> >+ <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i> >+ <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i> >+ <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." /> >+ </label> >+ <button id="test-config" type="button">Tester la configuration </button> >+ <input type="hidden" name="test_config" value="[% test_config | html %]" /> >+ </div> >+ </fieldset> >+ >+ <fieldset class="rows"> >+ <legend>Utilisateurs</legend> >+ <ol> >+ <li> >+ <label for="categories">Catégories</label> >+ <select id="categories" name="categories" multiple="multiple"> >+ [% FOREACH category IN categories %] >+ [% IF selected_categories.grep("^$category.categorycode\$").size %] >+ <option value="[% category.categorycode | html %]" selected="selected">[% category.description | html %]</option> >+ [% ELSE %] >+ <option value="[% category.categorycode | html %]">[% category.description | html %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ <small>Seulement les utilisateurs de ces catégories seront synchronisés.</small> >+ </li> >+ <li> >+ <label for="attribute">Attribut utilisateur</label> >+ <select id="attribute" name="attribute"> >+ [% FOREACH attribute IN attributes %] >+ [% IF selected_attribute == attribute %] >+ <option value="[% attribute.code | html %]" selected="selected">[% attribute.description | html %]</option> >+ [% ELSE %] >+ <option value="[% attribute.code | html %]">[% attribute.description | html %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ <small>L'attribut utilisateur contenant l'identifiant unique (uid) utilisé par Pando.</small> >+ </li> >+ <li> >+ <label for="auto_uid">uid automatique</label> >+ [% IF auto_uid == 0 %] >+ <input type="checkbox" id="auto_uid" name="auto_uid" /> >+ [% ELSE %] >+ <input type="checkbox" id="auto_uid" name="auto_uid" checked="checked" /> >+ [% END %] >+ <small>Lorsque coché, l'extension se chargera automatiquement de récupérer et mettre à jour l'uid de Pando dans Koha. <strong>Note :</strong> La valeur de l'attribut utilisateur ne pourra pas être changé manuellement dans l'interface. <span class="default">Valeur par défaut : vrai</span></small> >+ </li> >+ </ol> >+ </fieldset> >+ >+ <div class="action"> >+ <input type="submit" value="Enregistrer la configuration" /> >+ </div> >+ </form> >+ </div> >+ </div> >+[%# last div closed by intranet-bottom.inc %] >+ >+[% MACRO jsinclude BLOCK %] >+ [% Asset.js("lib/jquery/plugins/multiple-select/jquery.multiple.select.js") | $raw %] >+ >+ <script> >+ $(document).ready(function() { >+ var MS_PLACEHOLDER = _("Merci de sélectionner ..."); >+ var MS_SELECT_ALL = _("Tout sélectionner"); >+ var MS_ALL_SELECTED = _("Tous"); >+ var MS_COUNT = _("# de % selectionné(e)s"); >+ var MS_NO_MATCHES = _("Aucune correspondances trouvées"); >+ >+ $("select[multiple='multiple']").multipleSelect( { >+ placeholder: MS_PLACEHOLDER, >+ selectAllText: MS_SELECT_ALL, >+ allSelected: MS_ALL_SELECTED, >+ countSelected: MS_COUNT, >+ noMatchesFound: MS_NO_MATCHES, >+ position: "top" // la page est trop courte et la liste des catégories trop longue >+ } ); >+ >+ $("#api-config input[type='text']").on("change", function () { >+ $("input[name='test_config']").val(""); >+ >+ var nodes = $(this).parent().find(".test-state"); >+ if (nodes.hasClass("credentials")) { >+ nodes = nodes.add(".test-state.credentials"); >+ } >+ nodes = nodes.add(".action .test-state"); >+ >+ nodes.each(function () { >+ var object = $(this); >+ if (!object.hasClass("warn")) { >+ object.removeClass("success error").addClass("warn"); >+ } >+ }); >+ }); >+ >+ $("button#test-config").on('click', function () { >+ $(".test-state").removeClass("success error warn").addClass("wait"); >+ >+ var params = { >+ class : "Koha::Plugin::Pando", >+ method : "test_config", >+ base_url : $("input[name='base_url']").val(), >+ client_id : $("input[name='client_id']").val(), >+ client_secret : $("input[name='client_secret']").val() >+ }; >+ >+ $.getJSON("run.pl", params, >+ function(data) { >+ $(".test-state").removeClass("wait"); >+ if (data.success) { >+ $("input[name='test_config']").val("success"); >+ $(".test-state").removeClass("error warn").addClass("success"); >+ } else { >+ $("input[name='test_config']").val('error'); >+ $(".test-state").removeClass("success warn").addClass("error"); >+ if (data.error_credentials) { >+ $("#base-url .test-state").removeClass("error warn").addClass("success"); >+ } >+ } >+ } >+ ); >+ }); >+ }); >+ </script> >+[% END %] >+ >+[% INCLUDE 'intranet-bottom.inc' %] >diff --git a/inlibro-plugins/Pando/images/inLibro_en.svg b/inlibro-plugins/Pando/images/inLibro_en.svg >new file mode 100644 >index 0000000000..3072fbfa88 >--- /dev/null >+++ b/inlibro-plugins/Pando/images/inLibro_en.svg >@@ -0,0 +1,202 @@ >+<?xml version="1.0" encoding="UTF-8" standalone="no"?> >+<!-- Created with Inkscape (http://www.inkscape.org/) --> >+ >+<svg >+ xmlns:dc="http://purl.org/dc/elements/1.1/" >+ xmlns:cc="http://creativecommons.org/ns#" >+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >+ xmlns:svg="http://www.w3.org/2000/svg" >+ xmlns="http://www.w3.org/2000/svg" >+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" >+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" >+ width="332.76749" >+ height="69.510628" >+ id="svg4252" >+ version="1.1" >+ inkscape:version="0.91 r13725" >+ sodipodi:docname="inLibro_en.svg"> >+ <defs >+ id="defs4254"> >+ <clipPath >+ clipPathUnits="userSpaceOnUse" >+ id="clipPath30"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,792 612,792 612,0 0,0 0,792 z" >+ id="path32" /> >+ </clipPath> >+ </defs> >+ <sodipodi:namedview >+ id="base" >+ pagecolor="#ffffff" >+ bordercolor="#666666" >+ borderopacity="1.0" >+ inkscape:pageopacity="0.0" >+ inkscape:pageshadow="2" >+ inkscape:zoom="2" >+ inkscape:cx="297.83017" >+ inkscape:cy="44.728359" >+ inkscape:document-units="px" >+ inkscape:current-layer="g28" >+ showgrid="false" >+ fit-margin-top="1" >+ fit-margin-right="1" >+ fit-margin-bottom="1" >+ fit-margin-left="1" >+ inkscape:window-width="1867" >+ inkscape:window-height="1056" >+ inkscape:window-x="53" >+ inkscape:window-y="24" >+ inkscape:window-maximized="1" >+ showguides="true" >+ inkscape:guide-bbox="true"> >+ <sodipodi:guide >+ position="331.5,-24.5" >+ orientation="1,0" >+ id="guide3436" /> >+ </sodipodi:namedview> >+ <metadata >+ id="metadata4257"> >+ <rdf:RDF> >+ <cc:Work >+ rdf:about=""> >+ <dc:format>image/svg+xml</dc:format> >+ <dc:type >+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> >+ <dc:title></dc:title> >+ </cc:Work> >+ </rdf:RDF> >+ </metadata> >+ <g >+ inkscape:label="Layer 1" >+ inkscape:groupmode="layer" >+ id="layer1" >+ transform="translate(-208.61625,-497.60688)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 252.76875,520.9465 -43.1525,0 0,-4.17875 43.1525,0 0,4.17875 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path12" /> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 252.76875,503.549 -43.1525,0 0,-4.18 43.1525,0 0,4.18 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path14" /> >+ <g >+ id="g16" >+ transform="matrix(1.25,0,0,-1.25,252.76875,529.28062)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 -34.522,0 -34.521,3.342 0,3.342 0,0 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path18" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 258.3175,512.199 -43.15125,0 0,-4.17875 43.15125,0 0,4.17875 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path20" /> >+ <g >+ id="g22" >+ transform="matrix(1.25,0,0,-1.25,252.76875,537.79325)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 -34.522,0 -34.521,3.344 0,3.344 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path24" /> >+ </g> >+ <g >+ transform="matrix(1.25,0,0,-1.25,164.645,1373.074)" >+ id="g26"> >+ <g >+ id="g28" >+ clip-path="url(#clipPath30)"> >+ <g >+ id="g34" >+ transform="translate(92.8828,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.666,0 1,-0.334 1,-1 l 0,-29.87 c 0,-0.67 -0.334,-1.004 -1,-1.004 l -4.92,0 c -0.697,0 -1.046,0.334 -1.046,1.004 l 0,29.87 c 0,0.666 0.349,1 1.046,1 L 0,0 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path36" /> >+ </g> >+ <g >+ id="g38" >+ transform="translate(108.0449,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.73,0 1.337,-0.029 1.822,-0.09 2.306,-0.151 2.73,-0.281 3.096,-0.478 3.463,-0.675 3.811,-0.948 4.144,-1.298 4.478,-1.646 4.855,-2.11 5.28,-2.685 l 16.943,-22.221 c 0.12,-0.215 0.318,-0.319 0.589,-0.319 l 0.412,0 c 0.241,0 0.363,0.15 0.363,0.454 l 0,23.771 c 0,0.666 0.334,1 1.003,1 l 4.778,0 c 0.67,0 1.004,-0.334 1.004,-1 l 0,-26.138 c 0,-1.851 -0.334,-3.106 -1.004,-3.757 -0.666,-0.653 -1.698,-0.979 -3.093,-0.979 l -3.919,0 c -0.697,0 -1.28,0.029 -1.752,0.091 -0.469,0.06 -0.885,0.181 -1.252,0.364 -0.365,0.18 -0.72,0.447 -1.07,0.798 -0.349,0.348 -0.753,0.826 -1.207,1.433 L 0.089,-6.967 c -0.181,0.212 -0.378,0.32 -0.59,0.32 l -0.41,0 c -0.243,0 -0.365,-0.154 -0.365,-0.456 l 0,-23.767 c 0,-0.67 -0.334,-1.004 -1.001,-1.004 l -4.781,0 c -0.698,0 -1.047,0.334 -1.047,1.004 l 0,26.136 c 0,1.851 0.334,3.104 1.001,3.755 C -6.437,-0.327 -5.405,0 -4.007,0 L 0,0 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path40" /> >+ </g> >+ <g >+ id="g42" >+ transform="translate(150.3467,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.667,0 1.004,-0.334 1.004,-1 l 0,-18.169 c 0,-1.217 0.095,-2.225 0.294,-3.027 0.197,-0.807 0.525,-1.445 0.98,-1.914 0.452,-0.472 1.068,-0.806 1.843,-1.003 0.775,-0.198 1.753,-0.295 2.94,-0.295 l 12.413,0 c 0.668,0 1.004,-0.335 1.004,-1.004 l 0,-4.458 c 0,-0.67 -0.336,-1.004 -1.004,-1.004 l -12.689,0 c -2.308,0 -4.264,0.212 -5.873,0.635 -1.612,0.427 -2.923,1.118 -3.939,2.073 -1.019,0.958 -1.762,2.201 -2.231,3.734 -0.472,1.532 -0.708,3.393 -0.708,5.579 l 0,18.853 c 0,0.666 0.35,1 1.049,1 L 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path44" /> >+ </g> >+ <g >+ id="g46" >+ transform="translate(180.8867,688.8726)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.667,0 1,-0.335 1,-1.002 l 0,-19.269 c 0,-0.669 -0.333,-1.003 -1,-1.003 l -4.92,0 c -0.698,0 -1.046,0.334 -1.046,1.003 l 0,19.269 C -5.966,-0.335 -5.618,0 -4.92,0 L 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path48" /> >+ </g> >+ <g >+ id="g50" >+ transform="translate(180.8867,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.667,0 1,-0.334 1,-1 L 1,-6.426 C 1,-7.094 0.667,-7.429 0,-7.429 l -4.92,0 c -0.698,0 -1.046,0.335 -1.046,1.003 l 0,5.426 c 0,0.666 0.348,1 1.046,1 L 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path52" /> >+ </g> >+ <g >+ id="g54" >+ transform="translate(195.4004,680.7705)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 0,-5.808 c 0,-0.393 0.195,-0.591 0.593,-0.591 l 16.714,0 c 1.214,0 2.077,0.22 2.594,0.659 0.517,0.44 0.776,1.145 0.776,2.117 l 0,0.753 c 0,0.94 -0.281,1.655 -0.846,2.141 C 19.272,-0.243 18.232,0 16.714,0 L 0,0 z m 0,4.962 16.714,0 c 1.518,0 2.55,0.227 3.097,0.683 0.543,0.457 0.82,1.124 0.82,2.004 l 0,2.037 c 0,0.942 -0.268,1.632 -0.8,2.072 -0.528,0.439 -1.385,0.661 -2.571,0.661 l -16.667,0 C 0.195,12.419 0,12.221 0,11.827 L 0,4.962 z m 18.672,13.74 c 3.125,0 5.35,-0.623 6.671,-1.867 1.321,-1.243 1.98,-3.125 1.98,-5.646 l 0,-2.672 c 0,-2.553 -0.972,-4.481 -2.913,-5.786 2.095,-1.213 3.144,-3.171 3.144,-5.874 l 0,-1.662 c 0,-1.217 -0.14,-2.308 -0.413,-3.279 -0.274,-0.973 -0.721,-1.8 -1.342,-2.48 -0.625,-0.685 -1.452,-1.208 -2.483,-1.574 -1.034,-0.364 -2.308,-0.547 -3.823,-0.547 l -25.093,0 c -0.911,0 -1.372,0.456 -1.372,1.367 l 0,28.653 c 0,0.911 0.461,1.367 1.372,1.367 l 24.272,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path56" /> >+ </g> >+ <g >+ id="g58" >+ transform="translate(235.2939,685.6587)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 14.507,0 c 1.548,0 2.637,0.334 3.277,1.004 0.635,0.667 0.956,1.194 0.956,2.561 l 0,-0.041 c 0,1.366 -0.321,2.382 -0.956,3.05 -0.64,0.668 -1.729,1.003 -3.277,1.003 l -13.918,0 C 0.195,7.577 0,7.395 0,7.029 L 0,0 z m 15.916,13.813 c 3.489,0 5.993,-0.791 7.515,-2.368 1.517,-1.576 2.274,-3.914 2.274,-7.011 l 0,-1.129 c 0,-2.613 -0.53,-3.7 -1.594,-5.217 -1.062,-1.517 -2.792,-2.489 -5.189,-2.914 l 7.784,-11.608 c 0.153,-0.152 0.2,-0.379 0.141,-0.683 -0.064,-0.302 -0.307,-0.456 -0.73,-0.456 l -5.875,0 c -0.392,0 -0.667,0.046 -0.821,0.137 -0.151,0.093 -0.303,0.243 -0.452,0.457 L 11.773,-5.555 0,-5.555 0,-16.568 c 0,-0.67 -0.338,-1.005 -1.006,-1.005 l -4.918,0 c -0.696,0 -1.046,0.335 -1.046,2.469 l 0,29.019 c 0,-0.558 0.456,-0.102 1.367,-0.102 l 21.519,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path60" /> >+ </g> >+ <g >+ id="g62" >+ transform="translate(272.874,680.1206)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0,-1.184 0.098,-2.18 0.295,-2.982 0.197,-0.806 0.524,-1.443 0.981,-1.914 0.457,-0.469 1.069,-0.802 1.843,-1.001 0.774,-0.199 1.752,-0.297 2.938,-0.297 l 8.636,0 c 1.182,0 2.163,0.098 2.939,0.297 0.773,0.199 1.388,0.532 1.844,1.001 0.454,0.471 0.779,1.108 0.977,1.914 0.196,0.802 0.294,1.798 0.294,2.982 l 0,6.828 c 0,1.186 -0.098,2.18 -0.294,2.984 -0.198,0.806 -0.523,1.442 -0.977,1.914 -0.456,0.468 -1.071,0.804 -1.844,1.002 -0.776,0.195 -1.757,0.295 -2.939,0.295 l -8.636,0 c -1.186,0 -2.164,-0.1 -2.938,-0.295 C 2.345,12.53 1.733,12.194 1.276,11.726 0.819,11.254 0.492,10.618 0.295,9.812 0.098,9.008 0,8.014 0,6.828 L 0,0 z m 14.969,19.352 c 2.303,0 4.268,-0.222 5.894,-0.66 1.622,-0.44 2.945,-1.137 3.962,-2.096 1.017,-0.955 1.753,-2.192 2.21,-3.71 0.454,-1.519 0.682,-3.37 0.682,-5.555 l 0,-7.832 c 0,-2.186 -0.228,-4.047 -0.682,-5.579 -0.457,-1.533 -1.193,-2.777 -2.21,-3.734 -1.017,-0.956 -2.34,-1.647 -3.962,-2.073 -1.626,-0.423 -3.591,-0.635 -5.894,-0.635 l -9.186,0 c -2.308,0 -4.265,0.212 -5.875,0.635 -1.608,0.426 -2.922,1.117 -3.938,2.073 -1.018,0.957 -1.762,2.201 -2.233,3.734 -0.47,1.532 -0.707,3.393 -0.707,5.579 l 0,7.832 c 0,2.185 0.237,4.036 0.707,5.555 0.471,1.518 1.215,2.755 2.233,3.71 1.016,0.959 2.33,1.656 3.938,2.096 1.61,0.438 3.567,0.66 5.875,0.66 l 9.186,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path64" /> >+ </g> >+ <text >+ xml:space="preserve" >+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.4839735px;line-height:125%;font-family:FontAwesome;-inkscape-font-specification:FontAwesome;letter-spacing:0px;word-spacing:0px;fill:#656769;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" >+ x="83.007271" >+ y="-667.33594" >+ id="text3432" >+ sodipodi:linespacing="125%" >+ transform="scale(1.0304989,-0.97040376)"><tspan >+ sodipodi:role="line" >+ id="tspan3434" >+ x="83.007271" >+ y="-667.33594" >+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.35496616px;font-family:'Titillium Web';-inkscape-font-specification:'Titillium Web';fill:#656769">Document technologies specialists</tspan></text> >+ </g> >+ </g> >+ </g> >+</svg> >diff --git a/inlibro-plugins/Pando/images/inLibro_fr.svg b/inlibro-plugins/Pando/images/inLibro_fr.svg >new file mode 100644 >index 0000000000..0186f90402 >--- /dev/null >+++ b/inlibro-plugins/Pando/images/inLibro_fr.svg >@@ -0,0 +1,509 @@ >+<?xml version="1.0" encoding="UTF-8" standalone="no"?> >+<!-- Created with Inkscape (http://www.inkscape.org/) --> >+ >+<svg >+ xmlns:dc="http://purl.org/dc/elements/1.1/" >+ xmlns:cc="http://creativecommons.org/ns#" >+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >+ xmlns:svg="http://www.w3.org/2000/svg" >+ xmlns="http://www.w3.org/2000/svg" >+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" >+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" >+ width="332.76749" >+ height="69.510628" >+ id="svg4252" >+ version="1.1" >+ inkscape:version="0.48.4 r9939" >+ sodipodi:docname="inLibro_fr"> >+ <defs >+ id="defs4254"> >+ <clipPath >+ clipPathUnits="userSpaceOnUse" >+ id="clipPath30"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,792 612,792 612,0 0,0 0,792 z" >+ id="path32" /> >+ </clipPath> >+ </defs> >+ <sodipodi:namedview >+ id="base" >+ pagecolor="#ffffff" >+ bordercolor="#666666" >+ borderopacity="1.0" >+ inkscape:pageopacity="0.0" >+ inkscape:pageshadow="2" >+ inkscape:zoom="1" >+ inkscape:cx="209.6155" >+ inkscape:cy="9.3913126" >+ inkscape:document-units="px" >+ inkscape:current-layer="layer1" >+ showgrid="false" >+ fit-margin-top="1" >+ fit-margin-right="1" >+ fit-margin-bottom="1" >+ fit-margin-left="1" >+ inkscape:window-width="472" >+ inkscape:window-height="363" >+ inkscape:window-x="745" >+ inkscape:window-y="257" >+ inkscape:window-maximized="0" /> >+ <metadata >+ id="metadata4257"> >+ <rdf:RDF> >+ <cc:Work >+ rdf:about=""> >+ <dc:format>image/svg+xml</dc:format> >+ <dc:type >+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> >+ <dc:title></dc:title> >+ </cc:Work> >+ </rdf:RDF> >+ </metadata> >+ <g >+ inkscape:label="Layer 1" >+ inkscape:groupmode="layer" >+ id="layer1" >+ transform="translate(-208.61625,-497.60688)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 252.76875,520.9465 -43.1525,0 0,-4.17875 43.1525,0 0,4.17875 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path12" /> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 252.76875,503.549 -43.1525,0 0,-4.18 43.1525,0 0,4.18 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path14" /> >+ <g >+ id="g16" >+ transform="matrix(1.25,0,0,-1.25,252.76875,529.28062)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 -34.522,0 -34.521,3.342 0,3.342 0,0 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path18" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 258.3175,512.199 -43.15125,0 0,-4.17875 43.15125,0 0,4.17875 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path20" /> >+ <g >+ id="g22" >+ transform="matrix(1.25,0,0,-1.25,252.76875,537.79325)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 -34.522,0 -34.521,3.344 0,3.344 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path24" /> >+ </g> >+ <g >+ transform="matrix(1.25,0,0,-1.25,164.645,1373.074)" >+ id="g26"> >+ <g >+ id="g28" >+ clip-path="url(#clipPath30)"> >+ <g >+ id="g34" >+ transform="translate(92.8828,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.666,0 1,-0.334 1,-1 l 0,-29.87 c 0,-0.67 -0.334,-1.004 -1,-1.004 l -4.92,0 c -0.697,0 -1.046,0.334 -1.046,1.004 l 0,29.87 c 0,0.666 0.349,1 1.046,1 L 0,0 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path36" /> >+ </g> >+ <g >+ id="g38" >+ transform="translate(108.0449,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.73,0 1.337,-0.029 1.822,-0.09 2.306,-0.151 2.73,-0.281 3.096,-0.478 3.463,-0.675 3.811,-0.948 4.144,-1.298 4.478,-1.646 4.855,-2.11 5.28,-2.685 l 16.943,-22.221 c 0.12,-0.215 0.318,-0.319 0.589,-0.319 l 0.412,0 c 0.241,0 0.363,0.15 0.363,0.454 l 0,23.771 c 0,0.666 0.334,1 1.003,1 l 4.778,0 c 0.67,0 1.004,-0.334 1.004,-1 l 0,-26.138 c 0,-1.851 -0.334,-3.106 -1.004,-3.757 -0.666,-0.653 -1.698,-0.979 -3.093,-0.979 l -3.919,0 c -0.697,0 -1.28,0.029 -1.752,0.091 -0.469,0.06 -0.885,0.181 -1.252,0.364 -0.365,0.18 -0.72,0.447 -1.07,0.798 -0.349,0.348 -0.753,0.826 -1.207,1.433 L 0.089,-6.967 c -0.181,0.212 -0.378,0.32 -0.59,0.32 l -0.41,0 c -0.243,0 -0.365,-0.154 -0.365,-0.456 l 0,-23.767 c 0,-0.67 -0.334,-1.004 -1.001,-1.004 l -4.781,0 c -0.698,0 -1.047,0.334 -1.047,1.004 l 0,26.136 c 0,1.851 0.334,3.104 1.001,3.755 C -6.437,-0.327 -5.405,0 -4.007,0 L 0,0 z" >+ style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path40" /> >+ </g> >+ <g >+ id="g42" >+ transform="translate(150.3467,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.667,0 1.004,-0.334 1.004,-1 l 0,-18.169 c 0,-1.217 0.095,-2.225 0.294,-3.027 0.197,-0.807 0.525,-1.445 0.98,-1.914 0.452,-0.472 1.068,-0.806 1.843,-1.003 0.775,-0.198 1.753,-0.295 2.94,-0.295 l 12.413,0 c 0.668,0 1.004,-0.335 1.004,-1.004 l 0,-4.458 c 0,-0.67 -0.336,-1.004 -1.004,-1.004 l -12.689,0 c -2.308,0 -4.264,0.212 -5.873,0.635 -1.612,0.427 -2.923,1.118 -3.939,2.073 -1.019,0.958 -1.762,2.201 -2.231,3.734 -0.472,1.532 -0.708,3.393 -0.708,5.579 l 0,18.853 c 0,0.666 0.35,1 1.049,1 L 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path44" /> >+ </g> >+ <g >+ id="g46" >+ transform="translate(180.8867,688.8726)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.667,0 1,-0.335 1,-1.002 l 0,-19.269 c 0,-0.669 -0.333,-1.003 -1,-1.003 l -4.92,0 c -0.698,0 -1.046,0.334 -1.046,1.003 l 0,19.269 C -5.966,-0.335 -5.618,0 -4.92,0 L 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path48" /> >+ </g> >+ <g >+ id="g50" >+ transform="translate(180.8867,699.4722)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.667,0 1,-0.334 1,-1 L 1,-6.426 C 1,-7.094 0.667,-7.429 0,-7.429 l -4.92,0 c -0.698,0 -1.046,0.335 -1.046,1.003 l 0,5.426 c 0,0.666 0.348,1 1.046,1 L 0,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path52" /> >+ </g> >+ <g >+ id="g54" >+ transform="translate(195.4004,680.7705)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 0,-5.808 c 0,-0.393 0.195,-0.591 0.593,-0.591 l 16.714,0 c 1.214,0 2.077,0.22 2.594,0.659 0.517,0.44 0.776,1.145 0.776,2.117 l 0,0.753 c 0,0.94 -0.281,1.655 -0.846,2.141 C 19.272,-0.243 18.232,0 16.714,0 L 0,0 z m 0,4.962 16.714,0 c 1.518,0 2.55,0.227 3.097,0.683 0.543,0.457 0.82,1.124 0.82,2.004 l 0,2.037 c 0,0.942 -0.268,1.632 -0.8,2.072 -0.528,0.439 -1.385,0.661 -2.571,0.661 l -16.667,0 C 0.195,12.419 0,12.221 0,11.827 L 0,4.962 z m 18.672,13.74 c 3.125,0 5.35,-0.623 6.671,-1.867 1.321,-1.243 1.98,-3.125 1.98,-5.646 l 0,-2.672 c 0,-2.553 -0.972,-4.481 -2.913,-5.786 2.095,-1.213 3.144,-3.171 3.144,-5.874 l 0,-1.662 c 0,-1.217 -0.14,-2.308 -0.413,-3.279 -0.274,-0.973 -0.721,-1.8 -1.342,-2.48 -0.625,-0.685 -1.452,-1.208 -2.483,-1.574 -1.034,-0.364 -2.308,-0.547 -3.823,-0.547 l -25.093,0 c -0.911,0 -1.372,0.456 -1.372,1.367 l 0,28.653 c 0,0.911 0.461,1.367 1.372,1.367 l 24.272,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path56" /> >+ </g> >+ <g >+ id="g58" >+ transform="translate(235.2939,685.6587)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 14.507,0 c 1.548,0 2.637,0.334 3.277,1.004 0.635,0.667 0.956,1.194 0.956,2.561 l 0,-0.041 c 0,1.366 -0.321,2.382 -0.956,3.05 -0.64,0.668 -1.729,1.003 -3.277,1.003 l -13.918,0 C 0.195,7.577 0,7.395 0,7.029 L 0,0 z m 15.916,13.813 c 3.489,0 5.993,-0.791 7.515,-2.368 1.517,-1.576 2.274,-3.914 2.274,-7.011 l 0,-1.129 c 0,-2.613 -0.53,-3.7 -1.594,-5.217 -1.062,-1.517 -2.792,-2.489 -5.189,-2.914 l 7.784,-11.608 c 0.153,-0.152 0.2,-0.379 0.141,-0.683 -0.064,-0.302 -0.307,-0.456 -0.73,-0.456 l -5.875,0 c -0.392,0 -0.667,0.046 -0.821,0.137 -0.151,0.093 -0.303,0.243 -0.452,0.457 L 11.773,-5.555 0,-5.555 0,-16.568 c 0,-0.67 -0.338,-1.005 -1.006,-1.005 l -4.918,0 c -0.696,0 -1.046,0.335 -1.046,2.469 l 0,29.019 c 0,-0.558 0.456,-0.102 1.367,-0.102 l 21.519,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path60" /> >+ </g> >+ <g >+ id="g62" >+ transform="translate(272.874,680.1206)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0,-1.184 0.098,-2.18 0.295,-2.982 0.197,-0.806 0.524,-1.443 0.981,-1.914 0.457,-0.469 1.069,-0.802 1.843,-1.001 0.774,-0.199 1.752,-0.297 2.938,-0.297 l 8.636,0 c 1.182,0 2.163,0.098 2.939,0.297 0.773,0.199 1.388,0.532 1.844,1.001 0.454,0.471 0.779,1.108 0.977,1.914 0.196,0.802 0.294,1.798 0.294,2.982 l 0,6.828 c 0,1.186 -0.098,2.18 -0.294,2.984 -0.198,0.806 -0.523,1.442 -0.977,1.914 -0.456,0.468 -1.071,0.804 -1.844,1.002 -0.776,0.195 -1.757,0.295 -2.939,0.295 l -8.636,0 c -1.186,0 -2.164,-0.1 -2.938,-0.295 C 2.345,12.53 1.733,12.194 1.276,11.726 0.819,11.254 0.492,10.618 0.295,9.812 0.098,9.008 0,8.014 0,6.828 L 0,0 z m 14.969,19.352 c 2.303,0 4.268,-0.222 5.894,-0.66 1.622,-0.44 2.945,-1.137 3.962,-2.096 1.017,-0.955 1.753,-2.192 2.21,-3.71 0.454,-1.519 0.682,-3.37 0.682,-5.555 l 0,-7.832 c 0,-2.186 -0.228,-4.047 -0.682,-5.579 -0.457,-1.533 -1.193,-2.777 -2.21,-3.734 -1.017,-0.956 -2.34,-1.647 -3.962,-2.073 -1.626,-0.423 -3.591,-0.635 -5.894,-0.635 l -9.186,0 c -2.308,0 -4.265,0.212 -5.875,0.635 -1.608,0.426 -2.922,1.117 -3.938,2.073 -1.018,0.957 -1.762,2.201 -2.233,3.734 -0.47,1.532 -0.707,3.393 -0.707,5.579 l 0,7.832 c 0,2.185 0.237,4.036 0.707,5.555 0.471,1.518 1.215,2.755 2.233,3.71 1.016,0.959 2.33,1.656 3.938,2.096 1.61,0.438 3.567,0.66 5.875,0.66 l 9.186,0 z" >+ style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path64" /> >+ </g> >+ <g >+ id="g66" >+ transform="translate(90.1279,655.0894)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.971,0 -1.456,-0.341 -1.456,-1.02 0,-0.353 0.116,-0.603 0.344,-0.751 0.23,-0.149 0.735,-0.331 1.519,-0.55 0.783,-0.218 1.334,-0.478 1.656,-0.779 0.318,-0.302 0.482,-0.776 0.482,-1.427 0,-0.826 -0.236,-1.441 -0.707,-1.85 -0.468,-0.41 -1.11,-0.614 -1.917,-0.614 -0.65,0 -1.371,0.074 -2.157,0.228 l -0.412,0.08 0.128,1.021 c 1.031,-0.14 1.815,-0.207 2.358,-0.207 0.948,0 1.423,0.42 1.423,1.261 0,0.327 -0.108,0.57 -0.321,0.73 -0.214,0.153 -0.695,0.325 -1.445,0.515 -0.75,0.187 -1.307,0.444 -1.673,0.772 -0.366,0.331 -0.553,0.849 -0.553,1.559 0,0.712 0.234,1.249 0.696,1.611 0.461,0.364 1.102,0.544 1.919,0.544 0.59,0 1.283,-0.069 2.087,-0.206 L 2.372,0.849 2.269,-0.185 C 1.2,-0.062 0.44,0 0,0" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path68" /> >+ </g> >+ <g >+ id="g70" >+ transform="translate(96.3955,652.9687)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.358,0 -0.718,-0.08 -1.076,-0.24 l -0.174,-0.08 0,-3.381 c 0.308,-0.062 0.645,-0.092 1.013,-0.092 0.516,0 0.875,0.148 1.072,0.445 0.202,0.301 0.301,0.806 0.301,1.525 C 1.136,-0.608 0.758,0 0,0 m -2.497,-7.208 0,8.193 1.238,0 0,-0.355 c 0.526,0.322 1.022,0.482 1.48,0.482 0.754,0 1.308,-0.23 1.659,-0.691 0.351,-0.464 0.527,-1.239 0.527,-2.329 0,-1.089 -0.199,-1.855 -0.603,-2.298 -0.399,-0.445 -1.052,-0.665 -1.963,-0.665 -0.313,0 -0.677,0.035 -1.091,0.103 l 0,-2.44 -1.247,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path72" /> >+ </g> >+ <g >+ id="g74" >+ transform="translate(103.4453,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.088,0.959 -0.268,1.186 -0.447,1.41 -0.752,1.524 -1.181,1.524 -1.609,1.524 -1.922,1.405 -2.113,1.168 -2.309,0.93 -2.411,0.541 -2.418,0 L 0,0 z m -2.753,4.114 2.707,1.157 0.392,-1.076 -2.8,-0.896 -0.299,0.815 z m 3.44,-6.385 0.321,0.033 0.024,-0.927 c -0.874,-0.176 -1.642,-0.263 -2.314,-0.263 -0.85,0 -1.46,0.232 -1.829,0.698 -0.37,0.465 -0.558,1.213 -0.558,2.236 0,2.031 0.831,3.049 2.488,3.049 1.606,0 2.41,-0.875 2.41,-2.626 l -0.083,-0.893 -3.552,0 c 0.007,-0.472 0.11,-0.822 0.307,-1.042 0.203,-0.223 0.571,-0.333 1.113,-0.333 0.546,0 1.099,0.021 1.673,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path76" /> >+ </g> >+ <g >+ id="g78" >+ transform="translate(108.0205,654.0806)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.401,0 0.881,-0.053 1.433,-0.16 L 1.717,-0.219 1.671,-1.203 c -0.602,0.061 -1.051,0.091 -1.342,0.091 -0.579,0 -0.968,-0.13 -1.17,-0.39 -0.197,-0.258 -0.295,-0.75 -0.295,-1.467 0,-0.717 0.097,-1.214 0.284,-1.49 0.193,-0.274 0.591,-0.414 1.195,-0.414 l 1.341,0.095 0.033,-0.998 c -0.771,-0.137 -1.352,-0.206 -1.74,-0.206 -0.873,0 -1.486,0.233 -1.839,0.702 -0.359,0.473 -0.534,1.242 -0.534,2.311 0,1.07 0.185,1.832 0.56,2.286 C -1.461,-0.229 -0.852,0 0,0" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path80" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 110.94,653.954 1.251,0 0,-5.732 -1.251,0 0,5.732 z m 0,2.294 1.251,0 0,-1.32 -1.251,0 0,1.32 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path82" /> >+ <g >+ id="g84" >+ transform="translate(115.376,650.7686)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.526,-0.047 -0.788,-0.333 -0.788,-0.86 0,-0.528 0.231,-0.793 0.696,-0.793 0.384,0 0.79,0.062 1.216,0.187 l 0.206,0.067 0,1.524 L 0,0 z m 2.568,1.421 0,-2.615 c 0.008,-0.167 0.053,-0.292 0.135,-0.372 0.079,-0.078 0.2,-0.13 0.37,-0.154 L 3.04,-2.67 c -0.656,0 -1.169,0.141 -1.524,0.423 -0.611,-0.282 -1.229,-0.423 -1.845,-0.423 -1.139,0 -1.708,0.607 -1.708,1.823 0,0.578 0.151,1 0.463,1.26 0.309,0.257 0.786,0.417 1.428,0.469 l 1.476,0.125 0,0.414 c 0,0.307 -0.067,0.52 -0.2,0.642 C 0.995,2.186 0.8,2.246 0.539,2.246 0.051,2.246 -0.56,2.215 -1.292,2.153 l -0.37,-0.019 -0.045,0.881 c 0.834,0.197 1.6,0.297 2.299,0.297 0.701,0 1.203,-0.15 1.512,-0.452 0.31,-0.303 0.464,-0.783 0.464,-1.439" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path86" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 119.582,656.34 1.25,0 0,-8.119 -1.25,0 0,8.119 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path88" /> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 122.415,653.954 1.247,0 0,-5.732 -1.247,0 0,5.732 z m 0,2.294 1.247,0 0,-1.32 -1.247,0 0,1.32 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path90" /> >+ <g >+ id="g92" >+ transform="translate(129.1533,652.7715)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.9,0.125 -1.556,0.187 -1.96,0.187 -0.406,0 -0.685,-0.049 -0.843,-0.144 -0.154,-0.098 -0.235,-0.248 -0.235,-0.454 0,-0.205 0.088,-0.351 0.26,-0.435 0.171,-0.082 0.575,-0.18 1.213,-0.293 0.641,-0.109 1.09,-0.282 1.358,-0.521 0.269,-0.238 0.4,-0.656 0.4,-1.26 0,-0.603 -0.191,-1.045 -0.577,-1.33 -0.386,-0.282 -0.95,-0.423 -1.689,-0.423 -0.468,0 -1.054,0.063 -1.769,0.194 l -0.351,0.058 0.046,1.043 c 0.918,-0.123 1.577,-0.185 1.983,-0.185 0.403,0 0.69,0.051 0.865,0.15 0.17,0.101 0.256,0.263 0.256,0.493 0,0.227 -0.082,0.387 -0.246,0.476 -0.164,0.087 -0.557,0.182 -1.182,0.286 -0.621,0.101 -1.079,0.266 -1.371,0.487 -0.285,0.22 -0.434,0.626 -0.434,1.214 0,0.589 0.201,1.027 0.601,1.318 0.404,0.29 0.918,0.437 1.542,0.437 0.488,0 1.09,-0.061 1.801,-0.185 L 0.023,1.045 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path94" /> >+ </g> >+ <g >+ id="g96" >+ transform="translate(133.6357,652.8892)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.582,0 0,-2.522 c 0,-0.466 0.036,-0.776 0.103,-0.927 0.07,-0.154 0.246,-0.232 0.528,-0.232 l 0.937,0.036 0.058,-1 c -0.511,-0.097 -0.901,-0.146 -1.17,-0.146 -0.647,0 -1.092,0.146 -1.334,0.447 -0.24,0.297 -0.359,0.859 -0.359,1.684 l 0,2.66 -0.735,0 0,1.064 0.735,0 0,1.663 1.237,0 0,-1.663 L 0,1.064 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path98" /> >+ </g> >+ <g >+ id="g100" >+ transform="translate(138.0498,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.091,0.959 -0.27,1.186 -0.452,1.41 -0.755,1.524 -1.182,1.524 -1.609,1.524 -1.919,1.405 -2.114,1.168 -2.311,0.93 -2.409,0.541 -2.42,0 L 0,0 z m 0.687,-2.271 0.32,0.033 0.023,-0.927 c -0.872,-0.176 -1.642,-0.263 -2.317,-0.263 -0.848,0 -1.455,0.232 -1.826,0.698 -0.371,0.465 -0.556,1.213 -0.556,2.236 0,2.031 0.828,3.049 2.487,3.049 1.607,0 2.408,-0.875 2.408,-2.626 l -0.082,-0.893 -3.552,0 c 0.007,-0.472 0.11,-0.822 0.307,-1.042 0.202,-0.223 0.572,-0.333 1.114,-0.333 0.542,0 1.101,0.021 1.674,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path102" /> >+ </g> >+ <g >+ id="g104" >+ transform="translate(144.457,652.7715)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.905,0.125 -1.561,0.187 -1.961,0.187 -0.405,0 -0.685,-0.049 -0.843,-0.144 -0.158,-0.098 -0.234,-0.248 -0.234,-0.454 0,-0.205 0.086,-0.351 0.259,-0.435 0.17,-0.082 0.574,-0.18 1.213,-0.293 0.637,-0.109 1.091,-0.282 1.357,-0.521 0.27,-0.238 0.4,-0.656 0.4,-1.26 0,-0.603 -0.191,-1.045 -0.577,-1.33 -0.384,-0.282 -0.95,-0.423 -1.691,-0.423 -0.465,0 -1.055,0.063 -1.766,0.194 l -0.355,0.058 0.048,1.043 c 0.916,-0.123 1.575,-0.185 1.981,-0.185 0.405,0 0.693,0.051 0.868,0.15 0.171,0.101 0.255,0.263 0.255,0.493 0,0.227 -0.083,0.387 -0.245,0.476 -0.167,0.087 -0.559,0.182 -1.182,0.286 -0.621,0.101 -1.078,0.266 -1.37,0.487 -0.289,0.22 -0.433,0.626 -0.433,1.214 0,0.589 0.199,1.027 0.6,1.318 0.401,0.29 0.917,0.437 1.539,0.437 0.491,0 1.091,-0.061 1.803,-0.185 L 0.021,1.045 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path106" /> >+ </g> >+ <g >+ id="g108" >+ transform="translate(151.7656,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.088,0.959 -0.27,1.186 -0.446,1.41 -0.752,1.524 -1.178,1.524 -1.605,1.524 -1.917,1.405 -2.113,1.168 -2.309,0.93 -2.408,0.541 -2.418,0 L 0,0 z m 0.69,-2.271 0.322,0.033 0.023,-0.927 c -0.873,-0.176 -1.644,-0.263 -2.316,-0.263 -0.851,0 -1.46,0.232 -1.828,0.698 -0.37,0.465 -0.557,1.213 -0.557,2.236 0,2.031 0.827,3.049 2.488,3.049 1.604,0 2.407,-0.875 2.407,-2.626 l -0.081,-0.893 -3.551,0 c 0.005,-0.472 0.11,-0.822 0.307,-1.042 0.199,-0.223 0.571,-0.333 1.11,-0.333 0.546,0 1.102,0.021 1.676,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path110" /> >+ </g> >+ <g >+ id="g112" >+ transform="translate(155.4453,648.2212)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.248,0 0,5.732 1.236,0 0,-0.354 C 0.55,5.7 1.073,5.859 1.571,5.859 2.334,5.859 2.858,5.643 3.135,5.213 3.415,4.78 3.557,4.069 3.557,3.075 l 0,-3.075 -1.242,0 0,3.038 C 2.315,3.658 2.251,4.1 2.114,4.357 1.983,4.617 1.709,4.748 1.298,4.748 0.908,4.748 0.532,4.669 0.172,4.518 L 0,4.449 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path114" /> >+ </g> >+ <g >+ id="g116" >+ transform="translate(166.0605,652.8892)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.582,0 0,-2.522 c 0,-0.466 0.032,-0.776 0.102,-0.927 0.07,-0.154 0.244,-0.232 0.529,-0.232 l 0.938,0.036 0.058,-1 c -0.511,-0.097 -0.901,-0.146 -1.166,-0.146 -0.652,0 -1.097,0.146 -1.337,0.447 -0.243,0.297 -0.362,0.859 -0.362,1.684 l 0,2.66 -0.732,0 0,1.064 0.732,0 0,1.663 1.238,0 0,-1.663 L 0,1.064 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path118" /> >+ </g> >+ <g >+ id="g120" >+ transform="translate(170.4727,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.09,0.959 -0.271,1.186 -0.448,1.41 -0.755,1.524 -1.18,1.524 -1.608,1.524 -1.92,1.405 -2.113,1.168 -2.309,0.93 -2.411,0.541 -2.42,0 L 0,0 z m 0.687,-2.271 0.321,0.033 0.023,-0.927 c -0.871,-0.176 -1.642,-0.263 -2.316,-0.263 -0.847,0 -1.457,0.232 -1.827,0.698 -0.371,0.465 -0.556,1.213 -0.556,2.236 0,2.031 0.828,3.049 2.488,3.049 1.606,0 2.407,-0.875 2.407,-2.626 l -0.081,-0.893 -3.553,0 c 0.008,-0.472 0.112,-0.822 0.309,-1.042 0.198,-0.223 0.569,-0.333 1.112,-0.333 0.542,0 1.1,0.021 1.673,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path122" /> >+ </g> >+ <g >+ id="g124" >+ transform="translate(175.0459,654.0806)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.405,0 0.884,-0.053 1.432,-0.16 L 1.717,-0.219 1.674,-1.203 c -0.607,0.061 -1.051,0.091 -1.342,0.091 -0.581,0 -0.971,-0.13 -1.167,-0.39 -0.201,-0.258 -0.301,-0.75 -0.301,-1.467 0,-0.717 0.095,-1.214 0.286,-1.49 0.192,-0.274 0.589,-0.414 1.193,-0.414 l 1.344,0.095 0.03,-0.998 c -0.77,-0.137 -1.35,-0.206 -1.738,-0.206 -0.873,0 -1.486,0.233 -1.843,0.702 -0.353,0.473 -0.532,1.242 -0.532,2.311 0,1.07 0.187,1.832 0.564,2.286 C -1.46,-0.229 -0.85,0 0,0" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path126" /> >+ </g> >+ <g >+ id="g128" >+ transform="translate(179.2178,648.2212)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.249,0 0,8.119 1.249,0 0,-2.685 C 0.565,5.716 1.087,5.859 1.57,5.859 2.335,5.859 2.857,5.643 3.135,5.213 3.413,4.78 3.554,4.069 3.554,3.075 l 0,-3.075 -1.249,0 0,3.038 C 2.305,3.658 2.238,4.1 2.108,4.357 1.978,4.617 1.706,4.748 1.282,4.748 0.916,4.748 0.55,4.688 0.185,4.564 L 0,4.496 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path130" /> >+ </g> >+ <g >+ id="g132" >+ transform="translate(185.4766,648.2212)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.249,0 0,5.732 1.236,0 0,-0.354 C 0.545,5.7 1.073,5.859 1.569,5.859 2.334,5.859 2.854,5.643 3.134,5.213 3.413,4.78 3.553,4.069 3.553,3.075 l 0,-3.075 -1.24,0 0,3.038 C 2.313,3.658 2.246,4.1 2.114,4.357 1.98,4.617 1.707,4.748 1.295,4.748 0.904,4.748 0.53,4.669 0.172,4.518 L 0,4.449 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path134" /> >+ </g> >+ <g >+ id="g136" >+ transform="translate(191.7344,649.6118)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.175,-0.308 0.518,-0.458 1.029,-0.458 0.516,0 0.857,0.15 1.033,0.458 0.175,0.305 0.264,0.804 0.264,1.5 0,0.695 -0.094,1.189 -0.283,1.479 C 1.858,3.27 1.521,3.413 1.029,3.413 0.54,3.413 0.205,3.27 0.016,2.979 -0.171,2.689 -0.266,2.195 -0.266,1.5 -0.266,0.804 -0.176,0.305 0,0 M -0.935,3.723 C -0.54,4.22 0.114,4.469 1.029,4.469 1.946,4.469 2.601,4.22 2.997,3.723 3.391,3.227 3.586,2.482 3.586,1.489 3.586,0.496 3.396,-0.253 3.012,-0.76 2.63,-1.262 1.971,-1.514 1.029,-1.514 c -0.935,0 -1.6,0.252 -1.98,0.754 -0.385,0.507 -0.574,1.256 -0.574,2.249 0,0.993 0.197,1.738 0.59,2.234" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path138" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 196.63,656.34 1.247,0 0,-8.119 -1.247,0 0,8.119 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path140" /> >+ <g >+ id="g142" >+ transform="translate(200.708,649.6118)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.178,-0.308 0.52,-0.458 1.033,-0.458 0.513,0 0.854,0.15 1.031,0.458 0.176,0.305 0.263,0.804 0.263,1.5 0,0.695 -0.096,1.189 -0.28,1.479 C 1.858,3.27 1.52,3.413 1.033,3.413 0.544,3.413 0.205,3.27 0.017,2.979 -0.169,2.689 -0.265,2.195 -0.265,1.5 -0.265,0.804 -0.175,0.305 0,0 M -0.934,3.723 C -0.541,4.22 0.114,4.469 1.033,4.469 1.949,4.469 2.604,4.22 2.997,3.723 3.39,3.227 3.587,2.482 3.587,1.489 3.587,0.496 3.396,-0.253 3.014,-0.76 2.633,-1.262 1.972,-1.514 1.033,-1.514 c -0.939,0 -1.602,0.252 -1.985,0.754 -0.385,0.507 -0.574,1.256 -0.574,2.249 0,0.993 0.198,1.738 0.592,2.234" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path144" /> >+ </g> >+ <g >+ id="g146" >+ transform="translate(206.8281,651.3032)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.168,-0.165 0.44,-0.25 0.815,-0.25 0.373,0 0.642,0.085 0.808,0.25 0.164,0.161 0.244,0.42 0.244,0.771 0,0.352 -0.085,0.61 -0.25,0.773 C 1.449,1.708 1.177,1.792 0.803,1.792 0.099,1.792 -0.25,1.452 -0.25,0.771 -0.25,0.42 -0.167,0.161 0,0 m -0.342,-3.973 c 0,-0.268 0.106,-0.458 0.319,-0.574 0.215,-0.115 0.582,-0.17 1.099,-0.17 0.927,0 1.391,0.263 1.391,0.787 0,0.301 -0.085,0.49 -0.246,0.57 -0.164,0.079 -0.495,0.124 -0.984,0.131 l -1.121,0.067 c -0.167,-0.133 -0.288,-0.262 -0.357,-0.382 -0.069,-0.119 -0.101,-0.26 -0.101,-0.429 m 4.055,0.113 c 0,-1.251 -0.904,-1.878 -2.715,-1.878 -0.872,0 -1.519,0.117 -1.936,0.353 -0.42,0.238 -0.631,0.67 -0.631,1.299 0,0.282 0.069,0.525 0.206,0.726 0.136,0.202 0.357,0.422 0.662,0.659 -0.249,0.167 -0.374,0.447 -0.374,0.838 0,0.151 0.103,0.4 0.307,0.742 l 0.103,0.173 c -0.549,0.328 -0.823,0.903 -0.823,1.719 0,0.688 0.204,1.193 0.617,1.513 0.414,0.321 0.97,0.483 1.674,0.483 0.337,0 0.671,-0.04 0.998,-0.117 L 1.973,2.618 3.75,2.663 3.75,1.655 2.796,1.711 c 0.207,-0.266 0.309,-0.582 0.309,-0.94 0,-0.748 -0.187,-1.267 -0.564,-1.554 -0.38,-0.283 -0.97,-0.428 -1.772,-0.428 -0.2,0 -0.367,0.016 -0.504,0.047 -0.11,-0.261 -0.161,-0.46 -0.161,-0.603 0,-0.142 0.069,-0.239 0.212,-0.292 C 0.456,-2.115 0.8,-2.146 1.343,-2.15 2.252,-2.158 2.875,-2.282 3.209,-2.517 3.546,-2.756 3.713,-3.204 3.713,-3.86" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path148" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 211.553,653.954 1.248,0 0,-5.732 -1.248,0 0,5.732 z m 0,2.294 1.248,0 0,-1.32 -1.248,0 0,1.32 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path150" /> >+ <g >+ id="g152" >+ transform="translate(217.7041,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.088,0.959 -0.267,1.186 -0.448,1.41 -0.75,1.524 -1.179,1.524 -1.607,1.524 -1.917,1.405 -2.113,1.168 -2.308,0.93 -2.411,0.541 -2.416,0 L 0,0 z m 0.689,-2.271 0.321,0.033 0.025,-0.927 c -0.874,-0.176 -1.645,-0.263 -2.317,-0.263 -0.848,0 -1.456,0.232 -1.829,0.698 -0.37,0.465 -0.555,1.213 -0.555,2.236 0,2.031 0.83,3.049 2.487,3.049 1.606,0 2.406,-0.875 2.406,-2.626 l -0.08,-0.893 -3.552,0 c 0.009,-0.472 0.111,-0.822 0.309,-1.042 0.201,-0.223 0.571,-0.333 1.112,-0.333 0.544,0 1.1,0.021 1.673,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path154" /> >+ </g> >+ <g >+ id="g156" >+ transform="translate(224.1123,652.7715)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.903,0.125 -1.557,0.187 -1.958,0.187 -0.406,0 -0.688,-0.049 -0.844,-0.144 -0.156,-0.098 -0.236,-0.248 -0.236,-0.454 0,-0.205 0.087,-0.351 0.258,-0.435 0.174,-0.082 0.58,-0.18 1.216,-0.293 0.638,-0.109 1.09,-0.282 1.359,-0.521 0.267,-0.238 0.399,-0.656 0.399,-1.26 0,-0.603 -0.189,-1.045 -0.577,-1.33 -0.384,-0.282 -0.948,-0.423 -1.69,-0.423 -0.468,0 -1.055,0.063 -1.768,0.194 l -0.354,0.058 0.047,1.043 c 0.916,-0.123 1.577,-0.185 1.983,-0.185 0.405,0 0.691,0.051 0.864,0.15 0.173,0.101 0.259,0.263 0.259,0.493 0,0.227 -0.083,0.387 -0.247,0.476 -0.164,0.087 -0.557,0.182 -1.183,0.286 -0.621,0.101 -1.076,0.266 -1.369,0.487 -0.289,0.22 -0.433,0.626 -0.433,1.214 0,0.589 0.199,1.027 0.603,1.318 0.4,0.29 0.911,0.437 1.54,0.437 0.487,0 1.089,-0.061 1.801,-0.185 L 0.022,1.045 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path158" /> >+ </g> >+ <g >+ id="g160" >+ transform="translate(231.2656,649.4165)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 0.194,0.079 0,3.394 c -0.458,0.073 -0.882,0.114 -1.272,0.114 -0.773,0 -1.158,-0.643 -1.158,-1.927 0,-0.702 0.09,-1.189 0.273,-1.459 0.177,-0.272 0.459,-0.409 0.851,-0.409 0.388,0 0.759,0.071 1.112,0.208 m 1.443,6.923 0,-8.118 -1.239,0 0,0.3 c -0.557,-0.282 -1.069,-0.423 -1.534,-0.423 -0.748,0 -1.298,0.226 -1.645,0.675 -0.347,0.453 -0.522,1.206 -0.522,2.27 0,1.061 0.194,1.834 0.579,2.314 0.387,0.48 0.988,0.723 1.806,0.723 0.274,0 0.709,-0.051 1.306,-0.148 l 0,2.407 1.249,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path162" /> >+ </g> >+ <g >+ id="g164" >+ transform="translate(235.4707,649.6118)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c 0.176,-0.308 0.519,-0.458 1.032,-0.458 0.513,0 0.857,0.15 1.031,0.458 0.179,0.305 0.264,0.804 0.264,1.5 0,0.695 -0.095,1.189 -0.283,1.479 C 1.859,3.27 1.521,3.413 1.032,3.413 0.541,3.413 0.206,3.27 0.019,2.979 -0.17,2.689 -0.265,2.195 -0.265,1.5 -0.265,0.804 -0.176,0.305 0,0 M -0.934,3.723 C -0.541,4.22 0.116,4.469 1.032,4.469 1.95,4.469 2.605,4.22 2.998,3.723 3.391,3.227 3.587,2.482 3.587,1.489 3.587,0.496 3.396,-0.253 3.016,-0.76 2.633,-1.262 1.974,-1.514 1.032,-1.514 c -0.939,0 -1.6,0.252 -1.985,0.754 -0.381,0.507 -0.571,1.256 -0.571,2.249 0,0.993 0.197,1.738 0.59,2.234" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path166" /> >+ </g> >+ <g >+ id="g168" >+ transform="translate(242.4395,654.0806)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0.406,0 0.881,-0.053 1.434,-0.16 L 1.72,-0.219 1.676,-1.203 c -0.607,0.061 -1.053,0.091 -1.343,0.091 -0.583,0 -0.971,-0.13 -1.172,-0.39 -0.197,-0.258 -0.295,-0.75 -0.295,-1.467 0,-0.717 0.095,-1.214 0.286,-1.49 0.192,-0.274 0.589,-0.414 1.192,-0.414 l 1.34,0.095 0.036,-0.998 c -0.77,-0.137 -1.352,-0.206 -1.741,-0.206 -0.872,0 -1.486,0.233 -1.841,0.702 -0.357,0.473 -0.534,1.242 -0.534,2.311 0,1.07 0.189,1.832 0.56,2.286 C -1.459,-0.229 -0.848,0 0,0" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path170" /> >+ </g> >+ <g >+ id="g172" >+ transform="translate(248.834,653.9536)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 1.239,0 0,-5.732 -1.239,0 0,0.356 c -0.556,-0.32 -1.07,-0.479 -1.546,-0.479 -0.785,0 -1.313,0.21 -1.58,0.635 -0.269,0.424 -0.401,1.168 -0.401,2.231 l 0,2.989 1.249,0 0,-3.002 c 0,-0.688 0.054,-1.151 0.171,-1.387 0.117,-0.236 0.384,-0.357 0.804,-0.357 0.41,0 0.789,0.079 1.133,0.233 L 0,-4.445 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path174" /> >+ </g> >+ <g >+ id="g176" >+ transform="translate(252.8359,648.2212)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.25,0 0,5.732 1.237,0 0,-0.354 C 0.53,5.7 1.026,5.859 1.479,5.859 c 0.664,0 1.148,-0.186 1.455,-0.561 0.695,0.375 1.384,0.561 2.075,0.561 0.686,0 1.172,-0.21 1.456,-0.635 C 6.747,4.798 6.887,4.083 6.887,3.075 L 6.887,0 5.65,0 l 0,3.038 C 5.65,3.658 5.589,4.1 5.461,4.357 5.336,4.617 5.073,4.748 4.675,4.748 4.334,4.748 3.961,4.669 3.565,4.518 L 3.369,4.438 C 3.43,4.284 3.462,3.797 3.462,2.971 l 0,-2.971 -1.239,0 0,2.948 C 2.223,3.627 2.162,4.1 2.04,4.357 1.917,4.617 1.651,4.748 1.236,4.748 0.855,4.748 0.502,4.669 0.172,4.518 L 0,4.449 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path178" /> >+ </g> >+ <g >+ id="g180" >+ transform="translate(264.583,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.088,0.959 -0.269,1.186 -0.447,1.41 -0.751,1.524 -1.18,1.524 -1.61,1.524 -1.917,1.405 -2.114,1.168 -2.31,0.93 -2.41,0.541 -2.416,0 L 0,0 z m 0.687,-2.271 0.321,0.033 0.024,-0.927 c -0.872,-0.176 -1.643,-0.263 -2.315,-0.263 -0.849,0 -1.455,0.232 -1.829,0.698 -0.369,0.465 -0.552,1.213 -0.552,2.236 0,2.031 0.826,3.049 2.484,3.049 1.604,0 2.408,-0.875 2.408,-2.626 l -0.081,-0.893 -3.55,0 c 0.006,-0.472 0.109,-0.822 0.305,-1.042 0.199,-0.223 0.571,-0.333 1.114,-0.333 0.543,0 1.1,0.021 1.671,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path182" /> >+ </g> >+ <g >+ id="g184" >+ transform="translate(268.2637,648.2212)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.251,0 0,5.732 1.239,0 0,-0.354 C 0.547,5.7 1.073,5.859 1.567,5.859 2.334,5.859 2.856,5.643 3.134,5.213 3.413,4.78 3.552,4.069 3.552,3.075 l 0,-3.075 -1.238,0 0,3.038 C 2.314,3.658 2.248,4.1 2.113,4.357 1.979,4.617 1.706,4.748 1.293,4.748 0.903,4.748 0.53,4.669 0.172,4.518 L 0,4.449 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path186" /> >+ </g> >+ <g >+ id="g188" >+ transform="translate(276.3555,652.8892)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 -1.584,0 0,-2.522 c 0,-0.466 0.037,-0.776 0.105,-0.927 0.068,-0.154 0.245,-0.232 0.527,-0.232 l 0.939,0.036 0.057,-1 c -0.511,-0.097 -0.902,-0.146 -1.169,-0.146 -0.649,0 -1.094,0.146 -1.336,0.447 -0.24,0.297 -0.359,0.859 -0.359,1.684 l 0,2.66 -0.736,0 0,1.064 0.736,0 0,1.663 1.236,0 0,-1.663 L 0,1.064 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path190" /> >+ </g> >+ <g >+ id="g192" >+ transform="translate(279.0488,650.7686)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.528,-0.047 -0.792,-0.333 -0.792,-0.86 0,-0.528 0.233,-0.793 0.699,-0.793 0.382,0 0.785,0.062 1.215,0.187 l 0.206,0.067 0,1.524 L 0,0 z m 2.567,1.421 0,-2.615 c 0.007,-0.167 0.049,-0.292 0.13,-0.372 0.082,-0.078 0.206,-0.13 0.375,-0.154 L 3.035,-2.67 c -0.656,0 -1.164,0.141 -1.521,0.423 -0.612,-0.282 -1.226,-0.423 -1.848,-0.423 -1.139,0 -1.706,0.607 -1.706,1.823 0,0.578 0.154,1 0.464,1.26 0.31,0.257 0.784,0.417 1.427,0.469 l 1.477,0.125 0,0.414 c 0,0.307 -0.066,0.52 -0.2,0.642 -0.135,0.123 -0.33,0.183 -0.59,0.183 -0.49,0 -1.1,-0.031 -1.835,-0.093 L -1.662,2.134 -1.71,3.015 c 0.833,0.197 1.599,0.297 2.299,0.297 0.699,0 1.204,-0.15 1.515,-0.452 C 2.41,2.557 2.567,2.077 2.567,1.421" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path194" /> >+ </g> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 283.187,653.954 1.25,0 0,-5.732 -1.25,0 0,5.732 z m 0,2.294 1.25,0 0,-1.32 -1.25,0 0,1.32 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path196" /> >+ <g >+ id="g198" >+ transform="translate(285.9482,648.2212)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 0,5.732 1.236,0 0,-0.686 c 0.651,0.418 1.3,0.69 1.951,0.813 l 0,-1.249 C 2.528,4.479 1.968,4.312 1.503,4.107 L 1.249,4.004 1.249,0 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path200" /> >+ </g> >+ <g >+ id="g202" >+ transform="translate(293.4336,651.5259)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="M 0,0 C 0,0.563 -0.091,0.959 -0.272,1.186 -0.449,1.41 -0.754,1.524 -1.181,1.524 -1.609,1.524 -1.921,1.405 -2.117,1.168 -2.313,0.93 -2.412,0.541 -2.421,0 L 0,0 z m 0.686,-2.271 0.32,0.033 0.024,-0.927 c -0.872,-0.176 -1.643,-0.263 -2.315,-0.263 -0.849,0 -1.458,0.232 -1.829,0.698 -0.37,0.465 -0.554,1.213 -0.554,2.236 0,2.031 0.827,3.049 2.487,3.049 1.604,0 2.408,-0.875 2.408,-2.626 l -0.082,-0.893 -3.554,0 c 0.006,-0.472 0.11,-0.822 0.31,-1.042 0.2,-0.223 0.571,-0.333 1.11,-0.333 0.543,0 1.101,0.021 1.675,0.068" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path204" /> >+ </g> >+ <g >+ id="g206" >+ transform="translate(299.8398,652.7715)"> >+ <path >+ inkscape:connector-curvature="0" >+ d="m 0,0 c -0.899,0.125 -1.557,0.187 -1.962,0.187 -0.404,0 -0.684,-0.049 -0.844,-0.144 -0.155,-0.098 -0.229,-0.248 -0.229,-0.454 0,-0.205 0.083,-0.351 0.256,-0.435 0.17,-0.082 0.577,-0.18 1.213,-0.293 0.64,-0.109 1.092,-0.282 1.359,-0.521 0.269,-0.238 0.402,-0.656 0.402,-1.26 0,-0.603 -0.194,-1.045 -0.58,-1.33 -0.386,-0.282 -0.95,-0.423 -1.69,-0.423 -0.465,0 -1.054,0.063 -1.764,0.194 l -0.356,0.058 0.047,1.043 c 0.917,-0.123 1.576,-0.185 1.982,-0.185 0.401,0 0.692,0.051 0.864,0.15 0.175,0.101 0.261,0.263 0.261,0.493 0,0.227 -0.086,0.387 -0.249,0.476 -0.164,0.087 -0.56,0.182 -1.182,0.286 -0.623,0.101 -1.076,0.266 -1.367,0.487 -0.294,0.22 -0.434,0.626 -0.434,1.214 0,0.589 0.199,1.027 0.598,1.318 0.404,0.29 0.914,0.437 1.543,0.437 0.489,0 1.091,-0.061 1.798,-0.185 L 0.023,1.045 0,0 z" >+ style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none" >+ id="path208" /> >+ </g> >+ </g> >+ </g> >+ </g> >+</svg> >-- >2.17.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 26051
:
107237
|
114707
|
114957
|
115662
|
115664
|
116086
|
116087
|
116295
|
117165
|
117166